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

わすれっぽいきみえ

みらいのじぶんにやさしくしてやる

knife solo実行時に「SSL validation of HTTPS requests is disabled.」というwarningが出ないようにする。

現在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.rbknife solo cookを実行したときにホストOSのchefリポジトリ下にある .chef/knife.rbを読んで自動生成される。このため.chef/knife.rbに追記したわけだけど、 ちゃんと追記が適応されてるのが確認できた。

これだったら別にknife-soloのバージョンあげなくても.chef/knife.rbに直接追記するだけでいいんじゃないの?って 思うかもしれないけど、現状のchefではssl_verify_modeclient.rbに書くための設定だと書いてあるので githubのknife-soloのmasterからインストールしないとgemから入るknife-soloだと使えない。

そのうちknife-soloもバージョンがあがるはずだし、chefのバージョンも一個下のバージョンを使っちゃう のでも良いと思う。

解決するのに結構な時間をくったわ…。

この記事書くのに見たリンク