chef meetup vol2_higanwoks

Post on 22-May-2015

319 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Knife Pluginをつくる

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

Monday, May 20, 13

紹介• HiganWorks 合同会社

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

• インフラ関係自動化

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

• Avatarはこんな感じ

2

•sawanoboly@github•sawanoboly@twitter

•yukihiko.sawanobori@facebook

Monday, May 20, 13

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

3Monday, May 20, 13

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

4Monday, May 20, 13

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

Knifeプラグインをつくる

Monday, May 20, 13

Knifeの役割• 基本的な役割

• ChefServerに対してCRUD

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

• 要は外部APIに対するCRUD

• Rubygemsで簡単拡張

7Monday, May 20, 13

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

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

8Monday, May 20, 13

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

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

• class NodeEdit #=> `knife node edit`

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

• banner #=> helpの表示内容

9Monday, May 20, 13

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

Knife Pluginのコツ3/3• UI

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

• ANSIカラーシーケンス

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

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

11Monday, May 20, 13

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

Monday, May 20, 13

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

#=> Twitterでええわ

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

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

13Monday, May 20, 13

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

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

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

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

デモ

Monday, May 20, 13

お知らせ2+1点

Monday, May 20, 13

Chef Meetup kansai20

Monday, May 20, 13

TDI with Chef(Ja)

21

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

• 快く承諾(!?)

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

Monday, May 20, 13

22

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

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

Monday, May 20, 13

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

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

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

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

23Monday, May 20, 13

Meetup Knasaiにつづく

Monday, May 20, 13

top related