Назад | Перейти на главную страницу

как передать параметры марионеточным модулям?

Как лучше всего настраивать модули марионеток? У меня есть марионетка 2.7.11. Я нахожу этот способ довольно беспорядочным, похоже, с использованием глобальных переменных.

node default {
   $always_apt_update = true
   include apt
}

Должен ли я создать класс, который унаследовал бы большую часть конфигурации от оригинала? В документации слишком много версий, и я не уверен, какая из них подходит мне.

ОБНОВИТЬ:

когда я пробую это:

  class { 'apt': 
    always_update => 'true',
  } 

Я получаю сообщение об ошибке:

Error 400 on SERVER: Invalid parameter always_update at /etc/puppet/manifests/nodes.pp:32

Вам следует использовать параметризованные классы вместо глобальных переменных.

Например:

node default {
  class {'apt': 
    always_update =>true 
  }
}
class apt ($always_update = true ) {
  // code 
}

node 'example.com' { 
  class { bar: }
}

Дополнительную информацию см. В документации по марионетке:

Эти ответы кажутся немного устаревшими, с новыми версиями марионетки, то есть 3.7.x, параметры класса можно передавать с помощью Hiera. Объявление класса ресурса, подобного объявлению, больше не считается лучшей практикой.

Хотя во втором ответе используется Hiera, но он явно использует функцию «hiera», что снова не рекомендуется.

Новое решение будет выглядеть примерно так:

/etc/puppet/manifests/site.pp:

node default {
    include apt
}

/etc/puppet/modules/apt/manifests/init.pp:

class apt ($always_update = true ) {
  // code 
}

/etc/puppet/hieradata/<filename>.yaml

apt::always_update: true

Файлы yaml данных Hiera могут иметь разные значения параметра по мере необходимости.

В наши дни рекомендуется использовать Hiera. Он встроен в 3.x, но в 2.7 его нужно устанавливать отдельно.

Затем вы можете получить данные из Hiera в своем манифесте для apt класс:

$always_apt_update = hiera("always_apt_update")

С такой конфигурацией Hiera ..

:hierarchy:
  - %{::clientcert}
  - common

..узел (извлеченный из clientcert факт) будет использоваться как более высокий приоритет при поиске, чем common.yaml файл.

Итак, с always_apt_update: false в node1.example.com.yaml и always_apt_update: true в common.yaml, node1 будет иметь эту переменную, установленную в false, в то время как другие узлы будут иметь значение по умолчанию true.