Я пытаюсь включить марионеточный модуль (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 для машин, которым он нужен. Лично я предпочитаю первый метод.