2016-11-02 24 views
0

いくつかの配列に基づいていくつかのリソースを作成しようとしています。これらのリソースの1つに、いくつかのストレージアカウントがあります。私は、ネストされた配列内のこれらのストレージアカウントの名前を持つ:アームテンプレート内のネストされた配列のオブジェクトを参照する

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

私が展開しようとしたときしかし、私はこのエラーが表示されます。

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

このような質問によると:Access/process (nested) objects, arrays or JSON JSONは、通常、この方法で評価することができます。腕がテンプレートを評価する方法は私にこれをさせないようにしていますか?

私も多くの仮想マシンを作成するために、ループなっている私のVMのOSディスク、これらのディスクを使用しようとすると、私はネストされた配列へのアクセスを必要として、私はそれらを追加することができません:私は

"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をループしているため、1つの数値を増やす必要があります。これはループでVMを作成できないように思われます。

また、ネストされたテンプレートにループするようにリソースを分割することもできます。私は、同じ外部テンプレートを指すすべての "Microsoft.Resources/deployments"リソースを作成して、毎回別の番号をパラメータとして渡してその数を増やすことができますか?

アイデア?

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

IOW、ある配列要素を作成していますあなたの宣言のあなたの「uniqueStringArray0」の部分を、削除します。私はあなたの変数宣言でこれを試してみてください、あなたの配列の構文が間違っていると思う、あなたの時間

+0

アームのテンプレートは表現の部分がかなり浅いので、そのような複雑な評価ができないと思います。 – 4c74356b41

答えて

1

いただき、ありがとうございます文字列で配列ではないので、[0] [0]は無効ですが[1] [0]は無効です。

+0

ああ、私は配列に別のアイテムを作成しています。タイ –

関連する問題