Как добавить оператор 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». Я бы хотел заменить эту строку примерно таким:

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.


person Enfors    schedule 18.04.2017    source источник


Ответы (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,
}
person Dominic Cleal    schedule 18.04.2017