1

私は条件付きでcopyIndexループ内のランタイムリソースのプロパティの翻訳を使用して、リソースのプロパティ値を提供しようとしています。..ARMエラー:展開時にテンプレートのリソースは、リソースを()を使用して、見つからない、copyIndex()

次のARMテンプレート、私はエラーが表示されます。

Unable to process template language expressions for resource '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/virtualMachines/{vm-name}/extensions/Microsoft.EnterpriseCloud.Monitoring' at line '30' and column '10'. 'The template resource '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/virtualMachines/{vm-name}' is not found.' (Code: InvalidTemplate)

"type": "[variables('extensionType')[reference(concat('Microsoft.Compute/virtualMachines/', parameters('virtualMachines')[copyIndex()].name)).storageProfile.osDisk.osType]]", 

しかし、VMは、それが提供するIDに存在しているので、エンジンがそれを見つけることができないという意味がありません。エクステンションタイプをハードコードすると、エラーはなく、拡張機能は同じIDを持つVMにインストールされます。

これはARM内のバグである場合は、私はちょうど何か間違ったことをやっている場合は残念ながら、私は知らない...

{ 
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", 
    "contentVersion": "1.0.0.0", 
    "parameters": { 
     "workspaceResourceId": { "type": "string" }, 
     "virtualMachines": { "type": "array" } 
    }, 
    "variables": { 
     "extensionType": { 
     "Windows": "MicrosoftMonitoringAgent", 
     "Linux": "OmsAgentForLinux" 
     } 
    }, 
    "resources": [ 
     { 
     "copy": { 
      "name": "VMMonitoringExtensionsCopy", 
      "count": "[length(parameters('virtualMachines'))]" 
     }, 
     "type": "Microsoft.Compute/virtualMachines/extensions", 
     "apiVersion": "2015-05-01-preview", 
     "location": "[parameters('virtualMachines')[copyIndex()].location]", 
     "name": "[concat(parameters('virtualMachines')[copyIndex()].name, '/Microsoft.EnterpriseCloud.Monitoring')]", 
     "properties": { 
      "publisher": "Microsoft.EnterpriseCloud.Monitoring", 
      "type": "[variables('extensionType')[reference(concat('Microsoft.Compute/virtualMachines/', parameters('virtualMachines')[copyIndex()].name)).storageProfile.osDisk.osType]]", 
      "typeHandlerVersion": "1.0", 
      "autoUpgradeMinorVersion": true, 
      "settings": { 
      "workspaceId": "[reference(parameters('workspaceResourceId'), '2015-11-01-preview').customerId]" 
      }, 
      "protectedSettings": { 
      "workspaceKey": "[listKeys(parameters('workspaceResourceId'), '2015-11-01-preview').primarySharedKey]" 
      } 
     } 
     } 
    ] 
} 

virtualMachinesためで渡されるオブジェクト配列は次のようになります。

あなたが試すことができます
[ 
    { "name": "vm-name", "location": "azure-region" } 
] 
+0

変更Microsoft.ComputeからMicrosoft.ClassicCompute –

+0

これらはv1リソースではありません – JoeBrockhaus

答えて

0

カップルの事:

1)VMを仮定は、参照機能で「フル」RESOURCEIDを使用してみてください同じテンプレートで定義されていません。このドキュメントの最後の例を参照してください: https://azure.microsoft.com/en-us/documentation/articles/resource-group-template-functions/#reference - エラーが既にフルRESOURCEIDを知っているように思えるが、それは

2を試してみる価値だ)他の思考は、基準関数が実行時に評価され、リソースプロバイダが」doesnのことです表現のようなものだが、それはスワッグだ。

もう少し掘り下げて、これを釘付けにすることができないかどうかを確認します。

+0

すでにresourceId()を使用して#1を試みましたが、同じエラーが発生しました。私はこのヘルパーテンプレートを公にホストする必要はないが、これを達成するためにリンクされた '関数'テンプレート( '' resources ':[] ')をうまく使うことができます。 – JoeBrockhaus

+0

一般的に言えば、 'parameter ['property-name']'インデックスの作成は、javascriptに基づいていることを前提としていたことを除いて動作しませんでした。うまくいけば、これは意図的な機能であり、あまり一般的に使用されていない機能のための端的なケースです。 – JoeBrockhaus

+0

ok、re:パブリックの場所でテンプレートをホストする、あなたはそれを保護することができますオプションとしてsasTokenを介して。このレポには、そのような外観のサンプルがあります(ネストされたテンプレートの例を参照してください)。それが役に立たない場合は、https://github.com/bmoore-msft/AzureRM-Samplesマイクロソフトでbmooreに電子メールを送ってください。私たちはそれを話すことができます。 –

関連する問題