Gibt es eine Möglichkeit, Marionetten dazu zu zwingen, bestimmte Dinge zuerst zu tun? Zum Beispiel muss es ein RPM auf allen Servern installieren, um ein YUM-Repository (IUS-Community) hinzuzufügen, bevor ich eines der Pakete installiere.
26
Antworten:
Wenn Sie sicherstellen möchten, dass auf allen Servern ein Repository installiert ist, empfehle ich Folgendes
Dann können Sie für jeden Knoten, der erweitert wird
base
, sagenDies wird sicherstellen, dass
bar
wird nur installiert, wenn das IUS-Repository definiert istquelle
Obwohl die Phasen damit umgehen können und auch bestimmte YUM-Repo-Abhängigkeiten, ist es besser, die Beziehung generisch zu deklarieren.
Legen
Yumrepo <| |> -> Package <| provider != 'rpm' |>
Sie einfach Ihr Puppenmanifest ein.Dies bewirkt, dass alle yumrepo-Typen vor Paketen verarbeitet werden, deren Provider nicht 'rpm' ist. Dieser letztere Ausschluss dient dazu, dass ich das (zum Beispiel) RPM-Paket für die Epel-Veröffentlichung verwenden kann, um das Yum-Repo zu installieren.
quelle
(Ich habe diese Frage gefunden, nachdem ich fast gleich geantwortet habe. Ich dachte, meine Antwort gilt auch hier und es lohnt sich, sie zu wiederholen. Es ist sicherer, eine Antwort an zwei Stellen zu haben.)
Soweit ich weiß, ist dies genau das, wofür Stufen vorgesehen sind - Sie können Klassenausführungen gruppieren und anordnen. Ich verwende "Stufen", um APT auf Debian-Servern zu aktualisieren und zu konfigurieren, was dem, was Sie mit YUM tun werden, sehr ähnlich sein sollte.
Zunächst deklarieren Sie die Stufe "yum" auf der obersten Ebene (über "node"), sodass Klassen in der Stufe "yum" vor "main" ausgeführt werden:
Anschließend weisen Sie den Klassen eine Bühne zu. Sie können dies direkt in Ihrer Knotendefinition tun:
quelle
Sie könnten Tags verwenden . Dies würde Ihnen erlauben, das Repo-Installationsprogramm mit
firstrun
oder etwas zu markieren ,dann renne
und es würde nur die Module / Anweisungen ausführen, die mit dem Tag übereinstimmen.
quelle
Der Schlüssel, den Sie verwenden müssen, ist das Schlüsselwort require - "Bewerten Sie eine oder mehrere Klassen und fügen Sie die erforderliche Klasse als Abhängigkeit hinzu."
Ein Beispiel für die Verwendung eines Apt-Repositorys könnte sein:
(Angepasst an dieses Beispiel für Puppen-Bootstrapping ).
Sie können also sehen, wie für jede Stufe die vorherige zuerst ausgeführt werden muss. Ich überlasse es Ihnen, herauszufinden, wie Sie dies auf yum anwenden können, da ich nicht weiß, wo die Dateien gespeichert werden.
quelle
Puppet liest die Konfiguration von oben nach unten. Wenn Sie also eine Klasse mit dem Yum-Repo als Erstes in diese Klasse aufnehmen, wird dieses Repo vor allen anderen hinzugefügt.
Wenn Sie die erforderlichen Einstellungen für ein Paket verwenden, stellen Sie sicher, dass der erforderliche Ressourcentyp vorhanden ist, bevor Sie das Paket als solchen hinzufügen:
Mit dem obigen Code wird das Repo hinzugefügt, bevor das Paket hinzugefügt wird.
quelle
require
Schlüsselwort zu verwenden, das Sie im zweiten Teil getan haben.So etwas hat bei mir funktioniert:
Ich habe so etwas auf mysite.pp aufgenommen. Auf diese Weise sind Ihre Puppenmodule frei von Verweisen auf Yum-Repos.
quelle