如何在 Puppet class 创建中添加 if 语句
How to add an if statement inside a Puppet class creation
我有一个 Puppet 清单,它创建了一个 class,里面还有另一个 class:
class profiles::common::wlsdomains {
class {"wlsdomain":
applications => hiera('wlsapplications', ""),
crontab => hiera_hash('crontab', ""),
generateWlsdomain => hiera('generatewlsdomain'), # This line needs changing
}
}
到目前为止一切顺利。现在,问题是最后一行。我只想在某些条件下"generateWlsdomain"设置为"hiera('generatewlsdomain')"。这是需要 "if" 语句的地方。我想用这样的东西替换该行:
if $::generate == "true" {
generatewlsdomain => "true"
}
elsif $::generate == "false" {
# Do nothing; leave generatewlsdomain unset
}
else { # If $::generate is neither "true" nor "false", then get a value from Hiera
generateWlsdomain => hiera('generatewlsdomain'),
}
换句话说,我想主要查看 $::generate 来决定要做什么,但如果未设置 $::generate,则使用 Hiera 中的值作为备份。
但是,有些事情告诉我不能只用这个代码块替换现有的行,因为现有的行是逗号分隔的 list 的一部分,它不仅仅是它自己的通用代码行。
以防万一,这是在 RedHat 机器上 运行。
如果不想设置undef
关键字可以作为值,这会导致Puppet使用generateWlsdomain
的默认值。
使用这个,为generateWlsdomain
的值设置一个变量:
if $::generate == "true" {
$generatewlsdomain = "true"
}
elsif $::generate == "false" {
$generatewlsdomain = undef # Do nothing; leave generatewlsdomain unset
}
else { # If $::generate is neither "true" nor "false", then get a value from Hiera
$generatewlsdomain = hiera('generatewlsdomain')
}
或更紧凑一点,使用 a selector 测试 $::generate
值并设置 $generatewlsdomain
结果:
$generatewlsdomain = $::generate ? {
"true" => "true",
"false" => undef, # Do nothing; leave generatewlsdomain unset
default => hiera('generatewlsdomain'), # If neither "true" nor "false", then get a value from Hiera
}
并将其传递到现有的 class 声明中:
class {"wlsdomain":
applications => hiera('wlsapplications', ""),
crontab => hiera_hash('crontab', ""),
generateWlsdomain => $generatewlsdomain,
}
我有一个 Puppet 清单,它创建了一个 class,里面还有另一个 class:
class profiles::common::wlsdomains {
class {"wlsdomain":
applications => hiera('wlsapplications', ""),
crontab => hiera_hash('crontab', ""),
generateWlsdomain => hiera('generatewlsdomain'), # This line needs changing
}
}
到目前为止一切顺利。现在,问题是最后一行。我只想在某些条件下"generateWlsdomain"设置为"hiera('generatewlsdomain')"。这是需要 "if" 语句的地方。我想用这样的东西替换该行:
if $::generate == "true" {
generatewlsdomain => "true"
}
elsif $::generate == "false" {
# Do nothing; leave generatewlsdomain unset
}
else { # If $::generate is neither "true" nor "false", then get a value from Hiera
generateWlsdomain => hiera('generatewlsdomain'),
}
换句话说,我想主要查看 $::generate 来决定要做什么,但如果未设置 $::generate,则使用 Hiera 中的值作为备份。
但是,有些事情告诉我不能只用这个代码块替换现有的行,因为现有的行是逗号分隔的 list 的一部分,它不仅仅是它自己的通用代码行。
以防万一,这是在 RedHat 机器上 运行。
如果不想设置undef
关键字可以作为值,这会导致Puppet使用generateWlsdomain
的默认值。
使用这个,为generateWlsdomain
的值设置一个变量:
if $::generate == "true" {
$generatewlsdomain = "true"
}
elsif $::generate == "false" {
$generatewlsdomain = undef # Do nothing; leave generatewlsdomain unset
}
else { # If $::generate is neither "true" nor "false", then get a value from Hiera
$generatewlsdomain = hiera('generatewlsdomain')
}
或更紧凑一点,使用 a selector 测试 $::generate
值并设置 $generatewlsdomain
结果:
$generatewlsdomain = $::generate ? {
"true" => "true",
"false" => undef, # Do nothing; leave generatewlsdomain unset
default => hiera('generatewlsdomain'), # If neither "true" nor "false", then get a value from Hiera
}
并将其传递到现有的 class 声明中:
class {"wlsdomain":
applications => hiera('wlsapplications', ""),
crontab => hiera_hash('crontab', ""),
generateWlsdomain => $generatewlsdomain,
}