我有一个从Marketplace: bitnami (Ubuntu)创建的ARM VM,我成功地捕捉到了一个图像。在捕获过程中,我保存了json模板。
使用基于此的模板,我可以通过门户的模板部署工具交互地成功地创建新的VM。(所以捕获的图像是可以的)。请注意: json模板确实包含计划信息,请参阅下面
不过,我最初的目标是使用Powershell基于捕获的映像创建新的ARM VM。
然而,在最后一个命令返回和错误中,似乎所有操作都正常,声明如下:
从Marketplace映像创建虚拟机需要请求中的计划信息。
很明显,这个信息缺失了,但我无法找到如何添加它。
这里是我尝试过的:
实际上,原始捕获的json模板包含了该计划intomation:
},
"name": "[parameters('vmName')]",
"type": "Microsoft.Compute/virtualMachines",
"location": "westeurope",
"plan": {
"name": "5-6",
"publisher": "bitnami",
"product": "lampstack"
} 同样,这个脚本试图使用的捕获映像( .vhd)被确认为OK,因为使用相同的捕获映像,我可以通过门户的模板部署工具创建新的ARM VM。
我认为来源并不太重要--这个案子(没有错误,只是遗漏的东西,但问题中清楚地说明了丢失的东西)但我还是附上了消息来源.可选阅读。
# Existing resource parameters
$subscriptionName = 'Visual Studio Premium with MSDN'
$rgName = "rg-wp"
$location = "westeurope"
$stName = 'mystorage'
$sourceImageUri = 'https://mystorage.blob.core.windows.net/system/Microsoft.Compute/Images/vhds/template-osDisk.be7b0cf4-a28b-47f9-89c7-43887f1570ab.vhd'
# Creation settings:
$vmSize = 'Standard_DS2'
$vmSuffix = 'wp-11'
#Login-AzureRmAccount
Select-AzureRmSubscription -SubscriptionName $subscriptionName
# Get the storage account
#$storageAccount = Get-AzureRmStorageAccount | ? StorageAccountName -EQ $stName
$storageAccount = Get-AzureRmStorageAccount -AccountName $stName -ResourceGroupName $rgName
# Enable verbose output and stop on error
$VerbosePreference = 'Continue'
#$ErrorActionPreference = 'Stop'
$adminUsername = 'myusername'
$adminPassword = 'mypassword'
$vmName = '{0}-vm' -f $vmSuffix
$nicName = '{0}-nic' -f $vmSuffix
$ipName = '{0}-pip' -f $vmSuffix
$domName = '{0}-mzpx' -f $vmSuffix
$vnetName = '{0}-vn' -f $vmSuffix
$nsgName= '{0}-nsg' -f $vmSuffix
# Networking:
Write-Verbose 'Creating Virtual Network'
$vnetDef = New-AzureRmVirtualNetwork -ResourceGroupName $rgName -Location $location -Name $vnetName -AddressPrefix '10.0.0.0/16'
Write-Verbose 'Adding subnet to Virtual Network'
$vnet = $vnetDef | Add-AzureRmVirtualNetworkSubnetConfig -Name 'Subnet-1' -AddressPrefix '10.0.0.0/24' | Set-AzureRmVirtualNetwork
Write-Verbose 'Creating Public IP'
$pip = New-AzureRmPublicIpAddress -ResourceGroupName $rgName -Location $location -Name $ipName -DomainNameLabel $domName -AllocationMethod Dynamic
Write-Verbose 'Creating NIC'
$nsg = New-AzureRmNetworkSecurityGroup -Name $nsgName -ResourceGroupName $rgName -Location $location
Write-Verbose 'Network Security Group'
$nic = New-AzureRmNetworkInterface -ResourceGroupName $rgName -Location $location -Name $nicName -PublicIpAddressId $pip.Id -SubnetId $vnet.Subnets[0].Id -NetworkSecurityGroupId $nsg.Id
# Configuring VM
Write-Verbose 'Creating VM Config'
$vm = New-AzureRmVMConfig -VMName $vmName -VMSize $vmSize
# Specify local administrator account, and then add the NIC
$cred = New-Object PSCredential $adminUsername, ($adminPassword | ConvertTo-SecureString -AsPlainText -Force) # you could use Get-Credential instead to get prompted
$vm = Set-AzureRmVMOperatingSystem -VM $vm -Linux -ComputerName $vmName -Credential $cred
$vm = Add-AzureRmVMNetworkInterface -VM $vm -Id $nic.Id
# Specify the OS disk
$diskName = '{0}-osdisk' -f $vmSuffix
$osDiskUri = '{0}vhds/{1}{2}.vhd' -f $storageAccount.PrimaryEndpoints.Blob.ToString(), $vmName.ToLower(), $diskName
$vm = Set-AzureRmVMOSDisk -VM $vm -Name $diskName -VhdUri $osDiskUri -CreateOption fromImage -SourceImageUri $sourceImageUri -Linux
Write-Verbose 'Creating VM...'
$result = New-AzureRmVM -ResourceGroupName $rgName -Location $location -VM $vm发布于 2016-03-08 17:19:57
五天前,AzureRM.Compute版本1.2.2,他们在AzureRM.Compute- Set-AzureRmVMPlan中添加了一个新的cmdlet
让我们把计划参数配置成这样-
$vm = New-AzureRmVMConfig -vmName $vmName -vmSize $vmSize
Set-AzureRmVMPlan -VM $vm -Publisher bitnami -Product lampstack -Name "5-6"
$vm = Add-AzureRmVMNetworkInterface -VM $vm -Id $nic.Id
$vm = Set-AzureRmVMOSDisk -VM $vm -Name $vhdName -VhdUri $vhdUri -Linux -CreateOption attach -Verbose发布于 2016-12-19 19:25:23
azure中的以下命令提供了以下信息。下面运行示例。
azure vm image show --location westus --publisher paloaltonetworks --offer vmseries1 --sku bundle1 --version 7\.1\.1 --json
[
{
"id": "/Subscriptions/subscription-id/Providers/Microsoft.Compute/Locations/westus/Publishers/paloaltonetworks/ArtifactTypes/VMImage/Offers/vmseries1/Skus/bundle1/Versions/7.1.1",
"name": "7.1.1",
"location": "westus",
"plan": {
"publisher": "paloaltonetworks",
"name": "bundle1",
"product": "vmseries1"
},
"osDiskImage": {
"operatingSystem": "Linux"
},
"dataDiskImages": []
}
]发布于 2019-06-12 07:57:42
如果你不知道出版商什么的,其他人也会像我一样在这里结束。
保存新vm名称$VM_NAME、资源组$RESOURCE_GROUP和位置$REGION的变量,然后运行以下命令并创建关联变量:
VM_NAME=<new-vm-name>
RESOURCE_GROUP=<my-resource-group>
REGION=<my-disks-location>获取$PLAN_NAME、$PLAN_PRODUCT、$PLAN_PUBLISHER **这个命令可能要花费很长时间。如果你能提供“--出版商”、“--提供”或“--斯库”,你可以缩短等待时间。
az vm image list --location $REGION --all -o table | grep <any-keyword>
PLAN_NAME=<output-from-command-above>
PLAN_PRODUCT=<output-from-command-above>
PLAN_PUBLISHER=<output-from-command-above>获取可用磁盘并保存到变量$OS_DISK和$OS_TYPE
az disk list -o table
OS_DISK=<output-from-command-above>
OS_TYPE=<output-from-command-above>获取nics列表(如果可用)并保存到变量$NIC
az network nic list -o table
NIC=<output-from-command-above>获取可用的vm大小并保存到变量$VM_SIZE
az vm list-sizes -l $REGION -o table
VM_SIZE=<output-from-command-above>一旦设置了所有变量,您就可以运行这个命令来重新创建机器:
az vm create \
--name $VM_NAME \
--resource-group $RESOURCE_GROUP \
--attach-os-disk $OS_DISK \
--os-type $OS_TYPE \
--location $REGION \
--size $VM_SIZE \
--plan-name $PLAN_NAME \
--plan-product $PLAN_PRODUCT \
--plan-publisher $PLAN_PUBLISHER \
--nics $NIChttps://stackoverflow.com/questions/35871496
复制相似问题