Alias do Dispositivo de Rede Variável e DSC do PowerShell

4

Eu tenho um conjunto de scripts DSC do Gerenciador de Recursos do Azure que uso para implantar uma nova VM no Azure e torná-la um controlador de domínio para um novo domínio. Eles funcionaram bem por algum tempo, mas agora estão falhando no DSC parte.

Acredito que o problema esteja no alias atribuído à interface de rede da VM. Meu script DSC tem a seguinte seção para alterar as VMs para apontar para si mesmo para o DNS:

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

O problema parece ocorrer porque a interface de rede das máquinas virtuais é realmente criada com um Alias de "Ethernet 2" ou "Ethernet 3", e o alias precisa corresponder. Não há outras placas de rede na VM e, em nenhum momento, adicionei nenhuma. O que torna mais estranho é que, se eu tentar renomear essa interface de rede para "Ethernet", isso me diz que já existe uma interface de rede com esse nome, mesmo que eu não consiga encontrar nenhuma referência a isso.

Assim, para que esse trabalho funcione, eu preciso descobrir por que a interface não está apenas sendo chamada de "Ethernet" ou uma maneira de gravar o script DSC, para que ele possa definir o DNS para a única interface de rede a máquina. Alguma idéia.

Editar:

Isso parece estar relacionado ao fato de que o gerenciador de dispositivos definiu a NIC como adaptador de rede # 2, mas não há adaptador # 1 nem vejo qualquer razão pela qual qualquer um teria sido adicionado durante o processo de implantação. Isso parece ocorrer em todas as VMs nesta implantação (mas apenas quebra o DC).

EuincluíoscriptARMqueeuuseiparacriarissoabaixotambém,ébemdiretodostemplatesdoMSGithub.

{"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')]"
              }
            }
          }
        }
      ]
    },
    
por Sam Cogan 04.09.2015 / 16:12

1 resposta

2

É possível passar variáveis para os parâmetros DSC, permitindo que você use informações dinâmicas, neste caso passando quaisquer suposições do status das interfaces de rede de um host.

por exemplo,

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

Onde a variável $ firstActiveAdapter foi criada com o seguinte.

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

O comando acima puxará o primeiro adaptador da lista de adaptadores instalados por ordem da propriedade de índice da interface.

O comando terá que ser executado no momento em que pelo menos um adaptador de rede estiver presente no sistema, ele ainda não precisa estar ativo na rede para que o comando tenha sucesso.

    
por 06.09.2015 / 07:38