При желании можно передать параметр puppet с помощью hiera

При желании можно передать параметр puppet с помощью hiera

Мы используем шаблон ролей/профилей. В примере ниже я хотел бы опционально передать параметр из hiera, чтобы, если значение не указано, использовалось значение по умолчанию класса ::apache (которое он получает внутренне из своего класса ::apache::params). Это позволило бы нам устанавливать значение keepalive на некоторых серверах, но позволило бы классу ::apache самому определять значение, когда мы этого не делаем.

common.yaml
-----------
profiles::apache::keepalive               : On
profiles::apache::keepalive_timeout       : 5


apache.pp
---------
class profiles::apache {

  $apache_keepalive              = hiera('profiles::apache::keepalive')
  $apache_keepalive_timeout      = hiera('profiles::apache::keepalive_timeout')

  class {'::apache':
    keepalive              => $apache_keepalive,
    keepalive_timeout      => $apache_keepalive_timeout,
  }

}

Я пробовал установить значение по умолчанию для поиска hiera на «undef», но в результате в конфигурации появляются пустые значения.

решение1

Этот эффект достигается за счетавтоматический поиск параметров.

Ваши данные Hiera нацелены надействительныймодуль Apache, а не ваш профиль Apache.

apache::keepalive: true

Это работает только при class apacheналичии $keepaliveпараметра.

И да, значение по умолчанию для этого следует взять из apache::params.

class apache($keepalive = $::apache::params::keepalive)
    inherits ::apache::params { 
        ...
}

решение2

Лично я предпочитаю явно объявлять все переменные. В этом случае я бы объявил значение по умолчанию on common.yamlи затем использовал бы другие файлы yaml для объявления значений, которые отличаются от значений по умолчанию, например

common.yaml
-----------
profiles::apache::keepalive               : On
profiles::apache::keepalive_timeout       : 5

servertype.yaml
---------------
profiles::apache::keepalive               : On
profiles::apache::keepalive_timeout       : 30

Затем установите иерархию наhiera.yaml

:hierarchy: - servertype.yaml
            - common.yaml

Если вы не хотите этого делать, то я думаю, что единственный другой подход — использовать операторы if.

apache.pp
---------
class profiles::apache {

  $apache_keepalive              = hiera('profiles::apache::keepalive')
  $apache_keepalive_timeout      = hiera('profiles::apache::keepalive_timeout')

  if ($apache_keepalive == undef) {
    class {'::apache': }
  }
  else {
    class {'::apache':
      keepalive              => $apache_keepalive,
      keepalive_timeout      => $apache_keepalive_timeout,
    }
  }

}

Связанный контент