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

Как переопределить параметры в подклассе?

Я пытаюсь включить марионеточный модуль (https://github.com/puppetlabs/puppetlabs-puppet/blob/master/manifests/init.pp) в моем собственном модуле общего шаблона. Но только набор master => true для моего главного узла. Но я получаю эту ошибку:

err: Could not retrieve catalog from remote server: Error 400 on SERVER: Only subclasses can override parameters at /etc/puppet/modules/template/manifests/puppetmaster.pp:5 on node puppet1.mydomain.com

Мой общий шаблон выглядит так:

class template::common {
  include ssh
  include user::infrastructure
  include user::system
  include packages::common
  class {
    'puppet' :
      puppet_server => 'puppet.mydomain.com',
  }
}

Он включен во все мои узлы (включая моего кукловода), который также включает этот шаблон:

class template::puppetmaster inherits puppet {
  include mysql::server
  include myfirewall::defaults
  Class['puppet'] { master +> true }

Я хотел бы, чтобы только мой мастер марионеток установил главный бит плюс агент (который уже унаследован). Но я бы предпочел не определять ресурс марионетки для каждого узла, чтобы иметь отдельный ресурс того же класса для моего хозяина марионетки.

Что можно сделать в этом направлении?

Ответьте на мета-вопрос о том, как вы выполняете эту работу. Если вы используете Passenger для запуска своего мастера Puppet, что вам следует делать, если у вас есть система любого размера, есть простой обходной путь к безумию, который является модулем puppetlabs . Вы просто добавляете новый файл с именем /etc/puppet/puppetmaster.conf и, возможно, некоторые другие части конфигурации в новый модуль под названием puppetmaster, а также добавляете эту строку в config.ru

ARGV << "--config=/etc/puppet/puppetmaster.conf"

Вы можете использовать часть логики внутри модуля puppetlabs, но может быть проще просто отправить файл или менее сложный шаблон, если вы не заботитесь о том, чтобы каждый бит конфигурации был параметром. Затем включите puppetmaster в узлы, которые являются мастерами, и все готово. Вы также можете изменить существующие марионеточные лаборатории, чтобы сделать это.

Обращаясь к исходному вопросу, Хиера может быть самым простым решением. Используйте это в init.pp

$master                   = hiera('puppet_master','false'),

а затем установите puppet_master: true для машин, которым он нужен. Лично я предпочитаю первый метод.