Puppet: Einfache Tokenisierung + Bedarf an einem Agenten

Puppet: Einfache Tokenisierung + Bedarf an einem Agenten

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.tokenzenizedmit dem Namen bereitstellen, die wie folgt lautet:

<Ajp12Connector port="@@TOMCAT.AJP.PORT@@" ajpidFile="conf/ajp12_2.id" />

und dann eine tokens.xmlDatei 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,puppetkann das tun mitVorlagenzusammen mithieraund/oderfacter. Dieser Vorgang ist mithilfe der Vorlagendatei vollständig von der Software abstrahiert.

Sie können beispielsweise eine Vorlage server.xmlmit 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 tomcatModul 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 puppetAgenten, die proaktiv ihreKatalogezum puppetmaster). Auch hier ist es erforderlich, dass SieDokumentation lesenum die Details seiner Funktionalität besser zu verstehen.

verwandte Informationen