Puppetを使い始めて半年経つので,そろそろ使い方をブログにまとめておく。
Vagrant + Puppet
今回は,VagrantとPuppetを組み合わせて使用する。
Vagrantの概要や使い方についてはこちらの記事をご閲覧いただきたい。
Puppetとは
Puppetはオープンソースの構成管理ツールである。Rubyで書かれており2.7.0まではGPL,それ以降はAPLライセンスとなっている。
PuppetはUnix系やWindowsの設定を管理するようデザインされている。ユーザーはシステムリソース及び状態をPuppetによる表現もしくはRubyのDSLで表現する。この情報はmanifestと呼ばれるファイルに保存される。
仮想マシン上でPuppetを使ってみる
PuppetはPuppet自身を用意(構成管理)することが出来ない為,Vagrantで仮想マシンを構築する際には予めRubyとPuppetがインストールされているBoxを使用する。
ちなみに手動でPuppetをインストールするには以下のようなコマンドを使用する。
gem install puppet --no-rdoc --no-ri
manifestを準備する
manifestとは,サーバのあるべき状態を記述することができる設定ファイルである。
Puppetではサーバー設定を記述したファイルを「manifest(マニフェスト)」と呼び,設定すべき項目を「リソース」と呼ぶ。扱えるリソースの種類(リソースタイプ)にはユーザーの管理を行うためのuserやサービスの管理を行うためのservice,ソフトウェアパッケージの管理を行うpackageなど様々なものが用意されており,これらリソースに対し設定すべき項目とその値をmanifestに記述していく。
manifestを書いてみる
以下のような内容のファイルを作成し,ファイル名をhello_world.ppとして保存する。
notice("Hello, World!")
manifestをどこに設置するか
先ほど作成したhello_world.ppをVagrantfileと同じディレクトリに設置する。
このようにすることで,仮想マシン内にマウントされた共有フォルダ上でhello_world.ppを扱うことが出来るようになる。
vagrant sshコマンドで仮想マシンにログインし,/vagrantディレクトリに移動するとhello_world.ppが存在することが確認出来る。
manifestを適用する
manifestを適用するには仮想マシン内の/vagrantディレクトリに移動し,以下のコマンドを実行する。
puppet apply hello_world.pp
Hello, World!と出力されれば適用が成功している。
実際にpuppetでパッケージをインストールしてみる
実際にzshのパッケージをインストールする際の設定を書いてみる。
先ほどのhello_world.ppと同じ階層に,以下の内容でzsh.ppというファイルを作成する。
package { 'zsh': ensure => installed, }
今度は,ログの表示だけではなく,システムへの変更も行うので,仮想マシン内の/vagrantディレクトリに移動し,sudo権限でmanifestを適用する。
sudo puppet apply zsh.pp
Finished catalog runと出力されれば,適用が成功している。
zshがインストールされていることを,以下のコマンドで確認してみると良いだろう。
which zsh
モジュールを使ってみる
Puppetが標準で扱うことが出来るリソース型はType Referenceで確認出来る。また,「モジュール」と呼ばれる機能拡張をインストールすることで,これ以外のリソースを扱うことも可能になる。モジュールはPuppetの開発元であるPuppet Labsだけでなく,サードパーティからも公開されており,Puppet Forgeというサイトにまとめられている。
試しに以下のコマンドでmysqlモジュールをインストールしてみる。
puppet module install puppetlabs/mysql
モジュールをインストールすることで,そのモジュールで提供される機能がマニフェスト内で利用可能になる。例えば,mysqlモジュールを使ってMySQLクライアントをインストールするには以下をmanifestに書き加えるだけで良い。
class { “mysql”: }
VagrantからPuppetを操ってプロビジョニングする
Vagrantfileにmanifestのパスやモジュールのパスを書いておくことでVagrantからPuppetを利用してプロビジョニング(構成管理)を行うことが出来るようになる。
以下をVagrantfileに記述する。
config.vm.provision :puppet do |puppet| puppet.manifests_path = 'puppet/manifests' puppet.manifest_file = 'default.pp' puppet.module_path = 'puppet/modules'end
仮想マシン起動中にVagrantからプロビジョニングするには,以下のコマンドを実行する。
vagrant provision
また,以下のコマンドでは仮想マシンの起動時にVagrantからプロビジョニングをすることも出来る。
vagrant up --provision
参考
Puppet (ソフトウェア) – Wikipedia
Rubyist Magazine – 入門 Puppet ダイジェスト
Puppetを使ったLinuxシステムの設定自動管理 – さくらのナレッジ