2016-02-14 131 views
2

我有一个应该使用Docker创建Linux VM的Azure ARM Teamplate。 Docker使用Azure的DockerExtension进行安装。在安装Docker之后,我需要使用Azure的CustomScriptForLinux来运行自定义脚本。因此,第二个脚本应该依赖于Docker安装。下面是一个例子,显示我怎么试着写在一个ARM模板:Azure ARM模板dependsOn:如何引用VM扩展?

{ 
    ..., 
    "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扩展的名称,不是吗?

如果我只运行其中一个脚本,该模板将起作用。所以模板中不应该存在一般错误。

任何帮助表示赞赏。

Regards, Rainer。

回答

8

您可以尝试在ARM模板中使用ARM模板函数resourceId()来引用Docker扩展资源,如下所示。

"type": "Microsoft.Compute/virtualMachines/extensions", 
    "name": "[concat(variables('vmName'), '/config')]", 
    "dependsOn": [ 
    "[resourceId('Microsoft.Compute/virtualMachines/extensions', variables('vmName'), variables('extensionName'))]" 
    ],... 

参考:天蓝色的资源管理器模板函数

https://azure.microsoft.com/en-gb/documentation/articles/resource-group-template-functions/#resourceid

+0

真棒,工程。谢谢! – Rainer

+0

@Rainer,不客气。很高兴它可以帮助你和其他可能遇到同样问题的社区成员。 – juvchan