基于hiera查找和if-else的Puppet服务属性。这是一个愚蠢的新手错误吗?

基于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

我想根据hiera查找修改服务属性。到目前为止,我已经尝试了以下方法,得到了一个无效值“$foo::params::foo_sure”有效值已停止并正在运行。如果这是一种糟糕的方法,那么您有什么建议

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
  }
}