在Windows PowerShell所需状态配置中,可以定义功能:
Node $MachineName {
# define the IIS Role
WindowsFeature IIS {
Name = “Web-Server”
}
# define the SQL Role
WindowsFeature SQL {
Name = “SQL-Server”
}
# require ASP.NET 4.5
WindowsFeature ASP {
Ensure = “Present”
Name = “Web-Asp-Net45”
DependsOn = "[WindowsFeature]IIS"
}
}
使用此设置,不仅可以安装ASP
,还可以安装IIS
和SQL
功能。我能理解IIS
功能,因为ASP
取决于此。但SQL
功能未定义为"呈现",并且另一个"呈现"功能不需要此功能。
是否可以定义这些基本功能(作为一种存储库)但只安装所需的功能?
是和否。
首先,我想指出的是,DependsOn
告诉DSC哪个顺序做事,这大约是DSC的理解。它只是让您决定某些资源需要在一个或多个其他资源之后执行。
省略Ensure = 'Present'
,如果它有效,可能只是默认为'Present'
;没有办法将资源放在那里(没有额外的代码),它不会被执行。
我不确定您所说的"存储库"是什么意思,除非您只是想将其存在于Configuration {}
块中以供将来参考或使用。
我所说的"附加代码"是指,当您从此脚本生成配置时,您可以控制使用哪些资源。
退后一步,您拥有的代码块有一个配置脚本,您必须执行该脚本才能生成 MOF 文件,然后该文件将是应用于节点的实际内容。
该脚本实际上是 powershell,因此你可以应用逻辑来应用此时(生成 MOF 时)应用的内容。但是,这发生在生成 MOF 的计算机上下文中,而不是在目标节点上,因此不能使用任何需要在配置应用程序时在目标上运行代码的逻辑。
DSC有一些内置的东西来促进这一点,通过使用-ConfigurationData
参数和自动变量,如$AllNodes
和$Node
。
我想在这里放一些代码,而不仅仅是链接和解释,但你真的需要全面了解这些部分在何时何地组合在一起。
我认为最重要的要点是:
- 你编写的配置(如代码块中所示)是 Powershell 代码,因此可以使用逻辑来确定将哪些资源应用于哪个节点。 配置
- 的执行通常在目标节点启动或配置之前在非目标节点的计算机上进行,因此请考虑执行上下文。
- 看看
-ConfigurationData
在Microsoft的例子中的使用方式。
看看这些:
- 分离配置和环境数据
- 在PowerShell DSC中分离"什么"和"位置"
- 所需状态配置中的自动变量