注:このチュートリアルの新しいバージョンは、Puppet withPassengerの代わりにPuppetServerを使用しており、次の場所にあります:Ubuntu14.04のマスターエージェントセットアップにPuppet4をインストールする方法

序章

Puppet LabsのPuppetは、システム管理者がサーバーインフラストラクチャのプロビジョニング、構成、および管理を自動化するのに役立つ構成管理ツールです。 事前に計画を立て、Puppetなどの構成管理ツールを使用すると、基本的なタスクの繰り返しに費やす時間を削減でき、インフラストラクチャ全体で構成の一貫性と正確性を確保できます。 Puppetやその他の自動化ツールを使用してサーバーを管理するコツをつかんだら、全体的なセットアップの他の側面を改善するために費やすことができる時間を解放できます。

Puppetには、PuppetEnterpriseとオープンソースのPuppetの2種類があります。 ほとんどのLinuxディストリビューション、さまざまなUNIXプラットフォーム、およびWindowsで動作します。

このチュートリアルでは、エージェント/マスターセットアップにオープンソースのPuppetをインストールする方法について説明します。 このセットアップは、すべての構成データが管理および配布される中央の Puppet Master サーバーで構成され、残りのすべてのサーバーは、構成可能な PuppetAgentノードになります。 puppetマスターサーバーによって。

前提条件

このチュートリアルに従うには、Puppetを構成するすべてのサーバーへのルートアクセス権が必要です。 また、Puppetマスターサーバーとして機能する新しいUbuntu14.04VPSを作成する必要があります。 既存のインフラストラクチャがない場合は、前提条件のDNSセットアップチュートリアルに従って、サンプルインフラストラクチャ(以下で説明)を自由に再作成してください。

Puppetのインストールを開始する前に、次の前提条件があることを確認してください。

  • プライベートネットワークDNS:順方向および逆方向DNSを構成する必要があり、すべてのサーバーに一意のホスト名が必要です。 これは、独自のプライベートネットワークDNSサーバーを構成するためのチュートリアルです。 DNSが構成されていない場合は、DNSを使用する必要があります hosts 名前解決のためのファイル。 インフラストラクチャ内の通信にプライベートネットワークを使用することを前提としています。
  • ファイアウォールオープンポート:Puppetマスターはポート8140で到達可能である必要があります。 ファイアウォールの制限が厳しすぎる場合は、この UFWチュートリアルで、ポート8140での着信リクエストを許可する方法を確認してください。

インフラストラクチャの例

次のインフラストラクチャを使用して、Puppetのセットアップ方法を示します。

ホスト名 役割 プライベートFQDN
host1 汎用Ubuntu14.04VPS host1.nyc2.example.com
host2 汎用Ubuntu14.04VPS host2.nyc2.example.com
ns1 プライマリネームサーバー ns1.nyc2.example.com
ns2 セカンダリネームサーバー ns2.nyc2.example.com

puppetエージェントはこれらすべてのホストにインストールされます。 これらのホストは、DNSの「.nyc2.example.com」サブドメインにマップされているプライベートネットワークインターフェイスによって参照されます。 これは、前提条件のチュートリアルで説明されているものと同じインフラストラクチャです: Ubuntu14.04でプライベートネットワークDNSサーバーとしてBINDを構成する方法。

すべての前提条件が整ったら、Puppetマスターサーバーの作成に進みましょう。

Puppetマスターサーバーを作成する

ホスト名として「puppet」を使用して、新しい Ubuntu 14.04 x64VPSを作成します。 次の詳細を使用して、プライベートネットワークをDNSに追加します。

ホスト名 役割 プライベートFQDN
傀儡 操り人形マスター puppet.nyc2.example.com

DNSを設定したばかりで、ホストをDNSに追加する方法がわからない場合は、DNSチュートリアルのDNSレコードの保守セクションを参照してください。 基本的に、「A」および「PTR」レコードを追加し、新しいホストが再帰クエリを実行できるようにする必要があります。 また、サーバーが短いホスト名を使用して相互に検索できるように、検索ドメインを構成していることを確認してください。

「puppet」をPuppetマスターのホスト名として使用すると、エージェントがマスターに接続しようとするときに使用するデフォルトの名前であるため、エージェントのセットアップが少し簡単になります。

次に、NTPを設定する必要があります。

NTPをインストールする

puppetマスターサーバーはエージェントノードの認証局として機能するため、エージェント証明書を発行する際の潜在的な問題を回避するために、正確なシステム時間を維持する必要があります。時間の不一致があると、証明書の有効期限が切れているように見える場合があります。 この目的のためにネットワークタイムプロトコル(NTP)を使用します。

まず、を使用して1回限りの同期を実行します ntpdate 指図:

sudo ntpdate pool.ntp.org

システム時刻は更新されますが、時間のずれを最小限に抑えるために時刻を自動的に更新するには、NTPデーモンをインストールする必要があります。 次のaptコマンドでインストールします。

sudo apt-get update && sudo apt-get -y install ntp

NTPサーバーに地理的に近い「プールゾーン」を使用するようにNTP構成を更新するのが一般的な方法です。 Webブラウザーで、 NTPプールプロジェクトに移動し、使用しているデータセンターに地理的に近いプールゾーンを検索します。 この例では、サーバーがニューヨークのデータセンターにあるため、米国のプール( http://www.pool.ntp.org/zone/us )を使用します。

開ける ntp.conf 編集用:

sudo vi /etc/ntp.conf

NTPプールプロジェクトページからファイルの先頭にタイムサーバーを追加します。

server 0.us.pool.ntp.org
server 1.us.pool.ntp.org
server 2.us.pool.ntp.org
server 3.us.pool.ntp.org

保存して終了。 NTPを再起動して、新しいタイムサーバーを追加します。

sudo service ntp restart

サーバーが正確な時刻を維持しているので、Puppetマスターソフトウェアをインストールしましょう。

PuppetMasterをインストールします

オープンソースのPuppetをインストールするにはさまざまな方法があります。 PuppetLabsが提供するpuppetmaster-passengerというdebianパッケージを使用します。 puppetmaster-passenger パッケージには、Puppetマスターと本番環境に対応したWebサーバー(Passenger with Apache)が含まれているため、基本的なpuppetmasterパッケージを使用する場合に比べていくつかの構成手順が不要です。

PuppetLabsパッケージをダウンロードします。

cd ~; wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb

パッケージをインストールします。

sudo dpkg -i puppetlabs-release-trusty.deb

aptの利用可能なパッケージのリストを更新します。

sudo apt-get update

をインストールします puppetmaster-passenger パッケージ:

sudo apt-get install puppetmaster-passenger

これで、Puppetマスター、Passenger、Apache、およびその他の必要なパッケージがインストールされました。 PassengerをApacheで使用しているため、PuppetマスタープロセスはApacheによって制御されます。 Apacheが実行されているときに実行されます。

続行する前に、パペットマスターを停止して停止します apache2 サービス:

sudo service apache2 stop

次に、Puppetのバージョンをロックします。

バージョンをロックする

バージョンごとに変更すると、Puppet環境が正常に機能しなくなる場合があります。 このため、インフラストラクチャ全体で一貫したPuppetバージョンを維持する必要があります。 新しいバージョンにアップグレードする場合は、エージェントノードの前に master をアップグレードしてください。マスターは、バージョン番号が大きいエージェントを管理できないためです。

次のコマンドを使用して、Puppetインストールのバージョンを調べてみましょう。

puppet help | tail -n 1

書き込み中、前のコマンドからの出力は次のとおりです。 Puppet v3.6.2. aptのピン機能を使用して、Puppetのインストールをロックできます 3.6.*、aptがPuppetをより高いメジャーリリースにアップグレードするのを防ぎます。 apt設定ディレクトリで呼び出される新しいファイルを作成します。

sudo vi /etc/apt/preferences.d/00-puppet.pref

次の行を追加して、 puppet, puppet-common、 と puppetmaster-passenger にパッケージ 3.6.* (インストールされているバージョンに一致するようにこれを変更してください):

# /etc/apt/preferences.d/00-puppet.pref
Package: puppet puppet-common puppetmaster-passenger
Pin: version 3.6*
Pin-Priority: 501

保存して終了。 これで、Puppetのバージョンがロックされました。

次のステップは、Puppetマスター名と証明書を設定することです。

名前と証明書を設定する

Puppetは、SSL証明書を使用して、マスターノードとエージェントノード間の通信を認証します。 Puppetマスターは認証局(CA)として機能し、エージェントの証明書要求に署名するために使用される独自の証明書を生成する必要があります。 ここでマスターの証明書を設定します。

既存の証明書を削除する

パッケージのインストール中に作成された既存のSSL証明書をすべて削除します。 PuppetのSSL証明書のデフォルトの場所は /var/lib/puppet/ssl:

sudo rm -rf /var/lib/puppet/ssl

証明書を構成する

パペットマスターの証明書を作成するときは、エージェントノードがマスターに接続できるすべてのDNS名を含めます。 この例では、「puppet」と「 puppet.nyc2.example.com 」、それぞれ短いホスト名とFQDNを使用します。

マスターのpuppet.confファイルを編集します。

sudo vi /etc/puppet/puppet.conf

次のようになります。

[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
templatedir=$confdir/templates

[master]
# These are needed when the puppetmaster is run by passenger
# and can safely be removed if webrick is used.
ssl_client_header = SSL_CLIENT_S_DN
ssl_client_verify_header = SSL_CLIENT_VERIFY

次の行を削除します templatedir そのオプションは非推奨であるため、オプション。

次の2行をの末尾に追加します [main] セクション(強調表示されたテキストをプライベートFQDNに置き換えます):

certname = puppet
dns_alt_names = puppet,puppet.nyc2.example.com

割り当てを使用することが重要です certname Apache / Passenger構成では、証明書の名前が「puppet」であることが想定されているため、「puppet」に変更します。 別のものが必要だと判断した場合 certname 設定では、必ずApache構成ファイルを編集してください(/etc/apache2/sites-available/puppetmaster.conf)SSL証明書パスの名前を変更します。

保存して終了。

新しい証明書を生成する

次に、次のコマンドを実行して、新しいCA証明書を作成します。

sudo puppet master --verbose --no-daemonize

SSLキーと証明書が作成されていることを示す出力が数行表示されます。 あなたが見たら Notice: Starting Puppet master version 3.6.2、証明書のセットアップが完了しました。 プレス CTRL-C シェルに戻ります。

サンプル出力:

Info: Creating a new SSL key for ca
Info: Creating a new SSL certificate request for ca
Info: Certificate Request fingerprint (SHA256): EC:7D:ED:15:DE:E3:F1:49:1A:1B:9C:D8:04:F5:46:EF:B4:33:91:91:B6:5D:19:AC:21:D6:40:46:4A:50:5A:29
Notice: Signed certificate request for ca
...
Notice: Signed certificate request for puppet
Notice: Removing file Puppet::SSL::CertificateRequest puppet at '/var/lib/puppet/ssl/ca/requests/puppet.pem'
Notice: Removing file Puppet::SSL::CertificateRequest puppet at '/var/lib/puppet/ssl/certificate_requests/puppet.pem'
Notice: Starting Puppet master version 3.6.2

作成したばかりの証明書の証明書情報を確認する場合は、次のように入力します。

sudo puppet cert list -all

前のコマンドは、実際にはすべての署名付き証明書と署名なし証明書要求を一覧表示します。 現在、他の証明書がまだ追加されていないため、マスター証明書のみが表示されます。

+ "puppet" (SHA256) 05:22:F7:65:64:CF:46:0E:09:2C:5D:FD:8C:AC:9B:31:17:2B:7B:05:93:D5:D1:01:52:72:E6:DF:84:A0:07:37 (alt names: "DNS:puppet", "DNS:puppet.nyc2.example.com")

Puppetマスターサービスを開始する準備がほぼ整いました。 まず、マスター構成を見てみましょう。

Puppetマスターを構成する

メインのパペット構成ファイル、 puppet.conf、3つのセクションで構成されています。 [main], [master]、 と [agent]. ご想像のとおり、「メイン」セクションにはグローバル構成が含まれ、「マスター」セクションはパペットマスターに固有であり、「エージェント」はパペットエージェントを構成するために使用されます。 以前に行った変更を除けば、デフォルトは基本的なセットアップで正常に機能します。

構成ファイルには、独自のセットアップに関連する可能性のある多くのオプションがあります。 ファイルの完全な説明は、Puppet Labs: Main Config File(puppet.conf)で入手できます。

編集する場合は、次のコマンドを実行します。

sudo vi /etc/puppet/puppet.conf

メインのマニフェストファイルを見てみましょう。

メインマニフェストファイル

Puppetはドメイン固有言語を使用してシステム構成を記述し、これらの記述は「マニフェスト」と呼ばれるファイルに保存されます。 .pp ファイル拡張子。 デフォルトのメインマニフェストファイルは次の場所にあります。 /etc/puppet/manifests/site.pp. いくつかの基本的なマニフェストについては後で説明しますが、ここではプレースホルダーファイルを作成します。

sudo touch /etc/puppet/manifests/site.pp

パペットマスターを起動します

これで、Puppetマスターを開始する準備が整いました。 を実行して開始します apache2 サービス:

sudo service apache2 start

Puppetマスターは実行されていますが、まだエージェントノードを管理していません。 Puppetエージェントをインストールして追加する方法を学びましょう!

PuppetAgentをインストールする

Puppetエージェントは、Puppetマスターが管理するすべてのサーバーにインストールする必要があります。 ほとんどの場合、これにはインフラストラクチャ内のすべてのサーバーが含まれます。 はじめに述べたように、Puppetエージェントは、すべての主要なLinuxディストリビューション、一部のUNIXプラットフォーム、およびWindowsで実行できます。 インストールはOSごとにわずかに異なるため、UbuntuサーバーとDebianサーバーへのインストールについてのみ説明します。

他のプラットフォームにPuppetをインストールする手順は、 Puppet Labs Docs にあります。選択したOSについては、必ず「エージェントノードへのPuppetのインストール」セクションに従ってください。

注:エージェントノードを含むすべてのPuppetノードがDNSを使用するように構成されていることを前提としています。 新しいサーバーを作成する場合は、Puppetエージェントをインストールする前に、必ずそれをDNSに追加してください。

Ubuntu/Debianエージェントノード

:サンプルエージェントノード host1 host2 ns1 ns2はすべてUbuntuです。 14.04VPS。 サーバーごとにこの手順を繰り返すので、それぞれをPuppetマスターで管理できます。

Puppetエージェントノードで、PuppetLabsパッケージをダウンロードします。

cd ~; wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb

パッケージをインストールします。

sudo dpkg -i puppetlabs-release-trusty.deb

aptの利用可能なパッケージのリストを更新します。

sudo apt-get update

Puppetエージェントパッケージをインストールします(puppet):

sudo apt-get install puppet

puppetエージェントはデフォルトで無効になっています。 これを変更するには、デフォルトのファイルを更新します。

sudo vi /etc/default/puppet

そしての値を変更します START 「はい」へ:

START=yes

保存して終了 /etc/default/puppet.

バージョンをロックする

Puppetマスターと同様に、aptピン機能を使用してPuppetエージェントのバージョンをロックする必要があります。

sudo vi /etc/apt/preferences.d/00-puppet.pref

次の行を追加して、 puppetpuppet-common にパッケージ 3.6.* (インストールされているバージョンに一致するようにこれを変更してください):

# /etc/apt/preferences.d/00-puppet.pref
Package: puppet puppet-common
Pin: version 3.6*
Pin-Priority: 501

保存して終了。 これで、Puppetのバージョンがロックされました。

エージェントを構成する

エージェントを実行する前に、いくつかの構成変更を行う必要があります。

エージェントのを編集します puppet.conf:

sudo vi /etc/puppet/puppet.conf

これは、Puppetマスターの初期構成ファイルとまったく同じように見えます。

繰り返しますが、 templatedir ライン。 次に、を削除します [master] セクション、およびその下のすべての行。

Puppetマスターが「puppet」で到達可能であると仮定すると、エージェントはマスターに接続できる必要があります。 マスターが「puppet」で利用できない場合は、PuppetマスターのFQDNを追加する必要があります。 これに関係なく構成することをお勧めします(FQDNを独自のものに置き換えてください)。

[agent]
server = puppet.nyc2.example.com

保存して終了。

Puppetエージェントを実行する準備が整いました。 これを行うには、次のコマンドを実行します。

sudo service puppet start

すべてが適切に構成されている場合、出力は表示されません。 Puppetエージェントを初めて実行すると、SSL証明書が生成され、署名要求がPuppetマスターに送信されます。 Puppetマスターがエージェントの証明書に署名すると、エージェントノードと通信できるようになります。

:これが初めてのPuppetエージェントである場合は、他のエージェントを追加する前に、Puppetマスターで証明書に署名することをお勧めします。 すべてが正しく機能することを確認したら、戻って残りのエージェントノードを自信を持って追加できます。

マスターにサインリクエスト

Puppetがエージェントノードで初めて実行されると、証明書署名要求がPuppetマスターに送信されます。 マスターがエージェントノードと通信して制御できるようになる前に、マスターはその特定のエージェントノードの証明書に署名する必要があります。 署名する方法と署名リクエストを確認する方法について説明します。

現在の証明書リクエストを一覧表示する

Puppetマスターで、次のコマンドを実行して、署名されていないすべての証明書要求を一覧表示します。

sudo puppet cert list

最初のエージェントノードを設定したばかりの場合は、1つのリクエストが表示されます。 ホスト名としてエージェントノードのFQDNを使用すると、次のようになります。

"host1.nyc2.example.com" (SHA256) B1:96:ED:1F:F7:1E:40:53:C1:D4:1B:3C:75:F4:7C:0B:A9:4C:1B:5D:95:2B:79:C0:08:DD:2B:F4:4A:36:EE:E3

ないことに注意してください + その前に。 これは、まだ署名されていないことを示しています。

リクエストに署名する

証明書リクエストに署名するには、 puppet cert sign コマンド、署名する証明書のホスト名。 たとえば、署名するには host1.nyc2.example.com、次のコマンドを使用します。

sudo puppet cert sign host1.nyc2.example.com

次の出力が表示されます。これは、証明書要求が署名されたことを示しています。

Notice: Signed certificate request for host1.nyc2.example.com
Notice: Removing file Puppet::SSL::CertificateRequest host1.nyc2.example.com at '/var/lib/puppet/ssl/ca/requests/host1.nyc2.example.com.pem'

これで、Puppetマスターは、署名された証明書が属するノードと通信して制御できるようになります。

現在のすべてのリクエストに署名する場合は、 -all そのようなオプション:

sudo puppet cert sign --all

証明書を取り消す

Puppetからホストを削除するか、ホストを再構築してからPuppetに追加し直すことができます。 この場合、Puppetマスターからホストの証明書を取り消す必要があります。 これを行うには、 clean アクション:

sudo puppet cert clean hostname

指定されたホストに関連付けられた証明書がPuppetから削除されます。

署名されたすべてのリクエストを表示

署名付きと署名なしのすべてのリクエストを表示する場合は、次のコマンドを実行します。

sudo puppet cert list --all

すべてのリクエストのリストが表示されます。 署名されたリクエストの前に + 署名されていないリクエストには +.

  "ns2.nyc2.example.com"   (SHA256) E4:F5:26:EB:B1:99:1F:9D:6C:B5:4B:BF:86:14:40:23:E0:50:3F:C1:45:D0:B5:F0:68:6E:B2:0F:41:C7:BA:76
+ "host1.nyc2.example.com" (SHA256) 71:A2:D3:82:15:0D:80:20:D4:7E:E3:42:C2:35:87:83:79:2B:57:1D:D5:5A:EC:F6:8B:EE:51:69:53:EB:6B:A1
+ "host2.nyc2.example.com" (SHA256) F4:79:A6:7C:27:0C:EA:8E:BC:31:66:FF:F2:01:AB:B1:35:7B:9F:5E:C8:C9:CE:82:EE:E8:2F:23:9F:0C:2B:ED
+ "puppet"                 (SHA256) 05:22:F7:65:64:CF:46:0E:09:2C:5D:FD:8C:AC:9B:31:17:2B:7B:05:93:D5:D1:01:52:72:E6:DF:84:A0:07:37 (alt names: "DNS:puppet", "DNS:puppet.nyc2.example.com")

おめでとうございます! これで、インフラストラクチャをPuppetで管理する準備が整いました。

Puppet入門

インフラストラクチャがPuppetで管理されるように設定されたので、開始するためのいくつかの基本的なタスクを実行する方法を示します。

事実の収集方法

Puppetは、 facter と呼ばれるツールを使用して、各ノードに関するファクトを収集します。 Facterは、デフォルトで、システム構成に役立つ情報を収集します(例: OS名、ホスト名、IPアドレス、SSHキーなど)。 構成を実行するために他のファクトが必要な場合は、カスタムファクトを追加できます。

収集された事実は、多くの状況で役立ちます。 たとえば、Webサーバー構成テンプレートを作成し、特定の仮想ホストの適切なIPアドレスを自動的に入力できます。 または、サーバーのOSが「Ubuntu」であると判断できるため、 apache2 代わりにサービス httpd. これらは基本的な例ですが、ファクトをどのように使用できるかについてのアイデアを提供する必要があります。

エージェントノードで自動的に収集されているファクトのリストを表示するには、次のコマンドを実行します。

facter

メインマニフェストの実行方法

人形エージェントは定期的に人形マスターにチェックインします(通常は30分ごと)。 この間、マスターに自身に関するファクトを送信し、現在のカタログ(メインマニフェストによって決定された、エージェントに関連するリソースとそれらの望ましい状態のコンパイル済みリスト)をプルします。 次に、エージェントノードは、目的の状態を実現するために適切な変更を試みます。 このサイクルは、Puppetマスターが実行され、エージェントノードと通信している限り継続します。

特定のエージェントノードでの即時実行

(問題のエージェントノードで)次のコマンドを実行して、特定のエージェントノードのチェックを手動で開始することもできます。

puppet agent --test

これを実行すると、メインマニフェストがテストを実行しているエージェントに適用されます。 次のような出力が表示される場合があります。

Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts in /var/lib/puppet/lib/facter/pe_version.rb
Info: Loading facts in /var/lib/puppet/lib/facter/puppet_vardir.rb
Info: Loading facts in /var/lib/puppet/lib/facter/root_home.rb
Info: Loading facts in /var/lib/puppet/lib/facter/facter_dot_d.rb
Info: Caching catalog for host1.nyc2.example.com
Info: Applying configuration version '1407966707'

このコマンドは、メインマニフェストが単一のサーバーにどのように影響するかをすぐに確認するのに役立ちます。

1回限りのマニフェスト

The puppet apply コマンドを使用すると、メインマニフェストに関連しないマニフェストをオンデマンドで実行できます。 マニフェストは、適用元のノードにのみ適用されます。 次に例を示します。

sudo puppet apply /etc/puppet/modules/test/init.pp

この方法でマニフェストを実行すると、エージェントノードで新しいマニフェストをテストする場合、またはマニフェストを1回だけ実行する場合に役立ちます(例: エージェントノードを目的の状態に初期化します)。

シンプルなマニフェスト

ご存知かもしれませんが、Puppetマスターのメインマニフェストファイルは次の場所にあります。 /etc/puppet/manifests/site.pp.

マスターで、今すぐ編集します。

sudo vi /etc/puppet/manifests/site.pp

次に、ファイルリソースを説明する次の行を追加します。

file {'/tmp/example-ip':                                            # resource type file and filename
  ensure  => present,                                               # make sure it exists
  mode    => 0644,                                                  # file permissions
  content => "Here is my Public IP Address: ${ipaddress_eth0}.\n",  # note the ipaddress_eth0 fact
}

保存して終了します。 インラインコメントは、定義しているリソースを説明する必要があります。 平易な英語では、これにより、すべてのエージェントノードが次の場所にファイルを持つことを保証します。 /tmp/example-ip、 と -rw-r--r-- 権限、およびノードのパブリックIPアドレスを含むテキスト。

エージェントがマスターに自動的にチェックインするまで待つか、またはを実行することができます puppet agent --test コマンド(エージェントノードの1つから)。 次に、次のコマンドを実行してファイルを印刷します。

cat /tmp/example-ip

次のような出力が表示されます(そのノードのIPアドレスを使用)。

Here is my Public IP Address: 128.131.192.11.

ノードを指定する

特定のノードのリソースを定義する場合は、 node マニフェストで。

マスターで編集 site.pp:

sudo vi /etc/puppet/manifests/site.pp

次に、次の行を追加します。

node 'ns1', 'ns2' {    # applies to ns1 and ns2 nodes
  file {'/tmp/dns':    # resource type file and filename
    ensure => present, # make sure it exists
    mode => 0644,
    content => "Only DNS servers get this file.\n",
  }
}

node default {}       # applies to nodes that aren't explicitly defined

保存して終了。

これで、Puppetは次のファイルを確認します。 /tmp/dns ns1およびns2に存在します。 あなたは実行したいかもしれません puppet agent --test スケジュールされたPuppetエージェントのプルを待ちたくない場合は、コマンド(ns1またはns2から)。

リソースを定義しない場合、Puppetはリソースに触れないように最善を尽くすことに注意してください。 したがって、マニフェストからこれらのリソースを削除した場合、Puppetは作成したファイルを削除しません。 ファイルを削除してもらいたい場合は、変更してください ensureabsent.

これらの例は何の役にも立ちませんが、Puppetが正しく機能していることを証明しています。

モジュールの使用

それでは、モジュールを使用してみましょう。 モジュールは、タスクをグループ化するのに役立ちます。 Puppetコミュニティには多くのモジュールがあり、独自のモジュールを作成することもできます。

Puppetマスターに、 puppetlabs-apache forgeapiのモジュール:

sudo puppet module install puppetlabs-apache

警告:既存のApacheセットアップでこのモジュールを使用しないでください。 Puppetによって管理されていないApache構成をすべて削除します。

今編集 site.pp:

sudo vi /etc/puppet/manifest/site.pp

次に、次の行を追加して、host2にApacheをインストールします。

node 'host2' {
  class { 'apache': }             # use apache module
  apache::vhost { 'example.com':  # define vhost resource
    port    => '80',
    docroot => '/var/www/html'
  }
}

保存して終了。 次回Puppetがhost2を更新するときに、Apacheパッケージをインストールし、「 example.com 」という仮想ホストを構成し、ポート80でリッスンし、ドキュメントルートを使用します。 /var/www/html.

host2 で、次のコマンドを実行します。

sudo puppet agent --test

Apacheがインストールされていることを示す一連の出力が表示されるはずです。 完了したら、host2のパブリックIPアドレスに移動します。 デフォルトのApacheウェルカムページが表示されます。

おめでとうございます! 最初のPuppetモジュールを使用しました!

結論

基本的なエージェント/マスターPuppetのインストールが完了したので、Puppetを使用してサーバーインフラストラクチャを管理する方法についてさらに学習する準備が整いました。 次のチュートリアルを確認してください: Puppetコード入門:マニフェストとモジュール