Chefのrecipeを書いてみる その5 -変数をAttribute化してみる編-
前回書いた,Chefのrecipeを書いてみる その4 -インストール済みの場合は実行しないようにしてみる編-に引き続きchefのrecipeを順を追って書いていきます.今日は,バージョンやインストールするディレクトリをnodeファイルから指定できるようにしてみようと思います.
変数をAttribute化
現在,varsion
やinstall_dir
はrecipeに直接書いていますが,
毎回バージョンを指定するたび,recipeを書き換えるのはcoolじゃあありません.
Chefにはattributeというモノがあり,nodeファイルにattributeを書くことで,recipeにその内容が反映される仕組みになっています.
例とともにattributeをつかってみます.
まずはdefalt値から
cookbooks/flyway-cli
の下にattributes
というディレクトリがあります.
ここにdefalt.rb
を作成し,記述するとdefaultの引数を与えることができます.
flyway-cli/attributes/default.rb
default['flyway-cli'][:version] = "2.2.1" default['flyway-cli'][:install_dir] = "/opt/flyway"
ここで,:cookbook_name
を使うとCookBook名を取得でます.
flyway-cli/recipes/default.rb
recipeの方はただ置き換えるだけです(-
は削除したところ,+
は追加したところ).
-install_dir = "/opt/flyway" -version = "2.2.1" +install_dir = node['flyway-cli']['install_dir'] +version = node['flyway-cli']['version']
flyway-cli/recipes/mysql-connector.rb
こっちは変数も使ってなかったので,追加します.
install_dir ="#{node['flyway-cli']['install_dir']}/flyway/jars" execute "mysql-connector" do command <<-EOH wget http://cdn.mysql.com/Downloads/Connector-J/mysql-connector-java-5.1.26.tar.gz -P /tmp tar xzfC /tmp/mysql-connector-java-5.1.26.tar.gz #{install_dir} ln -nfs #{install_dir}/mysql-connector-java-5.1.26/mysql-connector-java-5.1.26-bin.jar #{install_dir}/mysql-connector-java-5.1.26-bin.jar EOH not_if { File.exists?("#{install_dir}/mysql-connector-java-5.1.26") } end
chef-repo/loaclhost.json
nodeファイルにattributeを追加すると,defaultの値が上書きされて,指定した場所,バーションでインストールできるようになります.
{ "flyway-cli": { "version": "2.2", "install_dir": "/tmp/test-flyway" }, "run_list" : [ "recipe[flyway-cli]", "recipe[flyway-cli::mysql-connector]" ] }
まとめ
これで,nodeファイルからバージョンやインストール先を指定できるようになりました.
今回使ったソースはこちらにおいておきます.
その1からその5で,chefの基本的なrecipeの書き方は終わりです. 気が向いたらMac用のrecipeや,その書き方も紹介しようかと思います.
Chefのrecipeを書いてみる一覧
- Chefのrecipeを書いてみる その1 -とりあえずrecipeを書いてみる編-
- Chefのrecipeを書いてみる その2 -recipeからインストールするversionを指定してみる編-
- Chefのrecipeを書いてみる その3 -recipeを分割してみる編-
- Chefのrecipeを書いてみる その4 -インストール済みの場合は実行しないようにしてみる編-
- Chefのrecipeを書いてみる その5 -変数をAttribute化してみる編-