迭代多个属性 ARM 模板

Iterate multiple properties ARM Template

我正在为数据工厂创建 ARM 模板。在管道中,每个数据集都有两个活动:一个复制,一个删除。我有一个定义的数据集数组。

"variables": {
   "datasets": ["foo", "bar", "boo", "far"]
 }

我知道活动是 属性 并且您可以根据 documentation 遍历属性,但似乎我只能对一个 activity 执行此操作.

例如,我想使用管道模板执行以下操作:

{
  "name": "MyPipeline",
  "type": "Microsoft.DataFactory/factories/pipelines",
  "apiVersion": "2018-06-01",
  "properties": {
    "copy": [
        {
            "name": "activites",
            "count": "[length(variables('datasets'))]",
            "input": {
                "name": "[concat('Copy ', variables('datasets')[copyIndex()])]",
                "type": "Copy"
            }
        },
        {
            "name": "activites",
            "count": "[length(variables('datasets'))]",
            "input": {
                "name": "[concat('Delete ', variables('datasets')[copyIndex()])]",
                "type": "Delete"
            }
        },
    ]
  }
}

理想情况下,这将产生具有以下活动的管道:

这当然行不通,因为我不能拥有两个同名属性“活动”。我也无法将复制输入设置为两个活动,因为它会使 JSON 格式错误。

任何有关如何实现此目的的帮助将不胜感激!

有几种方法可以做到这一点 - 本质上只是通过复制来遍历数组两次...这是一种方法:

    "variables": {
        "datasets": ["foo", "bar", "boo", "far"],
        "bigDataset": "[concat(variables('datasets'), variables('datasets'))]",
        "copy": [
            {
                "name": "activities",
                "count": "[length(variables('bigDataset'))]",
                "input": {
                    "name": "[concat(if(less(copyIndex('activities'), length(variables('datasets'))), 'Copy', 'Delete'), variables('bigDataset')[copyIndex('activities')])]",
                    "type": "[if(less(copyIndex('activities'), length(variables('datasets'))), 'Copy', 'Delete')]"
                }
            }
        ]
    },

然后在您的资源上执行:

"properties": {
  "activities": "[variables('activities')]",
  ...
}

有帮助吗?