Chefのrecipeを書いてみる その4 -インストール済みの場合は実行しないようにしてみる編-
前回書いた,Chefのrecipeを書いてみる その3 -recipeを分割してみる編-に引き続きchefのrecipeを順を追って書いていきます.今日は,すでにソフトウェアがインストールされていたら,実行しないようにガードをつけてみようと思います.
実行する前にインストールチェックをする
すでにインストールされていた場合は実行しないようにガードを付けます.
基本的には,only_if
かnot_if
を使う事によって達成します.
今回の判定条件は,#{install_dir}/versions/flyway-#{version}
が存在した場合インストール済みとみなすことにします.
not_if文を追加する(default.rb)
not_if
なので,評価結果が偽の時に実行されるように記述します.
次のようなコードを書くと,Fileやディレクトリの存在の有無を判定できます.
not_if { File.exists?("#{install_dir}/versions/flyway-#{version}") }
この場合は,存在しなかった場合true
になります.
execute "flyway-cli" do command <<-EOH wget http://repo1.maven.org/maven2/com/googlecode/flyway/flyway-commandline/#{version}/flyway-commandline-#{version}.tar.gz -P /tmp tar xzfC /tmp/flyway-commandline-#{version}.tar.gz #{install_dir}/versions ln -nfs #{install_dir}/versions/flyway-#{version} #{install_dir}/flyway EOH not_if { File.exists?("#{install_dir}/versions/flyway-#{version}") } end
mysql-connector.rb
こちらにも同様に追記します.
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 /opt/flyway/flyway/jars ln -nfs /opt/flyway/flyway/jars/mysql-connector-java-5.1.26/mysql-connector-java-5.1.26-bin.jar /opt/flyway/flyway/jars//mysql-connector-java-5.1.26-bin.jar EOH not_if { File.exists?("/opt/flyway/flyway/jars/mysql-connector-java-5.1.26") } end
実行してみる
ちゃんとスキップされてます.
# sudo chef-solo -c solo.rb -j localhost.json Starting Chef Client, version 11.6.2 Compiling Cookbooks... Converging 3 resources Recipe: flyway-cli::default * directory[/opt/flyway/versions] action create (up to date) * execute[flyway-cli] action run (skipped due to not_if) Recipe: flyway-cli::mysql-connector * execute[mysql-connector] action run (skipped due to not_if) Chef Client finished, 0 resources updated
まとめ
今回は,すでにインストール済みの場合はrecipeを実行しないようにするガードをつけました.これで無駄なインストールやファイルのダウンロードがおこなわれないようになります.
Chefのrecipeを書いてみる一覧
- Chefのrecipeを書いてみる その1 -とりあえずrecipeを書いてみる編-
- Chefのrecipeを書いてみる その2 -recipeからインストールするversionを指定してみる編-
- Chefのrecipeを書いてみる その3 -recipeを分割してみる編-
- Chefのrecipeを書いてみる その4 -インストール済みの場合は実行しないようにしてみる編-
- Chefのrecipeを書いてみる その5 -変数をAttribute化してみる編-