通过 Azure 资源管理器应用多个 DSC

Apply multiple DSCs through Azure Resource Manager

是否可以通过 Azure 资源管理器将多个 DSC 配置应用于一个虚拟机?

目前我正在使用这样的东西:

    {
      "apiVersion": "2015-06-15",
      "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/', variables('vm_name'))]"
      ],
      "location": "[resourceGroup().location]",
      "name": "DSCSetup",
      "properties": {
        "publisher": "Microsoft.Powershell",
        "type": "DSC",
        "typeHandlerVersion": "2.20",
        "autoUpgradeMinorVersion": true,
        "settings": {
          "modulesUrl": "[concat('https://', variables('sa_name'), '.blob.core.windows.net/.../dsc.ps1.zip')]",
          "configurationFunction": "dsc.ps1\Main",
          "properties": {
            "MachineName": "[variables('vm_name')]",
            "UserName": "[parameters('vm_user')]"
          }
        },
        "protectedSettings": {}
      },
      "type": "extensions"
    }

如果没有,能否自动合并多个 DSC?

场景是:

DSC 目前只允许一个配置,因此如果您将 2 个 DSC 扩展部署到同一个 VM(我不确定它是否真的有效),第二个配置将覆盖第一个。

您可能可以堆叠 DSC 和 CustomScript,但由于 DSC 可以 运行 脚本,我不确定您为什么需要这样做...

你的场景是什么?

有一些方法可以解决这个问题,我使用的一种简单而有用的方法是嵌套配置,将所有 DSC 配置混合到一个配置中。

您正在创建没有任何特定节点的配置。然后使用对所需配置进行分组的节点创建配置。

这个简单的例子可以作为我所说内容的指南。有关详细信息,请参阅 [MS 文档]]1

Configuration WindowsUpdate
{
    Import-DscResource -ModuleName PSDesiredStateConfiguration

    Service ModulesInstaller {
        Name = "TrustedInstaller"
        DisplayName = "Windows Modules Installer"
        StartupType = "Disabled"
        State = "Stopped"
    }

}

Configuration ServerManager
{
    Import-DscResource -ModuleName PSDesiredStateConfiguration

    Registry DoNotOpenServerManagerAtLogon {
        Ensure = "Present"
        Key = "HKLM:\SOFTWARE\Microsoft\ServerManager"
        ValueName = "DoNotOpenServerManagerAtLogon"
        ValueData = 1
        DependsOn = "[Registry]NoAutoUpdate"
    }       
}


Configuration VMConfig
{
    Node localhost
    {
        WindowsUpdate NestedConfig1 {}
        
        ServerManager NestedConfig2 {}
    }
}

通过这种方法,我可以很容易地在每个 DSC 分机上调用机器条目配置,它只是我要应用的配置的组合。

"publisher": "Microsoft.Powershell",
"type": "DSC",
"typeHandlerVersion": "2.20",
"configuration": {
    "url": "[concat(parameters('_artifactsLocation'), '/Configuration.zip')]",
    "script": "Configuration.ps1",
    "function": "VMConfig"
}

另一种方法是对同一台机器执行多个 ARM DSC 扩展。这里的技巧是始终使用相同的名称,因为只能执行一个 DSC 扩展。

这种方法的警告是机器上以前的配置会被覆盖。从功能的角度来看,结果可能是相同的,但如果您希望 DSC 本地管理器更正错误的配置,则只能针对最新的配置。