Сообщение об ошибке объясняет вам, что операторы if
не могут появляться внутри объявлений ресурсов.Однако существует другая условная форма, называемая «селектором», которая может появляться внутри объявлений ресурсов .Это аналог Puppet троичного оператора ?:
, который встречается в нескольких языках.
Стилистически, однако, обычно лучше сохранять декларации ресурсов как можно более простыми.Для этого вам, вероятно, следует установить переменную, условно, вне объявления ресурса, а затем использовать ее значение внутри.Используя ваше собственное условие, оно может выглядеть так:
if $domainname !~ $hostname {
$url_value = "https://$domainname";
} else {
$url_value = "https://$hostname";
}
ini_setting {
'set_property':
ensure => present,
path => '/tmp/test.ini',
section => 'main',
setting => 'url',
value => $url_value;
}
Кроме того, я отмечаю, что ваше конкретное условие, повторенное выше, весьма подозрительно.В последней версии Puppet (версия 4 и выше) вы должны использовать типы данных Puppet, чтобы как объявить параметры вашего класса, так и проверить их.В частности, если допустимо объявлять тест класса без предоставления параметра $domainname
, вы должны объявить этот класс следующим образом:
# Using the Puppet v4+ type system
class test(
Optional[String] $domainname = undef
) {
# ...
и проверить, было ли предоставлено значение для $domainname
например, так:
if $domainname =~ Undef {
# ...
}
Вы не можете использовать систему типов в более ранних версиях Puppet, но там вы можете полагаться на неопределенные переменные, которые расширяются до нуля при их интерполяции:
# Using the Puppet v3- behavior
class test(
$domainname = undef
) {
# ...
if "$domainname" == "" {
# ...
}
# ...
}