Псевдоним переменного сетевого устройства и PowerShell DSC

У меня есть набор сценариев Azure Resource Manager и DSC, которые я использую для развертывания новой виртуальной машины в Azure и затем превращения ее в контроллер домена для нового домена. В течение некоторого времени они работали нормально, но теперь происходит сбой в части DSC.

Я считаю, что проблема связана с псевдонимом, назначенным сетевому интерфейсу виртуальной машины. В моем сценарии DSC есть следующий раздел, чтобы изменить виртуальные машины, чтобы они указывали на себя для DNS:

  xDnsServerAddress DnsServerAddress 
        { 
            Address        = '127.0.0.1' 
            InterfaceAlias = 'Ethernet'
            AddressFamily  = 'IPv4'
        }

Кажется, проблема возникает из-за того, что сетевой интерфейс виртуальных машин фактически создается с псевдонимом "Ethernet 2" или "Ethernet 3", и псевдоним должен совпадать. В ВМ нет других сетевых карт, и я ни в коем случае не добавил их. Что делает его более странным, так это то, что если я попытаюсь переименовать этот сетевой интерфейс в "Ethernet", он скажет, что сетевой интерфейс с таким именем уже существует, хотя я не могу найти ссылку на это.

Итак, чтобы заставить эту работу работать, мне нужно либо выяснить, почему интерфейс не просто называется "Ethernet", либо как написать сценарий DSC, чтобы он мог установить DNS для единственного сетевого интерфейса на машине. Есть идеи.

Редактировать:

Похоже, это связано с тем, что диспетчер устройств включил сетевой адаптер в качестве сетевого адаптера № 2, но нет адаптера № 1, и я не вижу причин, по которым они могли бы быть добавлены в процессе развертывания. Кажется, что это происходит на всех виртуальных машинах в этом развертывании (но это только нарушает DC).

Я включил скрипт ARM, который я использую для создания этого ниже, он в значительной степени взят из шаблонов MS Github.

{
      "apiVersion": "2015-05-01-preview",
      "type": "Microsoft.Network/networkInterfaces",
      "name": "dc-nif",
      "location": "[resourceGroup().location]",
      "dependsOn": [
        "Microsoft.Network/virtualNetworks/vnet"
      ],
      "properties": {
        "ipConfigurations": [
          {
            "name": "ipconfig",
            "properties": {
              "privateIPAllocationMethod": "Static",
              "privateIPAddress": "[variables('dnsServerPrivateIp')]",
              "subnet": {
                "id": "[variables('BackEndSubnet-id')]"
              }
            }
          }
        ]
      }
    },

    {
      "apiVersion": "2015-05-01-preview",
      "type": "Microsoft.Compute/virtualMachines",
      "name": "dc-vm",
      "location": "[resourceGroup().location]",
      "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts',parameters('newStorageAccountName'))]",
        "[resourceId('Microsoft.Network/networkInterfaces','dc-nif')]"
      ],
      "properties": {
        "hardwareProfile": {
          "vmSize": "Standard_A2"
        },
        "osProfile": {
          "computername": "dc",
          "adminUsername": "[parameters('adminUsername')]",
          "adminPassword": "[parameters('adminPassword')]"
        },
        "storageProfile": {
          "imageReference": {
            "publisher": "[variables('imagePublisher')]",
            "offer": "[variables('imageOffer')]",
            "sku": "[variables('imageSku')]",
            "version": "latest"
          },
          "osDisk": {
            "name": "osdisk",
            "vhd": {
              "uri": "[concat('http://',parameters('newStorageAccountName'),'.blob.core.windows.net/vhds/dc-vm-os-disk.vhd')]"
            },
            "caching": "ReadWrite",
            "createOption": "FromImage"
          },
          "dataDisks": [
            {
              "name": "dc-vm-data-disk",
              "vhd": {
                "Uri": "[concat('http://',parameters('newStorageAccountName'),'.blob.core.windows.net/vhds/dc-vm-data-disk.vhd')]"
              },
              "caching": "None",
              "createOption": "Empty",
              "diskSizeGB": "100",
              "lun": 0
            }
          ]
        },
        "networkProfile": {
          "networkInterfaces": [
            {
              "id": "[resourceId('Microsoft.Network/networkInterfaces','dc-nif')]"
            }
          ]
        }
      },
      "resources": [
        {
          "type": "Microsoft.Compute/virtualMachines/extensions",
          "name": "dc-vm/createadforest",
          "apiVersion": "2015-05-01-preview",
          "location": "[resourceGroup().location]",
          "dependsOn": [
            "[resourceId('Microsoft.Compute/virtualMachines', 'dc-vm')]"
          ],
          "properties": {
            "publisher": "Microsoft.Powershell",
            "type": "DSC",
            "typeHandlerVersion": "1.10",
            "settings": {
              "ModulesUrl": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/active-directory-new-domain/CreateADPDC.ps1.zip",
              "ConfigurationFunction": "CreateADPDC.ps1\\CreateADPDC",
              "Properties": {
                "DomainName": "[parameters('domainName')]",
                "AdminCreds": {
                  "UserName": "[parameters('adminUsername')]",
                  "Password": "PrivateSettingsRef:AdminPassword"
                }
              }
            },
            "protectedSettings": {
              "Items": {
                "AdminPassword": "[parameters('adminPassword')]"
              }
            }
          }
        }
      ]
    },

1 ответ

Решение

Можно передавать переменные в параметры DSC, позволяя вам использовать динамическую информацию, в этом случае передавая любые предположения о состоянии сетевого интерфейса (ов) хоста.

например

 xDnsServerAddress DnsServerAddress
    { 
        Address        = '127.0.0.1' 
        InterfaceAlias = $firstActiveAdapter.InterfaceAlias
        AddressFamily  = 'IPv4'
    }

Где переменная $ firstActiveAdapter была создана со следующим.

$firstActiveAdapter = Get-NetAdapter -InterfaceDescription "Microsoft Hyper-V Network Adapter*" | Sort-Object -Property ifIndex | Select-Object -First 1

Приведенная выше команда извлечет первый адаптер из списка установленных адаптеров по порядку свойства индекса интерфейса.

Команду необходимо будет выполнить в тот момент, когда в системе присутствует хотя бы один сетевой адаптер, но для того, чтобы команда была выполнена, она еще не должна быть активной в сети.

Другие вопросы по тегам