0

我正在尝试基于几个数组创建几个资源。这些资源之一是一些存储帐户。我在嵌套数组中有这些存储帐户的名称:

"storageAccountArray": [
  "uniqueStringArray0",
  [
    "[toLower(concat(parameters('prefix'), 'vhd0', variables('uniqueSuffixID'), '0'))]",
    "[toLower(concat(parameters('prefix'), 'vhd0', variables('uniqueSuffixID'), '1'))]",
    "[toLower(concat(parameters('prefix'), 'vhd0', variables('uniqueSuffixID'), '2'))]",
    "[toLower(concat(parameters('prefix'), 'vhd0', variables('uniqueSuffixID'), '3'))]",
    "[toLower(concat(parameters('prefix'), 'vhd0', variables('uniqueSuffixID'), '4'))]"
  ],
  "uniqueStringArray1",
  [
    "[toLower(concat(parameters('prefix'), 'vhd1', variables('uniqueSuffixID'), '0'))]",
    "[toLower(concat(parameters('prefix'), 'vhd1', variables('uniqueSuffixID'), '1'))]",
    "[toLower(concat(parameters('prefix'), 'vhd1', variables('uniqueSuffixID'), '2'))]",
    "[toLower(concat(parameters('prefix'), 'vhd1', variables('uniqueSuffixID'), '3'))]",
    "[toLower(concat(parameters('prefix'), 'vhd1', variables('uniqueSuffixID'), '4'))]"
  ],
  "uniqueStringArray2",
  [
    "[toLower(concat(parameters('prefix'), 'vhd2', variables('uniqueSuffixID'), '0'))]",
    "[toLower(concat(parameters('prefix'), 'vhd2', variables('uniqueSuffixID'), '1'))]",
    etc....

我想我可以像这样迭代这个:

{
  "apiVersion": "[variables('storageApiVersion')]",
  "type": "Microsoft.Storage/storageAccounts",
  "name": "[variables('storageAccountArray')[0][copyIndex()]]",
  "location": "[variables('computeLocation')]",
  "copy": {
    "name": "storageLoop0",
    "count": "[variables('saCount0')]"

我将有几个这样的存储帐户资源,都带有一个副本,因此名称将从 0,0 然后 0,1 0,2 等获取,并且在下一个资源上,名称是:

"name": "[variables('storageAccountArray')[1][copyIndex()]]"

所以 1,0 1,1 1,2 等等。

但是,当我尝试部署时收到此错误:

'模板资源 '[variables('storageAccountArray')[0][copyIndex()]]' 无效:无法评估模板语言表达式属性 'Microsoft.WindowsAzure.ResourceStack.Frontdoor.Templates.Expressions.TemplateFunctionExpression' .

根据这样的问题:访问/处理(嵌套)对象、数组或 JSON json 通常可以通过这种方式进行评估。arm 评估模板的方式是否会阻止我这样做?

当我尝试将这些磁盘用作我的虚拟机的操作系统磁盘时,这些磁盘也会循环创建许多虚拟机,我无法添加它们,因为我需要访问嵌套阵列:

 "osDisk": {
          "vhdContainers": [
            "[concat('https://', variables('storageAccountArray')[copyIndex()][0], '.blob.core.windows.net/', parameters('vmStorageAccountContainerNameType0'))]",
            "[concat('https://', variables('storageAccountArray')[copyIndex()][1], '.blob.core.windows.net/', parameters('vmStorageAccountContainerNameType0'))]",
            "[concat('https://', variables('storageAccountArray')[copyIndex()][2], '.blob.core.windows.net/', parameters('vmStorageAccountContainerNameType0'))]",
etc...

我还尝试将嵌套数组拆分为多个,但是当我循环需要自己的存储帐户的 VM 时,我仍然需要增加一个数字,这似乎要求我不能在循环中创建 VM。

我还可以拆分资源以循环到嵌套模板中。我是否能够创建许多都指向同一个外部模板的“Microsoft.Resources/deployments”资源,然后每次都传入不同的数字作为参数以这种方式增加数字?

有任何想法吗?感谢您的时间

4

1 回答 1

1

我认为你的数组语法是错误的,在你的变量声明中试试这个:

"m": [
  [ "a", "b", "c" ],
  [ "1", "2", "3" ]
]

IOW,删除声明中的“uniqueStringArray0”部分,即创建一个数组元素,该元素是字符串而不是数组,因此 [0][0] 无效但 [1][0] 无效。

于 2016-11-03T01:56:41.213 回答