В принципе, я считаю себя делать то же самое объявление долгое время учащемуся каждый раз:Как избежать повторения себя в объявлениях классов для кукольных узлов?
node 'gluster3redis097.myservice.com' {
class { 'redis' :
class {'invoke' : }
class {'users' : }
class {'redis' :
package_ensure => '3.0.5',
#extra_config_file => '/etc/redis.d/redis-gluster3-master.conf',
daemonize => 'yes',
pid_file => '/var/run/redis.pid',
log_level => 'notice',
log_file => '/var/log/redis/redis.log',
#save_db_to_disk => false,
workdir => './',
bind => $::ipaddress,
slaveof => "${$gluster3redis_master_ips[37]}:6379",
slave_serve_stale_data => true,
# 2015.12.01 nathan Do not allow inadvertent writes to the slave
slave_read_only => true,
repl-diskless-sync-delay => '5',
repl-ping-slave-period => '10',
... and so on ...
... and so forth ...
Предположим, для этого кластера, каждый ПЯТЫЙ узел имеет отдельный мастер.
Итак, угадайте, какая часть изменяется?
slaveof => "${$gluster3redis_master_ips[37]}:6379",
Там должен быть лучший способ.
- Покахонтас (1995) 1
Согласно https://docs.puppetlabs.com/puppet/latest/reference/lang_node_definitions.html#multiple-names, это плохая идея использовать кукольный inherits
ключевое слово.
Плюс, к моему ужасу, в https://docs.puppetlabs.com/puppet/latest/reference/lang_node_definitions.html#aside-best-practices, они описывают следующие рекомендации:
Помимо: Best Practices
Хотя узел заявление может содержать практически любой код кукольного, мы рекомендуем что вы используете их только для установки переменных и объявления классов. Избегайте использования объявлений ресурсов, коллекционеров, условных операторов, цепочки отношений и функций в них; все они принадлежат классам или определенным типам. Это упростит переход между определениями узлов и ENC. 2
Могу я определить нестандартный тип?
Я прочитал How to pass node specific information to class in puppet?, но я не уверен, что он спрашивает то же, что и я, и хотя я совершенно готов узнать, как определить типы, я не знаком с ними достаточно, чтобы решить, идти по этому маршруту.
Как я могу избегать повторения себя с каждым определением определения кукольного узла, как это для этого кластера Redis?
Я бы приветствовал даже очень общий ответ, который я мог бы применить к моему конкретному случаю, который я также обобщил.
ОБНОВЛЕНИЕ: Применение общей конфигурации с использованием Hiera с помощью файла common.yaml для этого набора сред, похоже, сработало. Далее я расскажу об этом в ответ, если Дэн Боулинг не будет его добровольно участвовать.
//, Дайте мне знать, если этот вопрос можно ответить, даже. Если типы Puppet обычно являются лучшим способом для повторных деклараций класса node, просто добавьте быстрый комментарий, и я могу удержать этот вопрос в ожидании. –
Вы изучали использование Hiera вместо того, чтобы объявлять это на узле? Затем вы могли бы просто установить разумные значения по умолчанию в common.yaml, а затем иметь «node /% {:: hostname}» «установить единственную строку, уникальную для каждого хоста. –
//, Отличная идея! Кто-то мудрее меня в нашей команде рекомендовал использовать Hiera. Я думаю, что использование Hiera сделает это более читаемым. У нас фактически есть 3 или 4 настройки, уникальные для каждого хоста. Я полагаю, что «тогда есть« node /% {:: hostname} »« установить единственную строку, уникальную для каждого хоста ». в вашем комментарии означает, что мы также будем использовать Hiera для установки этих элементов, уникальных для каждого хоста, не так ли? –