Arm模板:将数组的每个元素与常量值连接起来

Arm template: concatenate each element of an array with constant value

创建 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"
      }
   }

我希望使用

创建资源名称的输出

"test-api-contentpip"

我怎么会收到以下错误

The provided parameters for language function 'concat' are invalid. Either all or none of the parameters must be an array

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

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

"name": "[concat(parameters('servicesNames')[copyIndex()], 'pip')]",

copyIndex:

此函数始终与复制对象一起使用。

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

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

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

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

parameters('servicesNames')[copyIndex()]

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