SEEDS Creator's Blog

読者です 読者をやめる 読者になる 読者になる

chef12になって今までのcookbookが動かなくなった

chefでサーバーの初期構築をする時、以下のコマンドでchefをインストールして

curl -L https://www.opscode.com/chef/install.sh | bash

その後、ソースをgitから持ってきてchef-soloを実行してました

chef-solo -c solo.rb -j localhost.json

ある時、chefをインストールしたらバージョン12になって、以下のようなエラーが出るようになりました。

ERROR: Cookbook loaded at path(s) [/tmp/vagrant-chef-1/chef-solo-1/cookbooks/xxxxxx] has invalid metadata: The `name' attribute is required in cookbook metadata

とか

ERROR: Cookbook hogehoge not found. If you're loading hogehoge from another cookbook, make sure you configure the dependency in your metadata

とか。。

どうやらchef 12 から cookbookのmetadata.rb内のname attributeの記述が必須になったり、重要視されるようになったようです。 具体的に上側のエラーはmetadata.rbにnameの記述がない、というエラー。 下側のエラーはmetadata.rbのnameに書かれてる名前が実際のレシピと異なる場合に出てるみたいです。 (例えばディレクトリ名がhogeなのに name が fuga と設定されていてrecipe[hoge]と呼び出した場合に上記のエラーになります)

上記のようなエラーが出た場合は cookbookディレクトリ内にあるmetadata.rbのname部分を見直してみてください。

name             'hoge'  ←ここが重要!
maintainer       'YOUR_COMPANY_NAME'
maintainer_email 'YOUR_EMAIL'
license          'All rights reserved'
description      'Installs/Configures hoge'
long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
version          '0.1.0'