通过 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
- 一个用于 IIS 的 DSC + ASP.Net
- 一个 DSC 来创建 Site1
- 创建 Site2 的另一个 DSC
- 在 Dev 中将 Site1 和 Site2 部署到一台机器上
- 在生产中部署到单独的机器,甚至可能在可用性集中...
- (做好以后使用独立容器的准备)
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 本地管理器更正错误的配置,则只能针对最新的配置。
是否可以通过 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 的 DSC + ASP.Net
- 一个 DSC 来创建 Site1
- 创建 Site2 的另一个 DSC
- 在 Dev 中将 Site1 和 Site2 部署到一台机器上
- 在生产中部署到单独的机器,甚至可能在可用性集中...
- (做好以后使用独立容器的准备)
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 本地管理器更正错误的配置,则只能针对最新的配置。