2016-11-02 8 views
0

Ich versuche, mehrere Ressourcen basierend auf ein paar Arrays zu erstellen. Eine dieser Ressourcen sind einige Speicherkonten. Ich habe die Namen dieser Speicherkonten in einem verschachtelten Array:Referenzieren eines Objekts in einem verschachtelten Array in einer Armvorlage

"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.... 

Ich dachte, ich in die Lage wäre, wie dies durch das iterieren:

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

Wo ich mehrere dieses Speicherkonto Ressourcen haben , die alle mit einer Kopie, so der Name von 0,0 dann 0,1 0,2 etc erhält genommen würde, und auf der nächsten Ressource ist der Name:

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

so 1,0 1,1 1, 2 etc.

Allerdings, wenn ich zu implementieren versuchen, erhalte ich diese Fehlermeldung:

'The template resource '[variables('storageAccountArray')[0][copyIndex()]]' is not valid: Template language expression property 'Microsoft.WindowsAzure.ResourceStack.Frontdoor.Templates.Expressions.TemplateFunctionExpression' can't be evaluated.

Nach Fragen wie diese: Access/process (nested) objects, arrays or JSON json normalerweise diese Art und Weise ausgewertet werden kann. Kann der Wegarm die Vorlage nicht auswerten?

Wenn ich versuche, diese Platten als O Platten für meine VMs zu verwenden, die auch geschleift wird immer viele VMs zu schaffen, ich bin nicht in der Lage, um sie hinzuzufügen, als ich brauche Zugriff auf das verschachtelte Array:

"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... 

I Ich habe auch versucht, das geschachtelte Array in viele zu teilen, aber da ich die VM, die ihre eigenen Speicherkonten benötigt, loopen muss, müsste ich immer noch eine Zahl erhöhen, was es erforderlich macht, dass ich die VM nicht in einer Schleife erstellen kann.

Ich könnte auch die Ressource zu einer verschachtelten Vorlage Schleife in Schleife. Könnte ich viele "Microsoft.Resources/Bereitstellungen" -Ressourcen erstellen, die alle auf dieselbe externe Vorlage verweisen, und dann jedes Mal eine andere Zahl als Parameter übergeben, um die Anzahl zu erhöhen?

Irgendwelche Ideen? Vielen Dank für Ihre Zeit

+0

Arm Vorlagen sind ziemlich flach auf die Ausdrücke Teil, ich denke, es würde nicht für eine komplexe Auswertung wie das, tbh – 4c74356b41

Antwort

1

Ich denke, Ihre Array-Syntax falsch ist, versuchen Sie dies in Ihrer Variablendeklaration:

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

IOW, entfernen Sie Ihren „uniqueStringArray0“ Teil Ihrer Erklärung, das ist ein Array-Element zu schaffen, die ist eine Zeichenkette und kein Array, also [0] [0] ist ungültig aber [1] [0] ist nicht.

+0

oh ja, ich erstelle ein anderes Element in der Anordnung. ty –

Verwandte Themen