Шаблон Azure ARM - запуск сценария DSC без запуска установки расширения? - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь развернуть лес Active Directory с двумя контроллерами домена.Мне удалось развернуть контроллеры домена и установить функции ADDS на обеих виртуальных машинах.«PDC» имел сценарий DSC, который запускает и настраивает лес, опять же, это прекрасно работает.Проблема, с которой я столкнулся при попытке запустить второй сценарий DSC на втором контроллере домена, этот сценарий запускает конфигурацию ADDS, чтобы преобразовать виртуальную машину в контроллер домена и присоединить ее к лесу.Я создал вложенный шаблон JSON, который вызывается основным шаблоном.Но я сталкиваюсь с этой ошибкой:

"Множественные VMExtensions для обработчика не поддерживаются для типа ОС" Windows ". VMExtension" PrepareBDC "с обработчиком" Microsoft.Powershell.DSC 'уже добавлен или указан во входных данных. "

Я провел последний час или около того, просиживая по интернету в поисках ответов, и все, кажется, говорят одно и то же ... вы не можете установить одно и то же расширение дважды.Хорошо, я понимаю, почему это имеет смысл, мой вопрос заключается в том, могу ли я настроить вложенный шаблон, чтобы он не пытался установить расширение, а просто использовал то, что уже установлено на ВМ?

Основной фрагмент шаблона:

{
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "name": "[concat(variables('dc2name'), '/PrepareDC2AD')]",
    "apiVersion": "2018-06-01",
    "location": "[resourceGroup().location]",
    "dependsOn": [
        "[resourceId('Microsoft.Compute/virtualMachines', variables('dc2name'))]"
    ],
    "properties": {
        "publisher": "Microsoft.Powershell",
        "type": "DSC",
        "typeHandlerVersion": "2.19",
        "autoUpgradeMinorVersion": true,
        "settings": {
            "ModulesUrl": "[concat(parameters('Artifacts Location'), '/dsc/PrepareADBDC.zip', parameters('Artifacts Location SAS Token'))]",
            "ConfigurationFunction": "PrepareADBDC.ps1\\PrepareADBDC",
            "Properties": {
                "DNSServer": "[variables('dc1ipaddress')]"
            }
        }
    }
},
{
    "name": "ConfiguringDC2",
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2016-09-01",
    "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/',variables('dc1name'),'/extensions/CreateADForest')]",
        "[concat('Microsoft.Compute/virtualMachines/',variables('dc2name'),'/extensions/PrepareDC2AD')]"
    ],
    "properties": {
        "mode": "Incremental",
        "templateLink": {
            "uri": "[concat(parameters('Artifacts Location'), '/nestedtemplates/configureADBDC.json', parameters('Artifacts Location SAS Token'))]",
            "contentVersion": "1.0.0.0"
        },
        "parameters": {
            "adBDCVMName": {
                "value": "[variables('dc2name')]"
            },
            "location": {
                "value": "[resourceGroup().location]"
            },
            "adminUsername": {
                "value": "[parameters('Administrator User')]"
            },
            "adminPassword": {
                "value": "[parameters('Administrator Password')]"
            },
            "domainName": {
                "value": "[parameters('Domain Name')]"
            },
            "adBDCConfigurationFunction": {
                "value": "ConfigureADBDC.ps1\\ConfigureADBDC"
            },
            "adBDCConfigurationModulesURL": {
                "value": "[concat(parameters('Artifacts Location'), '/dsc/ConfigureADBDC.zip', parameters('Artifacts Location SAS Token'))]"
            }
        }
    }
},

Вложенный шаблон:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "adBDCVMName": {
            "type": "string"
        },
        "location": {
            "type": "string",
            "defaultValue": "[resourceGroup().location]"
        },
        "adminUsername": {
            "type": "string"
        },
        "adminPassword": {
            "type": "securestring"
        },
        "domainName": {
            "type": "string"
        },
        "adBDCConfigurationFunction": {
            "type": "string"
        },
        "adBDCConfigurationModulesURL": {
            "type": "string"
        }
    },
    "resources": [
        {
            "type": "Microsoft.Compute/virtualMachines/extensions",
            "name": "[concat(parameters('adBDCVMName'),'/PrepareBDC')]",
            "apiVersion": "2016-03-30",
            "location": "[parameters('location')]",
            "properties": {
                "publisher": "Microsoft.Powershell",
                "type": "DSC",
                "typeHandlerVersion": "2.21",
                "autoUpgradeMinorVersion": true,
                "forceUpdateTag": "1.0",
                "settings": {
                    "modulesURL": "[parameters('adBDCConfigurationModulesURL')]",
                    "wmfVersion": "4.0",
                    "configurationFunction": "[parameters('adBDCConfigurationFunction')]",
                    "properties": {
                        "domainName": "[parameters('domainName')]",
                        "adminCreds": {
                            "userName": "[parameters('adminUsername')]",
                            "password": "privateSettingsRef:adminPassword"
                        }
                    }
                },
                "protectedSettings": {
                    "items": {
                        "adminPassword": "[parameters('adminPassword')]"
                    }
                }
            }
        }
    ]
}

1 Ответ

0 голосов
/ 13 марта 2019

эта ошибка в точности означает, что она говорит: у вас не может быть нескольких копий одного и того же расширения, вам нужно применить одно и то же расширение к виртуальной машине, все входные данные должны быть одинаковыми.Вы можете взглянуть на этот пример , который делает именно это.Этот конкретный шаблон устанавливает расширение во второй раз, чтобы присоединить bdc к домену.

Но такой подход мне не нравится.Я использую Powershell DSC, чтобы просто подождать, пока домен не будет создан, и присоединить BDC к домену за один раз.Вы должны использовать этот фрагмент PowerShell DSC:

xWaitForADDomain DscForestWait {
    DomainName           = $DomainName
    DomainUserCredential = $DomainCreds
    RetryCount           = $RetryCount
    RetryIntervalSec     = $RetryIntervalSec
}

Вот полный пример

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