Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Geemus

1,018 views

Published on

  • Login to see the comments

  • Be the first to like this

Geemus

  1. 1. geemus (Wesley Beary)cloud architect field, sun reflected - dsevilla - flickr.com/photos/dsevilla/3531297705
  2. 2. Why? York Minster in the Fog - karlequin - flickr.com/photos/karlequin/440648686
  3. 3. Why?seize the infrastructure York Minster in the Fog - karlequin - flickr.com/photos/karlequin/440648686
  4. 4. Leave with Theft - ibcbulk - flickr.com/photos/ibcbulk/256435870
  5. 5. Leave with provisioning config Theft - ibcbulk - flickr.com/photos/ibcbulk/256435870
  6. 6. Leave with provisioning config DIY Theft - ibcbulk - flickr.com/photos/ibcbulk/256435870
  7. 7. The Plan Blueprints for Willborough Home - btobin - flickr.com/photos/btobin/4456582998
  8. 8. The PlanYet Another Cloud Library? Blueprints for Willborough Home - btobin - flickr.com/photos/btobin/4456582998
  9. 9. The PlanYet Another Cloud Library? Blind Date Blueprints for Willborough Home - btobin - flickr.com/photos/btobin/4456582998
  10. 10. The PlanYet Another Cloud Library? Blind Date Reader Exercises Blueprints for Willborough Home - btobin - flickr.com/photos/btobin/4456582998
  11. 11. The PlanYet Another Cloud Library? Blind Date Reader Exercises Next Steps Blueprints for Willborough Home - btobin - flickr.com/photos/btobin/4456582998
  12. 12. Yet Another Cloud Library?
  13. 13. the commodity market - baconandeggs - flickr.com/photos/baconandeggs/1490449135
  14. 14. Want the commodity market - baconandeggs - flickr.com/photos/baconandeggs/1490449135
  15. 15. Vendor Lockin Jail Kitty - 50362297@N07 - flickr.com/photos/50362297@N07/4673066549
  16. 16. Vendor Lockin Have Jail Kitty - 50362297@N07 - flickr.com/photos/50362297@N07/4673066549
  17. 17. Non-Standard - olivander - flickr.com/photos/olivander/198180580
  18. 18. Hope? Non-Standard - olivander - flickr.com/photos/olivander/198180580
  19. 19. Knowledge Silos Silos - zoomzoom - flickr.com/photos/zoomzoom/304135268
  20. 20. Knowledge Silos Demolish! Silos - zoomzoom - flickr.com/photos/zoomzoom/304135268
  21. 21. Progress Nice. - ianhampton - flickr.com/photos/ianhampton/1197107567
  22. 22. Progress615+ followers Nice. - ianhampton - flickr.com/photos/ianhampton/1197107567
  23. 23. Progress615+ followers 54+ forks Nice. - ianhampton - flickr.com/photos/ianhampton/1197107567
  24. 24. Progress615+ followers 54+ forks28+ contributors Nice. - ianhampton - flickr.com/photos/ianhampton/1197107567
  25. 25. Progress 615+ followers 54+ forks 28+ contributors25,000+ downloads Nice. - ianhampton - flickr.com/photos/ianhampton/1197107567
  26. 26. Blind Date
  27. 27. Golfland start - twid - flickr.com/photos/twid/410697715
  28. 28. overabundance of choice lack of experience Golfland start - twid - flickr.com/photos/twid/410697715
  29. 29. overabundance of choice lack of experienceexploratory programming Golfland start - twid - flickr.com/photos/twid/410697715
  30. 30. Installation
  31. 31. Installationgeymus ~ ⌘ sudo gem install fog
  32. 32. Installationgeymus ~ ⌘ sudo gem install fogSuccessfully installed fog-X.Y.Z
  33. 33. Installationgeymus ~ ⌘ sudo gem install fogSuccessfully installed fog-X.Y.Zgeymus ~ ⌘ fog
  34. 34. Installationgeymus ~ ⌘ sudo gem install fogSuccessfully installed fog-X.Y.Zgeymus ~ ⌘ fog To run as default, add the following to ~/.fog:default: :aws_access_key_id: INTENTIONALLY_LEFT_BLANK :aws_secret_access_key: INTENTIONALLY_LEFT_BLANK [...]
  35. 35. bin/fog
  36. 36. bin/foggeymus ~ ⌘ fog
  37. 37. bin/foggeymus ~ ⌘ fog Welcome to fog interactive! :default credentials provide AWS
  38. 38. bin/foggeymus ~ ⌘ fog Welcome to fog interactive! :default credentials provide AWS>> command_goes_here
  39. 39. bin/foggeymus ~ ⌘ fog Welcome to fog interactive! :default credentials provide AWS>> command_goes_herereturn_value_goes_here
  40. 40. Providers
  41. 41. Providers>> providers
  42. 42. Providers>> providers[AWS]
  43. 43. Providers>> providers[AWS] Support for: AWS, Bluebox, Rackspace, Slicehost, Terremark vCloud Initial support for: GoGrid, Linode, Local, NewServers
  44. 44. Services
  45. 45. Services>> AWS.services
  46. 46. Services>> AWS.services[:compute, :elb, :simpledb, :storage]
  47. 47. Services>> AWS.services[:compute, :elb, :simpledb, :storage] compute and storage are shared other services are unique
  48. 48. Collections
  49. 49. Collections>> AWS[:compute].collections
  50. 50. Collections>> AWS[:compute].collections[:addresses, ..., :volumes]
  51. 51. Collections>> AWS[:compute].collections[:addresses, ..., :volumes] flavors, images and servers are shared in compute directories and files are shared in storage other collections are unique
  52. 52. Collections Star Wars Collection - ception - flickr.com/photos/ception/356449209
  53. 53. Collectionsinterface to cloud resources Star Wars Collection - ception - flickr.com/photos/ception/356449209
  54. 54. Collections interface to cloud resources#all - returns all matching resources#new - initializes a local model#create - provisions a new resource#get - returns a particular resource#reload - update to latest remote state Star Wars Collection - ception - flickr.com/photos/ception/356449209
  55. 55. Collection #all
  56. 56. Collection #allreturns all matching resources
  57. 57. Collection #all returns all matching resources>> AWS[:compute].addresses.all
  58. 58. Collection #all returns all matching resources>> AWS[:compute].addresses.all<Fog::AWS::Compute::Addresses ... []>
  59. 59. Collection #all returns all matching resources>> AWS[:compute].addresses.all<Fog::AWS::Compute::Addresses ... []>>> AWS[:compute].addresses
  60. 60. Collection #all returns all matching resources>> AWS[:compute].addresses.all<Fog::AWS::Compute::Addresses ... []>>> AWS[:compute].addresses<Fog::AWS::Compute::Addresses ... []>
  61. 61. Collection #new
  62. 62. Collection #new initializes a local model
  63. 63. Collection #new initializes a local model>> AWS[:compute].addresses.new
  64. 64. Collection #new initializes a local model>> AWS[:compute].addresses.new<Fog::AWS::Compute::Address public_ip=nil ... >
  65. 65. Collection #create
  66. 66. Collection #create provisions a new resource
  67. 67. Collection #create provisions a new resource>> AWS[:compute].addresses.create
  68. 68. Collection #create provisions a new resource>> AWS[:compute].addresses.create<Fog::AWS::Compute::Address public_ip=‘x.y.z’ ... >
  69. 69. Collection #create provisions a new resource>> AWS[:compute].addresses.create<Fog::AWS::Compute::Address public_ip=‘x.y.z’ ... >>> AWS[:compute].servers.create
  70. 70. Collection #create provisions a new resource>> AWS[:compute].addresses.create<Fog::AWS::Compute::Address public_ip=‘x.y.z’ ... >>> AWS[:compute].servers.createArgumentError: image_id is required ...
  71. 71. Collection #get
  72. 72. Collection #getreturns a particular resource
  73. 73. Collection #get returns a particular resource>> AWS[:compute].addresses.get(‘x.y.z’)
  74. 74. Collection #get returns a particular resource>> AWS[:compute].addresses.get(‘x.y.z’)<Fog::AWS::Compute::Address public_ip=‘x.y.z’ ... >
  75. 75. Collection #reload
  76. 76. Collection #reload update to latest remote state
  77. 77. Collection #reload update to latest remote state>> AWS[:compute].addresses.all.reload
  78. 78. Collection #reload update to latest remote state>> AWS[:compute].addresses.all.reload<Fog::AWS::Compute::Addresses ... []>
  79. 79. Models Flying Into Boston 005 - Tilt Shift - tostie14 - flickr.com/photos/tostie14/117610830
  80. 80. Modelsrepresentation of a cloud resource Flying Into Boston 005 - Tilt Shift - tostie14 - flickr.com/photos/tostie14/117610830
  81. 81. Models representation of a cloud resource #save - provision or update resource #reload - update to latest remote state#wait_for - poll block until timeout or true #destroy - destroy resource Flying Into Boston 005 - Tilt Shift - tostie14 - flickr.com/photos/tostie14/117610830
  82. 82. Model #save
  83. 83. Model #saveprovision or update resource
  84. 84. Model #save provision or update resource>> AWS[:compute].addresses.new.save
  85. 85. Model #save provision or update resource>> AWS[:compute].addresses.new.save<Fog::AWS::Compute::Address public_ip=‘x.y.z’ ... >
  86. 86. Model #save provision or update resource>> AWS[:compute].addresses.new.save<Fog::AWS::Compute::Address public_ip=‘x.y.z’ ... >>> AWS[:compute].servers.new.save
  87. 87. Model #save provision or update resource>> AWS[:compute].addresses.new.save<Fog::AWS::Compute::Address public_ip=‘x.y.z’ ... >>> AWS[:compute].servers.new.saveArgumentError: image_id is required ...
  88. 88. Model #reload
  89. 89. Model #reloadupdate to latest remote state
  90. 90. Model #reload update to latest remote state>> address = AWS[:compute].addresses.new.save
  91. 91. Model #reload update to latest remote state>> address = AWS[:compute].addresses.new.save<Fog::AWS::Compute::Address public_ip=‘x.y.z’ ... >
  92. 92. Model #reload update to latest remote state>> address = AWS[:compute].addresses.new.save<Fog::AWS::Compute::Address public_ip=‘x.y.z’ ... >>> address.reload
  93. 93. Model #reload update to latest remote state>> address = AWS[:compute].addresses.new.save<Fog::AWS::Compute::Address public_ip=‘x.y.z’ ... >>> address.reload<Fog::AWS::Compute::Address public_ip=‘x.y.z’ ... >
  94. 94. Model #wait_for
  95. 95. Model #wait_forpoll a block until timeout or true
  96. 96. Model #wait_for poll a block until timeout or true>> AWS[:compute].servers.create(:image_id => ‘ami’)
  97. 97. Model #wait_for poll a block until timeout or true>> AWS[:compute].servers.create(:image_id => ‘ami’)<Fog::AWS::Compute::Server ... []>
  98. 98. Model #wait_for poll a block until timeout or true>> AWS[:compute].servers.create(:image_id => ‘ami’)<Fog::AWS::Compute::Server ... []>>> _.wait_for { ready? }
  99. 99. Model #wait_for poll a block until timeout or true>> AWS[:compute].servers.create(:image_id => ‘ami’)<Fog::AWS::Compute::Server ... []>>> _.wait_for { ready? }{:duration=>20}
  100. 100. Model #destroy
  101. 101. Model #destroy destroy resource
  102. 102. Model #destroy destroy resource>> AWS[:compute].servers.create(:image_id => ‘i-x’)
  103. 103. Model #destroy destroy resource>> AWS[:compute].servers.create(:image_id => ‘i-x’)<Fog::AWS::Compute::Server ... []>
  104. 104. Model #destroy destroy resource>> AWS[:compute].servers.create(:image_id => ‘i-x’)<Fog::AWS::Compute::Server ... []>>> _.destroy
  105. 105. Model #destroy destroy resource>> AWS[:compute].servers.create(:image_id => ‘i-x’)<Fog::AWS::Compute::Server ... []>>> _.destroytrue
  106. 106. Requests API Docs - thesmith - flickr.com/photos/thesmith/4574969567
  107. 107. Requestsdown and dirty with specifics API Docs - thesmith - flickr.com/photos/thesmith/4574969567
  108. 108. Requestsdown and dirty with specifics provides flexibility and power but requires vendor specifics API Docs - thesmith - flickr.com/photos/thesmith/4574969567
  109. 109. Requests
  110. 110. Requests>> AWS[:compute].requests
  111. 111. Requests>> AWS[:compute].requests[:allocate_address, ..., :stop_instances]
  112. 112. Requests>> AWS[:compute].requests[:allocate_address, ..., :stop_instances] requests are unique across providers
  113. 113. e.g. #allocate_address
  114. 114. e.g. #allocate_address>> AWS[:compute].allocate_address
  115. 115. e.g. #allocate_address>> AWS[:compute].allocate_address#<Excon::Response@headers={...},@body={"requestId"=>"a-b-c", "publicIp"=>"x.y.z"},@status=200>
  116. 116. ReaderExercises
  117. 117. Got Infrastructure New IBM Z10 Mainframe - pchow98 - flickr.com/photos/pchow98/2545281504
  118. 118. Got Infrastructure now what? New IBM Z10 Mainframe - pchow98 - flickr.com/photos/pchow98/2545281504
  119. 119. servers#bootstrap
  120. 120. servers#bootstrap>> AWS[:compute].servers.bootstrap( :image_id => ‘ami’, :private_key_path => ‘~/.ssh/id_rsa’, :public_key_path => ‘~/.ssh/id_rsa.pub’)
  121. 121. servers#bootstrap>> AWS[:compute].servers.bootstrap( :image_id => ‘ami’, :private_key_path => ‘~/.ssh/id_rsa’, :public_key_path => ‘~/.ssh/id_rsa.pub’)<Fog::AWS::Compute::Server ... []>
  122. 122. servers#bootstrap>> AWS[:compute].servers.bootstrap( :image_id => ‘ami’, :private_key_path => ‘~/.ssh/id_rsa’, :public_key_path => ‘~/.ssh/id_rsa.pub’)<Fog::AWS::Compute::Server ... []>>> _.ssh(‘pwd’)
  123. 123. servers#bootstrap>> AWS[:compute].servers.bootstrap( :image_id => ‘ami’, :private_key_path => ‘~/.ssh/id_rsa’, :public_key_path => ‘~/.ssh/id_rsa.pub’)<Fog::AWS::Compute::Server ... []>>> _.ssh(‘pwd’)[#<Fog::SSH::Result @stdout=”/Users/root” ...>]
  124. 124. servers#bootstrap>> AWS[:compute].servers.bootstrap( :image_id => ‘ami’, :private_key_path => ‘~/.ssh/id_rsa’, :public_key_path => ‘~/.ssh/id_rsa.pub’)<Fog::AWS::Compute::Server ... []>>> _.ssh(‘pwd’)[#<Fog::SSH::Result @stdout=”/Users/root” ...>]>> _.ssh(‘foo’, ‘bar’)
  125. 125. servers#bootstrap>> AWS[:compute].servers.bootstrap( :image_id => ‘ami’, :private_key_path => ‘~/.ssh/id_rsa’, :public_key_path => ‘~/.ssh/id_rsa.pub’)<Fog::AWS::Compute::Server ... []>>> _.ssh(‘pwd’)[#<Fog::SSH::Result @stdout=”/Users/root” ...>]>> _.ssh(‘foo’, ‘bar’)[#<Fog::SSH::Result ...>, #<Fog::SSH::Result ...>]
  126. 126. Configuration
  127. 127. Configurationfor more complex/repeatable setup
  128. 128. Configuration for more complex/repeatable setup chef - http://opscode.com/chefpuppet - http://puppetlabs.com/puppet/introduction
  129. 129. Switching Providers? Light Switch Complicator - lenore-m - flickr.com/photos/lenore-m/510420532
  130. 130. servers#create
  131. 131. servers#create>> Bluebox[:compute].servers.create
  132. 132. servers#create>> Bluebox[:compute].servers.createArgumentError: image_id is required ...
  133. 133. servers#create>> Bluebox[:compute].servers.createArgumentError: image_id is required ...>> Rackspace[:compute].servers.create
  134. 134. servers#create>> Bluebox[:compute].servers.createArgumentError: image_id is required ...>> Rackspace[:compute].servers.createArgumentError: image_id and name are required ...
  135. 135. servers#create>> Bluebox[:compute].servers.createArgumentError: image_id is required ...>> Rackspace[:compute].servers.createArgumentError: image_id and name are required ...>> Slicehost[:compute].servers.create
  136. 136. servers#create>> Bluebox[:compute].servers.createArgumentError: image_id is required ...>> Rackspace[:compute].servers.createArgumentError: image_id and name are required ...>> Slicehost[:compute].servers.createArgumentError: image_id and name are required ...
  137. 137. servers#create>> Bluebox[:compute].servers.createArgumentError: image_id is required ...>> Rackspace[:compute].servers.createArgumentError: image_id and name are required ...>> Slicehost[:compute].servers.createArgumentError: image_id and name are required ... different parameters, same methods
  138. 138. Simulation John Manning John’s Flight Simulator - yugen - flickr.com/photos/yugen/3119723360
  139. 139. Simulation make believing your way tobetter infrastructure John Manning John’s Flight Simulator - yugen - flickr.com/photos/yugen/3119723360
  140. 140. Simulation make believing your way to better infrastructure Fog.mock! or⌘ FOG_MOCK=true fog John Manning John’s Flight Simulator - yugen - flickr.com/photos/yugen/3119723360
  141. 141. Next Steps
  142. 142. Getting Help
  143. 143. Getting Helpadditional resources (see also: README)
  144. 144. Getting Help additional resources (see also: README) bugs - http://github.com/geemus/fog/issues irc - irc://irc.freenode.net/ruby-fogmailing list - http://groups.google.com/group/ruby-fog
  145. 145. The Future Rettrofuturism - grumbler - flickr.com/photos/grumbler/297064185
  146. 146. The Future modularity Rettrofuturism - grumbler - flickr.com/photos/grumbler/297064185
  147. 147. The Future modularity providers Rettrofuturism - grumbler - flickr.com/photos/grumbler/297064185
  148. 148. The Future modularity providers abstractions Rettrofuturism - grumbler - flickr.com/photos/grumbler/297064185
  149. 149. The Future modularity providers abstractions testing Rettrofuturism - grumbler - flickr.com/photos/grumbler/297064185
  150. 150. Get Involved
  151. 151. Get Involvedadditional resources (see also: README)
  152. 152. Get Involved additional resources (see also: README) guide - github.com/geemus/fog/wiki/contributor-guideproviders - github.com/geemus/fog/wiki/providers users - github.com/geemus/fog/wiki/in-the-wild
  153. 153. Questions? Clouds oven IL-RT50 - richardcox - flickr.com/photos/richardcox/3892767597

×