Using OpenStack With Fog
Upcoming SlideShare
Loading in...5
×
 

Using OpenStack With Fog

on

  • 306 views

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

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

Statistics

Views

Total Views
306
Views on SlideShare
303
Embed Views
3

Actions

Likes
1
Downloads
6
Comments
0

1 Embed 3

https://twitter.com 3

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Using OpenStack With Fog Using OpenStack With Fog Presentation Transcript

  • Using OpenStack With Fog houston.rb 6/10/14
  • • @mwhagedorn (mwhagedorn) • github.com/mwhagedorn
  • employer • hpcloud.com • @hpcloud
  • 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)
  • 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)
  • OpenStack birth • NASA Aimes CTO • Worked with Microsoft/Google on some NASA visualizations • Preferred Google’s approach • NASA needs a cloud! @kemp (Chris Kemp)
  • OpenStack birth • Rackspace spotted the blog post • They decided to collaborate
  • Philosophy “Why Do This?”
  • brief history of computing • PCs • Data Centers • Hypervisors • Hypervisor chaos
  • the vision OpenStack Hyper-V VMware Xen KVM
  • OpenStack projects • Nova (Compute) • Swift (Object Storage) • Cinder (Block Storage) • Quantum (Networking) • Horizon (Dashboard) • Keystone (Identity) • Glance (VM Images)
  • devstack.org • git clone https://github.com/ openstack-dev/devstack.git • cd devstack && ./stack.sh
  • trystack.org • sandbox for exploration
  • horizon demo
  • 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
  • this stuff is too hard!
  • fog • ruby cloud services • fog.io • github.com/fog/fog • @fog • @geemus (Wesley Beary) • “gem install fog”
  • fog • portable • powerful • established
  • fog • libraries • knife • chef • bosh • carrierwave • paperclip
  • fog providers • set of adapters for specific cloud • aws, hp, rackspace.. etc
  • 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" )
  • 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
  • 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
  • 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
  • fog requests • actual business logic for request def list_flavors(options = {}) request( :expects => [200, 203], :method => 'GET', :path => 'flavors', :query => options ) end
  • fog mocks • test data to return example API responses • requires no network connection
  • fog real • actual request implementation
  • the fog “stack” collections models requests cloud provider servers server list_servers
  • fog and OpenStack • fog/openstack-core is the official ruby sdk for OpenStack • Under active development
  • fog bin • fog <provider> • convenient way to explore with fog • uses .fog file in your home dir
  • demo
  • examples • developer.rackspace.com (rails) • http://goo.gl/HN78A3 • HP provider examples for compute (v2) • http://goo.gl/bJaO6O
  • getting involved • OpenStack • https://wiki.openstack.org/wiki/How_To_Contribute • Fog • https://github.com/fog/fog/issues
  • questions? @mwhagedorn mike.hagedorn@hp.com