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

Базовая марионетка: написание конфигурации инфраструктуры с помощью ENC, стиль, инструкции?

Я едва знаю достаточно 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.
}