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

时间:2016-11-16 13:10:28

标签: powershell azure azure-resource-manager powershell-dsc

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

目前我使用的是这样的东西:

struct

如果没有,您可以自动合并多个DSC吗?

情景是:

  • 拥有多个DSC
  • IIS + ASP.Net的一个DSC
  • 创建Site1的一个DSC
  • 创建Site2的另一个DSC
  • 在Dev中将Site1和Site2部署到一台计算机
  • 在生产部署到单独的机器,甚至可能在可用性集......
  • (准备将来使用单独的容器)

2 个答案:

答案 0 :(得分:2)

有一些方法,我使用的一个简单而有用的方法是嵌套配置,将所有DSC配置混合到一个配置中。

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

这个简单的例子可以作为我正在谈论的内容的指南。有关详细信息,请参阅[MS doc]] 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": "FrontEndVM"
}

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

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

答案 1 :(得分:1)

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

你可能会堆叠DSC和CustomScript,但由于DSC可以运行脚本,我不知道为什么你需要这样做...

你的情景是什么?