Puppet: シンプルなトークン化 + エージェントの必要性

Puppet: シンプルなトークン化 + エージェントの必要性

皆さん

現在、職場ではカスタムのデプロイメント ツールを使用していますが、これを Puppet のような非独自のツールに置き換えることを検討しています。

現時点での主な機能の 1 つはトークン化です。たとえば、Tomcat デプロイメントの server.xml ファイルでは、server.xml.tokenzenized次のような行を含むファイルをデプロイする場合があります。

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

そしてtokens.xml次のような行があるファイルを作成します

<TOKEN NAME='TOMCAT.AJP.PORT' value = '8080/>

次に、デプロイメント プロセスは server.xml.tokenized をスキャンし、トークンを置き換えて、ファイルを server.xml に書き込みます。

Puppet は任意のファイルに対してこれを実行できますか? または、Tomcat のようなものに対しては、Tomcat の動作を理解するプラグインをダウンロードする必要がありますか?

次に、私がこれまでに読んだところによると、ほとんどの人がマスターからファイルを取得するために Puppet エージェントを使用しているようですが、これは必ず必要なのでしょうか。Puppet モデリングとインフラストラクチャを使用し、ホストにログインしてソフトウェアを展開するスクリプトを用意することはできますか。その理由は、さまざまな理由から、私たちの環境ではエージェントに対して偏見があるからです。

乾杯

答え1

最初の質問に対して:はい、puppetそれは次のように行うことができますテンプレートと相まってhieraおよび/またはfacterこのプロセスは、テンプレート ファイルを使用してソフトウェアから完全に抽象化されます。

たとえば、server.xml次のようなセクションを含むテンプレートを作成できます。

<Connector address="<%= @ipaddress_eth0 %>"
           executor="tomcatThreadPool"
           port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

この<%= @ipaddress_eth0 %>部分は現在「トークン」と呼ばれており、puppet は以下を使用して任意のホストに対してこれを置き換える方法を知っていますfacter

# facter ipaddress_eth0
10.0.0.2

あなたが持つことができますカスタムファクトあなたにも必要なら。

階層データのトピックは少し複雑なので、展開にどのように役立つかを確認するには、ドキュメントを読む必要があります。これは、その可能性を非常にうまく表現しています。基本的に、その目的は、コードとデータ (「トークン」) を分離し、そのデータを使い慣れた、保守しやすい形式 (YAML または JSON) で保存する手段を提供することです。上で説明したユースケース ( のカスタム ポートの定義tomcat) は、 の典型的な使用パターンですhiera

モジュールにはtomcat次の内容が含まれます。

class tomcat (
    $port
    ){
    #rest of the module
}

テンプレート(例えば、server.xml.erb)では、

<Ajp12Connector port="<%= port %>" ajpidFile="conf/ajp12_2.id" />

そして、そのコードに一致する階層データの部分は次のようになります。

tomcat::port = 8080

2番目の質問に対する答えも、ある程度はイエスです。マリオネット集団(実際、puppetlabs の一部) は、エージェントレスのサーバーファームに変更をプッシュします。ただし、クライアントをインストールする必要があります (クライアントは受動的であり、エージェントはpuppet積極的に要求するため、クライアントとまったく同じではありません)。カタログpuppetmaster)。繰り返しますが、ドキュメントを読む機能の詳細をよりよく理解するため。

関連情報