chef meetup vol2_higanwoks

24
Knife Pluginを つくる Chef Casual Talks Vol.2 (2013.5.20) HiganWorks LLC @sawanoboly Monday, May 20, 13

Upload: yukihiko-sawanobori

Post on 22-May-2015

319 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Chef meetup vol2_higanwoks

Knife Pluginをつくる

Chef Casual Talks Vol.2 (2013.5.20)HiganWorks LLC @sawanoboly

Monday, May 20, 13

Page 2: Chef meetup vol2_higanwoks

紹介• HiganWorks 合同会社

プラットホームエンジニア / 代表社員

• インフラ関係自動化

• クラウド的なもの(彼岸)で色々やる

• Avatarはこんな感じ

2

•sawanoboly@github•sawanoboly@twitter

•yukihiko.sawanobori@facebook

Monday, May 20, 13

Page 3: Chef meetup vol2_higanwoks

Chef的にはこんなの書いたりしました

3Monday, May 20, 13

Page 4: Chef meetup vol2_higanwoks

当たり障りの無いCookbookを公開していたりします

4Monday, May 20, 13

Page 5: Chef meetup vol2_higanwoks

Chef事例:Giraffi(ClosedService)

• メッセージハブ(Post&Trigger)

• マルチデバイスNotification

• MapReduce

• kvmとjoyent

• 役割別にレイヤ(Role)

• 構築更新はChef/Capistrano

• 提供先例

• 某クラウドの内部/外部監視5

HTTP(S)

Rails APPs

RDBMS(Cluster)

MongoDB/Redis

SMTP/Nagios/APNS etc..

Monday, May 20, 13

Page 6: Chef meetup vol2_higanwoks

Knifeプラグインをつくる

Monday, May 20, 13

Page 7: Chef meetup vol2_higanwoks

Knifeの役割• 基本的な役割

• ChefServerに対してCRUD

• Nodeに対するゴリ押しタスク実行

• 要は外部APIに対するCRUD

• Rubygemsで簡単拡張

7Monday, May 20, 13

Page 8: Chef meetup vol2_higanwoks

自作例:Knife-ZCloudjp• JoyentのSmartMachineをAPI越しに作成

• 同時にBootstrap & Role適用(戻りでIPアドレスをもらうのでBootまでつつき続ける!)

8Monday, May 20, 13

Page 9: Chef meetup vol2_higanwoks

Knife Pluginのコツ1/3• サブコマンド

• クラス名=分解されてサブコマンドに

• class NodeEdit #=> `knife node edit`

• Knifeを継承して好きなクラスを作ればOK

• banner #=> helpの表示内容

9Monday, May 20, 13

Page 10: Chef meetup vol2_higanwoks

Knife Pluginのコツ2/3• オプション

• コマンドラインオプション

• knife.rb に書く`knife[:optionname] = ‘hogehoge’`

• Knifeを継承したクラスに#optionでOK

10

option  :twitter_consumer_key,    :short  =>  "-­‐K  CONSUMER_KEY",    :long  =>  "-­‐-­‐twitter_consumer_key",    :description    =>  "Your  Twitter  Consumer  Key",    :proc  =>  Proc.new  {  |key|  Chef::Config[:knife][:twitter_consumer_key]  =  key  }

Monday, May 20, 13

Page 11: Chef meetup vol2_higanwoks

Knife Pluginのコツ3/3• UI

• 標準でHighLine(gem)が使われている

• ANSIカラーシーケンス

• HignLine#listで簡単リスト表示

全体的に結構レガシーな感じ...

11Monday, May 20, 13

Page 12: Chef meetup vol2_higanwoks

knife-twitterhttps://github.com/higanworks/knife-twitter

Monday, May 20, 13

Page 13: Chef meetup vol2_higanwoks

knifeでtweet• カジュアルなAPIを探した

#=> Twitterでええわ

• `knife twitter post`-m ‘TEXT’ で内容指定

• `knife twitter tl` (timeline)オプション無しでタイムライン-m でメンション表示

13Monday, May 20, 13

Page 14: Chef meetup vol2_higanwoks

Post(1)

14

class  Chef    class  Knife        class  TwitterPost  <  Knife            include  TwitterBase

banner  "knife  twitter  post  (options)"def  run    t_configure    begin        Twitter.update(locate_config_value(:twitter_message))        ui.info("Tweet  Success!  #=>  #{locate_config_value(:twitter_message)}")

knife twitter postの素

#run に実行内容

#ui でコンソールに表示

Monday, May 20, 13

Page 15: Chef meetup vol2_higanwoks

Post(2)

15

option  :twitter_message,    :short  =>  "-­‐m  TWEET_MEAASAGE",    :long  =>  "-­‐-­‐twitter_message",    :description    =>  "Your  Tweet",

   :proc  =>  Proc.new  {  |message|  Chef::Config[:knife][:twitter_message]  =  message  },

   :default  =>  "Tweet  with  knife-­‐twitter  "  +  ::Knife::Twitter::VERSION  +  "  "  +  Time.now.to_s

CLオプションの引数指定

省略時のdefault

Monday, May 20, 13

Page 16: Chef meetup vol2_higanwoks

TimeLine(1)

16

banner  "knife  twitter  tl  (options)"def  run    t_configure    begin        if  locate_config_value(:twitter_mentions)            timeline  =  Twitter.mentions_timeline        else            timeline  =  Twitter.home_timeline        end

timelineを取得

Monday, May 20, 13

Page 17: Chef meetup vol2_higanwoks

TimeLine(2)

17

tl_list  =  []timeline.map  do  |tl|    tl_list  <<  ui.color(tl[:user][:screen_name],  :cyan)    tl_list  <<  ui.color(tl[:created_at].to_s,  :magenta)    tl_list  <<  ui.color(tl[:text])end

puts  ui.list(tl_list,  :uneven_columns_across,  3)

HighLineで色つけ、tl_listへ

tl_listの中身を3カラムで適当に表示

Monday, May 20, 13

Page 18: Chef meetup vol2_higanwoks

デモ

Monday, May 20, 13

Page 19: Chef meetup vol2_higanwoks

お知らせ2+1点

Monday, May 20, 13

Page 20: Chef meetup vol2_higanwoks

Chef Meetup kansai20

Monday, May 20, 13

Page 21: Chef meetup vol2_higanwoks

TDI with Chef(Ja)

21

• 著者Stephen Nelson-Smith氏に翻訳版の配布許可を打診

• 快く承諾(!?)

※画像は加工によるものです

Monday, May 20, 13

Page 22: Chef meetup vol2_higanwoks

22

• EYが何やら募集されています

• 要件:大規模ChefServer運用経験=>無茶を言うなと…

Monday, May 20, 13

Page 23: Chef meetup vol2_higanwoks

• そこでとちょっと働いてみるという選択

• Chef含め自動化やってます

• そのうちもっと大規模もやるかも(現状 数十のVMくらいを持ち回り)#=> EYの大規模ChefServer運用経験が 満たせるかもしれない (^^)

• 普通の募集はあまりしないが人は足りない興味があったら相談して

23Monday, May 20, 13

Page 24: Chef meetup vol2_higanwoks

Meetup Knasaiにつづく

Monday, May 20, 13