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.


Antworten:


7

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

Fand diesen Beitrag nach einer Weile: http://www.mail-archive.com/puppet-users@googlegroups.com/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'],
  }
}

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.