Azure ARM Template dependsOn:如何引用 VM 扩展?
Azure ARM Template dependsOn: How to reference a VM extension?
我有一个 Azure ARM 模板,它应该使用 Docker 创建一个 Linux 虚拟机。 Docker 使用 Azure 的 DockerExtension
安装。安装 Docker 后,我需要 运行 使用 Azure 的 CustomScriptForLinux
的自定义脚本。因此,第二个脚本应该依赖于 Docker 安装。这是一个示例,展示了我如何尝试在 ARM 模板中编写它:
{
...,
"variables": {
"extensionName": "DockerExtension",
"vmName": "Docker",
...
},
"resources": [
...,
{
"type": "Microsoft.Compute/virtualMachines/extensions",
"name": "[concat(variables('vmName'), '/', variables('extensionName'))]",
"tags": {
"displayName": "DockerExtension"
},
"apiVersion": "2015-06-15",
"location": "[resourceGroup().location]",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]"
],
"properties": {
"publisher": "Microsoft.Azure.Extensions",
"type": "DockerExtension",
"typeHandlerVersion": "1.1",
"autoUpgradeMinorVersion": true,
"settings": { }
}
},
{
"type": "Microsoft.Compute/virtualMachines/extensions",
"name": "[concat(variables('vmName'), '/config')]",
"apiVersion": "2015-06-15",
"location": "[resourceGroup().location]",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/extensions/', variables('vmName'), '/', variables('extensionName'))]"
],
"properties": {
"publisher": "Microsoft.OSTCExtensions",
"type": "CustomScriptForLinux",
"typeHandlerVersion": "1.4",
"settings": {
"fileUris": [
"..."
],
"commandToExecute": "bash configure.sh"
}
}
}
]
}
如果我 运行 这个 ARM 模板,我得到错误 The resource
'Microsoft.Compute/virtualMachines/extensions/Docker/DockerExtension' is not defined in the template.
我不明白为什么。这是我模板中的 Docker 扩展名,对吗?
如果我 运行 只是其中一个脚本,该模板就可以工作。所以模板应该不会出现一般错误。
感谢任何帮助。
此致,
莱纳.
您可以尝试在您的 ARM 模板中使用 ARM 模板函数 resourceId() 来引用 Docker 扩展资源,如下所示。
"type": "Microsoft.Compute/virtualMachines/extensions",
"name": "[concat(variables('vmName'), '/config')]",
"dependsOn": [
"[resourceId('Microsoft.Compute/virtualMachines/extensions', variables('vmName'), variables('extensionName'))]"
],...
参考:Azure 资源管理器模板函数
我有一个 Azure ARM 模板,它应该使用 Docker 创建一个 Linux 虚拟机。 Docker 使用 Azure 的 DockerExtension
安装。安装 Docker 后,我需要 运行 使用 Azure 的 CustomScriptForLinux
的自定义脚本。因此,第二个脚本应该依赖于 Docker 安装。这是一个示例,展示了我如何尝试在 ARM 模板中编写它:
{
...,
"variables": {
"extensionName": "DockerExtension",
"vmName": "Docker",
...
},
"resources": [
...,
{
"type": "Microsoft.Compute/virtualMachines/extensions",
"name": "[concat(variables('vmName'), '/', variables('extensionName'))]",
"tags": {
"displayName": "DockerExtension"
},
"apiVersion": "2015-06-15",
"location": "[resourceGroup().location]",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]"
],
"properties": {
"publisher": "Microsoft.Azure.Extensions",
"type": "DockerExtension",
"typeHandlerVersion": "1.1",
"autoUpgradeMinorVersion": true,
"settings": { }
}
},
{
"type": "Microsoft.Compute/virtualMachines/extensions",
"name": "[concat(variables('vmName'), '/config')]",
"apiVersion": "2015-06-15",
"location": "[resourceGroup().location]",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/extensions/', variables('vmName'), '/', variables('extensionName'))]"
],
"properties": {
"publisher": "Microsoft.OSTCExtensions",
"type": "CustomScriptForLinux",
"typeHandlerVersion": "1.4",
"settings": {
"fileUris": [
"..."
],
"commandToExecute": "bash configure.sh"
}
}
}
]
}
如果我 运行 这个 ARM 模板,我得到错误 The resource
'Microsoft.Compute/virtualMachines/extensions/Docker/DockerExtension' is not defined in the template.
我不明白为什么。这是我模板中的 Docker 扩展名,对吗?
如果我 运行 只是其中一个脚本,该模板就可以工作。所以模板应该不会出现一般错误。
感谢任何帮助。
此致, 莱纳.
您可以尝试在您的 ARM 模板中使用 ARM 模板函数 resourceId() 来引用 Docker 扩展资源,如下所示。
"type": "Microsoft.Compute/virtualMachines/extensions",
"name": "[concat(variables('vmName'), '/config')]",
"dependsOn": [
"[resourceId('Microsoft.Compute/virtualMachines/extensions', variables('vmName'), variables('extensionName'))]"
],...
参考:Azure 资源管理器模板函数