現在gemでchefとknife-soloをインストールすると
$ gem list chef (11.12.4) ohai (7.0.4) knife-solo (0.4.1)
Release Notes: chef-client 11.12.0 — Chef Docsによるとバージョン11.12から
knife ssl check
が導入されたとある。そのためいつも通りのつもりで
knife solo cook
を実行すると次のようなwaringが表示されるようになった。
[2014-05-02T16:24:47+09:00] WARN: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * SSL validation of HTTPS requests is disabled. HTTPS connections are still encrypted, but chef is not able to detect forged replies or man in the middle attacks. To fix this issue add an entry like this to your configuration file: \``` # Verify all HTTPS connections (recommended) ssl_verify_mode :verify_peer # OR, Verify only connections to chef-server verify_api_cert true \``` To check your SSL configuration, or troubleshoot errors, you can use the `knife ssl check` command like so: \``` knife ssl check -c /home/vagrant/chef-solo/solo.rb \```
このwarningを非表示にする方法として
vagrant - chef-solo ssl warning when provisioning - Stack Overflow
に載っているやり方でもいいけれど、実はknife-soloのgithub
を見るとssl_verify_mode
に対応したみたいだったので、
gemでインストールできるknife-soloではなくてgithubのknife-soloを使ってみる。
githubからknife solo導入
Gemfileに次のように書く。
source 'https://rubygems.org' gem 'knife-solo', :github => 'matschaffer/knife-solo', :branch => 'master', :submodules => true
あとはbundle install --path vendor/bundle
を実行するだけ。
こうすると(本当はknife-solo以外にも依存解決のためにいろいろ入るけど)
$ bundle list Gems included by the bundle: * knife-solo (0.4.2 5404866)
入った入った。
ssl_verify_mode
の適応
chefのリポジトリを作る
$ bundle exec knife solo init test Creating kitchen... Creating knife.rb in kitchen... Creating cupboards...
testディレクトリに移動して、その下の.chef/knife.rb
に次の行を追加。
ssl_verify_mode :verify_peer
これであとはbundle exec knife solo cook server_name
を実行してやると、もうwarningはでない。
chefのnodeのどこにssl_verify_mode
の記載がされているのか
そもそもwarning出力部分はどこだろうか?と思ってchefのライブラリをちょっと漁ってみたら
lib/chef/client.rb
に次のような記述を見つけた。
knife ssl check -c #{Chef::Config.config_file}
Chef::Config.config_file
で設定ファイルの場所が確認できる。
それでvagrantにレシピを適応したときのwarningをもっかいみると
knife ssl check -c /home/vagrant/chef-solo/solo.rb
になっていたので、vagrant ssh
でゲストマシンにログインしsolo.rb
の中身を見てみる。
node_name "server_name" base = File.expand_path('..', __FILE__) nodes_path File.join(base, 'nodes') role_path File.join(base, 'roles') data_bag_path File.join(base, 'data_bags') encrypted_data_bag_secret File.join(base, 'data_bag_key') environment_path File.join(base, 'environments') environment "_default" ssl_verify_mode :verify_peer cookbook_path [] cookbook_path << File.join(base, 'cookbooks-1') # /Users/kimikimi714/Documents/git_repo/chef_lesson/vendor/bundle/ruby/2.0.0/bundler/gems/knife-solo-5404866f6236/lib/knife-solo/resources/patch_cookbooks cookbook_path << File.join(base, 'cookbooks-2') # /Users/kimikimi714/Documents/git_repo/chef_lesson/repo/cookbooks cookbook_path << File.join(base, 'cookbooks-3') # /Users/kimikimi714/Documents/git_repo/chef_lesson/repo/site-cookbooks
このsolo.rb
はknife solo cook
を実行したときにホストOSのchefリポジトリ下にある
.chef/knife.rb
を読んで自動生成される。このため.chef/knife.rb
に追記したわけだけど、
ちゃんと追記が適応されてるのが確認できた。
これだったら別にknife-soloのバージョンあげなくても.chef/knife.rb
に直接追記するだけでいいんじゃないの?って
思うかもしれないけど、現状のchefではssl_verify_mode
はclient.rb
に書くための設定だと書いてあるので
githubのknife-soloのmasterからインストールしないとgemから入るknife-soloだと使えない。
そのうちknife-soloもバージョンがあがるはずだし、chefのバージョンも一個下のバージョンを使っちゃう のでも良いと思う。
解決するのに結構な時間をくったわ…。
この記事書くのに見たリンク
- matschaffer/knife-solo · GitHub
- Allow ssl_verify_mode to be configured · 30a7f54 · matschaffer/knife-solo · GitHub
- Release Notes: chef-client 11.12.0 — Chef Docs
- knife ssl check — Chef Docs
- vagrant - chef-solo ssl warning when provisioning - Stack Overflow
- About Configuration Files — Chef Docs
- client.rb — Chef Docs
- solo.rb — Chef Docs
- vagrantのchef soloのprovision中に「SSL validation of HTTPS requests is disabled.」と警告が表示される | misty-magic.h
- Setup Knife - Bonus Bits Wiki