Andy McCrae, Rackspace - Using Ansible to Deploy and Automate OpenStack, OpenStack Israel 2015
Using OpenStack With Fog
-
Upload
mike-hagedorn -
Category
Internet
-
view
239 -
download
7
description
Transcript of Using OpenStack With Fog
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