无法在ARM模板中正确使用引用功能

时间:2018-12-12 16:54:22

标签: azure azure-resource-manager arm-template

我有一个主模板。在此范围内: 我有一个链接模板,用于创建应用程序见解。 和另一个链接的模板调用来创建Webapp。

在webapp链接模板调用中,我想传递AIKey作为参数,但这是有问题的。如果我这样做:

<body>
</body>

第一次失败,因为参考值会立即评估,并且appinsights还不存在。即使我对Webapp内的appinsights链接模板资源调用使用依赖项,也会发生这种情况。

所以我想也许我可以在参考文献中使用参考文献,以防止过早评估它,但这行不通-似乎您在参考文献中没有参考文献。

add_filter( 'woocommerce_ship_to_different_address_checked', 'filter_cart_needs_shipping_address');
function filter_cart_needs_shipping_address( $checked ) {

    $products_ids = array(793, 796);
    $found = $others_found = false;

    foreach ( WC()->cart->get_cart() as $cart_item ){
        if (in_array( $cart_item['data']->get_id(), $products_ids ) ){
            $found = true;
        } else {
            $others_found = true;
        }
    }

    if( $found && ! $others_found )
        $checked = true;

    return $checked;
} 

我不想将AI Key放在链接模板的输出中,因为它将以纯文本格式放置。有什么方法可以实现我的目标?

以下是一些代码段,它是单个模板,但是该模板非常大,因此我没有包含所有内容:

调用AI嵌套模板:

"value": "[reference(resourceId('Microsoft.Insights/components', variables('appInsightsName')),'2014-04-01').InstrumentationKey]"

调用WebAPP模板:

"value": "[reference(reference('AppInsights').outputs.resourceID.value,'2014-04-01').InstrumentationKey]"

这是错误:     “ code”:“ ResourceNotFound”,           “ message”:“未找到资源组'MyResourceGroup'下的资源'Microsoft.Insights / components / MyAppInsightsName'。”

2 个答案:

答案 0 :(得分:0)

不要将密钥传递到Webapp模板中,而是传递AI资源的resourceId并将reference()调用放入Web应用程序模板中。不输出resourceId,只需像在第一个代码段中那样传递字符串即可。

"value": "[resourceId('Microsoft.Insights/components', variables('appInsightsName'))]

此外,如果您可以共享您的模板(或足够用于repro),那将很有帮助...我以为我们已解决了此问题,但听起来好像我们没有,所以最好看看我们是否没案。

答案 1 :(得分:0)

好的,我想我理解您的意思,这就是您的模板的样子:

parent:
  - child1:
      - application insights
  - child2:
      - webapp

所以您在这里确实没有很多好的选择。首先:这种设置意义不大。仅为了创建嵌套部署而创建嵌套部署只会导致创建堆栈溢出问题;)您可以将其转换为平面模板,这样就可以正常工作,也可以像这样重新排列它们:

父母:   -child1:       -应用洞察       -child2:           -webapp

您还可以尝试将配置更新为child2中的独立资源:

{
    "name": "appsettings",
    "type": "config",
    "apiVersion": "2015-08-01",
    "properties": {
        "APPINSIGHTS_INSTRUMENTATIONKEY": "[reference(resourceId('Microsoft.Insights/components', variables('appInsightsName')),'2014-04-01').InstrumentationKey]"
    }
}

另一个选项将在child1中输出,并在child2中进行引用,这将起作用。您可以将部署作为脚本的一部分进行删除(如果您不想删除child1,则可以创建仅执行此操作的代理部署),因此在Azure中将没有任何AI密钥的痕迹。 / p>

父母:   -child1:     -child1.1(以前的child1):       -应用洞察   -child2:<<这取决于child1     -child2.1(以前为child2):<<此引用AI密钥       -webapp