If statement Puppet高级默认参数

If statement Puppet高级默认参数,if-statement,puppet,If Statement,Puppet,基本上我有一个木偶类cassandra_manager::params。我有很多参数是这样设置的: # etc... $cluster_name = undef, $num_tokens = 256, $initial_token = undef, $hinted_handoff_enabled = true, # etc... 现在大多数设置了undef,我只是在我的模板中处理,如果它是undef,我只是注释它 但是我需要使用一些以前的参数和事实来计算默认值。以下是一个主要示例: $memt

基本上我有一个木偶类
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])
  }
}
$min\u from_core_和_disks=min([$::processorcount,size(拆分($::硬盘驱动器,,)))
如果$memtable_flush_写入程序{
如果0+(0+$min\u来自\u核心\u和\u磁盘[0])>8或(0+$min\u来自\u核心\u和\u磁盘[0])<2{
如果(0+$min_来自_核心和_磁盘[0])<2{
$memtable\u flush\u writers=2
}
elsif(0+$min_来自_核心和_磁盘[0])>8{
$memtable\u flush\u writers=8
}
}否则{
$memtable\u flush\u writers=(0+来自\u核心\u和\u磁盘的$min\u[0])
}
}
然后puppet告诉我不能设置
$memtable\u flush\u writers
,因为所有变量在puppet中都是不可变的

然后我改变了检查变量是否为“false”的方法,没有在上面设置变量,但这告诉我一个明显的事实,
$memtable\u flush\u writers
没有设置


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

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

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
          }

       }

cassandra_manager::params
中的变量通常用作
类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>
}
类{
“cassandra_经理”:
memtable_flush_Writer=>
}

这非常简单,但意义重大。谢谢我知道很多。。。你没有真正回答这个问题。