Arm模板:使用常量值连接数组的每个元素

时间:2017-08-06 05:11:09

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

创建arm模板时,是否可以使用常量字符串连接数组的每个元素?下面是我创建的参数和我尝试创建的资源。

  "parameters": {

    "servicesNames": {
      "type": "array",
      "defaultValue": [
        "test-api-content",
        "test-svc-content"
      ]
    }
  }

    {
      "apiVersion": "2016-03-30",
      "type": "Microsoft.Network/publicIPAddresses",
      "name": "[concat(parameters('servicesNames'),'pip')]",
      "location": "[resourceGroup().location]",
      "copy": {
        "name": "PIPaddresscopy",
        "count": "[length(parameters('servicesNames'))]"
      },
      "tags": {
        "displayName": "PublicIPAddress"
      }
   }

我希望使用

创建资源名称的输出
  

“测试API-contentpip”

我怎么会收到以下错误

  

语言功能'concat'提供的参数无效。   全部或全部参数都必须是数组

请建议我如何连接元素的每个值

2 个答案:

答案 0 :(得分:2)

只是添加到现有答案(因为我认为有点不清楚)。

您要对代码执行的操作 - 使用字符串连接数组,您需要做的是使用字符串连接数组的每个元素。

有一个copyIndex()函数表示循环的当前迭代。并且您可以使用array[number]来访问阵列的特定成员。所以

parameters('servicesNames')[copyIndex()]

表示您的parameters('servicesNames')[0]parameters('servicesNames')[1]。这实际上意味着你已经迭代了这个数组。

答案 1 :(得分:-1)

您可以通过修改 publicIpAddress 资源的名称属性来连接元素的每个值,如下所示。

public class AutoService extends AccessibilityService 
{
          @TargetApi(16)
          @Override
          public void onAccessibilityEvent(AccessibilityEvent event)
          {
                 AccessibilityNodeInfo source = event.getSource();
                 myAdapter.processEvent(source);
          }
}

public class myAdapter
{
    public static void processEvent(final AccessibilityNodeInfo source)
    {
         final StringBuilder sb = new StringBuilder();
         processSubEvent(source, 0, sb);
         final String string = sb.toString();

         if (string == null)
         {
            return;
         }

         clickScreen(source, string.toLowerCase());
    }

private static void processSubEvent(final AccessibilityNodeInfo source, final int n, final StringBuilder sb) {
    for (int i = 0; i < n; ++i) {
        sb.append("\t");
    }

    if (source != null)
    {
        sb.append(source.getText());
        sb.append("\n");
        final int childCount = source.getChildCount();

        for (int i = 0; i < childCount; i++)
        {
            AccessibilityNodeInfo child = source.getChild(i);
            processSubEvent(child, n + 1, sb);

            if (child != null)
            {
                child.recycle();
            }
        }
    }
}

private static void clickScreen(final AccessibilityNodeInfo source, final String text)
{
     List<AccessibilityNodeInfo> list = source.findAccessibilityNodeInfosByText(text);

    for (final AccessibilityNodeInfo node : list)
    {
        node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
    }
}
}

<强> copyIndex

此功能始终与复制对象一起使用。

如果没有为offset提供值,则返回当前迭代值。迭代值从零开始。