はかどるchefの小ネタ集

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

Upload: yukihiko-sawanobori

Post on 22-May-2015

2.352 views

Category:

Technology


1 download

DESCRIPTION

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

TRANSCRIPT

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