使用Azure Powershell,以上内容相对简单:

$image = "captured-vm-image-xx"
New-AzureService -ServiceName $servicename -Location $region
$config = New-AzureVMConfig -Name $servicename -InstanceSize ExtraSmall -AvailabilitySetName $avsetname -ImageName $image
New-AzureVM -ServiceName $servicename -VMs $config -VNetName $vnetname -WaitForBoot

现在,我尝试使用Azure 2.4 SDK将上面的代码移植到C#:
var vmname = ComputeClusterMasterName(clusterName);

var p1 = new VirtualMachineCreateDeploymentParameters
{
    Name = vmname,
    Roles = new List<Role>
    {
        new Role()
        {
            RoleType = "PersistentVMRole",
            RoleName = vmname,
            RoleSize = "ExtraSmall",
            ConfigurationSets = new List<ConfigurationSet>(),
        },
    },
    DeploymentSlot = DeploymentSlot.Production,
    Label = vmname
};

await client.VirtualMachines.CreateDeploymentAsync(clusterName, p1);

var parms = new VirtualMachineCreateParameters();
parms.AvailabilitySetName = clusterName;
parms.RoleName = vmname;
parms.RoleSize = "ExtraSmall";
parms.VMImageName = "captured-vm-image-xx";
await client.VirtualMachines.CreateAsync(cloudServiceName, vmname, parms);

当我运行上面的代码时,CreateDeploymentAsync失败并显示:



是的,我省略了该属性,但是为什么我必须首先指定它?

最佳答案

您的CreateDeploymentAsync()调用似乎正在尝试创建新的VM(又名Role),但未指定某些必填字段。创建部署后,它还会启动其第一个虚拟机。

您必须在原始角色中指定缺少的信息,因为您的请求中没有足够的信息来创建虚拟机。如果比较RoleVirtualMachineCreateParameters的接口(interface),您应该注意到很多相似之处-它们或多或少地承担着相同的责任。您是否尝试过在初始调用中从Role中的VmImage指定实际的VM?这样您可能会有更多的运气。 :)

关于c# - 通过捕获的图像以编程方式创建Azure VM,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25534163/

10-14 19:13
查看更多