覆盖其他 class 中的人偶变量

Override puppet variable in other class

我在清单中使用 postgresql puppetlabs 模块。他们有一个名为 $service_manage 的参数,在 params.pp 文件中默认设置为 true,所以它看起来像

class postgresql::params inherits postgresql::globals { 
   $service_manage = true 
   if $service_manage {
       # do something
   }
}

我真正想要的是将变量 $service_manage 的值设置为 false,这样 if 块就不会应用于我的清单。我是这样用的,

class mypostgres::config {
  class { 'postgresql::params' : service_manage => 'false' }
}

但是失败并出现此错误,

SERVER: Evaluation Error: Error while evaluating a Resource Statement, Duplicate declaration: Class[Postgresql::Params] is already declared; cannot redeclare at /etc/puppet/modules/mypostgres/config.pp:4

我也试过这个

class postgresql::params { $service_manage = "false" }

但这也行不通。

您应该使用参数直接 declare/include class,而不是试图间接操纵 params class。该 class 正在此模块中继承默认值和逻辑。其实注意:https://github.com/puppetlabs/puppetlabs-postgresql/blob/master/manifests/params.pp#L1

继承该参数的实际 class 是 postgresql::server。因此,当您声明 class 时,您想像这样覆盖参数:

class { 'postgresql::server': service_manage => false }

它会为您正常工作。

还值得注意的是,params.pp$service_manageif 代码块实际上并不存在,如果最佳实践使用该设计模式,则不应存在.