JSON для шифрования vms в цикле шаблона ARM - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть шаблон JSON ARM, который создает несколько vms через цикл, я подумал, что я мог бы добавить encryptvm в конце цикла, и он зашифровывал бы все диски.

Однако он продолжает работать со страннымошибка

Полный JSON здесь: https://pastebin.com/embed_iframe/Lxmb7Y42

Я использовал оба эти параметра.

, parameters('VMNames'), copyIndex(1))]",

и

, parameters('VMNames'))]"

, нони один из них, похоже, не работает.

Все, что я делаю, по сути, добавляет следующий раздел ресурсов в:

      "resources": [
    {
      "name": "[concat(parameters('VMNames'),'UpdateEncryptionSettings)']",
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2015-01-01",
      "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/', parameters('VMNames'))]"
      ],
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "uri": "[concat(parameters('_artifactsLocation'),'/nestedtemplates/encryptVm.json',parameters('_artifactsLocationSasToken'))]",
          "contentVersion": "1.0.0.0"
        },
        "parameters": {
          "vmName": {
            "value": "[parameters('VMNames')]"
          },
          "aadClientID": {
            "value": "[parameters('aadClientID')]"
          },
          "aadClientSecret": {
            "value": "[parameters('aadClientSecret')]"
          },
          "keyVaultName": {
            "value": "[parameters('keyVaultName')]"
          },
          "keyVaultResourceGroup": {
            "value": "[parameters('keyVaultResourceGroup')]"
          },
          "useExistingKek": {
            "value": "[parameters('useExistingKek')]"
          },
          "keyEncryptionKeyURL": {
            "value": "[parameters('keyEncryptionKeyURL')]"
          },
          "_artifactsLocation": {
            "value": "[parameters('_artifactsLocation')]"
          },
          "_artifactsLocationSasToken": {
            "value": "[parameters('_artifactsLocationSasToken')]"
          }
        }
      }
    },
    {
      "apiVersion": "2017-05-10",
      "name": "[concat(parameters('VMNames'),'recoveryServicesVault')]",
      "type": "Microsoft.Resources/deployments",
      "resourceGroup": "[parameters('recoveryServicesVaultResourceGroup')]",
      "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/', parameters('VMNames'))]"
       // "[resourceId('Microsoft.Resources/deployments/', concat(parameters('VMNames'), copyIndex(1),'UpdateEncryptionSettings'))]"
      ],
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              "name": "[concat(parameters('recoveryServicesVaultName'), '/', 'Azure', '/', variables('rsvV2vm'), resourceGroup().name, ';', parameters('VMNames'))]",
              "apiVersion": "2017-07-01",
              "type": "Microsoft.RecoveryServices/vaults/backupFabrics/backupProtectionIntent",
              "properties": {
                "friendlyName": "[concat(parameters('VMNames'), copyIndex(1), 'BackupIntent')]",
                "protectionIntentItemType": "AzureResourceItem",
                "policyId": "[resourceId(parameters('recoveryServicesVaultResourceGroup'), 'Microsoft.RecoveryServices/vaults/backupPolicies', parameters('recoveryServicesVaultName'), parameters('recoveryServicesVaultBackupPolicyName'))]",
                "sourceResourceId": "[resourceId(resourceGroup().name, 'Microsoft.Compute/virtualMachines', parameters('VMNames'))]"
              }
            }
          ]
        }
      }
    }
  ]

Не могу понять, где я иду не так.Может быть, я добавил его не в том месте, но проверяю инструменты валидатора JSON онлайн, и все выглядит нормально.

1 Ответ

0 голосов
/ 28 декабря 2018

этот шаблон объясняется тем, что вы определяете свое развертывание один раз для каждого виртуального компьютера, но вы присваиваете каждому развертыванию одно и то же имя:

"name": "[concat(parameters('VMNames'),'UpdateEncryptionSettings')]",
"type": "Microsoft.Resources/deployments",

вам необходимо добавить функцию copyIndex() к этому имени

...