Назад | Перейти на главную страницу

Шаблон ARM - развертывание виртуальной машины со случайным статическим частным IP-адресом в существующей подсети

Я пытаюсь развернуть новую виртуальную машину со статическим частным IP-адресом, не зная заранее, какой IP-адрес назначен DHCP в Blueprints. Запрос заключается в создании виртуальной машины в существующей подсети. Я использую шаблоны ARM со связанным шаблоном.

Кроме того, я хочу создать логический код для ввода второго октета существующего диапазона IP-адресов (10.xxx.20.4), а остальные октеты поступают из существующей подсети.

Шаблон верхнего уровня:

{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
    "Virtual_Machine_Name": {
        "type": "string"
    },
    "Geo_Name": {
        "type": "string"
    },
    "location": {
        "type": "string",
        "defaultValue": "[resourceGroup().location]",
        "metadata": {
          "description": "Location for all resources."
        }
    },
    "Admin_Password": {
        "type": "securestring",
        "metadata": {
        "description": "Password for the Virtual Machine."
        }
    } 
},
"variables": {
    "Admin_User_Name": "dwsadmin",
    "ResourceGroupName": "[toLower(resourceGroup().name)]",
    "nicName": "[toLower(concat(parameters('virtual_Machine_Name'), '-Nic01'))]",
    "virtualNetworkName": "[concat(parameters('Geo_Name'), '-Vnet')]", 
    "subnetName": "[toLower(concat(parameters('Geo_Name'), '-DomainServices'))]",
    "PrivateIP": "[resourceId(variables('ResourceGroupName'),'Microsoft.Network/networkInterfaces/').ipConfigurations.privateIPAddress]",
    "subnetRef": "[toLower(concat(resourceId(variables('ResourceGroupName'),'Microsoft.Network/virtualNetworks/subnets', variables('virtualNetworkName'), variables('subnetName'))))]",
    "updateip_templateUri": "https://blob.core.windows.net/updateip_templateUri.json"
   },
"resources": [ 
         {
        "apiVersion": "2019-03-01",
        "type": "Microsoft.Compute/virtualMachines",
        "name": "[parameters('virtual_Machine_Name')]",
        "location": "[parameters('location')]",
        "dependsOn": [          
          "[concat('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
        ],
        "properties": {
          "licenseType": "Windows_Server",
          "hardwareProfile": {
            "vmSize": "Standard_D4s_v3"
          },
          "osProfile": {
            "computerName": "[parameters('virtual_Machine_Name')]",
            "adminUsername": "[variables('Admin_User_Name')]",
            "adminPassword": "[parameters('Admin_Password')]",
            "windowsConfiguration": {
              "provisionVMAgent": true,
              "enableAutomaticUpdates": true
          }
          },
          "storageProfile": {
            "imageReference": {
              "publisher": "MicrosoftWindowsServer",
              "offer": "WindowsServer",
              "sku": "2016-Datacenter",
              "version": "latest"
            },
            "osDisk": {
              "createOption": "FromImage"
            },
            "dataDisks": [ ]
          },
          "networkProfile": {
            "networkInterfaces": [
              {
                "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]"
              }
            ]
          }
        }
      },
{
  "apiVersion": "2015-06-15",
  "type": "Microsoft.Network/networkInterfaces",
  "name": "[variables('nicName')]",
  "location": "[resourceGroup().location]",
  "dependsOn": [
    "[variables('virtualNetworkName')]"
  ],
  "properties": {
    "ipConfigurations": [
      {
        "name": "ipconfig1",
        "properties": {
          "privateIPAllocationMethod": "Dynamic",
          "privateIPAddress": "[variables('PrivateIP')]",
          "subnet": {
            "id": "[variables('SubnetRef')]"
          }
        }
      }
    ]
  }
},    
{
  "type": "Microsoft.Resources/deployments",
  "name": "[concat('updateip')]",
  "apiVersion": "2015-01-01",
  "dependsOn": [
    "[concat('Microsoft.Network/networkInterfaces/', variables('nicName'))]",
    "[reference(concat('Microsoft.Network/virtualNetworks/', variables('VirtualNetworkName'))).addressSpace.addressPrefixes]"
  ],
  "properties": {
    "mode": "Incremental",
    "templateLink": {
      "uri": "[variables('updateip_templateUri')]",
      "contentVersion": "1.0.0.0"
    },
    "parameters": {
        "location": {
            "value":"[parameters('location')]"
        },
      "virtualNetwork": {
          "value": "[reference(concat(resourceId(variables('ResourceGroupName'),'Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))).addressSpace.addressPrefixes)]"
      },
      "nicName": {
        "value": "[reference(concat(resourceId(variables('ResourceGroupName'),'Microsoft.Network/networkInterfaces/', variables('nicName'))))]"
      },
      "SubnetRef": {
        "value": "[toLower(concat(resourceId(variables('ResourceGroupName'),'Microsoft.Network/virtualNetworks/subnets', variables('virtualNetworkName'), variables('subnetName'))))]"
      },
      "privateIp": {
        "value": "[reference(concat(resourceId(variables('ResourceGroupName'),'Microsoft.Network/networkInterfaces/', variables('nicName')).ipConfigurations[0].properties.privateIPAddress))]"
      }
    }
  }
}

], "выходы": {"privateIp": {"тип": "строка", "значение": "[ссылка (переменные ('nicName')). ipConfigurations [0] .properties.privateIPAddress]"}}}

Связанный шаблон для обновления сетевой карты:

{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
    "nicName": {
        "type": "string"
    },
    "privateIP": {
        "type": "string"
    },
    "SubnetRef": {
        "type": "string"
    },
    "location": {
        "type": "string",
        "defaultValue": "[resourceGroup().location]",
        "metadata": {
          "description": "Location for all resources."
        }
      }

},
"variables": {},
"resources": [
{
  "type": "Microsoft.Network/networkInterfaces",
  "name": "[parameters('nicName')]",
  "apiVersion": "2015-06-15",
  "location": "[parameters('location')]",

  "dependsOn": [
  ],
  "properties": {
    "ipConfigurations": [
      {
        "name": "ipconfig1",
        "properties": {
          "privateIPAllocationMethod": "Static",
          "privateIPAddress": "[parameters('privateIp')]",
          "subnet": {
            "id": "[parameters('SubnetRef')]"
          }
        }
      }
    ]
  }
}
]

}

Когда я его развертываю, у него есть эта ошибка:

Не удалось развернуть артефакт f59897fe-175a-4018-a615-4ca01278adc5 типа Template. Ошибка проверки шаблона развертывания: «Переменная шаблона« PrivateIP »недействительна: невозможно оценить функцию языка шаблона« resourceId »: для типа« Microsoft.Network/networkInterfaces »требуется аргумент (ы) имени ресурса« 1 ». Посмотри пожалуйста https://aka.ms/arm-template-expressions/#resourceid для подробностей использования .. См. https://aka.ms/arm-template-expressions для подробностей использования. '.