1

是否可以通过 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
  • 一台用于 IIS + ASP.Net 的 DSC
  • 一个 DSC 创建 Site1
  • 另一个创建 Site2 的 DSC
  • 在 Dev 中将 Site1 和 Site2 部署到一台机器上
  • 在生产中部署到单独的机器,甚至可能在可用性集中......
  • (准备将来使用单独的容器)
4

2 回答 2

3

有一些方法可以解决这个问题,我使用的一种简单而有用的方法是嵌套配置,可以将所有 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": "VMConfig"
}

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

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

于 2017-10-17T14:18:41.147 回答
1

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

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

你的场景是什么?

于 2016-11-17T03:37:14.023 回答