Puppet高级默认参数

时间:2015-08-10 19:40:00

标签: if-statement puppet

基本上我有一个木偶课cassandra_manager::params。我有大量的参数设置如下:

# etc...
$cluster_name = undef,
$num_tokens = 256,
$initial_token = undef,
$hinted_handoff_enabled = true,
# etc...

现在大多数这些都设置为undef,我只是在我的模板中处理它只是评论它是否是undef。

但是有一些我需要使用一些先前的参数,以及事实来确定默认值。这是一个主要的例子:

$memtable_flush_writers = undef,

然后我试着像这样设置它:

$min_from_cores_and_disks = min([ $::processorcount, size(split($::hard_drives, ',')) ])
if !$memtable_flush_writers {
  if 0 + (0 + $min_from_cores_and_disks[0]) > 8 or (0 + $min_from_cores_and_disks[0]) < 2 {
    if (0 + $min_from_cores_and_disks[0]) < 2 {
      $memtable_flush_writers = 2
    }
    elsif (0 + $min_from_cores_and_disks[0]) > 8 {
      $memtable_flush_writers = 8
    }
  } else {
    $memtable_flush_writers = (0 + $min_from_cores_and_disks[0])
  }
}

然后木偶告诉我我不能设置$memtable_flush_writers,因为所有变量在木偶中都是不可变的。

然后我改变了检查变量是否为“false”并且没有将变量设置在上面,但这只是告诉我显而易见的,$memtable_flush_writers未设置。

在没有弹出这些错误的情况下,仍然可以从上面的if语句中获取功能的最佳方法是什么。提前谢谢。

2 个答案:

答案 0 :(得分:1)

您必须创建一个新变量,仅用于声明并在类定义中设置任何默认值。

class cassandra_manager::params (
        $memtable_flush_writers_count = undef
      ){
          if !$memtable_flush_writers_count {
              # Whatever you want to do
                 $memtable_flush_writers = 'your_value'
             } else {
                 $memtable_flush_writers = $memtable_flus_writers_count
          }

       }

答案 1 :(得分:0)

cassandra_manager::params中的变量通常用作class cassandra_manager参数的默认值。

class cassandra_manager(
    $cluster_name = $cassandra_manager::params::cluster_name,
    $num_tokens = $cassandra_manager::params::num_tokens,
    ...) inherits cassandra_manager::params {

}

您可以通过传递这些参数来覆盖默认值。

class { 
  'cassandra_manager':
    memtable_flush_writers => <value for this node>
}