Using OpenStack With Fog

2,216 views
1,786 views

Published on

Brief Primer on what openstack is, why its important and how to use ruby and Fog to create objects in an OpenStack based cloud.

Published in: Internet, Technology

Using OpenStack With Fog

  1. 1. Using OpenStack With Fog houston.rb 6/10/14
  2. 2. • @mwhagedorn (mwhagedorn) • github.com/mwhagedorn
  3. 3. employer • hpcloud.com • @hpcloud
  4. 4. what is OpenStack? • Open source cloud infrastructure • Broadly available • Runs on non proprietary hardware • Governed by the OpenStack Foundation • AT&T, Canonical, HP, IBM, Rackspace (others)
  5. 5. OpenStack birth “ Launched Nova.  Apache-Licensed Cloud Computing, in Python. It’s live.  it’s buggy, it’s beta. Check it out “ - Joshua McKenty blog post, summer 2010 @jmckenty (Joshua McKenty)
  6. 6. OpenStack birth • NASA Aimes CTO • Worked with Microsoft/Google on some NASA visualizations • Preferred Google’s approach • NASA needs a cloud! @kemp (Chris Kemp)
  7. 7. OpenStack birth • Rackspace spotted the blog post • They decided to collaborate
  8. 8. Philosophy “Why Do This?”
  9. 9. brief history of computing • PCs • Data Centers • Hypervisors • Hypervisor chaos
  10. 10. the vision OpenStack Hyper-V VMware Xen KVM
  11. 11. OpenStack projects • Nova (Compute) • Swift (Object Storage) • Cinder (Block Storage) • Quantum (Networking) • Horizon (Dashboard) • Keystone (Identity) • Glance (VM Images)
  12. 12. devstack.org • git clone https://github.com/ openstack-dev/devstack.git • cd devstack && ./stack.sh
  13. 13. trystack.org • sandbox for exploration
  14. 14. horizon demo
  15. 15. ok, why should I care? • Less than 2% of global compute workloads run on AWS • Large companies have public data concerns • Countries have security concerns
  16. 16. this stuff is too hard!
  17. 17. fog • ruby cloud services • fog.io • github.com/fog/fog • @fog • @geemus (Wesley Beary) • “gem install fog”
  18. 18. fog • portable • powerful • established
  19. 19. fog • libraries • knife • chef • bosh • carrierwave • paperclip
  20. 20. fog providers • set of adapters for specific cloud • aws, hp, rackspace.. etc
  21. 21. fog require "fog" require "ostruct" ! user = OpenStruct.new({ :access_key=>{ :access_key_id => "<MY_HP_KEYID>" :secret_key => "<MY_HP_SECRET_KEY>" }, :tenant_id => "<MY_HP_TENANT_ID>" }) ! @connection ||= Fog::Compute.new( :provider => 'HP', :hp_access_key => user.access_key[:access_key_id], :hp_secret_key => user.access_key[:secret_key], :version => "v2", :hp_auth_uri => "https://region-a.geo-1.identity.hpcloudsvc.com:35357/v2.0/tokens", :hp_tenant_id => user.tenant_id, :hp_avl_zone => "region-b.geo-1" )
  22. 22. fog flavors = @connection.list_flavors images = @connection.list_images server_response = @connection.create_server("my server", flavors.body["flavors"].first["id"], images.body["images"].first["id"]) server_id = server_response.body["server"]["id"] while(true){ response = @connection.list_servers(:status => "ACTIVE") active_ids = response.body["servers"].map { |s| s["id"] } unless active_ids.select { |item| item == server_id }.empty? break end sleep(2) } ! #do stuff now
  23. 23. fog collections module Fog module Compute class HPV2 class VolumeAttachments < Fog::Collection ! model Fog::Compute::HPV2::VolumeAttachment ! attr_accessor :server ! def all requires :server data = service.list_server_volumes(server.id).body['volumeAttachments'] load(data) end ! def get(volume_id) requires :server if data = service.get_server_volume_details(server.id, volume_id).body['volumeAttachment'] new(data) end rescue Fog::Compute::HPV2::NotFound nil end end end end end
  24. 24. fog models module Fog module Compute class HPV2 ! class AvailabilityZone < Fog::Model ! identity :name, :aliases => 'zoneName' ! attribute :zoneState attribute :hosts ! def available? zoneState['available'] end ! end ! end end end
  25. 25. fog requests • actual business logic for request def list_flavors(options = {}) request( :expects => [200, 203], :method => 'GET', :path => 'flavors', :query => options ) end
  26. 26. fog mocks • test data to return example API responses • requires no network connection
  27. 27. fog real • actual request implementation
  28. 28. the fog “stack” collections models requests cloud provider servers server list_servers
  29. 29. fog and OpenStack • fog/openstack-core is the official ruby sdk for OpenStack • Under active development
  30. 30. fog bin • fog <provider> • convenient way to explore with fog • uses .fog file in your home dir
  31. 31. demo
  32. 32. examples • developer.rackspace.com (rails) • http://goo.gl/HN78A3 • HP provider examples for compute (v2) • http://goo.gl/bJaO6O
  33. 33. getting involved • OpenStack • https://wiki.openstack.org/wiki/How_To_Contribute • Fog • https://github.com/fog/fog/issues
  34. 34. questions? @mwhagedorn mike.hagedorn@hp.com

×