-1
シェフの料理本では、同じソフトウェアの複数のバージョンをサポートしています。しかし、私たちは悪い習慣を採用しました。各バージョンごとにレシピのコピーを作成し、そのレシピを変更しました。シェフ - レシピの複製を避ける方法
remote_file install_file do
source node['android']['sdk']['23']['source_url']
not_if do
::File.exists?(extract_dir)
end
notifies :run, "execute[extract-sdk-23]", :immediately
end
これは本質的にコードの重複である
remote_file install_file do
source node['android']['sdk']['24']['source_url']
not_if do
::File.exists?(extract_dir)
end
notifies :run, "execute[extract-sdk-24]", :immediately
end
なります。属性を同じに保ちながら値を変更する方がよりクリーンになります。
これはシェフと同じですか?
重要な場合は、chef-clientゼロを直接使用します。つまり、ナイフなどは使用しません。
本当に問題はありません。バージョン( '23' /' 24')を属性として持つこともできます。文字列連結を使って '' execute [extract-sdk-24] ''アクションの名前をつくることもできますし、常に同じであれば '' extract-sdk''という名前を付けるだけです。 – StephenKing
レシピをよりクリーンにするために、その物を[リソース](https://docs.chef.io/custom_resources.html)にすることもできます。 – StephenKing
@StephenKing現在、私はandroid :: sdk_24またはandroid :: sdk_23を呼び出すことで、異なるレシピを実行できます。私は同じことを望んでいますが、異なる属性値で実行されるレシピは1つしかありません。彼らが私の後ろであるかどうかを調べるために、リソースを調べる必要があります。 –