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

Как разорвать цикл зависимостей в Puppet при включении классов

У меня есть следующие определения:

class nginx::install{
  ...
}

class nginx::service{
  ...
}

class nginx::config{
  ...
}

class nginx{
  include nginx::install, nginx::service, nginx::config
}

class jenkins::nginx{
  include nginx

  file{'/etc/nginx/sites-enabled/jenkins':
    source => ...,
    require => Class['nginx'],
  }
}

Но когда я запускаю это, Puppet сообщает мне, что у меня есть цикл:

err: Could not apply complete catalog: Found 1 dependency cycle:
(Class[Jenkins::Nginx] => File[/etc/nginx/sites-available/jenkins] => Class[Jenkins::Nginx])
Try the '--graph' option and opening the resulting '.dot' file in OmniGraffle or GraphViz

Простая ссылка на nginx в jenkins :: nginx ссылается на себя. Как мне сообщить Puppet, что вместо этого я использую класс nginx верхнего уровня?

Я пытался изменить свою зависимость на Class['::nginx'] (как будто я был в Ruby), и теперь Puppet сообщает мне, что не может найти зависимость.

Провел тонну тестирования, так как ваш вопрос был интересным ...

Через некоторое время нашел этот пост: http://www.mail-archive.com/puppet-users@googlegroups.com/msg08224.html

Я согласен с постером, что это ошибка или, по крайней мере, плохо спроектированная, но если вы включите класс с абсолютной областью видимости (:: nginx), вы можете установить для него требование, например:

class jenkins::nginx{
  include ::nginx

  file{'/etc/nginx/sites-enabled/jenkins':
    source => ...,
    require => Class['::nginx'],
  }
}

Включить с префиксом?

включить main: nginx