38
はかどるChefの 小ネタ集 2013.09.19 Chef Casual Talks Kansai vol.2 and Chef Casual Talks vol.4(Remote) Thursday, September 19, 13

はかどるChefの小ネタ集

Embed Size (px)

DESCRIPTION

2013.09.19 Chef Casual Talks Kansai vol.2とChef Casual Talks vol.4(Remote) 共同開催で使用したスライドです

Citation preview

Page 1: はかどるChefの小ネタ集

はかどるChefの小ネタ集

2013.09.19Chef Casual Talks Kansai vol.2

and Chef Casual Talks vol.4(Remote)

Thursday, September 19, 13

Page 2: はかどるChefの小ネタ集

HiganWorks, OpsRockについて

2

• http://opsrock.in 共同開発・運営

• AWS OpsWorksとChefを主に取り扱うソリューションを提供

• アプリケーションのためのプラットフォーム構築/運用自動化をテーマに活動

Thursday, September 19, 13

Page 3: はかどるChefの小ネタ集

一番簡単なlibraries/の使い方

Thursday, September 19, 13

Page 4: はかどるChefの小ネタ集

似たようなことを沢山 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

Page 5: はかどるChefの小ネタ集

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

Page 6: はかどるChefの小ネタ集

レシピにこうで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

Page 7: はかどるChefの小ネタ集

vimとChefのレシピ開発

Thursday, September 19, 13

Page 8: はかどるChefの小ネタ集

chef.vim• vimのプラグイン

8

https://github.com/t9md/vim-chef

Thursday, September 19, 13

Page 9: はかどるChefの小ネタ集

chef.vimで• 関連ファイルを開く、split可

• レシピのアトリビュートっぽい記述から、定義場所へ

• テンプレートのソースへ

• LWRPのプロバイダからリソースのファイルへ

• macvimならダブルクリックでもOK

• 地味にはかどる

9Thursday, September 19, 13

Page 10: はかどるChefの小ネタ集

vim dictonary• Vimの単語補完ライブラリ

10

https://github.com/OpsRockin/opscode_chef.vim_dict

Thursday, September 19, 13

Page 11: はかどるChefの小ネタ集

ソースから感と経験で自動抽出

• 内部DSLなのでgemのメソッド抽出ではイマイチ

• レシピ、ライブラリやclient/solo.rbにも

• もう`immediately`が怖くないのではかどる

11Thursday, September 19, 13

Page 12: はかどるChefの小ネタ集

知られていないchef-handler

Thursday, September 19, 13

Page 13: はかどるChefの小ネタ集

Chef-handlerて?• ChefClientのレポート機能

• ハンドラ二種

• スタートハンドラ

• 開始時のレポート(あまり意味なし)

• レポートハンドラ

• 正常系のレポートハンドラ

• 異常があった時のExceptionハンドラ

13Thursday, September 19, 13

Page 14: はかどるChefの小ネタ集

何が出せる?• nodeのダンプ

• Start,End と経過時間

• Update Resources

• Chef実行でConvergeが起こったリソースのリスト

• 例外のクラスとスタックトレース

14Thursday, September 19, 13

Page 15: はかどるChefの小ネタ集

どこにだせる?• 標準添付のJsonハンドラでファイルダンプ

• ほか、Rubyでかけばなんでもあり

• ※ハンドラ内の例外は影響なし

• 普通の使い方は

• 例外があったらメールする

• update resourcesをログに出す

• IRCにだら流し

15Thursday, September 19, 13

Page 16: はかどるChefの小ネタ集

Chef-handler使い方• どこでもいいので

• Chef::Config[:report_handlers]のアレイにHandlerのインスタンスを追加する

• exeption/start_handlersも同様

• 何個でもOK

16Thursday, September 19, 13

Page 17: はかどるChefの小ネタ集

ログに出すコードサンプル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

Page 18: はかどるChefの小ネタ集

ログのサンプル

18Thursday, September 19, 13

Page 19: はかどるChefの小ネタ集

LWRPでなんでもリソース

Thursday, September 19, 13

Page 20: はかどるChefの小ネタ集

LWRPなら• なんでもレシピのリソースでかける

• execute. script.. にまみれたレシピって。。

• 冪等性、収束にこだわればLWRP

• 詳しくは入魂のQiitaエントリを参照

20Thursday, September 19, 13

Page 21: はかどるChefの小ネタ集

Actionの小ネタ

Thursday, September 19, 13

Page 22: はかどるChefの小ネタ集

これどうなるでしょうかfile './hoge' do

action [:create,:delete,:create,:delete,:create,:delete,:delete]

content Time.now.to_s

end

22Thursday, September 19, 13

Page 23: はかどるChefの小ネタ集

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

Page 24: はかどるChefの小ネタ集

Platform/Providerデバッグ

Thursday, September 19, 13

Page 25: はかどるChefの小ネタ集

ActionでChefが実際に叩くコマンド=> Providerを見れば分かる

• Chefの挙動が気に入らないのは良くあること

• プラットフォームごとに実行されるコマンドはProviderで確認

• テストは基本モックで

25Thursday, September 19, 13

Page 26: はかどるChefの小ネタ集

例:Solarisのサービス操作• 当初 `-s` が無く、気に入らなかった。

26Thursday, September 19, 13

Page 27: はかどるChefの小ネタ集

挙動を修正1. レシピのenable_commandなどで上書き2. Librariesにモンキーパッチでデフォルトの挙動を矯

正3. OpscodeにIssue4. コード修正Spec修正5. プルリクエスト6. 適当に対話7. マージ! ChefのNewバージョンリリース!8. モンキーパッチを撤去する

27Thursday, September 19, 13

Page 28: はかどるChefの小ネタ集

Chefのリリースノートにも載る

28

• 自慢できてはかどる

Thursday, September 19, 13

Page 29: はかどるChefの小ネタ集

ChefServerでCookbookのPin

Thursday, September 19, 13

Page 30: はかどるChefの小ネタ集

運用に欠かせないテク• Cookbookの更新をまず検証、保守がはかど

• 最近はSoloでもEnvironmentがつかえる

30Thursday, September 19, 13

Page 31: はかどるChefの小ネタ集

Pin事例• monitのバージョンあげたい• Cookbookでデフォルトバージョンを変更• ついでにCookbookのバージョンをUP• test-kitchenで軽く実施• environment[本番]で旧バージョンにPin• Cookbook Upload• environment[検証]は勝手に更新されていくけど本番変わらず

• 検証環境から例外レポートが上がらなければ本番のPinを外して放置

31Thursday, September 19, 13

Page 32: はかどるChefの小ネタ集

GUI(chef-web)注意• EnvironmentのCookbooksVersionは、Edit

ボタンを押したら既存のものが消えます

• ubuntu + ChefServer v11.0.8でそんな挙動

• バグっぽいけど掃除に便利なので放置

32Thursday, September 19, 13

Page 33: はかどるChefの小ネタ集

とりあえずCookbookを公開する

Thursday, September 19, 13

Page 34: はかどるChefの小ネタ集

Opscode community34

Thursday, September 19, 13

Page 35: はかどるChefの小ネタ集

国外からIssue,Pull Requestがきてはかどる

35Thursday, September 19, 13

Page 36: はかどるChefの小ネタ集

よそにプルリクもはかどる

36Thursday, September 19, 13

Page 37: はかどるChefの小ネタ集

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

Page 38: はかどるChefの小ネタ集

おしまい

Thursday, September 19, 13