У меня есть набор сценариев 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 нет, и я не вижу причин, по которым какой-либо из них был бы добавлен в процессе развертывания. Похоже, это происходит на всех виртуальных машинах в этом развертывании (но это только нарушает работу контроллера домена).
Я также включил сценарий 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')]"
}
}
}
}
]
},
В параметры 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
Приведенная выше команда извлечет первый адаптер из списка установленных адаптеров в порядке значения свойства index интерфейса.
Команду необходимо запускать в то время, когда в системе присутствует хотя бы один сетевой адаптер, он еще не должен быть активным в сети для успешного выполнения команды.