前回に引き続き,Puppetを実践で利用するためのテクニックについて解説します。
Subversionによる設定ファイル/データファイルの管理
筆者が勤める(株)paperboy&co.では,Puppetの設定ファイルやデータファイル(マニフェスト,テンプレート,配布ファイル,モジュール等)をSubversionで管理しています。 Subversionを利用することにより,誰がどの様な変更を行ったかの記録も残るので,変更履歴の追跡や監査,変更のロールバックが可能になります。
今回,弊社においてどのようにPuppetとSubversionを組み合わせて,設定ファイルやデータファイルを管理しているのかをご紹介します。このやり方がベストというわけではありませんが,ご参考になれば幸いです。
Puppetサーバ上でのファイルの配置
Puppetサーバ上では,以下の図のように,/etc/puppet以下に設定ファイルを,/var/puppet/data以下にデータファイルを置いています。データファイルの配置は,第8回 Puppet実践テクニック(その3)で解説した,『データファイルの階層構造』と同じものです。Puppetサーバ上のこの2つのディレクトリには,Subversionで管理しないファイルは置かないようにしています。例えば,証明書用のディレクトリは,デフォルトでは/etc/puppet/sslですが,/var/puppet/ssl に変更しています。
Subversionリポジトリ上でのファイルの配置
Subversionリポジトリ上では,以下のようなファイル配置としています。弊社では複数のサービスを外部に提供しているため,サービスごとに階層をわけています。各サービスディレクトリの下には,trunk,tags,branchesディレクトリがあります。
設定ファイルやデータファイルの作成,編集,削除などは,trunkディレクトリの下で行います。tagsの下にあるファイルは,基本的には直接触ることはありません。trunkディレクトリの下は,設定ファイル用のconfディレクトリとデータファイル用のdataディレクトリに分かれます。
tagsディレクトリの下には,本番環境へリリースするためのファイルをtrunkからコピーして配置します。弊社ではディレクトリ名にリリース日を入れることによって,特定の日と同じ状態へのロールバックがすぐにできるようにしています。
branchesは,trunkにあるものとまったく異なる設定やマニフェストを試したい,という場合に,実験用のファイルを置くための場所です。
テストフェーズ
弊社ではVMWareにより,テスト用のPuppetクライアントとPuppetサーバをサービスごとに用意しています。
テストフェーズでは,PuppetクライアントとPuppetサーバにPuppetをインストール後,Puppetサーバ上で以下のように,SVNリポジトリから設定ファイルとデータファイルをチェックアウトします。
$ sudo svn co http://svn.local/puppet/serviceA/trunk/conf /etc/puppet $ sudo svn co http://svn.local/puppet/serviceA/trunk/data /var/puppet/data
チェックアウト後,ファイルの修正や追加,削除を行い,動作を確認します。動作に問題がなければ,以下のように,設定ファイルとデータファイルをコミットします。
$ sudo svn ci /etc/puppet $ sudo svn ci /var/puppet/data

