0

有没有办法引用部署在 VM Scale Set 中的 VM 名称?我正在使用自定义脚本扩展,该扩展在部署规模集中的每个 VM 时运行安装脚本,并且对于脚本的参数之一,我想使用 VM 的名称。对于单个实例,这很容易:

"commandToExecute": "[concat('sh ap-cluster-setup.sh -h=',parameters('virtualMachineName'),' -s=',parameters('subnetAddressPrefix'),'')]"

但是由于规模集中的 VM 名称是在部署时动态创建的,所以我想不出一种在 JSON 中引用它的方法。VM 命名约定是 vmssTemplate_0、vmssTemplate_1 等,其中 vmssTemplate 是 VMSS 模板中的参数('virtualMachineScaleSets_name')。

4

2 回答 2

0

由于在脚本执行时将相同的参数传递给每个 VM,因此无法在模板本身中执行此操作。但是,您应该能够从脚本中找出 VM 名称。例如,在 Linux 机器上,您可以使用该hostname命令,该命令将返回 VM 名称。这是否满足您的需求?

于 2017-02-28T02:51:56.473 回答
0

其中 vmssTemplate 是 VMSS 模板中的参数('virtualMachineScaleSets_name')。

我们可以找到 vmss 模板定义虚拟机名称的位置。
计算机名前缀

"osProfile": {
            "computerNamePrefix": "[variables('namingInfix')]",
            "adminUsername": "[parameters('adminUsername')]",
            "adminPassword": "[parameters('adminPassword')]"
          },

和'namingInfix'在这里定义:

 "namingInfix": "[toLower(substring(concat(parameters('vmssName'), uniqueString(resourceGroup().id)), 1, 9))]",

默认情况下,VMSS 具有自动缩放设置,并且应该自动创建 vm 的名称。

如果要获取虚拟机的名称,我们可以使用 powershell 来获取它:

PS C:\windows> Get-AzureRmVmssVM -ResourceGroupName YOUR_RESOURCE_NAME -VMScaleSetName YOUR_VMSS_NAME

您还可以在脚本中添加一些脚本(以获取 VM 的名称),然后将脚本上传到自定义脚本扩展。

于 2017-02-28T08:02:47.093 回答