はかどるchefの小ネタ集

Post on 22-May-2015

2.352 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

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

top related