
Leute
Wir arbeiten derzeit mit einem benutzerdefinierten Bereitstellungstool und prüfen, es durch etwas nicht proprietäres wie Puppet zu ersetzen.
Eine der wichtigsten Aufgaben, die es derzeit für uns erledigt, ist die Tokenisierung. Beispielsweise könnten wir in einer server.xml-Datei in einer Tomcat-Bereitstellung eine Datei server.xml.tokenzenized
mit dem Namen bereitstellen, die wie folgt lautet:
<Ajp12Connector port="@@TOMCAT.AJP.PORT@@" ajpidFile="conf/ajp12_2.id" />
und dann eine tokens.xml
Datei mit einer Zeile wie dieser haben würde
<TOKEN NAME='TOMCAT.AJP.PORT' value = '8080/>
Unser Bereitstellungsprozess scannt dann server.xml.tokenized, ersetzt die Token und schreibt die Datei in server.xml.
Kann Puppet dies für eine beliebige Datei tun – oder müsste ich für etwas wie Tomcat ein Plug-In herunterladen, das versteht, wie Tomcat funktioniert?
Zweitens scheint es nach dem, was ich bisher gelesen habe, so, als würden die meisten Leute den Puppet-Agenten verwenden, um Dateien vom Master abzurufen. Muss das so sein? Kann man ein Skript haben, das die Puppet-Modellierung und -Infrastruktur verwendet und sich dann bei Hosts anmeldet, um Software bereitzustellen? Die Begründung dafür ist, dass wir aus verschiedenen Gründen eine Voreingenommenheit gegenüber Agenten in unserer Umgebung haben.
Prost
Antwort1
Zur ersten Frage: ja,puppet
kann das tun mitVorlagenzusammen mithiera
und/oderfacter
. Dieser Vorgang ist mithilfe der Vorlagendatei vollständig von der Software abstrahiert.
Sie können beispielsweise eine Vorlage server.xml
mit einem Abschnitt wie diesem haben:
<Connector address="<%= @ipaddress_eth0 %>"
executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
Dieser <%= @ipaddress_eth0 %>
Teil ist das, was Sie derzeit als „Token“ bezeichnen, und Puppet weiß, wie es ihn für jeden beliebigen Host mithilfe von Folgendem ersetzen kann facter
:
# facter ipaddress_eth0
10.0.0.2
Du kannst habenbenutzerdefinierte Faktenwenn du sie auch brauchst.
Das Thema hierarchische Daten ist etwas komplexer und erfordert die Lektüre einiger Dokumentationen, um zu sehen, wie es Ihnen bei Ihren Bereitstellungen helfen kann.Dasist eine sehr schöne Präsentation seiner Möglichkeiten. Im Grunde besteht sein Zweck darin, die Möglichkeit zu bieten, Code und Daten (Ihre „Token“) zu trennen und diese Daten in einem vertrauten, leicht zu wartenden Format (YAML oder JSON) zu speichern. Der Anwendungsfall, den Sie oben beschreiben (Definieren eines benutzerdefinierten Ports für tomcat
), ist das klassische Verwendungsmuster von hiera
:
Im tomcat
Modul hätten Sie etwa:
class tomcat (
$port
){
#rest of the module
}
In einer Vorlage (sagen wir, server.xml.erb
):
<Ajp12Connector port="<%= port %>" ajpidFile="conf/ajp12_2.id" />
Und der Teil Ihrer hierarchischen Daten, der diesem Code entspricht, würde ungefähr so aussehen:
tomcat::port = 8080
Auch auf die zweite Frage lautet die Antwort ja, bis zu einem gewissen Grad. Sie könnenMarionettenkollektiv(tatsächlich ein Teil des Puppetlabs-Angebots), um Änderungen an eine agentenlose Serverfarm zu übertragen. Sie müssen jedoch die Clients installieren (nicht genau dasselbe, da diese Clients passiv sind, im Gegensatz zu den puppet
Agenten, die proaktiv ihreKatalogezum puppetmaster
). Auch hier ist es erforderlich, dass SieDokumentation lesenum die Details seiner Funktionalität besser zu verstehen.