У меня есть следующие определения:
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