当前位置: 首页 > 知识库问答 >
问题:

如何在使用Powershell从捕获的映像创建ARM VM时包含“计划信息”?

丰誉
2023-03-14

我有一个从市场创建的ARM虚拟机:bitnami LAMP(Ubuntu),我已经成功捕获了一个图像。在捕获过程中,我保存了json模板。

使用基于此的模板,我可以通过门户的模板部署工具以交互方式成功创建新的VM。(这样拍摄的图像就可以了)。请注意:json模板确实包含计划信息,请参见下文

然而,我最初的目标是使用Powershell基于捕获的映像创建新的ARM虚拟机

然而,在最后一个命令New-AzureRmVM返回和错误声明中,所有这些似乎都可以工作:

从Marketplace映像创建虚拟机需要请求中的计划信息。

很明显,这个信息丢失了,但我找不到如何添加它。

以下是我尝试过的:

  • 我已经检查了$vm变量(新AzureRmVM命令的参数),其Plan属性为空。(如预期的那样)

实际上,原始捕获的json模板包含该计划说明:

  },
  "name": "[parameters('vmName')]",
  "type": "Microsoft.Compute/virtualMachines",
  "location": "westeurope",
  "plan": {
    "name": "5-6",
    "publisher": "bitnami",
    "product": "lampstack"
  } 

同样,此脚本尝试使用的捕获图像(. vhd)已确认确定,因为使用相同的捕获图像,我可以通过门户的模板部署工具创建新的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

共有3个答案

莘绍元
2023-03-14

如果你不认识出版商或其他什么人的话,我也会像我一样来到这里。

保存新vm名称$VM_NAME、资源组$RESOURCE_GROUP和位置$REGION的变量,然后运行以下命令并创建关联变量:

VM_NAME=<new-vm-name>
RESOURCE_GROUP=<my-resource-group>
REGION=<my-disks-location>

获取$PLAN\u NAME、$PLAN\u PRODUCT、$PLAN\u PUBLISHER**此命令可能需要很长时间。如果可以提供“-publisher”、“offer”或“-sku”,则可以缩短等待时间*

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\U DISK和$OS\U TYPE

az disk list -o table

OS_DISK=<output-from-command-above>
OS_TYPE=<output-from-command-above>

获取NIC列表(如果可用)并保存到变量$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 $NIC
易琛
2023-03-14

azure cli中的以下命令提供了信息。下面运行示例。

azure vm image show--location westus--publisher paloaltonetworks--offer VMeries1--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": []
  }
]
许明朗
2023-03-14

五天前,Azure Powershell版本1.2.2向AzureRM添加了一个新的cmdlet。计算-设置AzureRmVMPlan

这样就可以像这样配置计划参数-

$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
 类似资料:
  • 问题内容: 我从使用方法获得像素。像素存储在名为的数组中。在对数据数组进行一些操作之后,我需要再次创建一个,以便可以将其传递到一个模块,该模块将显示来自此数据数组的修改后的图像,但我对此感到困惑。 问题答案: 然后再次设置像素。 PS:如评论中所述,请使用@TacticalCoder的答案

  • 假设我已经将NVIDIA NGC PyTorch docker图像拉到如下位置: 然后我想添加这些python包:? 此外,如何在整个组织中分发新映像?

  • 问题内容: 我想用已经填充的数据创建一个MySQL Docker映像。 我想要创建3个这样的图层: 我的问题是现在如何为第2层和第3层创建正确的Dockerfile?将我的empty_with_tables.sql文件加载到第2层,并将customer1.sql和customer2.sql加载到第3层的两个映像中。我读了一些有关将SQL文件放入’/docker- entrypoint- initd

  • 我在我的回购中有docker图像,Akshay123007/lists-pods。我已经创建了舵手图图像: 当我安装图表时,我得到的错误为:未能拉出映像“AKSHAY123007/lists-pods:1.16.0”:rpc error:code=Unknown desc=来自守护进程的错误响应:manifest for AKSHAY123007/lists-pods:1.16.0 not fou

  • 问题内容: 我正在尝试运行JMeter脚本,但登录失败。原因是,密码是使用RSA算法(即使用javascript)进行加密的。因此在录制时保存的密码将无法使用,并且由于使用JMeter不支持的javascript对其进行加密,因此无法获得加密密码的动态值。由于运行时使用javascript,因此我无法使用正则表达式查找响应数据,因为这不是响应的一部分。 我试图登录到Tableau报表服务器。 问题

  • 问题内容: 我试图创建一个执行大量2D转换和形状渲染的快速图像生成器,所以我试图使用BufferedImage然后获取Graphics2D对象来执行所有绘图。我现在主要关心的是制作速度非常快,因此我正在创建一个BufferedImage,如下所示: 但是,如果我这样做: 输出始终为 false ,即使我使用-Dsun.java2d.opengl = True启动JVM也会显示以下行: 我正在执行B