Я едва знаю достаточно Puppet, чтобы задать этот вопрос.
Думаю, я понимаю, что конфигурация для конкретного узла будет состоять из набора модулей с некоторым клеем для конкретного узла. Из руководств и документации видно, что ресурсы, специфичные для узла, будут в файле manifest / site.pp в node /nodename/ { }
ресурсы с «включает» для соответствующих классов и ресурсы для внесения изменений в конфигурацию конкретного узла.
Теперь введите классификатор внешних узлов (ENC), например theForeman.
Читая документацию ENC, я МОГ БЫ использовать node /nodename/ { }
ресурсы в site.pp, но я не могу объявить новые ресурсы. Это в принципе не рекомендуется. Сгенерированный YAML просто включает в себя и переменные настройки.
Так что же делать для конфигурации, специфичной для данного узла или группы хостов - проводки, объединяющей все ваши включенные классы?
Вы в конечном итоге создаете класс, специфичный для узла? Где вы поместите этот класс, в специфичный для узла модуль? Или вы создаете универсальный модуль для конфигурации вашего сайта с классами, которые можно назначить конкретному узлу?
Один из подходов к этому выражен в Проектирование марионетки - роли и профили. Основные постулаты следующие:
Я предполагаю, что вы говорите Форману выполнить импорт из марионеточного мастера, в таком случае я бы предложил настроить ваш марионеточный каталог следующим образом:
puppet
puppet/manifests
puppet/manifests/site.pp
puppet/manifests/nodes/default.pp
puppet/manifests/nodes/{server-type}.pp
...
puppet/modules
puppet/modules/{module1}
puppet/modules/{module1}/files
puppet/modules/{module1}/manefests
puppet/modules/{module1}/templates
...
etc
затем включите эту строку в файл site.pp:
import 'nodes/*'
Затем в default.pp создайте базовый сервер:
node default {
#this is where you put all of the puppet directives you want on every server.
#for example if you wanted screen on all of your servers
package{ "screen": ensure -> installed; }
}
Затем в другом файле под узлами, скажем, web.pp, вы можете включить это, а затем установить директивы для всех веб-серверов следующим образом:
node /^web0[1-9]\.example\.com$/ inherits default {
#this will inherit all of the settings in the default node and then do anything else you add.
#like installing nginx
package { "nginx": ensure -> installed; }
}
Вы даже можете связать наследование, как в этом файле db.pp:
node db inherits default {
#install postgresql-9.3
package { "postgresql-9.3": ensure -> installed; }
}
node /^db0[1-9]\.example\.com$/ inherits db {
#This block can even be empty unless you need something here.
}