8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Chefハンズオン#3 サードパーティクックブックを利用したレシピの作成

Last updated at Posted at 2014-09-10

他のクックブック内のレシピを利用する

サードパーティクックブックを利用する前に、まずは他のクックブックを呼び出す方法について紹介します。

Chefでは各レシピを include_recipe で呼び出し合うことが出来ます。

例えば sample クックブックのレシピ内で、resource-sample クックブックの default レシピが欲しい場合は以下のように記述します。

sample/metadata.rb
depends 'resource-sample'
sample/recipe/default.rb
include_recipe 'resource-sample::default'

同一のchef-repoに含まれるクックブックについてはmetadata.rbの記述は必要ありませんが、意識して依存性を記述したほうがよいでしょう。

また、defaultレシピを使う場合は include_recipe 'resource-sample' と省略することも出来ます。

レシピが重複してもいいの?

上記のようにsample2からsampleを利用した状態で、両方のレシピをrun_listに含めることが出来ます。この場合はどのような挙動になるでしょうか。

sample::defaultが重複するように思えますが、実際の実行結果は二重に実行することはありません。重複するものは同じリソース定義なので、Chefの実行時に一つのリソース定義とみなしています。

サードパーティのクックブックを利用する

同様の手段でサードパーティのクックブックをインターネットから取得して利用することが出来ます。

クックブックの管理するツールにはいくつかありますが、ここではBerkshelfを利用します。
まず、第一回のknife solo initコマンドでchef-repoを作成した際に、既に生成されている Berksfile を編集します。

Berksfile
source 'https://supermarket.getchef.com'

cookbook 'java', '~> 1.27.0'

タイミングによって source の部分のURLが違うかもしれません。旧URLでも利用可能なようですが、Berkshelf公式サイトでも書き換わっているため、随時修正するのがよいでしょう。

上記ではjavaクックブックを指定しました。まずはこのクックブックをダウンロードしてみましょう。

$ berks vendor cookbooks
$ ls cookbooks/

cookbooks/ 以下に java クックブックがダウンロードされます。これで利用可能になります。sample3クックブックを作って呼び出してみましょう。

$ knife cookbook create sample3 -o site-cookbooks
sample3/metadata.rb
depends 'java'
sample3/recipe/default.rb
include_recipe 'java::default'
nodes/vagrant.json
{
  "run_list": [
    "recipe[sample1]",
    "recipe[sample2]",
    "recipe[sample3]"
  ]
}

knife solo cook vagrant を実行すると、javaがインストールされます。特に指定がない場合、openjdk-6-javaがインストールされるはずです。

(TODO: java -version, echo $JAVA_HOMEの結果)

しかし、Java6は既にObsolateですし、OpenJDKじゃなくてOracle Javaが使いたい、という場合はあるでしょう。その時はクックブックに予め設定されている属性(attribute)を書き換えてあげます。

sample3/attributes/default.rb
default[:java][:jdk_version] = '8'
default[:java][:install_flavor] = 'oracle'
default[:java][:oracle][:accept_oracle_download_terms] = true

再度実行してみると、Javaのバージョンなどが更新されます。
ついでに、JAVA_HOMEなどの環境変数もきちんと更新されます。

(TODO: java -version, echo $JAVA_HOME)

run_listに直接書いてはいけないの?

sample3クックブックで

8
10
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?