Puppetの使い方

Puppetを使い始めて半年経つので,そろそろ使い方をブログにまとめておく。
 

VagrantとPuppet

Vagrantについての説明を省きたいので,Vagrantの概要や使い方についてはこちらの記事をご閲覧いただきたい。
今回は,VagrantとPuppetを組み合わせて使用する。
 

Puppetとは

Puppetはオープンソースの構成管理ツールである。Rubyで書かれており2.7.0まではGPL,それ以降はAPLライセンスとなっている。
PuppetはUnix系やWindowsの設定を管理するようデザインされている。ユーザーはシステムリソース及び状態をPuppetによる表現もしくはRubyのDSLで表現する。この情報はmanifestと呼ばれるファイルに保存される。
 

仮想マシン上でPuppetを使ってみる

Vagrantで仮想マシンを構築する際には,予めRubyとPuppetがインストールされているBoxを使用する。その理由は,PuppetはPuppet自身を用意(構成管理)することが出来ない為だ。
 

ちなみに…

ちなみに,手動でPuppetをインストールするには以下のようなコマンドを使用する。

gem install puppet --no-rdoc --no-ri

 

manifestを準備する

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システムの設定自動管理 – さくらのナレッジ

Article written by

コメントを残す