VMSS creation fixes (#2358)

This commit is contained in:
George Pollard
2022-09-09 07:53:02 +12:00
committed by GitHub
parent d61f66a667
commit c562bbb0ad

View File

@ -259,18 +259,7 @@ public class VmssOperations : IVmssOperations {
return getOsResult.ErrorV; return getOsResult.ErrorV;
} }
var vmssData = new VirtualMachineScaleSetData(location) {
DoNotRunExtensionsOnOverprovisionedVms = false,
Sku = new ComputeSku() { Name = vmSku, Capacity = vmCount },
Overprovision = false,
SinglePlacementGroup = false,
UpgradePolicy = new UpgradePolicy() { Mode = UpgradeMode.Manual },
Identity = new ManagedServiceIdentity(managedServiceIdentityType: ManagedServiceIdentityType.UserAssigned),
};
vmssData.Identity.UserAssignedIdentities.Add(_creds.GetScalesetIdentityResourcePath(), new UserAssignedIdentity());
vmssData.VirtualMachineProfile = new VirtualMachineScaleSetVmProfile() { Priority = VirtualMachinePriorityTypes.Regular };
var imageRef = new ImageReference(); var imageRef = new ImageReference();
if (image.StartsWith('/')) { if (image.StartsWith('/')) {
imageRef.Id = image; imageRef.Id = image;
} else { } else {
@ -280,19 +269,50 @@ public class VmssOperations : IVmssOperations {
imageRef.Sku = info.Sku; imageRef.Sku = info.Sku;
imageRef.Version = info.Version; imageRef.Version = info.Version;
} }
vmssData.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetStorageProfile() { ImageReference = imageRef };
vmssData.VirtualMachineProfile.OSProfile = new VirtualMachineScaleSetOSProfile() { ComputerNamePrefix = "node", AdminUsername = "onefuzz" };
var networkConfiguration = new VirtualMachineScaleSetNetworkConfiguration("onefuzz-nic") { Primary = true }; var vmssData = new VirtualMachineScaleSetData(location) {
var ipConfig = new VirtualMachineScaleSetIPConfiguration("onefuzz-ip-config"); DoNotRunExtensionsOnOverprovisionedVms = true,
ipConfig.SubnetId = new ResourceIdentifier(networkId); UpgradePolicy = new() {
networkConfiguration.IPConfigurations.Add(ipConfig); Mode = UpgradeMode.Manual,
},
vmssData.VirtualMachineProfile.NetworkProfile = new VirtualMachineScaleSetNetworkProfile(); Sku = new() {
vmssData.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations.Add(networkConfiguration); Name = vmSku,
Tier = "Standard",
Capacity = vmCount,
},
Overprovision = false,
SinglePlacementGroup = false,
Identity = new(ManagedServiceIdentityType.UserAssigned) {
UserAssignedIdentities = {
{ _creds.GetScalesetIdentityResourcePath(), new UserAssignedIdentity() },
},
},
VirtualMachineProfile = new() {
Priority = VirtualMachinePriorityTypes.Regular,
StorageProfile = new() {
ImageReference = imageRef,
},
OSProfile = new() {
ComputerNamePrefix = "node",
AdminUsername = "onefuzz",
},
NetworkProfile = new() {
NetworkInterfaceConfigurations = {
new("onefuzz-nic") {
Primary = true,
IPConfigurations = {
new("onefuzz-ip-config") {
SubnetId = new ResourceIdentifier(networkId)
},
},
},
},
},
},
};
if (extensions is not null) { if (extensions is not null) {
vmssData.VirtualMachineProfile.ExtensionProfile = new VirtualMachineScaleSetExtensionProfile(); vmssData.VirtualMachineProfile.ExtensionProfile = new();
foreach (var e in extensions) { foreach (var e in extensions) {
vmssData.VirtualMachineProfile.ExtensionProfile.Extensions.Add(e); vmssData.VirtualMachineProfile.ExtensionProfile.Extensions.Add(e);
} }
@ -303,20 +323,27 @@ public class VmssOperations : IVmssOperations {
vmssData.VirtualMachineProfile.OSProfile.AdminPassword = password; vmssData.VirtualMachineProfile.OSProfile.AdminPassword = password;
break; break;
case Os.Linux: case Os.Linux:
vmssData.VirtualMachineProfile.OSProfile.LinuxConfiguration = new LinuxConfiguration(); vmssData.VirtualMachineProfile.OSProfile.LinuxConfiguration = new() {
vmssData.VirtualMachineProfile.OSProfile.LinuxConfiguration.DisablePasswordAuthentication = true; DisablePasswordAuthentication = true,
var i = new SshPublicKeyInfo() { KeyData = sshPublicKey, Path = "/home/onefuzz/.ssh/authorized_keys" }; SshPublicKeys = {
vmssData.VirtualMachineProfile.OSProfile.LinuxConfiguration.SshPublicKeys.Add(i); new() {
KeyData = sshPublicKey,
Path = "/home/onefuzz/.ssh/authorized_keys",
},
}
};
break; break;
default: default:
return OneFuzzResultVoid.Error(ErrorCode.INVALID_CONFIGURATION, $"unhandled OS: {getOsResult.OkV} in image: {image}"); return OneFuzzResultVoid.Error(ErrorCode.INVALID_CONFIGURATION, $"unhandled OS: {getOsResult.OkV} in image: {image}");
} }
if (ephemeralOsDisks) { if (ephemeralOsDisks) {
vmssData.VirtualMachineProfile.StorageProfile.OSDisk = new VirtualMachineScaleSetOSDisk(DiskCreateOptionTypes.FromImage); vmssData.VirtualMachineProfile.StorageProfile.OSDisk = new(DiskCreateOptionTypes.FromImage) {
vmssData.VirtualMachineProfile.StorageProfile.OSDisk.DiffDiskSettings = new DiffDiskSettings(); DiffDiskSettings = new DiffDiskSettings {
vmssData.VirtualMachineProfile.StorageProfile.OSDisk.DiffDiskSettings.Option = DiffDiskOptions.Local; Option = DiffDiskOptions.Local,
vmssData.VirtualMachineProfile.StorageProfile.OSDisk.Caching = CachingTypes.ReadOnly; },
Caching = CachingTypes.ReadOnly,
};
} }
if (spotInstance.HasValue && spotInstance.Value) { if (spotInstance.HasValue && spotInstance.Value) {
@ -325,9 +352,9 @@ public class VmssOperations : IVmssOperations {
// //
// https://docs.microsoft.com/en-us/azure/ // https://docs.microsoft.com/en-us/azure/
// virtual-machine-scale-sets/use-spot#resource-manager-templates // virtual-machine-scale-sets/use-spot#resource-manager-templates
vmssData.VirtualMachineProfile.EvictionPolicy = VirtualMachineEvictionPolicyTypes.Deallocate; vmssData.VirtualMachineProfile.EvictionPolicy = VirtualMachineEvictionPolicyTypes.Delete;
vmssData.VirtualMachineProfile.Priority = VirtualMachinePriorityTypes.Spot; vmssData.VirtualMachineProfile.Priority = VirtualMachinePriorityTypes.Spot;
vmssData.VirtualMachineProfile.BillingMaxPrice = 1.0; vmssData.VirtualMachineProfile.BillingMaxPrice = -1.0;
} }
foreach (var tag in tags) { foreach (var tag in tags) {