puppetのmanifestファイルを階層的に読み込む
Vagrantを利用していると、shellによるプロビジョニングでは、いろいろと面倒な記述をしなければならなかったり、OSによっては書き方を変えないと動かなかったりして、不都合な場合もあります。そういった問題を緩和するために、puppetやchefなどの構成管理ツールを使うと便利です。
今回は、chefと比べると古くから利用されているpuppetについての記事です。
puppetでは、manifestと呼ばれる設定ファイルに、構成管理情報を記述します。(Vagrantでは、デフォルトの設定で、manifests/default.ppを読みに行くように設定されているようです。)
単純な構成であれば、default.ppに全て記述してしまえばよいのですが、複雑な構成をする場合、default.ppに全てを書いてしまうと、管理が大変になってしまうため、目的ごとにmanifestを管理したい場合の方法を紹介します。(目的毎にmanifestファイルを作成することで、再利用性も高まります。)
Vagrant::Config.run do |config|
config.vm.box = "centos64_6_4"
config.vm.box_url = "http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-vbox4210.box"
# provisioningにはpuppetを利用
config.vm.provision "puppet"
end
import 'parent_manifest.pp' # このように別ファイルを読み出すことが可能
notice("This is a default.pp")
import 'child_*.pp' # 正規表現による一括読込も可能
notice("This is a parent_manifest.pp")
notice("This is a child_manifest.pp")
notice("This is a child_manifest2.pp")
上記ファイルを作成して、「vagrant up」を実行すると、
default.ppからparent_manifest.ppやchild_manifest.pp、child_manifest2.ppが呼び出されていることがわかります。
~中略~
==> default: Notice: Scope(Class[main]): This is a child_manifest.pp
==> default: Notice: Scope(Class[main]): This is a child_manifest2.pp
==> default: Notice: Scope(Class[main]): This is a parent_manifest.pp
==> default: Notice: Scope(Class[main]): This is a default.pp
==> default: Notice: Compiled catalog for localhost in environment production in 0.11 seconds
==> default: Notice: Finished catalog run in 0.04 seconds
上記manifestでは、何もしていませんが、それぞれapacheのインストールやtomcatのインストール、javaのインストールなどと分割してファイルを作成することで、柔軟にmanifestを作成することが可能です。