예제 #1
0
        public async Task Exists()
        {
            var vmName = Recording.GenerateAssetName("testvm");
            var _virtualMachineCollection = await GetVirtualMachineCollectionAsync();

            var _extendedLocation = new ExtendedLocation()
            {
                Name = CustomLocationId,
                ExtendedLocationType = EXTENDED_LOCATION_TYPE
            };
            var _placementProfile = new PlacementProfile()
            {
                ResourcePoolId = _resourcePoolId
            };
            var virtualMachineBody = new VirtualMachineData(DefaultLocation);

            virtualMachineBody.VCenterId        = VcenterId;
            virtualMachineBody.ExtendedLocation = _extendedLocation;
            virtualMachineBody.PlacementProfile = _placementProfile;
            virtualMachineBody.TemplateId       = _vmTemplateId;
            // create virtual machine
            VirtualMachine vm1 = (await _virtualMachineCollection.CreateOrUpdateAsync(WaitUntil.Completed, vmName, virtualMachineBody)).Value;

            Assert.IsNotNull(vm1);
            Assert.AreEqual(vm1.Id.Name, vmName);
            // check for exists virtual machine
            vm1 = await _virtualMachineCollection.GetIfExistsAsync(vmName);

            Assert.AreEqual(vm1.Id.Name, vmName);
        }
예제 #2
0
        VirtualMachine IOperationSource <VirtualMachine> .CreateResult(Response response, CancellationToken cancellationToken)
        {
            using var document = JsonDocument.Parse(response.ContentStream);
            var data = VirtualMachineData.DeserializeVirtualMachineData(document.RootElement);

            return(new VirtualMachine(_armClient, data));
        }
        public async Task GetAll()
        {
            var vmName = Recording.GenerateAssetName("testvm");
            var _virtualMachineCollection = await GetVirtualMachineCollectionAsync();

            var _extendedLocation = new ExtendedLocation()
            {
                Name = CustomLocationId,
                Type = EXTENDED_LOCATION_TYPE
            };
            var _placementProfile = new PlacementProfile()
            {
                ResourcePoolId = _resourcePoolId
            };
            var virtualMachineBody = new VirtualMachineData(DefaultLocation);

            virtualMachineBody.VCenterId        = VcenterId;
            virtualMachineBody.ExtendedLocation = _extendedLocation;
            virtualMachineBody.PlacementProfile = _placementProfile;
            virtualMachineBody.TemplateId       = _vmTemplateId;
            // create virtual machine
            VirtualMachine vm1 = (await _virtualMachineCollection.CreateOrUpdateAsync(true, vmName, virtualMachineBody)).Value;

            Assert.IsNotNull(vm1);
            Assert.AreEqual(vm1.Id.Name, vmName);
            int count = 0;

            await foreach (var vm in _virtualMachineCollection.GetAllAsync())
            {
                count++;
            }
            Assert.GreaterOrEqual(count, 1);
        }
예제 #4
0
        internal static VirtualMachinesList DeserializeVirtualMachinesList(JsonElement element)
        {
            Optional <string> nextLink = default;
            IReadOnlyList <VirtualMachineData> value = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("nextLink"))
                {
                    nextLink = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("value"))
                {
                    List <VirtualMachineData> array = new List <VirtualMachineData>();
                    foreach (var item in property.Value.EnumerateArray())
                    {
                        array.Add(VirtualMachineData.DeserializeVirtualMachineData(item));
                    }
                    value = array;
                    continue;
                }
            }
            return(new VirtualMachinesList(nextLink.Value, value));
        }
예제 #5
0
        public async Task NewCode()
        {
#endif
            var armClient = new ArmClient(new DefaultAzureCredential());

            var location = AzureLocation.WestUS;
            // Create ResourceGroup
            Subscription subscription = await armClient.GetDefaultSubscriptionAsync();
            ArmOperation<ResourceGroup> rgOperation = await subscription.GetResourceGroups().CreateOrUpdateAsync(WaitUntil.Completed, "myResourceGroup", new ResourceGroupData(location));
            ResourceGroup resourceGroup = rgOperation.Value;

            // Create AvailabilitySet
            var availabilitySetData = new AvailabilitySetData(location)
            {
                PlatformUpdateDomainCount = 5,
                PlatformFaultDomainCount = 2,
                Sku = new ComputeSku() { Name = "Aligned" }
            };
            ArmOperation<AvailabilitySet> asetOperation = await resourceGroup.GetAvailabilitySets().CreateOrUpdateAsync(WaitUntil.Completed, "myAvailabilitySet", availabilitySetData);
            AvailabilitySet availabilitySet = asetOperation.Value;

            // Create VNet
            var vnetData = new VirtualNetworkData()
            {
                Location = location,
                Subnets =
                {
                    new SubnetData()
                    {
                        Name = "mySubnet",
                        AddressPrefix = "10.0.0.0/24",
                    }
                },
            };
            vnetData.AddressPrefixes.Add("10.0.0.0/16");
            ArmOperation<VirtualNetwork> vnetOperation = await resourceGroup.GetVirtualNetworks().CreateOrUpdateAsync(WaitUntil.Completed, "myVirtualNetwork", vnetData);
            VirtualNetwork vnet = vnetOperation.Value;

            // Create Network interface
            var nicData = new NetworkInterfaceData()
            {
                Location = location,
                IPConfigurations =
                {
                    new NetworkInterfaceIPConfigurationData()
                    {
                        Name = "Primary",
                        Primary = true,
                        Subnet = new SubnetData() { Id = vnet.Data.Subnets.First().Id },
                        PrivateIPAllocationMethod = IPAllocationMethod.Dynamic,
                    }
                }
            };
            ArmOperation<NetworkInterface> nicOperation = await resourceGroup.GetNetworkInterfaces().CreateOrUpdateAsync(WaitUntil.Completed, "myNetworkInterface", nicData);
            NetworkInterface nic = nicOperation.Value;

            var vmData = new VirtualMachineData(location)
            {
                AvailabilitySet = new WritableSubResource() { Id = availabilitySet.Id },
                NetworkProfile = new Compute.Models.NetworkProfile { NetworkInterfaces = { new NetworkInterfaceReference() { Id = nic.Id } } },
                OSProfile = new OSProfile
                {
                    ComputerName = "testVM",
                    AdminUsername = "******",
                    AdminPassword = "******",
                    LinuxConfiguration = new LinuxConfiguration { DisablePasswordAuthentication = false, ProvisionVmAgent = true }
                },
                StorageProfile = new StorageProfile()
                {
                    ImageReference = new ImageReference()
                    {
                        Offer = "UbuntuServer",
                        Publisher = "Canonical",
                        Sku = "18.04-LTS",
                        Version = "latest"
                    }
                },
                HardwareProfile = new HardwareProfile() { VmSize = VirtualMachineSizeTypes.StandardB1Ms },
            };
            ArmOperation<VirtualMachine> vmOperation = await resourceGroup.GetVirtualMachines().CreateOrUpdateAsync(WaitUntil.Completed, "myVirtualMachine", vmData);
            VirtualMachine vm = vmOperation.Value;
            #endregion
        }
예제 #6
0
        public async Task CreateVirtualMachine()
        {
            #region Snippet:Managing_VirtualMachines_CreateAVirtualMachine
            ArmClient            armClient    = new ArmClient(new DefaultAzureCredential());
            SubscriptionResource subscription = await armClient.GetDefaultSubscriptionAsync();

            // first we need to get the resource group
            string rgName = "myRgName";
            ResourceGroupResource resourceGroup = await subscription.GetResourceGroups().GetAsync(rgName);

            // Now we get the virtual machine collection from the resource group
            VirtualMachineCollection vmCollection = resourceGroup.GetVirtualMachines();
            // Use the same location as the resource group
            string vmName = "myVM";
            var    input  = new VirtualMachineData(resourceGroup.Data.Location)
            {
                HardwareProfile = new HardwareProfile()
                {
                    VmSize = VirtualMachineSizeTypes.StandardF2
                },
                OSProfile = new OSProfile()
                {
                    AdminUsername      = "******",
                    ComputerName       = "myVM",
                    LinuxConfiguration = new LinuxConfiguration()
                    {
                        DisablePasswordAuthentication = true,
                        SshPublicKeys =
                        {
                            new SshPublicKeyInfo()
                            {
                                Path    = $"/home/adminUser/.ssh/authorized_keys",
                                KeyData = "<value of the public ssh key>",
                            }
                        }
                    }
                },
                NetworkProfile = new NetworkProfile()
                {
                    NetworkInterfaces =
                    {
                        new NetworkInterfaceReference()
                        {
                            Id      = new ResourceIdentifier("/subscriptions/<subscriptionId>/resourceGroups/<rgName>/providers/Microsoft.Network/networkInterfaces/<nicName>"),
                            Primary = true,
                        }
                    }
                },
                StorageProfile = new StorageProfile()
                {
                    OSDisk = new OSDisk(DiskCreateOptionTypes.FromImage)
                    {
                        OSType      = OperatingSystemTypes.Linux,
                        Caching     = CachingTypes.ReadWrite,
                        ManagedDisk = new ManagedDiskParameters()
                        {
                            StorageAccountType = StorageAccountTypes.StandardLRS
                        }
                    },
                    ImageReference = new ImageReference()
                    {
                        Publisher = "Canonical",
                        Offer     = "UbuntuServer",
                        Sku       = "16.04-LTS",
                        Version   = "latest",
                    }
                }
            };
            ArmOperation <VirtualMachineResource> lro = await vmCollection.CreateOrUpdateAsync(WaitUntil.Completed, vmName, input);

            VirtualMachineResource vm = lro.Value;
            #endregion Snippet:Managing_VirtualMachines_CreateAVirtualMachine
        }
예제 #7
0
 public static void AssertVirtualMachine(VirtualMachineData vm1, VirtualMachineData vm2)
 {
     AssertTrackedResource(vm1, vm2);
     // adding these checks one by one is so tedious, is there anything we can do about this?
 }
예제 #8
0
        public async Task MigrationExample()
        {
            #region Snippet:Construct_Client
            ArmClient armClient = new ArmClient(new DefaultAzureCredential());
            #endregion

            #region Snippet:Create_ResourceGroup
            Subscription           subscription = armClient.DefaultSubscription;
            ResourceGroupContainer rgContainer  = subscription.GetResourceGroups();

            Location location = Location.WestUS2;
            string   rgName   = "QuickStartRG";

            ResourceGroupData rgData = new ResourceGroupData(location);
            ResourceGroupCreateOrUpdateOperation rgCreateLro = await rgContainer.CreateOrUpdateAsync(rgName, rgData);

            ResourceGroup resourceGroup = rgCreateLro.Value;
            #endregion

            #region Snippet:Create_AvailabilitySet
            string vmName = "quickstartvm";
            AvailabilitySetData aSetData = new AvailabilitySetData(location);
            AvailabilitySetCreateOrUpdateOperation asetCreateLro = await resourceGroup.GetAvailabilitySets().CreateOrUpdateAsync(vmName + "_aSet", aSetData);

            AvailabilitySet aset   = asetCreateLro.Value;
            string          asetId = aset.Id;
            #endregion

            #region Snippet:Create_Vnet_and_Subnet
            string       vnetName     = "MYVM" + "_vnet";
            string       subnetName   = "mySubnet";
            AddressSpace addressSpace = new AddressSpace();
            addressSpace.AddressPrefixes.Add("10.0.0.0/16");

            VirtualNetworkData vnetData = new VirtualNetworkData()
            {
                AddressSpace = addressSpace,
                Subnets      =
                {
                    new SubnetData()
                    {
                        Name          = subnetName,
                        AddressPrefix = "10.0.0.0/24"
                    }
                }
            };
            VirtualNetworkCreateOrUpdateOperation vnetCreateLro = await resourceGroup.GetVirtualNetworks().CreateOrUpdateAsync(vnetName, vnetData);

            VirtualNetwork vnet = vnetCreateLro.Value;
            #endregion

            #region Snippet:Create_NetworkSecurityGroup
            string nsgName = vmName + "_nsg";
            NetworkSecurityGroupData nsgData = new NetworkSecurityGroupData()
            {
                Location = location
            };
            NetworkSecurityGroupCreateOrUpdateOperation nsgCreateLro = await resourceGroup.GetNetworkSecurityGroups().CreateOrUpdateAsync(nsgName, nsgData);

            NetworkSecurityGroup nsg = nsgCreateLro.Value;
            #endregion

            #region Snippet:Create_NetworkInterface
            string nicName = vmName + "_nic";
            NetworkInterfaceIPConfiguration nicIPConfig = new NetworkInterfaceIPConfiguration()
            {
                Name    = "Primary",
                Primary = true,
                Subnet  = new SubnetData()
                {
                    Id = vnet.Data.Subnets.First().Id
                },
                PrivateIPAllocationMethod = IPAllocationMethod.Dynamic,
            };

            NetworkInterfaceData nicData = new NetworkInterfaceData();
            nicData.Location = location;
            nicData.IpConfigurations.Add(nicIPConfig);
            NetworkInterfaceCreateOrUpdateOperation nicCreateLro = await resourceGroup.GetNetworkInterfaces().CreateOrUpdateAsync(nicName, nicData);

            NetworkInterface nic = nicCreateLro.Value;
            #endregion

            #region Snippet:Create_VirtualMachine
            VirtualMachineData vmData = new VirtualMachineData(location);
            vmData.OsProfile.AdminUsername = "******";
            vmData.OsProfile.AdminPassword = "******";
            vmData.OsProfile.ComputerName  = "computer-name";
            vmData.AvailabilitySet         = new Compute.Models.SubResource();
            vmData.AvailabilitySet.Id      = aset.Id;
            NetworkInterfaceReference nicReference = new NetworkInterfaceReference();
            nicReference.Id = nic.Id;
            vmData.NetworkProfile.NetworkInterfaces.Add(nicReference);

            VirtualMachine vm = (await resourceGroup.GetVirtualMachines().CreateOrUpdateAsync(vmName, vmData)).Value;
            Console.WriteLine("VM ID: " + vm.Id);
            #endregion
        }
예제 #9
0
        private void RefreshGrid()
        {
            if (vm_GridView.InvokeRequired) //Make sure we're on the UI thread
            {
                vm_GridView.Invoke(new MethodInvoker(this.RefreshGrid));
            }
            else
            {
                lock (this)
                {
                    try
                    {
                        // Store the current location so we can restore it
                        int currentLocation = vm_GridView.SelectedRows.Any() ? vm_GridView.SelectedRows[0].Index : 0;

                        vm_GridView.DataSource = null;

                        _machineData.Clear();
                        foreach (var item in VirtualMachine.SelectVirtualMachineSessionInfo())
                        {
                            VirtualMachineData data = new VirtualMachineData()
                            {
                                HoldId        = GetProperty(item, "HoldId"),
                                Name          = GetProperty(item, "Name"),
                                LastUpdated   = GetProperty(item, "LastUpdated"),
                                Owner         = GetProperty(item, "Owner"),
                                PlatformUsage = GetProperty(item, "PlatformUsage"),
                                PowerState    = GetProperty(item, "PowerState"),
                                SessionId     = GetProperty(item, "SessionId"),
                                SortOrder     = GetProperty(item, "SortOrder"),
                                StartDate     = GetProperty(item, "StartDate"),
                                Status        = GetProperty(item, "Status"),
                                UsageState    = GetProperty(item, "UsageState"),
                                Environment   = GetProperty(item, "Environment")
                            };

                            _machineData.Add(data);
                        }

                        vm_GridView.DataSource = _machineData;

                        Task.Factory.StartNew(UpdateRowColor);

                        //Restore the current location
                        if (vm_GridView.Rows.Any())
                        {
                            if (vm_GridView.Rows.Count <= currentLocation)
                            {
                                currentLocation = vm_GridView.Rows.Count - 1;
                            }

                            vm_GridView.TableElement.ScrollToRow(currentLocation);
                            vm_GridView.Rows[currentLocation].IsCurrent = true;
                        }
                    }
                    catch //Intentionally left blank.  We don't want any exceptions crashing the process.
                    {
                    }
                }
            }
        }
        // TODO: GENERATOR Update Builder after models are incorporated in generated models

        internal VirtualMachineModelBuilder(VirtualMachineContainer containerOperations, VirtualMachineData vm) : base(containerOperations, vm)
        {
            // _model.Name = vmName;
            //_model = new VirtualMachine(location);
        }
예제 #11
0
        public async Task MigrationExample()
        {
            #region Snippet:Construct_Client
            ArmClient client = new ArmClient(new DefaultAzureCredential());
            #endregion

            #region Snippet:Create_ResourceGroup
            Subscription subscription = await client.GetDefaultSubscriptionAsync();

            ResourceGroupCollection resourceGroups = subscription.GetResourceGroups();

            AzureLocation location          = AzureLocation.WestUS2;
            string        resourceGroupName = "QuickStartRG";

            ResourceGroupData            resourceGroupData      = new ResourceGroupData(location);
            ArmOperation <ResourceGroup> resourceGroupOperation = await resourceGroups.CreateOrUpdateAsync(WaitUntil.Completed, resourceGroupName, resourceGroupData);

            ResourceGroup resourceGroup = resourceGroupOperation.Value;
            #endregion

            #region Snippet:Create_AvailabilitySet
            string virtualMachineName = "quickstartvm";
            AvailabilitySetData            availabilitySetData      = new AvailabilitySetData(location);
            AvailabilitySetCollection      availabilitySets         = resourceGroup.GetAvailabilitySets();
            ArmOperation <AvailabilitySet> availabilitySetOperation = await availabilitySets.CreateOrUpdateAsync(WaitUntil.Completed, virtualMachineName + "_aSet", availabilitySetData);

            AvailabilitySet availabilitySet = availabilitySetOperation.Value;
            #endregion

            #region Snippet:Create_Vnet_and_Subnet
            string virtualNetworkName = "MYVM" + "_vnet";
            string subnetName         = "mySubnet";

            VirtualNetworkData virtualNetworkData = new VirtualNetworkData()
            {
                Subnets =
                {
                    new SubnetData()
                    {
                        Name          = subnetName,
                        AddressPrefix = "10.0.0.0/24"
                    }
                }
            };
            VirtualNetworkCollection virtualNetworks = resourceGroup.GetVirtualNetworks();
            virtualNetworkData.AddressPrefixes.Add("10.0.0.0/16");
            ArmOperation <VirtualNetwork> virtualNetworkOperation = await virtualNetworks.CreateOrUpdateAsync(WaitUntil.Completed, virtualNetworkName, virtualNetworkData);

            VirtualNetwork virtualNetwork = virtualNetworkOperation.Value;
            #endregion

            #region Snippet:Create_NetworkSecurityGroup
            string networkSecurityGroupName = virtualMachineName + "_nsg";
            NetworkSecurityGroupData networkSecurityGroupData = new NetworkSecurityGroupData()
            {
                Location = location
            };
            NetworkSecurityGroupCollection      networkSecurityGroups         = resourceGroup.GetNetworkSecurityGroups();
            ArmOperation <NetworkSecurityGroup> networkSecurityGroupOperation = await networkSecurityGroups.CreateOrUpdateAsync(WaitUntil.Completed, networkSecurityGroupName, networkSecurityGroupData);

            NetworkSecurityGroup networkSecurityGroup = networkSecurityGroupOperation.Value;
            #endregion

            #region Snippet:Create_NetworkInterface
            string networkInterfaceName = virtualMachineName + "_nic";
            NetworkInterfaceIPConfigurationData networkInterfaceIPConfiguration = new NetworkInterfaceIPConfigurationData()
            {
                Name    = "Primary",
                Primary = true,
                Subnet  = new SubnetData()
                {
                    Id = virtualNetwork.Data.Subnets.First().Id
                },
                PrivateIPAllocationMethod = IPAllocationMethod.Dynamic,
            };

            NetworkInterfaceData nicData = new NetworkInterfaceData();
            nicData.Location = location;
            nicData.IPConfigurations.Add(networkInterfaceIPConfiguration);
            NetworkInterfaceCollection      networkInterfaces         = resourceGroup.GetNetworkInterfaces();
            ArmOperation <NetworkInterface> networkInterfaceOperation = await networkInterfaces.CreateOrUpdateAsync(WaitUntil.Completed, networkInterfaceName, nicData);

            NetworkInterface networkInterface = networkInterfaceOperation.Value;
            #endregion

            #region Snippet:Create_VirtualMachine
            VirtualMachineData virutalMachineData = new VirtualMachineData(location);
            virutalMachineData.OSProfile.AdminUsername = "******";
            virutalMachineData.OSProfile.AdminPassword = "******";
            virutalMachineData.OSProfile.ComputerName  = "computer-name";
            virutalMachineData.AvailabilitySetId       = availabilitySet.Id;
            NetworkInterfaceReference nicReference = new NetworkInterfaceReference();
            nicReference.Id = networkInterface.Id;
            virutalMachineData.NetworkProfile.NetworkInterfaces.Add(nicReference);

            VirtualMachineCollection      virtualMachines         = resourceGroup.GetVirtualMachines();
            ArmOperation <VirtualMachine> virtualMachineOperation = await virtualMachines.CreateOrUpdateAsync(WaitUntil.Completed, virtualMachineName, virutalMachineData);

            VirtualMachine virtualMachine = virtualMachineOperation.Value;
            Console.WriteLine("VM ID: " + virtualMachine.Id);
            #endregion
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="VirtualMachineModelBuilder"/> class.
 /// </summary>
 /// <param name="containerOperations"> The container to create the virtual machine in. </param>
 /// <param name="vm"> The data model representing the virtual machine to create. </param>
 public VirtualMachineModelBuilder(VirtualMachineContainer containerOperations, VirtualMachineData vm) : base(containerOperations, vm)
 {
     // TODO: GENERATOR Update Builder after models are incorporated in generated models
     // _model.Name = vmName;
     //_model = new VirtualMachine(location);
 }
예제 #13
0
    async Task <OneFuzzResultVoid> CreateVm(
        string name,
        string location,
        string vmSku,
        string image,
        string password,
        string sshPublicKey,
        Nsg?nsg,
        IDictionary <string, string>?tags
        )
    {
        var resourceGroup = _context.Creds.GetBaseResourceGroup();

        _logTracer.Info($"creating vm {resourceGroup}:{location}:{name}");

        var nic = await _context.IpOperations.GetPublicNic(resourceGroup, name);

        if (nic == null)
        {
            var result = await _context.IpOperations.CreatePublicNic(resourceGroup, name, location, nsg);

            if (!result.IsOk)
            {
                return(result);
            }

            _logTracer.Info("waiting on nic creation");
            return(OneFuzzResultVoid.Ok);
        }

        // when public nic is created, VNET must exist at that point
        // this is logic of get_public_nic function

        if (nsg != null)
        {
            var result = await _context.NsgOperations.AssociateNic(nsg, nic);

            if (!result.IsOk)
            {
                return(result);
            }
        }

        var vmParams = new VirtualMachineData(location)
        {
            OSProfile = new OSProfile {
                ComputerName  = "node",
                AdminUsername = "******",
            },
            HardwareProfile = new HardwareProfile {
                VmSize = vmSku,
            },
            StorageProfile = new StorageProfile {
                ImageReference = GenerateImageReference(image),
            },
            NetworkProfile = new NetworkProfile(),
        };

        vmParams.NetworkProfile.NetworkInterfaces.Add(new NetworkInterfaceReference {
            Id = nic.Id
        });

        var imageOs = await _context.ImageOperations.GetOs(location, image);

        if (!imageOs.IsOk)
        {
            return(OneFuzzResultVoid.Error(imageOs.ErrorV));
        }

        switch (imageOs.OkV)
        {
        case Os.Windows: {
            vmParams.OSProfile.AdminPassword = password;
            break;
        }

        case Os.Linux: {
            vmParams.OSProfile.LinuxConfiguration = new LinuxConfiguration {
                DisablePasswordAuthentication = true,
            };
            vmParams.OSProfile.LinuxConfiguration.SshPublicKeys.Add(
                new SshPublicKeyInfo {
                    Path    = "/home/onefuzz/.ssh/authorized_keys",
                    KeyData = sshPublicKey
                }
                );
            break;
        }

        default: throw new NotSupportedException($"No support for OS type: {imageOs.OkV}");
        }

        var onefuzzOwner = _context.ServiceConfiguration.OneFuzzOwner;

        if (!string.IsNullOrEmpty(onefuzzOwner))
        {
            vmParams.Tags.Add("OWNER", onefuzzOwner);
        }
        else
        {
            tags?.ToList()
            .ForEach(kvp => {
                if (!vmParams.Tags.TryAdd(kvp.Key, kvp.Value))
                {
                    _logTracer.Warning($"Failed to add tag {kvp.Key}:{kvp.Value} to vm {name}");
                }
            });
        }

        try {
            await _context.Creds.GetResourceGroupResource().GetVirtualMachines().CreateOrUpdateAsync(
                WaitUntil.Started,
                name,
                vmParams
                );
        } catch (RequestFailedException ex) {
            if (ex.ErrorCode == "ResourceNotFound" && ex.Message.Contains("The request failed due to conflict with a concurrent request"))
            {
                // _logTracer.Debug($"create VM had conflicts with concurrent request, ignoring {ex.ToString()}");
                return(OneFuzzResultVoid.Ok);
            }

            return(OneFuzzResultVoid.Error(
                       ErrorCode.VM_CREATE_FAILED,
                       ex.ToString()
                       ));
        }

        return(OneFuzzResultVoid.Ok);
    }