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年...
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...
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年...
Flow (1)
#	
  Request	
  Data:	
  @data.json
{
	
  	
  "solo":{
	
  	
  	
  	
  "run_list":"recipe[sample::default]",
	
  ...
Flow (2)
#	
  HTTP	
  Request
$	
  curl	
  -­‐-­‐request	
  PUT	
  
-­‐-­‐header	
  "Content-­‐Type:	
  application/json"	...
Flow (3)
#{chef_repo}/data_bags/sample/items.json
{
	
  	
  "id":"items",
	
  	
  "data":{
	
  	
  	
  	
  "lines":["foo",...
Flow (4)
#{chef_repo}/site-­‐cookbooks/sample/recipes/default.rb
items	
  =	
  data_bag('sample')
items.map	
  do	
  |item...
Implementation (1)
#	
  lib/agile_solo/consumer.rb
module	
  AgileSolo
	
  	
  class	
  Consumer	
  <	
  Command
	
  	
  	...
Implementation (2)
#	
  lib/agile_solo/consumer.rb
module	
  AgileSolo
	
  	
  class	
  Consumer	
  <	
  Command
	
  	
  	...
Implementation (3)
#	
  lib/agile_solo/application/solo.rb
require	
  'chef/application/solo'
module	
  AgileSolo
	
  	
  ...
Wrap up
•Convergence for everyone
•Interface for End-users
•HTTP PUT Request (Sync)
•Kicks chef-solo (run_list,
data_bags)...
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日土曜日
Upcoming SlideShare
Loading in …5
×

Casual convergence

1,553 views
1,305 views

Published on

Chef をよく知らない Dev が solo を使ってみたお話を『第1回 Chef Casual Talks Kansai』でしてみました。http://chef-meetup-kansai.doorkeeper.jp/events/4978

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,553
On SlideShare
0
From Embeds
0
Number of Embeds
411
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Casual convergence

  1. 1. Casual Convergence @azukiwasher on July 24 2013 13年7月27日土曜日
  2. 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. 3. Topic for Today •Convergence for everyone 13年7月27日土曜日
  4. 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日土曜日
  5. 5. Interface for DevOps •chef-solo •knife •knife-solo, etc. 13年7月27日土曜日
  6. 6. Interface for End-users •Web app •Server (AgileSolo) 13年7月27日土曜日
  7. 7. Interface for End-users End-user User’s item Web app AgileSolo 13年7月27日土曜日
  8. 8. AgileSolo •Ruby gem •Wraps Chef::Application::Solo •Provides HTTP endpoint (puma) •Overrides “run_application” in Solo 13年7月27日土曜日
  9. 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. 10. Flow (2) #  HTTP  Request $  curl  -­‐-­‐request  PUT   -­‐-­‐header  "Content-­‐Type:  application/json"   -­‐-­‐data  @data.json   'http:/localhost:9292/solo' 13年7月27日土曜日
  11. 11. Flow (3) #{chef_repo}/data_bags/sample/items.json {    "id":"items",    "data":{        "lines":["foo","bar"]    } } 13年7月27日土曜日
  12. 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. 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. 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. 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. 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. 17. More efficient ... •AMQP instead of HTTP •Parallel convergence •Async •Agility •Scalability 13年7月27日土曜日
  18. 18. Resources AgileSolo https://github.com/azukiwasher/agile_solo 13年7月27日土曜日

×