Ich versuche, das folgende Problem mit Puppet zu lösen:Puppet Run Bestellung für optionale Klassen
Ich habe mehrere Knoten. Jeder Knoten enthält eine Sammlung von Klassen. Zum Beispiel gibt es eine mysql
Klasse und webserver
Klasse. node1 ist nur ein Webserver, node2 ist Webserver + mysql.
Ich möchte angeben, dass, wenn ein Knoten sowohl Webserver als auch mysql hat, die Installation von mysql vor dem Webserver erfolgt.
Ich kann nicht Class[mysql] -> Class[webserver]
Abhängigkeit haben, weil die MySQL-Unterstützung optional ist.
Ich habe versucht, Stufen zu verwenden, aber sie scheinen Abhängigkeiten zwischen meinen Klassen einzuführen, also wenn ich z. dies:
Stage[db] -> Stage[web]
class {
'webserver':
stage => web ;
'mysql':
stage => db ;
}
und ich den Webserver Klasse sind in meinem Knoten
node node1 {
include webserver
}
.. die mysql-Klasse wird auch enthalten! Das ist nicht was ich will.
Wie kann ich die Reihenfolge für optionale Klassen definieren?
Edit: Hier ist die Lösung:
class one {
notify{'one':}
}
class two {
notify{'two':}
}
stage { 'pre': }
Stage['pre'] -> Stage['main']
class {
one: stage=>pre;
# two: stage=>main; #### BROKEN - will introduce dependency even if two is not included!
}
# Solution - put the class in the stage only if it is defined
if defined(Class['two']) {
class {
two: stage=>main;
}
}
node default {
include one
}
Ergebnis:
notice: one
notice: /Stage[pre]/One/Notify[one]/message: defined 'message' as 'one'
notice: Finished catalog run in 0.04 seconds
~
Warum entbindet Webserver Klasse auf Ihrer mySQL-Klasse überhaupt ab? Was ist die tatsächliche Abhängigkeit dort? –
@CodeGnome Ich habe versucht, es sehr einfach zu erklären. Ich habe Stufe entspricht in etwa „bare Maschine“ - „alle die Vernetzung von bis“ - „alle verfügbaren Datenquellen“ - „verschiedene Werkzeuge Puppen Unterstützung installiert“ - „jetzt können wir die eigentliche Arbeit tun“. –