ChefZero覚え書き
はじめてChefZeroのコード読むことになったので、調べたこと覚え書き。
インストール
ここからDL https://downloads.chef.io/products/chefdk
knife-zeroインストール
chef gem install knife-zero --no-document
node
# 対象サーバのリストを出力する knife node list # 環境をリスト出力する knife environment list # 環境(development)を作る knife environment create development # サーバ追加 # サーバに接続してサーバ情報をnodes/test_node.jsonに書き出す # 情報もりもりなので、.chef/knife.rb で knife[:automatic_attribute_whitelist] を指定して書き出す属性を絞ったほうがいい knife zero bootstrap test-server.com:<ポート> -x test_user --sudo -N test_node # nodeに実行するrecipeを追加 knife node run_list add 'test_node' 'recipe[sample_cook::default]' # recipe実行 # knife zero converge QUERY (options) knife zero converge name:test_node -x test_user --sudo
.chef/knife.rb
knife[:automatic_attribute_whitelist] = %w( fqdn/ os/ os_version/ hostname ipaddress/ roles/ recipes/ ipaddress/ platform/ platform_version/ )
cookbook
# cookbook作成 chef generate cookbook cookbooks/sample_cook # recipeを作る例 # cookbooks/sample_cook/recipes/default.rb package 'vim' do action :install end
role
Chefにおけるロールとは、同じ役割のサーバをまとめて管理するための仕組みである。 例えばWebサーバーが5台あった場合、同じ設定をサーバごとに用意しては手間が増えるしミスの可能性も高くなるが、 webというロールを用意して、webロールに対してランリストなどを記述することにより、個別のサーバーへの設定はロールを適用するだけで済むようになる。
## 作成 bundle exec knife create my_role ## 編集 bundle exec knife edit my_role
roles/my_role.json
{ "name": "my_role", "description": "", "json_class": "Chef::Role", "default_attributes": { }, "override_attributes": { }, "chef_type": "role", "run_list": [ "recipe[xxx]" ], "env_run_lists": { "production": [ "recipe[yyy::zzz]" ] } }
recipe
%w( bind-utils nagios-plugins nagios-plugins-all ).each { |name| package name } include_recipe 'mackerel-agent' include_recipe 'mackerel-agent::plugins' package 'mackerel-check-plugins'
package
は環境に合わせてよしなにyum install
やapt-get
に置き換えてくれるinclude_recipe
は、recipe
を取り込む。- 依存するrecipeは、#{COOKBOOK}/metadata.rb} に書き込む必要がある
- 外部cookbookも使える
attribute
上書きされる順番は弱い順にAttribute→recipe→Environment→Role。
Attributeの強さは弱い順にdefault→force_default→normal→override→force_override→automatic。
Berkshelf
外部クックブックのインストール管理できるbundlerみたいなやつ。
Berksfile
に参照するcookbookを書いて、以下でインストールできる。
# vendor/cookbooks ディレクトリにインストールする例 berks vendor vendor/cookbooks
外部クックブックはここにまとめてある。 https://supermarket.chef.io/
DryRun
# --why-run オプションで DryRun が実行される。 # 実行結果に Would xxxx と緑で表示されるのが、実際に実行される処理。 bundle exec knife zero converge 'name:node_name' -a ipaddress --why-run
chefのバージョンアップ
bundle exec knife zero converge 'name:#{SERVER_NAME}' -a ipaddress --why-run --client-version 13.12.14
gem install
サーバ内でChefRuby用のgemを直接インストール
sudo /opt/chef/embedded/bin/gem list | grep xxx sudo /opt/chef/embedded/bin/gem install xxx