So unterbrechen Sie den Abhängigkeitszyklus in Puppet, wenn Sie Klassen einschließen

7

Ich habe folgende Definitionen:

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'],
  }
}

Aber wenn ich das mache, sagt mir Puppet, dass ich einen Zyklus habe:

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

Der einfache Verweis auf nginx in jenkins :: nginx verweist auf sich selbst. Wie kann ich Puppet mitteilen, dass ich stattdessen von der Nginx-Klasse der obersten Ebene abhängig bin?

Ich habe versucht, meine Abhängigkeit in zu ändern Class['::nginx'](als wäre ich in Ruby), und Puppet sagt mir jetzt, dass die Abhängigkeit nicht gefunden werden kann.

François Beausoleil
quelle
Siehe auch
Quanten

Antworten:

7

Habe eine Menge Tests gemacht, da deine Frage interessant war ...

Fand diesen Beitrag nach einer Weile: http://www.mail-archive.com/[email protected]/msg08224.html

Ich stimme dem Poster zu, dass dies ein Fehler ist oder zumindest nicht gut gestaltet, aber wenn Sie die Klasse mit dem absoluten Gültigkeitsbereich (:: nginx) einschließen, können Sie eine Anforderung dafür festlegen, wie folgt:

class jenkins::nginx{
  include ::nginx

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

Mit Präfix einschließen?

include main: nginx

Korjavin Ivan
quelle
Entschuldigung:Could not find dependency Class[Main::Nginx]
François Beausoleil