Using OpenStack With Fog

Post on 23-Aug-2014

239 views 7 download

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 of Using OpenStack With Fog

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

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

questions?

@mwhagedorn mike.hagedorn@hp.com