ARM - 如何将参数传递给CustomScript扩展?

时间:2017-03-15 12:38:44

标签: azure azure-resource-manager

我的模板中有一个OUTPUTS部分:

  "outputs": {
    "MasterFirstIPConfig": {
      "type": "string",
      "value": "[reference(variables('masterVM'),'2016-09-01').ipConfigurations[0].properties.privateIPAddress]"
    }
  }

它按预期工作 - 我看到VM的私有IP。

接下来 - 我想将此IP用作CustomScript扩展名的参数,如下所示:

              "settings": {
                "fileUris": [
                  "https://utils.blob.core.windows.net/scripts/swarm_master_provision.sh"
                ],
                "commandToExecute": "[concat('bash swarm_master_provision.sh ', reference(variables('masterVM'),'2016-09-01').ipConfigurations[0].properties.privateIPAddress)]"

              },

这里的问题是reference()会导致依赖性错误:

  

错误:InvalidTemplate:部署模板验证失败:   '在资源上检测到循环依赖:   ' /订阅/ 0a4f2b9c - *** - 40b17ef8c3ab / resourceGroups / JM-web的测试-VAR-1 /提供商/ Microsoft.Compute / virtualMachineScaleSets / JM-web的测试-VAR -1-主vmss&#39 ;。   有关使用详情,请参阅https://aka.ms/arm-template/#resources。'。

所以问题是 - 如何将私有IP传递给脚本?

2 个答案:

答案 0 :(得分:0)

因此,当您使IP静态但让它由VM部署分配时,您无法在同一资源中引用该IP。有道理。

这样做的一种方法是将VM与VM分开。不要将其作为VM的子资源,而是将其作为自己的资源,然后让VM依赖于NIC。然后,您可以为NIC分配静态IP,然后引用VM的网络配置文件部分中的NIC,以及自定义脚本扩展中的NIC的IP。

编辑:啊这可能只适用于VM而不是缩放集......

Edit2:此外,参考函数仅用于模板的输出部分。经过一番研究后,您可以将IP地址分配给负载均衡器。这可能适合你!

答案 1 :(得分:0)

好的,所以我在这里做了些什么,我建议你使用嵌套模板方法解决这个问题。

我不会粘贴整个模板,只是从主VMSS中删除扩展配置,然后将其移到单独的模板中,并在模板中创建一个新步骤:

{
    "apiVersion": "2015-01-01",
    "name": "VMSSextension",
    "type": "Microsoft.Resources/deployments",
    "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachineScaleSets/', variables('masterVMSSname'))]"
    ],
    "properties": {
        "mode": "Incremental",
        "templateLink": {
            "uri": "http://pastebin.com/raw/GsNTiAMc", ## << You can take a look at the nested template
            "contentVersion": "1.0.0.0"
        },
        "parameters": {
            "value": {
                "value": "[variables('masterVMSSname')]"
            },
            "value2": {
                "value": "[reference(variables('masterVM'),'2016-09-01').ipConfigurations[0].properties.privateIPAddress]"
            }
        }
    }
}

唯一真正的缺点 - 您必须升级最初配置为最新版本的比例集成员。所有新的都是最新的(所以使用自定义脚本扩展)。对于你的&#34;奴隶&#34; VMSS,您不应该需要嵌套模板方法,只需将其设为&#34;依赖&#34; &#34;主人&#34; VMSS。

编辑:对不起,我花了这么长时间,现在有点短暂。