PuppetでApacheを管理してみる part2
前回に引き続き、Apacheの構成管理をやって見たいと思います。
前回:PuppetでApacheを管理してみる part1 - ressyのナレッジ的なブログ
Apacheモジュールのマニフェストを書く
Apacheモジュール用のマニフェストを書いていきます。
具体的には以下のファイルを作成します。
/etc/puppet/modules/http/manifests/init.pp
moduleのマニフェストを作成する際には、以下のルールを守る必要があります。
他にもルールはあるのですが、まずは、以下を抑えておけば最低限書くことはできると思います。
init.pp
を必ず用意する- module名と同じclassを用意する必要がある
- 今回でいうと、
http
というclassを作成する必要があります
- 今回でいうと、
骨組み
出来上がり品を見せる前に、今回作成するhttp
クラスの骨組みを示します。
おおよそ、このような骨組みにします。
# cat /etc/puppet/modules/http/manifests/init.pp class http ( 変数:運用する/しない ) { case 変数 { 運用する: { - パッケージをインストールする - ファイルは、httpd.confのテンプレートを使用する - サービスは有効にする } 運用しない: { - パッケージをインストールする - サービスは無効にする } } }
# cat /etc/puppet/manifests/site.pp node 'WEB01' { class { 'http': 変数:運用する, } } node default { class { 'http': 変数:運用しない, }
前回の記事の通り、今回は勉強環境のWEB01
というサーバのみhttpを運用し、他のサーバでは運用しない構成とします。
今回は、クラスの変数として運用する/しないを用意し、その値に応じて処理を変えるようにしました。
あとは、/etc/puppet/manifests/site.pp
にてクラスを呼び出し、サーバWEB01
なら運用する、他のサーバなら運用しない。というふうにします。
サーバ単位でリソースをまとめる場合は、上記のようにnode
定義を使用すればOKです。
実際のところ、この骨組みがスマートかどうかはわかりませんが、今回の勉強環境で実現するには十分だと思うので、これで進めていきます。
実際に書いて見た
上記の骨組みを、実際に記述して見ます。
細かい説明は省略しますが、おおよそ内容はつかめるのではないかと思います。
# cat /etc/puppet/modules/http/manifests/init.pp class http( $enabled = 'false', # 変数:運用する/しない $port = '80' # 変数:ポート番号(templatesで使用する予定) ) { case $enabled { # Apacheを運用する場合 'true': { # パッケージをインストールする package { 'httpd': ensure => present, } # ファイルは、httpd.confのテンプレートを使用する file { '/etc/httpd/conf/httpd.conf': ensure => present, content => template('/etc/puppet/modules/http/templates/httpd.conf'), require => Package['httpd'], } # サービスは有効にする service { 'httpd': ensure => running, enable => true, subscribe => File['/etc/httpd/conf/httpd.conf'], } } # Apacheを運用しない場合 'false': { # パッケージをインストールする package { 'httpd': ensure => present, } # サービスは無効にする service { 'httpd': ensure => stopped, enable => false, } } } }
# cat /etc/puppet/manifests/site.pp node 'WEB01' { # WEB01ではApacheは運用する class { 'http': enabled => 'true', port => '80' } } node default { # 他のサーバではApacheは運用しない class { 'http': enabled => 'false', } }
補足として2点ほど
補足1
骨組みの説明には出ていきていない変数port
を用意しています。
この変数を使用して、templatesに格納したhttpd.conf
にてポート番号を指定できるようにしています。
補足2
上記マニフェストを書いただけでは、Agentサーバへのマニフェストの適用はできません。
理由は、templateのhttpd.conf
を用意していないためです。
puppet agent -t --verbose --noop
を任意のAgentサーバで実行してみると、適用に失敗するかと思います。
細く2点を踏まえて、詳しいことは次回以降取り上げます。
参考
この記事は、以下を参考にしています。
私とPuppet 基本編 その1 (Resource,Ordering,Class,Define,Node) - Qiita