Roleを使ってみる [Chef]
DBとWebという役割の違うサーバを構築するために、まずは先にPostgreSQLをインストールした環境をRoleを使った記述に変更します。
nodesディレクトリに用意したJOSNファイルは、ほぼそのままです。run_listの部分が、Roleの指定になっています。
【chef-repo\nodes\hoge201.json】
これまで、NodeのJSONファイルに記載していたrun_listの指定をここに移動しています。
【roles\dbserver.json】
この状態で、先にpostgresqlのcookbookを実行したGuestOSの状態を、saharaを使ってrollbackしてから、Cookします。(あらかじめ、sandboxをonにしておく必要があるので注意)
nodesディレクトリに用意したJOSNファイルは、ほぼそのままです。run_listの部分が、Roleの指定になっています。
【chef-repo\nodes\hoge201.json】
// hoge201.json
{
"postgresql": {
"version" : "9.3",
"enable_pgdg_yum" : "true",
"pgdg" : {
"repo_rpm_url" : {
"9.3" : {
"centos" : {
"6" : {
"i386" : "http://yum.postgresql.org/9.3/redhat/rhel-6-i386/pgdg-centos93-9.3-1.noarch.rpm",
"x86_64" : "http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-centos93-9.3-1.noarch.rpm"
}
}
}
}
},
"client" : {
"packages" : ["postgresql93","postgresql93-devel" ]
},
"server" : {
"packages" : ["postgresql93-server" ],
"service_name" : "postgresql-9.3"
},
"contrib" : {
"packages" : ["postgresql93-contrib"]
},
"dir" : "/var/lib/pgsql/9.3/data",
"password": {
"postgres": "e8a48653851e28c69d0506508fb27fc5"
},
"config" : {
"listen_addresses" : "*"
},
"pg_hba" : [
{"type":"local", "db":"all", "user":"postgres", "addr":"", "method":"ident" },
{"type":"local", "db":"all", "user":"all", "addr":"", "method":"ident" },
{"type":"host", "db":"all", "user":"all", "addr":"127.0.0.1/32", "method":"md5" },
{"type":"host", "db":"all", "user":"all", "addr":"::1/128", "method":"md5" },
{"type":"host", "db":"all", "user":"all", "addr":"192.168.56.0/24", "method":"md5" }
]
},
"run_list" : [
"role[dbserver]"
]
}
Roleの記述は、chef-repoリポジトリのrolesディレクトリにJSONファイルで記述します。ここでは、dbserver.jsonとしてファイルを記述します。これは、先のnodesのJOSNファイルのrun_listで指定したRoleの詳細を記載したものということになります。これまで、NodeのJSONファイルに記載していたrun_listの指定をここに移動しています。
【roles\dbserver.json】
// dbserver.json
{
"name": "dbserver",
"default_attributes": {},
"override_attributes": {},
"json_class": "Chef::Role",
"descripution": "",
"chef_type": "role",
"run_list": [
"recipe[postgresql]",
"recipe[postgresql::server]",
"recipe[postgresql::contrib]"
]
}
※nodesのJSONファイルに記述してあるpostgresql用の属性は、override_attributes以下にもそのまま記述可能であるが、ここでは元のままの記述で話を進めるものである。この状態で、先にpostgresqlのcookbookを実行したGuestOSの状態を、saharaを使ってrollbackしてから、Cookします。(あらかじめ、sandboxをonにしておく必要があるので注意)
C:\Users\hoge\chef-repo> vagrant sandbox rollback
変更したChef-repoリポジトリをCookする。C:\Users\hoge\chef-repo> knife solo cook vagrant@hoge201
以上で、chef-soloコマンドがGuestOS上に展開されて実行され、PostgreSQL 9.3がインストールされて、DBが構築されます。