По сути, я каждый раз делаю одно и то же длинное объявление класса:
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, не рекомендуется использовать ключевое слово Puppet inherits
.
Кроме того, к моему огорчению, в https://docs.puppetlabs.com/puppet/latest/reference/lang_node_definitions.html#aside-best-practices , они описывают следующие рекомендации:
Кроме того: передовой опыт
Хотя операторы узлов могут содержать практически любой код Puppet, мы рекомендуем использовать их только для установки переменных и объявления классов. Избегайте использования в них объявлений ресурсов, сборщиков, условных операторов, связывающих отношений и функций; все они принадлежат классам или определенным типам. Это упростит переключение между определениями узлов и ENC.2а>
Можно ли определить собственный тип?
Я прочитал Как передать информацию об узле в класс в puppet? , но я не уверен, что он спрашивает о том же, что и я, и хотя я совершенно готов научиться определять типы, я недостаточно знаком с ними, чтобы решить, стоит ли идти на это. маршрут.
Как, черт возьми, мне не повторяться с каждым определением Puppet Node для этого кластера Redis?
Я приветствовал бы даже очень общий ответ, который я мог бы применить к моему конкретному случаю, который я также обобщил.
ОБНОВЛЕНИЕ: Применение общей конфигурации с использованием Hiera в файле common.yaml для этого набор сред, похоже, сработал. Я подробнее остановлюсь в ответе, если Дэн Боулинг не предложит его добровольно.
node
, тогда просто добавьте быстрый комментарий, и я могу отложить вопрос, пока я попробую это. - person Nathan Basanese   schedule 04.12.2015"node/%{::hostname}"
установить одну строку, уникальную для каждого хоста. - person Dan Bowling   schedule 14.01.2016"node/%{::hostname}"
установил одну строку, уникальную для каждого хоста. в вашем комментарии означает, что мы также будем использовать Hiera для установки этих элементов, уникальных для каждого хоста, верно? - person Nathan Basanese   schedule 14.01.2016