SlideShare a Scribd company logo
1 of 18
Download to read offline
Casual
Convergence
@azukiwasher on July 24 2013
13年7月27日土曜日
About me
•Name: Nobuhiro Uchiyama
•Ruby Programmer
•Non-DevOps
•Don’t know “Chef” very well
•Chef helps and drives us!
13年7月27日土曜日
Topic for Today
•Convergence for everyone
13年7月27日土曜日
Convergence
•The process of actions
configures a specific part of the
system.
•Provide this process to end-
users settings (email, www,
etc.) ...?
13年7月27日土曜日
Interface for DevOps
•chef-solo
•knife
•knife-solo, etc.
13年7月27日土曜日
Interface for End-users
•Web app
•Server (AgileSolo)
13年7月27日土曜日
Interface for End-users
End-user
User’s item
Web app AgileSolo
13年7月27日土曜日
AgileSolo
•Ruby gem
•Wraps Chef::Application::Solo
•Provides HTTP endpoint (puma)
•Overrides “run_application” in
Solo
13年7月27日土曜日
Flow (1)
#	
  Request	
  Data:	
  @data.json
{
	
  	
  "solo":{
	
  	
  	
  	
  "run_list":"recipe[sample::default]",
	
  	
  	
  	
  "name":"sample",
	
  	
  	
  	
  "items":{
	
  	
  	
  	
  	
  	
  "id":"items",
	
  	
  	
  	
  	
  	
  "data":{
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "lines":["foo",	
  "hoge"]
	
  	
  	
  	
  	
  	
  }
	
  	
  	
  	
  }
	
  	
  }
}
13年7月27日土曜日
Flow (2)
#	
  HTTP	
  Request
$	
  curl	
  -­‐-­‐request	
  PUT	
  
-­‐-­‐header	
  "Content-­‐Type:	
  application/json"	
  
-­‐-­‐data	
  @data.json	
  
'http:/localhost:9292/solo'
13年7月27日土曜日
Flow (3)
#{chef_repo}/data_bags/sample/items.json
{
	
  	
  "id":"items",
	
  	
  "data":{
	
  	
  	
  	
  "lines":["foo","bar"]
	
  	
  }
}
13年7月27日土曜日
Flow (4)
#{chef_repo}/site-­‐cookbooks/sample/recipes/default.rb
items	
  =	
  data_bag('sample')
items.map	
  do	
  |item|
	
  	
  file	
  ::File.join('..',	
  '/tmp/',	
  "#{item}.json")	
  do
	
  	
  	
  	
  content	
  JSON.pretty_generate(data_bag_item('sample',item))
	
  	
  end
end
13年7月27日土曜日
Implementation (1)
#	
  lib/agile_solo/consumer.rb
module	
  AgileSolo
	
  	
  class	
  Consumer	
  <	
  Command
	
  	
  	
  	
  attr_reader	
  :name,	
  :run_list,	
  :data,	
  :chef_repo
	
  	
  	
  	
  def	
  initialize(payload)
	
  	
  	
  	
  	
  	
  @name	
  =	
  payload['name']
	
  	
  	
  	
  	
  	
  @run_list	
  =	
  payload['run_list']
	
  	
  	
  	
  	
  	
  @data	
  =	
  MultiJson.dump(payload['items'])
	
  	
  	
  	
  	
  	
  @chef_repo	
  =	
  AgileSolo::Config.chef_repo
	
  	
  	
  	
  	
  	
  Chef::Config[:data_bag_path]	
  =	
  File.join(@chef_repo,	
  'data_bags')
	
  	
  	
  	
  	
  	
  chef_solo.config[:config_file]	
  =	
  File.join(@chef_repo,	
  'solo.rb')
	
  	
  	
  	
  	
  	
  chef_solo.config[:override_runlist]	
  =	
  [@run_list]
	
  	
  	
  	
  end
	
  	
  	
  	
  def	
  chef_solo
	
  	
  	
  	
  	
  	
  @chef_solo	
  ||=	
  AgileSolo::Application::Solo.new
	
  	
  	
  	
  end
	
  	
  
	
  ..	
  snip	
  ..
13年7月27日土曜日
Implementation (2)
#	
  lib/agile_solo/consumer.rb
module	
  AgileSolo
	
  	
  class	
  Consumer	
  <	
  Command
	
  	
  	
  	
  attr_reader	
  :name,	
  :run_list,	
  :data,	
  :chef_repo
	
  	
  
	
  ..	
  snip	
  ..
	
  	
  	
  	
  def	
  execute
	
  	
  	
  	
  	
  	
  begin
	
  	
  	
  	
  	
  	
  	
  	
  update_data_bag
	
  	
  	
  	
  	
  	
  	
  	
  chef_solo.run
	
  	
  	
  	
  	
  	
  rescue	
  =>	
  e
	
  	
  	
  	
  	
  	
  	
  	
  puts	
  e.backtrace.join("n")
	
  	
  	
  	
  	
  	
  end
	
  	
  	
  	
  end
	
  	
  	
  	
  def	
  update_data_bag
	
  	
  	
  	
  	
  	
  File.open(file_path,	
  'w')	
  {	
  |f|	
  f.write(data)	
  }
	
  	
  	
  	
  end
	
  ..	
  snip	
  ..
end
13年7月27日土曜日
Implementation (3)
#	
  lib/agile_solo/application/solo.rb
require	
  'chef/application/solo'
module	
  AgileSolo
	
  	
  module	
  Application
	
  	
  	
  	
  class	
  Solo	
  <	
  Chef::Application::Solo
	
  	
  	
  	
  	
  	
  attr_reader	
  :chef_solo_json
	
  	
  	
  	
  	
  	
  def	
  run_application
	
  	
  	
  	
  	
  	
  	
  	
  begin
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  run_chef_client
	
  	
  	
  	
  	
  	
  	
  	
  rescue	
  SystemExit	
  =>	
  e
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  raise
	
  	
  	
  	
  	
  	
  	
  	
  rescue	
  Exception	
  =>	
  e
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Chef::Application.fatal!("#{e.class}:	
  #{e.message}",	
  1)
	
  	
  	
  	
  	
  	
  	
  	
  end
	
  	
  	
  	
  	
  	
  end
	
  	
  	
  	
  end
	
  	
  end
end
13年7月27日土曜日
Wrap up
•Convergence for everyone
•Interface for End-users
•HTTP PUT Request (Sync)
•Kicks chef-solo (run_list,
data_bags)
13年7月27日土曜日
More efficient ...
•AMQP instead of HTTP
•Parallel convergence
•Async
•Agility
•Scalability
13年7月27日土曜日
Resources
AgileSolo
https://github.com/azukiwasher/agile_solo
13年7月27日土曜日

More Related Content

Viewers also liked

Viewers also liked (10)

Commis chef cover letter
Commis chef cover letterCommis chef cover letter
Commis chef cover letter
 
Pankaj Kumar -CV
Pankaj Kumar -CVPankaj Kumar -CV
Pankaj Kumar -CV
 
Kamlesh Cv
Kamlesh CvKamlesh Cv
Kamlesh Cv
 
Cv leonardo concezzi 2012
Cv leonardo concezzi 2012Cv leonardo concezzi 2012
Cv leonardo concezzi 2012
 
9 h s steels experience certificate
9 h s steels experience certificate9 h s steels experience certificate
9 h s steels experience certificate
 
Text sample application letter
Text sample application letterText sample application letter
Text sample application letter
 
Radisson Blu Hotel Delhi By 2020
Radisson Blu Hotel Delhi By 2020Radisson Blu Hotel Delhi By 2020
Radisson Blu Hotel Delhi By 2020
 
Experience Letter
Experience LetterExperience Letter
Experience Letter
 
experience certificates.PDF
experience  certificates.PDFexperience  certificates.PDF
experience certificates.PDF
 
Experience Letter
Experience LetterExperience Letter
Experience Letter
 

Similar to Casual convergence

Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframeworkSpring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframeworkToshiaki Maki
 
意図を表現するプログラミング
意図を表現するプログラミング意図を表現するプログラミング
意図を表現するプログラミングAtsuhiro Kubo
 
Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)hiboma
 
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalkBIGLOBE Tech Talk
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624Yusuke Suzuki
 
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4bitter_fox
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
The master plan of scaling a web application
The master plan ofscaling a web applicationThe master plan ofscaling a web application
The master plan of scaling a web applicationYusuke Wada
 
Power Appsで Excel関数を利用する3つの方法
Power Appsで Excel関数を利用する3つの方法Power Appsで Excel関数を利用する3つの方法
Power Appsで Excel関数を利用する3つの方法Nagao Hiroaki
 
Introduction to WildFly Swarm
Introduction to WildFly SwarmIntroduction to WildFly Swarm
Introduction to WildFly SwarmYoshimasa Tanabe
 
Introduction to JShell #JavaDayTokyo #jdt_jshell
Introduction to JShell #JavaDayTokyo #jdt_jshellIntroduction to JShell #JavaDayTokyo #jdt_jshell
Introduction to JShell #JavaDayTokyo #jdt_jshellbitter_fox
 
Jenkins plugin memo
Jenkins plugin memoJenkins plugin memo
Jenkins plugin memoKiyotaka Oku
 
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Javaどこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷JavaToshiaki Maki
 

Similar to Casual convergence (20)

Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframeworkSpring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
 
意図を表現するプログラミング
意図を表現するプログラミング意図を表現するプログラミング
意図を表現するプログラミング
 
Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)
 
Ext.direct
Ext.directExt.direct
Ext.direct
 
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624
 
Rx java x retrofit
Rx java x retrofitRx java x retrofit
Rx java x retrofit
 
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
aws_opsworks
aws_opsworksaws_opsworks
aws_opsworks
 
The master plan of scaling a web application
The master plan ofscaling a web applicationThe master plan ofscaling a web application
The master plan of scaling a web application
 
Power Appsで Excel関数を利用する3つの方法
Power Appsで Excel関数を利用する3つの方法Power Appsで Excel関数を利用する3つの方法
Power Appsで Excel関数を利用する3つの方法
 
実は怖くないDevOps
実は怖くないDevOps実は怖くないDevOps
実は怖くないDevOps
 
scala-kaigi1-sbt
scala-kaigi1-sbtscala-kaigi1-sbt
scala-kaigi1-sbt
 
ScalaMatsuri 2016
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016
 
Openstack chef-repo
Openstack chef-repoOpenstack chef-repo
Openstack chef-repo
 
Introduction to WildFly Swarm
Introduction to WildFly SwarmIntroduction to WildFly Swarm
Introduction to WildFly Swarm
 
Introduction to JShell #JavaDayTokyo #jdt_jshell
Introduction to JShell #JavaDayTokyo #jdt_jshellIntroduction to JShell #JavaDayTokyo #jdt_jshell
Introduction to JShell #JavaDayTokyo #jdt_jshell
 
Jenkins plugin memo
Jenkins plugin memoJenkins plugin memo
Jenkins plugin memo
 
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Javaどこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
 

Recently uploaded

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 

Recently uploaded (9)

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

Casual convergence

  • 1. Casual Convergence @azukiwasher on July 24 2013 13年7月27日土曜日
  • 2. About me •Name: Nobuhiro Uchiyama •Ruby Programmer •Non-DevOps •Don’t know “Chef” very well •Chef helps and drives us! 13年7月27日土曜日
  • 3. Topic for Today •Convergence for everyone 13年7月27日土曜日
  • 4. Convergence •The process of actions configures a specific part of the system. •Provide this process to end- users settings (email, www, etc.) ...? 13年7月27日土曜日
  • 6. Interface for End-users •Web app •Server (AgileSolo) 13年7月27日土曜日
  • 7. Interface for End-users End-user User’s item Web app AgileSolo 13年7月27日土曜日
  • 8. AgileSolo •Ruby gem •Wraps Chef::Application::Solo •Provides HTTP endpoint (puma) •Overrides “run_application” in Solo 13年7月27日土曜日
  • 9. Flow (1) #  Request  Data:  @data.json {    "solo":{        "run_list":"recipe[sample::default]",        "name":"sample",        "items":{            "id":"items",            "data":{                    "lines":["foo",  "hoge"]            }        }    } } 13年7月27日土曜日
  • 10. Flow (2) #  HTTP  Request $  curl  -­‐-­‐request  PUT   -­‐-­‐header  "Content-­‐Type:  application/json"   -­‐-­‐data  @data.json   'http:/localhost:9292/solo' 13年7月27日土曜日
  • 11. Flow (3) #{chef_repo}/data_bags/sample/items.json {    "id":"items",    "data":{        "lines":["foo","bar"]    } } 13年7月27日土曜日
  • 12. Flow (4) #{chef_repo}/site-­‐cookbooks/sample/recipes/default.rb items  =  data_bag('sample') items.map  do  |item|    file  ::File.join('..',  '/tmp/',  "#{item}.json")  do        content  JSON.pretty_generate(data_bag_item('sample',item))    end end 13年7月27日土曜日
  • 13. Implementation (1) #  lib/agile_solo/consumer.rb module  AgileSolo    class  Consumer  <  Command        attr_reader  :name,  :run_list,  :data,  :chef_repo        def  initialize(payload)            @name  =  payload['name']            @run_list  =  payload['run_list']            @data  =  MultiJson.dump(payload['items'])            @chef_repo  =  AgileSolo::Config.chef_repo            Chef::Config[:data_bag_path]  =  File.join(@chef_repo,  'data_bags')            chef_solo.config[:config_file]  =  File.join(@chef_repo,  'solo.rb')            chef_solo.config[:override_runlist]  =  [@run_list]        end        def  chef_solo            @chef_solo  ||=  AgileSolo::Application::Solo.new        end      ..  snip  .. 13年7月27日土曜日
  • 14. Implementation (2) #  lib/agile_solo/consumer.rb module  AgileSolo    class  Consumer  <  Command        attr_reader  :name,  :run_list,  :data,  :chef_repo      ..  snip  ..        def  execute            begin                update_data_bag                chef_solo.run            rescue  =>  e                puts  e.backtrace.join("n")            end        end        def  update_data_bag            File.open(file_path,  'w')  {  |f|  f.write(data)  }        end  ..  snip  .. end 13年7月27日土曜日
  • 15. Implementation (3) #  lib/agile_solo/application/solo.rb require  'chef/application/solo' module  AgileSolo    module  Application        class  Solo  <  Chef::Application::Solo            attr_reader  :chef_solo_json            def  run_application                begin                    run_chef_client                rescue  SystemExit  =>  e                    raise                rescue  Exception  =>  e                    Chef::Application.fatal!("#{e.class}:  #{e.message}",  1)                end            end        end    end end 13年7月27日土曜日
  • 16. Wrap up •Convergence for everyone •Interface for End-users •HTTP PUT Request (Sync) •Kicks chef-solo (run_list, data_bags) 13年7月27日土曜日
  • 17. More efficient ... •AMQP instead of HTTP •Parallel convergence •Async •Agility •Scalability 13年7月27日土曜日