Chef meetup vol2_higanwoks

678 views
595 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
678
On SlideShare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
3
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Chef meetup vol2_higanwoks

  1. 1. Knife PluginをつくるChef Casual Talks Vol.2 (2013.5.20)HiganWorks LLC @sawanobolyMonday, May 20, 13
  2. 2. 紹介• HiganWorks 合同会社プラットホームエンジニア / 代表社員• インフラ関係自動化• クラウド的なもの(彼岸)で色々やる• Avatarはこんな感じ2•sawanoboly@github•sawanoboly@twitter•yukihiko.sawanobori@facebookMonday, May 20, 13
  3. 3. Chef的にはこんなの書いたりしました3Monday, May 20, 13
  4. 4. 当たり障りの無いCookbookを公開していたりします4Monday, May 20, 13
  5. 5. Chef事例:Giraffi(ClosedService)• メッセージハブ(Post&Trigger)• マルチデバイスNotification• MapReduce• kvmとjoyent• 役割別にレイヤ(Role)• 構築更新はChef/Capistrano• 提供先例• 某クラウドの内部/外部監視5HTTP(S)Rails APPsRDBMS(Cluster)MongoDB/RedisSMTP/Nagios/APNSetc..Monday, May 20, 13
  6. 6. KnifeプラグインをつくるMonday, May 20, 13
  7. 7. Knifeの役割• 基本的な役割• ChefServerに対してCRUD• Nodeに対するゴリ押しタスク実行• 要は外部APIに対するCRUD• Rubygemsで簡単拡張7Monday, May 20, 13
  8. 8. 自作例:Knife-ZCloudjp• JoyentのSmartMachineをAPI越しに作成• 同時にBootstrap & Role適用(戻りでIPアドレスをもらうのでBootまでつつき続ける!)8Monday, May 20, 13
  9. 9. Knife Pluginのコツ1/3• サブコマンド• クラス名=分解されてサブコマンドに• class NodeEdit #=> `knife node edit`• Knifeを継承して好きなクラスを作ればOK• banner #=> helpの表示内容9Monday, May 20, 13
  10. 10. Knife Pluginのコツ2/3• オプション• コマンドラインオプション• knife.rb に書く`knife[:optionname] = hogehoge `• Knifeを継承したクラスに#optionでOK10option  :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
  11. 11. Knife Pluginのコツ3/3• UI• 標準でHighLine(gem)が使われている• ANSIカラーシーケンス• HignLine#listで簡単リスト表示全体的に結構レガシーな感じ...11Monday, May 20, 13
  12. 12. knife-twitterhttps://github.com/higanworks/knife-twitterMonday, May 20, 13
  13. 13. knifeでtweet• カジュアルなAPIを探した#=> Twitterでええわ• `knife twitter post`-m TEXT で内容指定• `knife twitter tl` (timeline)オプション無しでタイムライン-m でメンション表示13Monday, May 20, 13
  14. 14. Post(1)14class  Chef    class  Knife        class  TwitterPost  <  Knife            include  TwitterBasebanner  "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
  15. 15. Post(2)15option  :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_sCLオプションの引数指定省略時のdefaultMonday, May 20, 13
  16. 16. TimeLine(1)16banner  "knife  twitter  tl  (options)"def  run    t_configure    begin        if  locate_config_value(:twitter_mentions)            timeline  =  Twitter.mentions_timeline        else            timeline  =  Twitter.home_timeline        endtimelineを取得Monday, May 20, 13
  17. 17. TimeLine(2)17tl_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])endputs  ui.list(tl_list,  :uneven_columns_across,  3)HighLineで色つけ、tl_listへtl_listの中身を3カラムで適当に表示Monday, May 20, 13
  18. 18. デモMonday, May 20, 13
  19. 19. お知らせ2+1点Monday, May 20, 13
  20. 20. Chef Meetup kansai20Monday, May 20, 13
  21. 21. TDI with Chef(Ja)21• 著者Stephen Nelson-Smith氏に翻訳版の配布許可を打診• 快く承諾(!?)※画像は加工によるものですMonday, May 20, 13
  22. 22. 22• EYが何やら募集されています• 要件:大規模ChefServer運用経験=>無茶を言うなと…Monday, May 20, 13
  23. 23. • そこでとちょっと働いてみるという選択• Chef含め自動化やってます• そのうちもっと大規模もやるかも(現状 数十のVMくらいを持ち回り)#=> EYの大規模ChefServer運用経験が満たせるかもしれない (^^)• 普通の募集はあまりしないが人は足りない興味があったら相談して23Monday, May 20, 13
  24. 24. Meetup KnasaiにつづくMonday, May 20, 13

×