假设我有一个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 }
所以我有一个类文件的资源和两个节点,其中包括这个类3 videoServer。
我试图找出是否有一个简单的方法来改变资源的属性,甚至完全排除它们。 例如,我想排除s2.example.com节点中的/ root / testFile2。 我会改变它的确保属性为'缺席'。 但是,如果它确实存在,那么这个语法是什么? 如果这是不可能的,我应该如何回顾课程,使其不那么痛苦?
是的,我可以使用这样的类参数:
class videoServer ( $fileState = present, $fileState2 = present, $fileState3 = present ) { ... file { '/root/testFile2' : ensure => $fileState2 } ... ... node s2.example.com { class { 'videoServer' : fileState2 = absent }
但这真的很不舒服。 也许inheritance可以在这里帮助,但我不认为这是一个很好的解决scheme。 在许多节点中唯一的区别可能是缺less一个文件,在这种情况下我没有看到inheritance。
声明后你不能删除一个资源定义,而你说得对, 应该非常谨慎地使用类inheritance
我会用你的类参数的例子与hiera
node s1.example.comf { include videoServer } node s2.example.comf { include videoServer }
将s2.example.com.yaml设置为
videoServer::fileState2: absent
我find了解决scheme。 其实我想用太空船 <| |>来完成 <| |>运算符。
所以,如果我想只为s1.example.com节点更改所需的/root/testFile2文件的状态,我应该这样做:
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 }