Eu tenho um conjunto de scripts Azure Resource Manager e DSC 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á falhando na parte DSC.
Acredito que o problema esteja relacionado ao alias atribuído à interface de rede da VM. Meu script DSC tem a seguinte seção para alterar as VMs para apontar para si mesmas para 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 esta interface de rede para "Ethernet", ele me diz que já existe uma interface de rede com esse nome, embora eu não consiga encontrar nenhuma referência a isso.
Portanto, para fazer esse trabalho funcionar, preciso descobrir por que a interface não está apenas sendo chamada de "Ethernet" ou uma maneira de escrever o script DSC para que ele possa definir o DNS para a única interface de rede na máquina. Alguma ideia.
Editar:
Isso parece estar relacionado ao fato de que o gerenciador de dispositivos rotulou a NIC como adaptador de rede nº 2, mas não há adaptador nº 1 nem vejo nenhum motivo para que algum tenha sido adicionado durante o processo de implantação. Isso parece ocorrer em todas as VMs nesta implantação (mas apenas interrompe o DC).
Incluí o script ARM que uso para criar isso abaixo também, é praticamente retirado dos modelos 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')]"
}
}
}
}
]
},
É possível passar variáveis para parâmetros DSC, permitindo que você use informações dinâmicas, neste caso, passando quaisquer suposições de status de interface(s) de rede de um host.
por exemplo
Onde a variável $firstActiveAdapter foi criada com o seguinte.
O comando acima obterá 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 seja bem-sucedido.