Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JSON模板中引用虚拟机的虚拟机名称_Json_Azure_Azure Virtual Machine_Azure Resource Manager_Azure Vm Scale Set - Fatal编程技术网

如何在JSON模板中引用虚拟机的虚拟机名称

如何在JSON模板中引用虚拟机的虚拟机名称,json,azure,azure-virtual-machine,azure-resource-manager,azure-vm-scale-set,Json,Azure,Azure Virtual Machine,Azure Resource Manager,Azure Vm Scale Set,是否有方法引用部署在VM规模集中的VM名称?我正在使用自定义脚本扩展,在部署scale集中的每个VM时运行安装脚本,对于脚本的一个参数,我希望使用VM的名称。就单个实例而言,这很容易: "commandToExecute": "[concat('sh ap-cluster-setup.sh -h=',parameters('virtualMachineName'),' -s=',parameters('subnetAddressPrefix'),'')]" 但由于scale集中的VM名称是在部

是否有方法引用部署在VM规模集中的VM名称?我正在使用自定义脚本扩展,在部署scale集中的每个VM时运行安装脚本,对于脚本的一个参数,我希望使用VM的名称。就单个实例而言,这很容易:

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

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

在模板本身中无法做到这一点,因为在脚本执行时会将相同的参数传递给每个VM。但是,您应该能够从脚本中找出VM名称。例如,在Linux机器上,可以使用
hostname
命令,该命令将返回VM名称。这能满足你的需要吗

其中,vmssTemplate是中的参数('virtualMachineScaleSets_name') VMS模板

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

"osProfile": {
            "computerNamePrefix": "[variables('namingInfix')]",
            "adminUsername": "[parameters('adminUsername')]",
            "adminPassword": "[parameters('adminPassword')]"
          },
“NamingFix”定义如下:

 "namingInfix": "[toLower(substring(concat(parameters('vmssName'), uniqueString(resourceGroup().id)), 1, 9))]",
默认情况下,具有自动缩放设置的虚拟机,虚拟机的名称应自动创建

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

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

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

这是完全可以理解的,我甚至找到了使用这种方法的模板,但我不认为这是在模板中引用虚拟机名称的一种方法。这只是一种设置VM前缀的方法。我考虑过这一点,但我关心的是
hostname
,因为据我所知,定制扩展在部署VM时运行脚本,所以我不知道该命令是否可用,以及它是否返回正确的值。但我想我必须试一试。