要件
- Community Cookbooks の中から一つの cookbook を選んでどんな事が書いてあるか読み解く
- 先人たちの叡智を吸収して、cookbook 作成スキルをアップしたい
注意点
- まずは usage を個人的な意訳メモですのでご了承下さい!
今日のメニュー
概要
- memcached パッケージを対象 node に導入するシンプルな cookbook
- ohai を使い OS におけるパッケージ管理コマンドの違い等を吸収している
git より clone
$ git clone https://github.com/opscode-cookbooks/memcached.git
cookbook の構造
$ tree
.
├── CHANGELOG.md
├── CONTRIBUTING
├── Gemfile
├── LICENSE
├── README.md
├── attributes
│ └── default.rb
├── definitions
│ └── memcached_instance.rb
├── metadata.rb
├── recipes
│ └── default.rb
├── templates
│ └── default
│ ├── memcached.conf.erb
│ ├── memcached.default.erb
│ ├── memcached.sysconfig.erb
│ ├── sv-memcached-log-run.erb
│ └── sv-memcached-run.erb
└── test
└── kitchen
├── Kitchenfile
└── cookbooks
├── Cheffile
└── memcached_test
├── README.md
├── metadata.rb
└── recipes
├── default.rb
└── instance.rb
使い方
- 基本的に runlist に追加して利用する
ぢゃあ、いったい何をやっているのか?
レシピ、コードを読んでみる
recipes/default.rb
21 if node['platform_family'] == "rhel" and node['platform_version'].to_i < 6 22 include_recipe "yum::epel" 23 end 24 25 package "memcached" do 26 action :install 27 end 28 29 package "libmemcache-dev" do 30 case node['platform_family'] 31 when "rhel", "fedora" 32 package_name "libmemcached-devel" 33 when "smartos" 34 package_name "libmemcached" 35 else 36 package_name "libmemcache-dev" 37 end 38 action :install 39 end
- 21 行目から... ohai で取得した platform_family をチェックして rhel = RedHat 系 で且つ version が 6 以下の node であれば yum::epel レシピを include する
- 25 行目は単純な memcached のインストール
- 29 行目以降、libmemcache-dev パッケージの導入に際して 21 行目同様に OS の環境をチェックしてパッケージ名を調節している
41 service "memcached" do 42 action :nothing 43 supports :status => true, :start => true, :stop => true, :restart => true 44 end
- 言わずもがな service の自動起動を設定する
- ただし、action :nothing となっているので後述の設定ファイルの設置に記載されている notifies :restart にて実行される
46 case node['platform_family'] 47 when "rhel", "fedora" 48 template "/etc/sysconfig/memcached" do 49 source "memcached.sysconfig.erb" - 略 - 53 variables( 54 :listen => node['memcached']['listen'], - 略 - 58 :memory => node['memcached']['memory'] 59 ) 60 notifies :restart, "service[memcached]" 61 end 62 when "smartos" 63 # SMF directly configures memcached with no opportunity to alter settings 64 # If you need custom parameters, use the memcached_instance provider 65 service "memcached" do 66 action :enable 67 end 68 else 69 template "/etc/memcached.conf" do 70 source "memcached.conf.erb" - 略 - 74 variables( 75 :listen => node['memcached']['listen'], - 略 - 79 :memory => node['memcached']['memory'] 80 ) 81 notifies :restart, "service[memcached]" 82 end 83 end
- パッケージ導入と同じく、ohai の platform_family の値を参考に memcached 自体の設定ファイル設定を行なっている
- 設定ファイルの中身は attribute に設定した内容を temlate の variables にて上書きをしている
- 設定ファイルを設置した後、`notifies :restart, "service[memcached]"` で memacached のサービスを再起動している
- 途中に `when "smartos"` とあるが、smartos ってそもそも何だろ?って話なので、別途で調査をする
memcached/attributes/default.rb
20 default['memcached']['memory'] = 64 21 default['memcached']['port'] = 11211 22 default['memcached']['user'] = "nobody" 23 default['memcached']['listen'] = "0.0.0.0" 24 default['memcached']['maxconn'] = 1024
- デフォルトでは上記の値が設定されている
- 環境に応じて適宜書き換える
memcached/templates/default
$ tree . ├── memcached.conf.erb ├── memcached.default.erb ├── memcached.sysconfig.erb ├── sv-memcached-log-run.erb └── sv-memcached-run.erb
まとめ
- シンプルだけど cookbook 初心者の自分でも attribute とか template の使い方や ohai の役割等が分り易い cookbook だった
- また service の action :nothing からの notifies :restart についても理解し易かった