using openstack with fog
DESCRIPTION
Brief Primer on what openstack is, why its important and how to use ruby and Fog to create objects in an OpenStack based cloud.TRANSCRIPT
Using OpenStack With Fog
houston.rb 6/10/14
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
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
fogrequire "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_flavorsimages = @connection.list_imagesserver_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 collectionsmodule 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 endend
fog modelsmodule Fog module Compute class HPV2! class AvailabilityZone < Fog::Model! identity :name, :aliases => 'zoneName'! attribute :zoneState attribute :hosts! def available? zoneState['available'] end! end! end endend
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