Как лучше всего настраивать модули марионеток? У меня есть марионетка 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.