はかどるchefの小ネタ集
DESCRIPTION
2013.09.19 Chef Casual Talks Kansai vol.2とChef Casual Talks vol.4(Remote) 共同開催で使用したスライドですTRANSCRIPT
はかどるChefの小ネタ集
2013.09.19Chef Casual Talks Kansai vol.2
and Chef Casual Talks vol.4(Remote)
Thursday, September 19, 13
HiganWorks, OpsRockについて
2
• http://opsrock.in 共同開発・運営
• AWS OpsWorksとChefを主に取り扱うソリューションを提供
• アプリケーションのためのプラットフォーム構築/運用自動化をテーマに活動
Thursday, September 19, 13
一番簡単なlibraries/の使い方
Thursday, September 19, 13
似たようなことを沢山 template '/etc/php.d/hogehoge' do
source 'php.d/hogehoge.erb'
end
template '/etc/php.d/piyopiyo' do
source 'php.d/piyopiyo.erb'
end
template '/etc/php.d/mogemoge' do
source 'php.d/mogemoge.erb'
notifies :restart, 'service[php-fpm]' if notifiles ## これだけデーモン再起動
end
4Thursday, September 19, 13
libraries/default.rbに書いてdef template_for_php(dir, file, notifiles = false)
template ::File.join(dir,file) do
source [file, 'erb'].join('.')
mode '0644'
notifies :restart, 'service[php-fpm]' if notifiles # 引数で指定
end
end
5Thursday, September 19, 13
レシピにこうでOKtemplate_for_php node[:php][:php_base_dir] , 'php.ini'
template_for_php node[:php][:php_base_dir] , 'php.d/apc.ini'
template_for_php node[:php][:php_base_dir] , 'php-fpm.conf', true
template_for_php node[:php][:php_base_dir] , 'php-fpm.d/www.conf'
6Thursday, September 19, 13
vimとChefのレシピ開発
Thursday, September 19, 13
chef.vim• vimのプラグイン
8
https://github.com/t9md/vim-chef
Thursday, September 19, 13
chef.vimで• 関連ファイルを開く、split可
• レシピのアトリビュートっぽい記述から、定義場所へ
• テンプレートのソースへ
• LWRPのプロバイダからリソースのファイルへ
• macvimならダブルクリックでもOK
• 地味にはかどる
9Thursday, September 19, 13
vim dictonary• Vimの単語補完ライブラリ
10
https://github.com/OpsRockin/opscode_chef.vim_dict
Thursday, September 19, 13
ソースから感と経験で自動抽出
• 内部DSLなのでgemのメソッド抽出ではイマイチ
• レシピ、ライブラリやclient/solo.rbにも
• もう`immediately`が怖くないのではかどる
11Thursday, September 19, 13
知られていないchef-handler
Thursday, September 19, 13
Chef-handlerて?• ChefClientのレポート機能
• ハンドラ二種
• スタートハンドラ
• 開始時のレポート(あまり意味なし)
• レポートハンドラ
• 正常系のレポートハンドラ
• 異常があった時のExceptionハンドラ
13Thursday, September 19, 13
何が出せる?• nodeのダンプ
• Start,End と経過時間
• Update Resources
• Chef実行でConvergeが起こったリソースのリスト
• 例外のクラスとスタックトレース
14Thursday, September 19, 13
どこにだせる?• 標準添付のJsonハンドラでファイルダンプ
• ほか、Rubyでかけばなんでもあり
• ※ハンドラ内の例外は影響なし
• 普通の使い方は
• 例外があったらメールする
• update resourcesをログに出す
• IRCにだら流し
15Thursday, September 19, 13
Chef-handler使い方• どこでもいいので
• Chef::Config[:report_handlers]のアレイにHandlerのインスタンスを追加する
• exeption/start_handlersも同様
• 何個でもOK
16Thursday, September 19, 13
ログに出すコードサンプルsolo.rbでもレシピ内でもOK
require 'chef/handler'
class Chef::Handler::LogReport < ::Chef::Handler
def report
Chef::Log.warn '======= Update Resources are following...'
data[:updated_resources].each.with_index do |r,idx|
Chef::Log.warn [idx, r.to_s].join(':')
end
end
end
Chef::Config[:report_handlers] << Chef::Handler::LogReport.new
17Thursday, September 19, 13
ログのサンプル
18Thursday, September 19, 13
LWRPでなんでもリソース
Thursday, September 19, 13
LWRPなら• なんでもレシピのリソースでかける
• execute. script.. にまみれたレシピって。。
• 冪等性、収束にこだわればLWRP
• 詳しくは入魂のQiitaエントリを参照
20Thursday, September 19, 13
Actionの小ネタ
Thursday, September 19, 13
これどうなるでしょうかfile './hoge' do
action [:create,:delete,:create,:delete,:create,:delete,:delete]
content Time.now.to_s
end
22Thursday, September 19, 13
ActionはArrayの順番に全部やります
# cat <<EOL | chef-apply -s
> file './hoge' do
> action [:create,:delete,:create,:delete,:create,:delete,:delete]
> content Time.now.to_s
> end
> EOL
Recipe: (chef-apply cookbook)::(chef-apply recipe)
* file[./hoge] action create
- create new file ./hoge
* file[./hoge] action delete
- delete file ./hoge
* file[./hoge] action create
- create new file ./hoge
* file[./hoge] action delete
- delete file ./hoge
* file[./hoge] action create
- create new file ./hoge
* file[./hoge] action delete
- delete file ./hoge
* file[./hoge] action delete (up to date)
23Thursday, September 19, 13
Platform/Providerデバッグ
Thursday, September 19, 13
ActionでChefが実際に叩くコマンド=> Providerを見れば分かる
• Chefの挙動が気に入らないのは良くあること
• プラットフォームごとに実行されるコマンドはProviderで確認
• テストは基本モックで
25Thursday, September 19, 13
例:Solarisのサービス操作• 当初 `-s` が無く、気に入らなかった。
26Thursday, September 19, 13
挙動を修正1. レシピのenable_commandなどで上書き2. Librariesにモンキーパッチでデフォルトの挙動を矯
正3. OpscodeにIssue4. コード修正Spec修正5. プルリクエスト6. 適当に対話7. マージ! ChefのNewバージョンリリース!8. モンキーパッチを撤去する
27Thursday, September 19, 13
Chefのリリースノートにも載る
28
• 自慢できてはかどる
Thursday, September 19, 13
ChefServerでCookbookのPin
Thursday, September 19, 13
運用に欠かせないテク• Cookbookの更新をまず検証、保守がはかど
る
• 最近はSoloでもEnvironmentがつかえる
30Thursday, September 19, 13
Pin事例• monitのバージョンあげたい• Cookbookでデフォルトバージョンを変更• ついでにCookbookのバージョンをUP• test-kitchenで軽く実施• environment[本番]で旧バージョンにPin• Cookbook Upload• environment[検証]は勝手に更新されていくけど本番変わらず
• 検証環境から例外レポートが上がらなければ本番のPinを外して放置
31Thursday, September 19, 13
GUI(chef-web)注意• EnvironmentのCookbooksVersionは、Edit
ボタンを押したら既存のものが消えます
• ubuntu + ChefServer v11.0.8でそんな挙動
• バグっぽいけど掃除に便利なので放置
32Thursday, September 19, 13
とりあえずCookbookを公開する
Thursday, September 19, 13
Opscode community34
Thursday, September 19, 13
国外からIssue,Pull Requestがきてはかどる
35Thursday, September 19, 13
よそにプルリクもはかどる
36Thursday, September 19, 13
issueの切りグセがあればRubygemsのリリースノートにも載れる
=== 2.1.1 / 2013-09-10
Bug fixes:
* Only matching gems matching your local platform are considered for
installation. Issue #638 by José M. Prieto, issue #639 by sawanoboly.
37Thursday, September 19, 13
おしまい
Thursday, September 19, 13