PuppetでApacheを管理してみる part3

前回に引き続き、Apacheの構成管理をやって見たいと思います。

前回:PuppetでApacheを管理してみる part2 - ressyのナレッジ的なブログ

httpd.confのテンプレートを用意する

前回の記事で作成したマニフェストのうち、ファイルリソースに注目しましょう。

# cat /etc/puppet/modules/http/manifests/init.pp
...
            # ファイルは、httpd.confのテンプレートを使用する
            file { '/etc/httpd/conf/httpd.conf':
              ensure  => present,
              content => template('/etc/puppet/modules/http/templates/httpd.conf'),
              require => Package['httpd'],
            }
...

content => template('/etc/puppet/modules/http/templates/httpd.conf')部分でテンプレートを指定しています。
というわけで、/etc/puppet/modules/http/templates/httpd.confを作成します。

httpd.confを一から作成するのは大変なので、/etc/httpd/conf/httpd.confをコピーして作成します。
ファイルがない場合は、一度yum install -y httpdをしてファイルを用意しましょう。
(後々構成管理するので、一旦パッケージを入れてしまっても問題ないです。)

# cp -p /etc/httpd/conf/httpd.conf /etc/puppet/modules/http/templates/httpd.conf

httpd.confのテンプレートを編集する

続いて、コピーしたテンプレートを編集していきます。
今回はポート番号で、変数portで指定できるようにします。

# cat /etc/puppet/modules/http/manifests/init.pp
class http(
    $enabled = 'false',    # 変数:運用する/しない
    $port = '80'           # 変数:ポート番号(templatesで使用する予定)
) {
...

この変数portをテンプレートに適用できるようにします。
テンプレートでListenを以下のようにしてください。

# vi /etc/puppet/modules/http/templates/httpd.conf
...
 127 #
 128 # Listen: Allows you to bind Apache to specific IP addresses and/or
 129 # ports, in addition to the default. See also the <VirtualHost>
 130 # directive.
 131 #
 132 # Change this to Listen on specific IP addresses as shown below to
 133 # prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
 134 #
 135 #Listen 12.34.56.78:80
 136 # Listen 80
 137 Listen <%=port %>
 138
...

ポイントは137行目の<%=port %>です。
ここに、クラスhttpの変数portの値が設定されます。
テンプレートの設定は以上です。

マニフェストの適用

各サーバでマニフェストを適用します。
先に--noopをつけてテストしましょう。

# puppet agent -t --verbose --noop
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for web01
Info: Applying configuration version '1479299354'
Notice: /Stage[main]/Http/File[/etc/httpd/conf/httpd.conf]/content:
--- /etc/httpd/conf/httpd.conf  2016-07-12 20:00:40.000000000 +0900
+++ /tmp/puppet-file20161116-25474-167ozr3-0  2016-11-16 21:29:15.637651861 +0900
@@ -133,6 +133,7 @@
 # prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
 #
 #Listen 12.34.56.78:80
+# Listen 80
 Listen 80

 #

Notice: /Stage[main]/Http/File[/etc/httpd/conf/httpd.conf]/content: current_value {md5}f6351c6d8c8dfc5899820d8c46d74651, should be {md5}8216a7e8c82725a59cdd504a2a007daa (noop)
Info: /Stage[main]/Http/File[/etc/httpd/conf/httpd.conf]: Scheduling refresh of Service[httpd]
Notice: /Stage[main]/Http/Service[httpd]: Would have triggered 'refresh' from 1 events
Notice: Class[Http]: Would have triggered 'refresh' from 2 events
Notice: Stage[main]: Would have triggered 'refresh' from 1 events
Notice: Finished catalog run in 0.46 seconds

上記は、WEB01に適用した例です。
マニフェストを適用する様子が読み取れると思います。
エラーや警告が出ていなければ、--noopを外して適用しましょう。

# puppet agent -t --verbose --noop

これを全てのAgentサーバで実行すればOKです。

以上で、Apacheの簡単な構成管理ができました。
前々回の記事以降で取り上げた内容を活用して、各自好みの構成管理をしてみてください。