Puppet 高级默认参数
Puppet advanced default params
基本上我有一个傀儡classcassandra_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])
}
}
然后 puppet 告诉我不能设置 $memtable_flush_writers
因为所有变量在 puppet 中都是不可变的。
然后我更改了检查变量是否为 "false" 并且没有在上面设置变量,但这只是告诉我显而易见的是,$memtable_flush_writers
没有设置。
我仍然可以从上面的 if 语句中获取功能而不弹出这些错误的最佳方法是什么。提前致谢。
您必须创建一个新变量,该变量仅用于在 class 定义中声明和设置任何默认值。
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
中的变量通常用作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>
}
基本上我有一个傀儡classcassandra_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])
}
}
然后 puppet 告诉我不能设置 $memtable_flush_writers
因为所有变量在 puppet 中都是不可变的。
然后我更改了检查变量是否为 "false" 并且没有在上面设置变量,但这只是告诉我显而易见的是,$memtable_flush_writers
没有设置。
我仍然可以从上面的 if 语句中获取功能而不弹出这些错误的最佳方法是什么。提前致谢。
您必须创建一个新变量,该变量仅用于在 class 定义中声明和设置任何默认值。
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
中的变量通常用作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>
}