有没有办法引用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')。
答案 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的名称),然后将脚本上载到自定义脚本扩展。