基于hiera查找和if-else的Puppet服务属性。这是一个愚蠢的新手错误吗?
我想根据hiera查找修改服务属性。到目前为止,我已经尝试了以下方法,得到了一个无效值“$foo::params::foo_sure”有效值已停止并正在运行。如果这是一种糟糕的方法,那么您有什么建议基于hiera查找和if-else的Puppet服务属性。这是一个愚蠢的新手错误吗?,puppet,hiera,Puppet,Hiera,我想根据hiera查找修改服务属性。到目前为止,我已经尝试了以下方法,得到了一个无效值“$foo::params::foo_sure”有效值已停止并正在运行。如果这是一种糟糕的方法,那么您有什么建议 class foo::params { $manage_foo = hiera('foo::active', false) if $manage_foo { $foo_enable = true $foo_ensure = 'running' } else
class foo::params {
$manage_foo = hiera('foo::active', false)
if $manage_foo {
$foo_enable = true
$foo_ensure = 'running'
}
else {
$foo_enable = false
$foo_ensure = 'stopped'
}
}
非常感谢一位木偶新手!你是在单引号中引用变量。使用单引号时不会进行变量插值。你基本上是在说:
确保
字面意思是=
字符串$foo::params::foo\u确保
及
enable
字面意思是=
字符串$foo::params::foo\u enable
它应该如下所示:
class foo {
include foo::params
service { 'foo':
ensure => $foo::params::foo_ensure,
enable => $foo::params::foo_enable
}
}
此处不需要任何引号,因为您没有执行任何字符串插值。如果确实要使用引号,则应使用双引号:
ensure => "${foo::params::foo_ensure}",
enable => "${foo::params::foo_enable}"
看看
另一件值得注意的事。include foo::params
在这里是不需要的。params
类中没有资源。一个常见的模式是基类从params
继承
params.pp
init.pp
然后,您可以取消hiera('foo::active',false)
,只需使用hiera覆盖默认值,如下所示:
foo::enable: true
foo::ensure: 'running'
这可以通过完全取消params
类并在主类中提供默认值来进一步简化
init.pp(不带参数)
上面的类将使用与上面的示例相同的hiera
数据
class foo::params {
$foo_enable = false
$foo_ensure = 'stopped'
}
class foo (
$ensure = $foo::params::foo_ensure,
$enable = $foo::params::foo_enable
) inherits foo::params {
service { 'foo':
ensure => $ensure,
enable => $enable
}
}
foo::enable: true
foo::ensure: 'running'
class foo (
$ensure = 'stopped',
$enable = false
) {
service { 'foo':
ensure => $ensure,
enable => $enable
}
}