假设我有一个这样的 site.pp:
class videoServer {
file { '/root/testFile' : ensure => present }
file { '/root/testFile2' : ensure => present }
file { '/root/testFile3' : ensure => present }
}
node s1.example.comf { include videoServer }
node s2.example.comf { include videoServer }
因此我有一个 videoServer 类,其中包含 3 个文件资源和两个包含该类的节点。
我正在尝试找出是否有一种简单的方法来更改资源的属性,甚至完全排除它们。例如,我想在 s2.example.com 节点中排除 /root/testFile2。我会将其确保属性更改为“absent”。但如果它确实存在,那么语法是什么?如果不可能,我应该如何检查该类以使其不那么痛苦?
是的,我可以使用这样的类参数:
class videoServer ( $fileState = present, $fileState2 = present,
$fileState3 = present ) {
...
file { '/root/testFile2' : ensure => $fileState2 }
...
...
node s2.example.com {
class { 'videoServer' : fileState2 = absent }
但这确实很不舒服。也许继承可以在这里有所帮助,但我认为这不是一个好的解决方案。许多节点中唯一的区别可能是缺少一个文件,在这种情况下我认为继承毫无意义。
答案1
我找到了一个解决方案。实际上,我想要实现的目标是使用飞船 <| |>
操作员。
/root/testFile2
因此,如果我只想更改节点的文件的所需状态,s1.example.com
我应该执行以下操作:
class videoServer {
file { '/root/testFile' : ensure => present }
file { '/root/testFile2' : ensure => present }
file { '/root/testFile3' : ensure => present }
}
node s1.example.comf {
include videoServer
File <| title == '/root/testFile2' |> { ensure => absent }
}
node s2.example.comf { include videoServer }
答案2
声明资源定义后,您不能删除它,您是对的,类继承应该谨慎使用
我将使用您的类参数示例和 hiera
node s1.example.comf { include videoServer }
node s2.example.comf { include videoServer }
将 s2.example.com.yaml 设置为
videoServer::fileState2: absent