web-dev-qa-db-ja.com

ARMテンプレートに条件付きプロパティを含めることは可能ですか?

プロパティ値の条件付き出力を使用するオプションがあることを理解していますが、条件付きプロパティ自体を使用することは可能ですか?たとえば、Microsoft.Compute/VirtualMachineを作成するテンプレートがあり、WindowsとLinuxの両方で同じテンプレートです。しかし、Windowsの場合、Linuxには存在しないプロパティ("licenseType": "Windows_Server")を指定する必要があります。このプロパティがあると、エラーThe property 'LicenseType' cannot be used together with property 'linuxConfiguration'が発生してデプロイメントが失敗します

テンプレートを同じにしたまま、このプロパティをWindowsイメージのみに含めることができるかどうかを確認しようとしていますか?

7

はい、それは可能ですが、ハックです。いくつかのオプション:

  1. 2 VMリソースが異なるプロパティを作成し、1つだけがデプロイされるようにそれらを調整します
  2. ユニオン関数と変数を使用して、結果のオブジェクトを構築する
  3. プロパティを個別のデプロイメントとして追加します(すべてのケースで機能しない場合があります)

2つ目を少し拡張してみましょう。

"variables": {
    "baseObject": {
        "propertyOne": "xxx",
        "propertyTwo": "yyy
    }
    "additionalObject: {
        "optionalProperty": "zzz"
    }
}

そして、あなたのオブジェクトであなたは行うことができます:

"property": "[if(something, variables('baseObject'), # new line for readability
    union(variables('baseObject'), variables('additionalObject') ))]"
6
4c74356b41

これは、前回の回答とコメントに基づいて私がやっていることです

  1. 変数の定義は、Windowsを扱っていますか

"isWindowsOS": "[equals(parameters('ImageReferenceOffer'), 'WindowsServer')]"

  1. VMリソースのプロパティでは、次のように使用します。ネストされたデプロイメントなどは必要ありません。"properties": { "licenseType": "[if(variables('isWindowsOS'), 'Windows_Server', json('null'))]",
3