puppetでLAMP構成を構築する part3

前回の続きで、phpのpuppetizeをしていきたいと思います。

phpのモジュール化

せっかくなのでphpもモジュール化しようと思います。
モジュール化の方針は、以前のapacheのpuppetizeとおおよそ同じ構造にしますので、そちらを参照ください。
PuppetでApacheを管理してみる part2 - ressyのナレッジ的なブログ

manifestの記述

早速manifestを記述しましょう。
前回の話を踏まえ、リポジトリの追加をしてから、phpをインストールします。

ちなみにインストールの流れは、以下を参考にしています。
CentOSにPHP5.6をインストール - Qiita

$ cat modules/php/manifests/init.pp
class php(
  $enabled = 'false',
) {
  case $enabled {
    'true': {
      # epelリポジトリの追加(remiを追加するために必要)
      package { 'epel-release':
        ensure   => installed,
        source   => 'http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm'    ,
        provider => rpm,
      }

      # remiリポジトリの追加
      package { 'remi-release':
        ensure   => installed,
        source   => 'http://rpms.famillecollet.com/enterprise/remi-release-6.rpm',
        provider => rpm,
        require  => Package['epel-release'],
      }

      # phpのインストール
      package { [
          'php',
          'php-devel',
          'php-mysql',
        ]:
        ensure  => present,
        install_options => [ '--enablerepo=remi', '--enablerepo=remi-php56' ],
        require  => Package['remi-release'],
      }

      # phpの設定ファイル
      file { '/etc/php.ini':
        ensure  => present,
        content => file('/etc/puppet/modules/php/files/etc/php.ini'),
        require => Package['php'],
      }
    }

    'false': {
       package { 'php':
         ensure => absent,
       }
    }
  }
}

ポイントを解説します。

epel/remiリポジトリの追加

epel、remiリポジトリの追加は、packageリソースで記述すればOKです。
その際に、sourceでインストール元URL、providerでパッケージマネージャを指定します。
ちなみにphp5.6を入れる目的でremiを追加しますが、remiを入れるにはepelリポジトリが必要なので、同様にpuppetizeします。

phpのインストール

remiリポジトリからパッケージをインストールする場合、オプションでremiリポジトリを有効にする必要があります。
yumコマンドでインストールする例を挙げると以下のようになり、これをpuppetizeする必要があります。

$  sudo yum install --enablerepo=remi --enablerepo=remi-php56 php php-devel php-mysql

ポイントは--enablerepo=remi --enablerepo=remi-php56をどうpuppetizeするかです。
具体的には、pacakgeリソースでinstall_optionsを使って記載すればOKです。

phpの設定ファイル

ここは特記事項はないかなと思います。
あえて言えば、php.iniで変数を使ってpuppetizeするような箇所は設けてないので、filesで管理していることくらいでしょうか。

moduleの呼び出し

こちらの記事で作成した、site.ppphpモジュール分を追加します。

# cat /etc/puppet/manifests/site.pp
node 'WEB01' {
    # WEB01ではApache/phpは運用する
    class { 'http':
        enabled => 'true',
        port => '80'
   }

   # phpを使用する
    class { 'php':
        enabled => 'true',
   }
}

node default {
    # 他のサーバではApache/phpは運用しない
    class { 'http':
        enabled => 'false',
   }

    # phpは使用しない
    class { 'php':
        enabled => 'true',
   }

}

ざっとこんなところでしょうか。
phpのpuppetizeについて、最低限の実装はできたかと思います。