如何在JSON模板

时间:2017-02-27 16:12:16

标签: json azure azure-virtual-machine azure-resource-manager azure-vm-scale-set

有没有办法引用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')。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

  

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

我们可以找到vmss模板定义虚拟机名称的位置 的 computernameprefix

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

和'namingInfix'在这里定义:

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

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

如果您想获取VM的名称,我们可以使用powershell来获取它:

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

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