Upload
yukihiko-sawanobori
View
2.352
Download
1
Embed Size (px)
DESCRIPTION
2013.09.19 Chef Casual Talks Kansai vol.2とChef Casual Talks vol.4(Remote) 共同開催で使用したスライドです
Citation preview
はかどる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