ちょこっと vagrant + chef-solo を試そうかと思ったらめっちゃハマったのでメモ。
環境は Mac OS X 10.7.5 で、
$ brew -v Homebrew 0.9.4 $ brew info rbenv rbenv: stable 0.4.0, HEAD (略) $ rbenv versions system 1.9.3-p429 * 2.0.0-p195 (set by /Users/hogehoge/.rbenv/version)
こんな ruby 環境。
そして腐るほどあるchef-solo 環境設定のブログでよく見かけるように
$ gem install chef $ gem install knife-solo --pre
と chef と knife-solo をインストールすると、2013/7/24 現在で、
chef (11.6.0) knife-solo (0.3.0.pre5)
がインストールされます。そこで knife solo init を試そうとすると、
$ knife solo init chef-repo FATAL: Cannot find sub command for: 'solo init chef-repo' Available subcommands: (for details, knife SUB-COMMAND --help) ** BOOTSTRAP COMMANDS ** knife bootstrap FQDN (options) (中略) ** SEARCH COMMANDS ** knife search INDEX QUERY (options) ** SHOW COMMANDS ** knife show [PATTERN1 ... PATTERNn] ** SSH COMMANDS ** knife ssh QUERY COMMAND (options) ** STATUS COMMANDS ** knife status QUERY (options) ** TAG COMMANDS ** knife tag create NODE TAG ... knife tag delete NODE TAG ... knife tag list NODE (中略) ** XARGS COMMANDS ** knife xargs [COMMAND]
knife 側から solo コマンドが見えないようです。ruby 力よわいので ruby2 ではなく、1.9.3 に落として試したりしたけど結果は同じ。chef-solo は動くので knife-solo が悪いのだろうと色々探ってみてもダメ、こんな感じで 2 日くらい悩んでしまった。ここまでが昨日の話。
そして今朝、もしかして chef と knife-solo の相性が悪いのかも?と思い、chef のバージョンを落としてみることにした。
ということで Gemfile を、
# A sample Gemfile source "https://rubygems.org" # gem "rails" gem 'knife-solo', '0.3.0.pre5' gem 'chef', '11.4.4'
と書いて bundle 経由でインストールしてみました。
chef (11.4.4) knife-solo (0.3.0.pre5)
さてもう一度、knife solo init を試してみます。
$ knife solo init chef-repo Creating kitchen... Creating knife.rb in kitchen... Creating cupboards... Setting up Berkshelf... $ cd chef-repo $ ls -al total 16 drwxrwxr-x 10 hogehoge staff 340 Jul 25 10:20 ./ drwxrwxr-x 8 hogehoge staff 272 Jul 25 10:29 ../ drwxrwxr-x 3 hogehoge staff 102 Jul 25 10:20 .chef/ -rw-rw-r-- 1 hogehoge staff 12 Jul 25 10:20 .gitignore -rw-rw-r-- 1 hogehoge staff 14 Jul 25 10:20 Berksfile drwxrwxr-x 3 hogehoge staff 102 Jul 25 10:20 cookbooks/ drwxrwxr-x 3 hogehoge staff 102 Jul 25 10:20 data_bags/ drwxrwxr-x 3 hogehoge staff 102 Jul 25 10:20 nodes/ drwxrwxr-x 3 hogehoge staff 102 Jul 25 10:20 roles/ drwxrwxr-x 3 hogehoge staff 102 Jul 25 10:20 site-cookbooks/
わーい、ちゃんと動いた。
ということで chef (11.6.0) + knife-solo (0.3.0.pre5) は相性悪いっぽいです。
vagrant で立ち上げたサーバに対しての操作も OK っぽいです。
$ knife solo prepare 192.168.33.10 Bootstrapping Chef... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 6510 100 6510 0 0 1066 0 0:00:06 0:00:06 --:--:-- 28304 Downloading Chef 11.4.4 for el... Installing Chef 11.4.4 warning: /tmp/tmp.9Tz9a7RZ/chef-11.4.4.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY Preparing... ########################################### [100%] 1:chef ########################################### [100%] Thank you for installing Chef! Generating node config 'nodes/192.168.33.10.json'...
次に yum に EPEL リポジトリを追加しようとしたら、
$ (git管理するおまじない) $ knife cookbook site vendor yum Installing yum to /Users/hogehoge/proj/ruby/chef-repo/cookbooks Checking out the master branch. Creating pristine copy branch chef-vendor-yum Downloading yum from the cookbooks site at version 2.3.0 to /Users/hogehoge/proj/ruby/chef-repo/cookbooks/yum.tar.gz Cookbook saved: /Users/hogehoge/proj/ruby/chef-repo/cookbooks/yum.tar.gz Removing pre-existing version. Uncompressing yum version 2.3.0. removing downloaded tarball No changes made to yum Checking out the master branch. $ vi nodes/192.168.33.10.json $ knife solo cook 192.168.33.10 Running Chef on 192.168.33.10... Checking Chef version... Installing Berkshelf cookbooks to 'cookbooks'... Uploading the kitchen... Generating solo config... Running Chef... Starting Chef Client, version 11.4.4 Compiling Cookbooks... [2013-07-25T01:56:04+00:00] ERROR: Running exception handlers [2013-07-25T01:56:04+00:00] ERROR: Exception handlers complete Chef Client failed. 0 resources updated [2013-07-25T01:56:04+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out [2013-07-25T01:56:04+00:00] FATAL: Chef::Exceptions::CookbookNotFound: Cookbook yum not found. If you're loading yum from another cookbook, make sure you configure the dependency in your metadata ERROR: RuntimeError: chef-solo failed. See output above. $ ls -al cookbooks total 0 drwxrwxr-x 2 hogehoge staff 68 Jul 25 10:55 ./ drwxrwxr-x 12 hogehoge staff 408 Jul 25 10:55 ../
えー、なにこれ。
ということでちゃんと使えるようになるにはもう少し鍛錬が必要っぽいです。
なんとなく思うんだけど、rubyで作られた便利な技術は利用しているライブラリの依存関係で悩まされることが多いっす。こういうライブラリ間の依存が強すぎるのは自分はちょっと使いにくいなーって思う。
追記(13:10)
FATAL: Chef::Exceptions::CookbookNotFound: Cookbook yum not found.
これの原因わかった。
yum のレシピを、
$ knife cookbook site vendor yum
このように knife cookbook 経由で持って来ちゃったのがそもそもの間違いだったらしい。
knife solo init を行ったときの cookbook ディレクトリは Berkshelf が管理しちゃっているみたいです。knife solo cook すると Berkshelf が反応して、knife cookbook 経由で取り寄せた yum のレシピを消してしまう(Berkshelfからすれば「お前誰だ消えろ」的に扱うんでしょうな)。
なので、yum のレシピは Berkshelf 経由から取り寄せるような方法に変えれば良い。
$ cat Berksfile site :opscode cookbook 'yum'
このように Berkshelf ファイルを用意して、berks(Berkshelfのコマンド)の install を行う。
$ berks install
Installing yum (2.3.0) from site: 'http://cookbooks.opscode.com/api/v1/cookbooks'
無事に Berkshelf 経由で yum レシピがインストールされたようなので、knife solo cook を再度試み見てみます。
$ knife solo cook 192.168.33.10 Running Chef on 192.168.33.10... Checking Chef version... Installing Berkshelf cookbooks to 'cookbooks'... Using yum (2.3.0) Uploading the kitchen... Generating solo config... Running Chef... Starting Chef Client, version 11.4.4 Compiling Cookbooks... Converging 3 resources Recipe: yum::epel * yum_key[RPM-GPG-KEY-EPEL-6] action add (up to date) Recipe: <Dynamically Defined Resource> * package[gnupg2] action install (up to date) * execute[import-rpm-gpg-key-RPM-GPG-KEY-EPEL-6] action nothing (skipped due to not_if) * remote_file[/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6] action create (中略) * execute[yum-makecache] action run - execute yum -q makecache * ruby_block[reload-internal-yum-cache] action create - execute the ruby block reload-internal-yum-cache Recipe: i18n::default * template[/etc/sysconfig/i18n] action create (up to date) Chef Client finished, 5 resources updated
無事に動いたー。
入門Chef Solo - Infrastructure as Code
- 作者: 伊藤直也
- 出版社/メーカー: 伊藤直也
- 発売日: 2013/03/11
- メディア: Kindle版
- 購入: 16人 クリック: 1,027回
- この商品を含むブログ (10件) を見る