【问题标题】:Apply multiple DSCs through Azure Resource Manager通过 Azure 资源管理器应用多个 DSC
【发布时间】:2017-03-30 16:52:49
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    有一些方法可以解决这个问题,我使用的一种简单而有用的方法是嵌套配置,将所有 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 本地管理器更正错误的配置,则只能针对最新的配置。

    【讨论】:

    • 您的意思是打电话给VMConfig 而不是FrontEndVM?在您的示例中没有要调用的 FrontEndVM 配置。
    • FrontEndVM 是一个函数,它引用了一个服务器所需的所有资源,我从我使用的复杂设置中复制了这个示例,但我引用了错误的函数。感谢收看这个
    【解决方案2】:

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

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

    你的方案是什么?

    【讨论】:

    • 我想通过“功能”来分隔 DSC,所以一个是 IIS + ASP.NET,接下来将创建 IIS 网站。然后我可以为两个 VM 重用相同的 IIS + ASP.NET DSC,并为两个 IIS 网站简单地扩展它们。顺便说一句:不允许应用多个 DSC 扩展,我尝试过...
    • 嗯...我想进一步了解您的情况,我认为这是有道理的,尽管我无法理解它。如果您想聊天,请给我发电子邮件 - bmoore @ microsoft...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2019-01-26
    • 1970-01-01
    相关资源
    最近更新 更多