我有一组 Azure 资源管理器和 DSC 脚本,用于将新 VM 部署到 Azure,然后使其成为新域的域控制器,这些脚本已经运行了一段时间,但现在 DSC 部分失败了。
我认为问题出在分配给虚拟机网络接口的别名上。我的 DSC 脚本有以下部分,用于将虚拟机更改为指向其自身的 DNS:
xDnsServerAddress DnsServerAddress
{
Address = '127.0.0.1'
InterfaceAlias = 'Ethernet'
AddressFamily = 'IPv4'
}
出现此问题的原因似乎是虚拟机网络接口实际上是使用“以太网 2”或“以太网 3”的别名创建的,并且别名需要匹配。虚拟机中没有其他网卡,我从未添加过任何网卡。更奇怪的是,如果我尝试将此网络接口重命名为“以太网”,它会告诉我已经有一个同名的网络接口,尽管我找不到对此的任何引用。
因此,为了使这项工作顺利进行,我需要找出为什么接口不只是被命名为“以太网”,或者找到编写 DSC 脚本的方法,以便它可以为机器上唯一的网络接口设置 DNS。有什么想法吗?
编辑:
这似乎与设备管理器已将 NIC 标记为网络适配器 #2 有关,但没有适配器 #1,我看不出在部署过程中添加任何适配器的任何理由。这似乎发生在此部署中的所有 VM 上(但它只会破坏 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
上述命令将按照接口索引属性的顺序从已安装适配器列表中提取第一个适配器。
该命令必须在系统上至少有一个网络适配器时运行,无需在网络上处于活动状态即可使命令成功执行。