Я просто настраиваю новый марионеточный сервер и хочу узнать, какова наилучшая структура каталогов? Я посмотрел на разные форумы и на сайт марионеток, и меня поразило то, что все, кажется, излагают это по-своему. Нет ли рекомендуемого способа и структуры каталогов?
Пока у меня есть:
puppet/
+ manifests/
+ site.pp
+ nodes/
+ production/
+ nodes.pp
+ dev/
+ nodes.pp
+ modules/
Я просто немного застрял после этого :)
Поэтому я думаю, что хочу разделить это на роли сервера, такие как «веб-сервер», у которого есть такие службы, как «httpd» или «nginx».
Какой лучший способ изложить все это, так как это сводит меня с ума, что, похоже, нет предпочтительного метода для этого, или, может быть, я просто пропустил его во всей другой информации :(
Вот как бы вы структурировали каталоги?
puppet/
+ manifests/
+ site.pp
+ nodes/
+ production/
+ nodes.pp (Nodes have roles)
+ dev/
+ nodes.pp
+ roles/
+ web-server-apache.pp (Roles have modules)
+ modules/
+ web-server-apache/
+ manifests/
+ init.pp (This is where "httpd" gets defined and installs latest httpd)
+ templates/
+ files/
Я предлагаю использовать IDE, такую как Geppeto, для управления модулями в соответствии с Руководством по стилю модулей Puppet. Джеппетто создаст необходимые файлы и структуру каталогов.
Да, стандартная структура каталогов выглядит так - какие варианты этой структуры вы видите?
Каждый из ваших сервисов (httpd, nginx) должен обрабатываться модулями внутри modules
каталог, а прикрепление этих модулей к узлам для включения в их каталог конфигурации будет происходить в пределах manifests
.
Как вы хотите определить свои роли? Обычно это должно быть сделано в определениях ваших узлов, независимо от того, является ли это nodes.pp
файл в каталоге манифестов, который загружается site.pp
или вместо этого используйте Hiera для ваших определений узлов (что я определенно рекомендую, если вы готовы).
Поэтому я думаю, что хочу разделить это на роли сервера, такие как «веб-сервер», у которого есть такие службы, как «httpd» или «nginx».
Я думаю, вы спрашиваете, можете ли вы организовать свои модули в виде дерева в файловой системе. По большей части люди этого не делают. Они просто помещают множество модулей в каталог модулей и дают им красивые описательные метки / имена.
Полезно создать небольшую структуру для конкретного модуля. Например, у вас может быть role
модуль, вы можете создать такой класс, как role :: webserverwhich includes in modules that configure particular services. But if
role :: webserver` просто включает классы, вы можете применить то же самое в определении вашего узла, вашем коде или hiera.
В вашем примере вы предлагаете определить службы в services::
. Вам будет очень сложно поддерживать это, если вы когда-нибудь захотите использовать модули для кузницы. Просто потому, что все модули кузницы в основном предполагают, что они живут прямо на верхнем уровне. Вам придется массово переписывать любой загруженный модуль, чтобы он вписался в вашу структуру и использовал его.
Итак, мое предложение: откажитесь от идеи дерева и примите тот факт, что у вас будет большой каталог модулей плоского каталога.