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

Зависимости классов Puppet в модулях

В настоящее время я пишу марионеточный модуль для управления моей конфигурацией sensu.

Разделили все это на несколько классов и поместили их в соответствующие файлы в каталоге sensu "manifestests":

sensu::common          (common.pp)
sensu::common::package (common/package.pp)
sensu::common::config  (common/config.pp)
sensu::server          (server.pp)
sensu::server::config  (server/config.pp)

В моем server.pp, У меня есть следующие

class sensu::server {
  include sensu::common
  include sensu::server::config

  Class['sensu::common'] -> Class['sensu::server::config']
}

И nodes.pp выглядит так:

class role_monitoring_server {
  $my_role = 'monitoring_server'
  ...
  include sensu::server
}

node my_cool_server {
  include role_monitoring_server
}

Как многие из вас могли догадаться, у меня проблемы с зависимостью классов в server.pp:

Class['sensu::common'] -> Class['sensu::server::config']

просто не работает. Класс sensu::server::config необходимо поместить файл в каталог, который будет создан только sensu::common. Дело в том, что sensu::server::config всегда будет применяться до sensu::commonа не после того, как ожидалось.

Что я скучаю? В Интернете так много вопросов, но я просто не нахожу ответа, так как не знаю, что искать.

Вы создаете отношения зависимости с sensu::common класс, но не существует неявной зависимости между sensu::common и его «дети», package и config. Итак, если ваша конфигурация не выглядит иначе (я предполагаю, что sensu::common класс это просто пара include линий?), которые по-прежнему можно применять в любое время в отношении sensu::server::config класс.

Вы, вероятно, захотите построить отношения с классом, который содержит необходимые вам ресурсы; вы фактически создаете требующуюся связь между каждым ресурсом в одном классе и каждым ресурсом в другом (в зависимости от того, какой из них нужен, или оба):

Class['sensu::common::package'] -> Class['sensu::server::config']
Class['sensu::common::config'] -> Class['sensu::server::config']