Как добавить оператор if внутри создания класса Puppet
У меня есть манифест Puppet, который создает класс с другим классом внутри:
class profiles::common::wlsdomains {
class {"wlsdomain":
applications => hiera('wlsapplications', ""),
crontab => hiera_hash('crontab', ""),
generateWlsdomain => hiera('generatewlsdomain'), # This line needs changing
}
}
Все идет нормально. Теперь проблема в последней строке. Я только хочу установить "generateWlsdomain" в "hiera(" generatewlsdomain')" при определенных условиях. Вот тут и возникает необходимость в выражении "если". Я хотел бы заменить эту строку чем-то вроде этого:
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, чтобы решить, что делать, но использовать значение из Hiera в качестве резервной копии, если $::generate не установлено.
Однако что-то говорит мне, что я не могу просто заменить существующую строку этим блоком кода, потому что существующая строка является частью списка, разделенного запятыми, а не просто собственной строкой общего кода.
В случае, если это имеет значение, это работает на машине RedHat.
1 ответ
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')
}
или немного более компактный, используя селектор для проверки $::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 {"wlsdomain":
applications => hiera('wlsapplications', ""),
crontab => hiera_hash('crontab', ""),
generateWlsdomain => $generatewlsdomain,
}