覆盖 Puppet 类中的资源

覆盖 Puppet 类中的资源

假设我有一个这样的 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

相关内容