Как использовать один шаблон ARM для Windows и Linux

Я пытаюсь использовать один шаблон ARM для развертывания виртуальных машин Windows и Linux в Azure. В настоящее время я могу успешно развернуть оба, за исключением того, что я не могу использовать дополнительные конфигурации для каждого без получения ошибки в Visual Studio. Когда я выбираю вариант сборки виртуальной машины Windows, возникает ошибка, связанная с конфигурацией Linux, и мне нужно удалить всю эту строку.

"linuxConfiguration": {
                "disablePasswordAuthentication": "true",
                "ssh": {
                  "publicKeys": [
                    {
                      "path": "[concat('/home/', parameters('adminUsername'), '/.ssh/authorized_keys')]",
                      "keyData": "REMOVED"
                    }
                  ]
                }

В StorageProfile я застрял только со ссылкой на идентификатор. Есть ли способ не ставить ID каждый раз?

"storageProfile": {
              "imageReference": {
                "id": "/subscriptions/91dc1292-e7af-4ae6-807f-aa5b88bf3b79/resourceGroups/DVOPS_DEV_ResourceGroup/providers/Microsoft.Compute/images/Rhel7singleDisk"
              },

Фрагмент КОДА ниже

        {
          "apiVersion": "2017-03-30",
          "type": "Microsoft.Compute/virtualMachines",
          "name": "[variables('vmName')]",
          "location": "[resourceGroup().location]",
          "dependsOn": [
            "[concat('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
          ],
          "properties": {
            "hardwareProfile": {
              "vmSize": "[parameters('vmSize')]"
            },
            "osProfile": {
              "computerName": "[parameters('customVmName')]",
              "adminUsername": "[parameters('adminUsername')]",
              "adminPassword": "[parameters('adminPassword')]",
              "linuxConfiguration": {
                "disablePasswordAuthentication": "true",
                "ssh": {
                  "publicKeys": [
                    {
                      "path": "[concat('/home/', parameters('adminUsername'), '/.ssh/authorized_keys')]",
                      "keyData": "REMOVED"
                    }
                  ]
                }
              }
            },
/// HOW TO FIX THE STORAGE PROFILE 
            "storageProfile": {
              "imageReference": {
                "id": "/subscriptions/91dc1292-e7af-4ae6-807f-aa5b88bf3b79/resourceGroups/DVOPS_DEV_ResourceGroup/providers/Microsoft.Compute/images/Rhel7singleDisk"
              },
              "osDisk": {
                "name": "[concat(parameters('customVmName'),'-os')]",
                "createOption": "FromImage",
                "managedDisk": {
                  "storageAccountType": "[parameters('diskStorageType')]"
                }
              },
              "dataDisks": [
                {
                  "name": "[concat(parameters('customVmName'),'-dataDisk-0')]",
                  "lun": 0,
                  "diskSizeGB": 1023,
                  "createOption": "Empty",
                  "managedDisk": {
                    "storageAccountType": "[parameters('diskStorageType')]"
                  }
                }
              ]
            },

person bonafide    schedule 20.04.2018    source источник


Ответы (1)


Вы можете использовать переменную, чтобы содержать блок JSON, это часть того, как я выполняю выбор Windows/Linux.

"variables": {
    "Ubuntu": {
        "publisher": "Canonical",
        "offer": "UbuntuServer",
        "sku": "16.04-LTS",
        "version": "latest"
    },
    "Windows": {
        "publisher": "MicrosoftWindowsServer",
        "offer": "WindowsServer",
        "sku": "2016-Datacenter-with-Containers",
        "version": "latest"
    },
    "imageReference": "[variables('Ubuntu')]"
},

"storageProfile": {
    "imageReference": "[variables('imageReference')]",

    },

Таким образом, вы можете создавать столько фрагментов JSON, сколько вам нужно, и заменять их там, где это необходимо.

person Michael B    schedule 21.04.2018