SlideShare a Scribd company logo
Cutting Through The Fog Of
Cloud
Kyle Rames
Developer Advocate
@krames
Agenda
• Cloud 101
• Working in the Clouds
What is Cloud?
Software as a Service
SaaS
Platform as a Service
PaaS
Infrastructure as a Service
IaaS
Types of Cloud
SaaS
PaaS
IaaS
When I say Cloud,
you think...
When I say Cloud,
you think...
Agenda
• Cloud 101
• Working in the Clouds
source: https://www.ruby-toolbox.com/projects/fog
Fog Providers
>>	
  Fog.providers.keys	
  
=>	
  [:atmos,	
  :aws,	
  :baremetalcloud,	
  
	
  :bluebox,:brightbox,	
  :clodo,	
  :cloudsigma,	
  :clou
dstack,	
  :digitalocean,	
  :dnsimple,	
  :dnsmadeeasy,	
  
:dreamhost,	
  :dynect,	
  :ecloud,	
  :glesys,	
  :gogrid,	
  
:google,	
  :hp,	
  :ibm,	
  :internetarchive,	
  :joyent,	
  :
libvirt,	
  :linode,	
  :local,	
  :ninefold,	
  :openstack,	
  
:openvz,	
  :ovirt,	
  :rackspace,	
  :riakcs,	
  :serverlov
e,	
  :stormondemand,	
  :vcloud,	
  :vmfusion,	
  :voxel,	
  :
vsphere,	
  :xenserver,	
  :zerigo]	
  	
  
Rackspace Services
>>	
  Fog.services.select	
  {|k,v|	
  	
  
	
  	
  	
  	
  v.include?(:rackspace)	
  
	
  	
  	
  }.keys	
  
=>	
  [:storage,	
  :cdn,	
  :compute,	
  :dns,	
  	
  
:block_storage,	
  :compute_v2,	
  :load_balancers,	
  :i
dentity,	
  :databases]
Load Balancer
VMVM
DNS
bespin-mining.com
VMVM
Create Compute Service
>>	
  service	
  =	
  Fog::Compute.new	
  {	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :provider	
  =>	
  'rackspace',	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :version	
  =>	
  :v2,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :rackspace_username	
  =>	
  USERNAME,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :rackspace_api_key	
  =>	
  API_KEY,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :rackspace_region	
  =>	
  :ord
Required Server Parameters
Get List of Images
>>	
  images	
  =	
  service.images	
  
=>	
  <Fog::Compute::RackspaceV2::Images	
  [	
  
	
  	
  	
  	
  	
  	
  <Fog::Compute::RackspaceV2::Image	
  
	
  	
  	
  	
  	
  	
  	
  	
  id="ccaf99bc-­‐472a-­‐46ea-­‐a125-­‐d3ecfca66695",	
  
	
  	
  	
  	
  	
  	
  	
  	
  name="FreeBSD	
  9.1",	
  
	
  	
  	
  	
  	
  	
  	
  	
  ...>,	
  
	
  	
  	
  	
  	
  	
  <Fog::Compute::RackspaceV2::Image	
  
	
  	
  	
  	
  	
  	
  	
  	
  id="16e6c0ae-­‐f881-­‐4180-­‐95b0-­‐3450fe3f8e96",	
  
	
  	
  	
  	
  	
  	
  	
  	
  name="Red	
  Hat	
  Enterprise	
  Linux	
  6.4",	
  
	
  	
  	
  	
  	
  	
  	
  	
  ...>,	
  
	
  	
  	
  	
  	
  ...	
  
	
  	
  	
  	
  ]>
Get Ubuntu Image
>>	
  image	
  =	
  images.find	
  do	
  |img|	
  	
  
	
  	
  	
  	
  	
  img.name	
  =~	
  /Ubuntu/	
  
	
  	
  	
  end	
  
	
  	
  
=>	
  <Fog::Compute::RackspaceV2::Image	
  
	
  	
  	
  	
  id="23cebbc9-­‐3219-­‐4a27-­‐9210-­‐d63e1af7181b",	
  
	
  	
  	
  	
  name="Ubuntu	
  13.04	
  (Raring	
  Ringtail)",	
  
	
  	
  	
  	
  ...	
  
	
  	
  	
  >	
  
Get Flavor
>>	
  flavor	
  =	
  service.flavors.first	
  
=>	
  <Fog::Compute::RackspaceV2::Flavor	
  
	
  	
  	
  	
  id="2",	
  
	
  	
  	
  	
  name="512MB	
  Standard	
  Instance",	
  
	
  	
  	
  	
  ram=nil,	
  
	
  	
  	
  	
  disk=nil,	
  
	
  	
  	
  	
  vcpus=nil,	
  
	
  	
  	
  	
  links=[{"href"=>"https://
ord.servers.api.rackspacecloud.com/v2/772045/
flavors/2",	
  "rel"=>"self"},	
  {"href"=>"https://
ord.servers.api.rackspacecloud.com/772045/flavors/
2",	
  "rel"=>"bookmark"}]	
  
TK-421
Create Server
>>	
  tk_421	
  =	
  service.servers.create	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :image_id	
  =>	
  image.id,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :flavor_id	
  =>	
  flavor.id,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :name	
  =>	
  'TK-­‐421'}	
  
=>	
  <Fog::Compute::RackspaceV2::Server	
  
	
  	
  	
  	
  id="308e5fd5-­‐ff50-­‐42bd-­‐911c-­‐b91a9180673d",	
  
	
  	
  	
  	
  name="TK-­‐421",	
  
	
  	
  	
  	
  created=nil,	
  
	
  	
  	
  	
  updated=nil,	
  
	
  	
  	
  	
  host_id=nil,	
  
	
  	
  	
  	
  state=nil,	
  
	
  	
  	
  	
  progress=nil,	
  
	
  	
  	
  	
  ...>
Update Server Object
>>	
  tk_421.reload

=>	
  <Fog::Compute::RackspaceV2::Server	
  
	
  	
  	
  	
  id="308e5fd5-­‐ff50-­‐42bd-­‐911c-­‐b91a9180673d",	
  
	
  	
  	
  	
  name="TK-­‐421",	
  
	
  	
  	
  	
  created="2013-­‐07-­‐03T18:08:40Z",	
  
	
  	
  	
  	
  updated="2013-­‐07-­‐03T18:08:43Z",	
  
	
  	
  	
  	
  host_id="",	
  
	
  	
  	
  	
  state="BUILD",	
  
	
  	
  	
  	
  progress=0,	
  
	
  	
  	
  ...>
Server Attributes
>>	
  tk_421.attributes	
  
=>	
  {:image_id=>"23cebbc9-­‐3219-­‐4a27-­‐9210-­‐d63e1af7181b",	
  
:flavor_id=>"2",	
  :name=>"TK-­‐421",	
  :disk_config=>"AUTO"
,	
  :id=>"308e5fd5-­‐ff50-­‐42bd-­‐911c-­‐
b91a9180673d"	
  :state=>"BUILD",	
  :progress=>0,	
  	
  
...}
Fog Meta Magic
>>	
  tk_421.state	
  
=>	
  "BUILD"	
  	
  
>>	
  tk_421.progress	
  
=>	
  0	
  
Is it ready?
>>	
  tk_421.reload	
  
>>	
  tk_421.state	
  
=>	
  "BUILD"	
  	
  	
  
>>	
  tk_421.progress	
  
=>	
  17	
  	
  
Waiting for TK-421
>>	
  tk_421.wait_for	
  {	
  ready?	
  }	
  
=>	
  {:duration=>197.0}	
  
Login
>>	
  tk_421.username	
  
=>	
  “root”	
  
>>	
  tk_421.password	
  
=>	
  “r3b3lz-­‐st1nk42”
Bootstrap
1. Creates server
2. Waits for server to finish building
3. Create ROOT_USER/.ssh/authorized_keys
4. Lock password for root user
5. Create ROOT_USER/attributes.json file
6. Create ROOT_USER/metadata.json file
Bootstrap
>>	
  tk_422	
  =	
  service.servers.bootstrap	
  {	
  
	
  	
  	
  	
  	
  	
  	
  :image_id	
  =>	
  image.id,	
  	
  
	
  	
  	
  	
  	
  	
  	
  :flavor_id	
  =>	
  flavor.id,	
  	
  
	
  	
  	
  	
  	
  	
  	
  :name	
  =>	
  'TK-­‐422',	
  
	
  	
  	
  	
  	
  	
  :public_key_path	
  =>	
  '~/.ssh/fog_rsa.pub',	
  
	
  	
  	
  	
  	
  	
  	
  :private_key_path	
  =>	
  '~/.ssh/fog_rsa'	
  
	
  	
  	
  }
SCP / SSH
>>	
  tk_422.scp	
  'setup.sh',	
  '/root/setup.sh'	
  
>>	
  results	
  =	
  tk_422.ssh	
  ‘sh	
  /root/setup.sh’	
  
>>	
  results.first.stdout	
  
=>	
  "Setting	
  up	
  VMrn"	
  
We have only scratched
the surface!
Remember?
service.images
Collection
Array
Fog::Collection
Fog::Compute::RackspaceV2::Images
Collection Methods
all
fetch every object of that type from the
provider.
get
fetch a single object by its identity from the
provider.
create
initialize a new record locally and a remote
resource with the provider.
new
initialize a new record locally, but do not
create a remote resource with the provider.
Collections
>>	
  service.collections	
  
[:servers,	
  :flavors,	
  :images,	
  :at
tachments,	
  :networks]
Model
Fog::Model
Fog::Compute::RackspaceV2:Image
Model Methods
attributes
Returns a hash containing the list of model
attributes and values.
save Saves object. (not all object support update)
reload
Updates object with latest state from
service.
ready?
Returns true if object is in a ready state and
able to perform actions.
wait_for Periodically reloads model yielding to block.
Model Layer
VMVM
Load Balancer
VMVM
Create Load Balancer Service
>>	
  lb_service	
  =	
  
	
  	
  	
  	
  	
  Fog::Rackspace::LoadBalancers.new	
  {	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :rackspace_username	
  =>	
  USERNAME,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :rackspace_api_key	
  =>	
  API_KEY,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :rackspace_region	
  =>	
  :ord	
  	
  
	
  	
  	
  	
  	
  }
Load Balancer Collections
>>	
  lb_service.collections	
  
=>	
  [:load_balancers,	
  :nodes,	
  :virtual_ips,	
  	
  
	
  	
  	
  	
  :access_rules]	
  
Creating a Load Balancer
lb	
  =	
  lb_service.load_balancers.
Creating a Load Balancer
lb	
  =	
  lb_service.load_balancers.create	
  	
  
	
  	
  :name	
  =>	
  'bob-­‐the-­‐balancer',	
  
	
  	
  :protocol	
  =>	
  'HTTP',	
  	
  
	
  	
  :port	
  =>	
  80,	
  	
  
	
  	
  :virtual_ips	
  =>	
  [{:type	
  =>	
  'PUBLIC'}],	
  	
  
	
  	
  :nodes	
  =>	
  [{	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :address	
  =>	
  tk_421.ipv4_address,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :port	
  =>	
  80,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :condition	
  =>	
  'ENABLED'	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }]	
  
Add Additional Node
lb.nodes.
Add Additional Node
lb.nodes.create	
  {	
  
:address	
  =>	
  tk_422.ipv4_address,	
  	
  
	
  	
  :port	
  =>	
  80,	
  	
  
	
  	
  :condition	
  =>	
  'ENABLED'	
  
}
IP Address
>>	
  vip	
  =	
  lb.virtual_ips.find	
  do	
  |ip|	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ip.ip_version	
  ==	
  "IPV4"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  end	
  
>>	
  vip.address	
  
=>	
  "166.78.41.240"	
  	
  
Continuous Deployment
[tk_602,	
  tk_603].each	
  do	
  |server|	
  	
  
	
  	
  lb.nodes.create(:address	
  =>	
  
server.ipv4_address,	
  	
  
	
  	
  	
  	
  :port	
  =>	
  80,	
  	
  
	
  	
  	
  	
  :condition	
  =>	
  'ENABLED')	
  
end	
  
existing_nodes.each	
  do	
  |node|	
  	
  
	
  	
  node.condition	
  =	
  'DRAINING'	
  
	
  	
  node.save	
  
end
Request Layer
Request Layer
• Mirrors REST interface
• Most efficient way to access cloud
• Not portable between providers
• Preference model layer!
Requests
>>	
  service.requests	
  
[:copy_object,	
  :delete_container,	
  
:delete_object,	
  :get_container,	
  :
get_containers,	
  :get_object,	
  
...]
Load Balancer
VMVM
Load Balancer
VMVM
DNS
bespin-mining.com
Create DNS Service
>>	
  service	
  =	
  Fog::DNS.new	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :provider	
  	
  =>	
  'rackspace',	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :rackspace_username	
  =>	
  USERNAME,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :rackspace_api_key	
  	
  =>	
  API_KEY	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
DNS Requests
>>	
  dns_service.requests	
  
=>	
  [:callback,	
  :list_domains,	
  	
  
:list_domain_details,	
  :modify_domain,	
  :create_do
mains,	
  :remove_domain,	
  :remove_domains,	
  :list_su
bdomains,	
  :list_records,	
  :list_record_details,	
  :
modify_record,	
  :remove_record,	
  :remove_records,	
  
:add_records]	
  	
  
List Domains
>>	
  r	
  =	
  service.list_domains	
  
#<Excon::Response:0x007fdf1ea0f7d0	
  
@data={:body=>{"domains"=>[{"name"=>"bespin-­‐
mining.com",	
  "id"=>3753036,	
  "accountId"=>772045,	
  
"emailAddress"=>"darth@empire.com",	
  
"updated"=>"2013-­‐06-­‐17T15:52:29.000+0000",	
  
"created"=>"2013-­‐06-­‐17T15:52:29.000+0000"},..]}}	
  
@headers={"Content-­‐Type"=>"application/json",	
  
"Via"=>"1.1	
  Repose	
  (Repose/2.6.11)",	
  "x-­‐api-­‐
version"=>"1.0.25",	
  "Content-­‐Length"=>"1509",	
  
"Date"=>"Fri,	
  05	
  Jul	
  2013	
  18:43:12	
  GMT",	
  
"Server"=>"Jetty(8.0.y.z-­‐SNAPSHOT)"},	
  @status=200,	
  
@remote_ip="50.56.3.32">	
  
List Domains
>>	
  r	
  =	
  service.list_domains	
  
#<Excon::Response:0x007fdf1ea0f7d0	
  
@data={:body=>{"domains"=>[{"name"=>"bespin-­‐
mining.com",	
  "id"=>3753036,	
  "accountId"=>772045,	
  
"emailAddress"=>"darth@empire.com",	
  
"updated"=>"2013-­‐06-­‐17T15:52:29.000+0000",	
  
"created"=>"2013-­‐06-­‐17T15:52:29.000+0000"},..]}}	
  
@headers={"Content-­‐Type"=>"application/json",	
  
"Via"=>"1.1	
  Repose	
  (Repose/2.6.11)",	
  "x-­‐api-­‐
version"=>"1.0.25",	
  "Content-­‐Length"=>"1509",	
  
"Date"=>"Fri,	
  05	
  Jul	
  2013	
  18:43:12	
  GMT",	
  
"Server"=>"Jetty(8.0.y.z-­‐SNAPSHOT)"},	
  @status=200,	
  
@remote_ip="50.56.3.32">	
  
List Domains
>>	
  r	
  =	
  service.list_domains	
  
#<Excon::Response:0x007fdf1ea0f7d0	
  
@data={:body=>{"domains"=>[{"name"=>"bespin-­‐
mining.com",	
  "id"=>3753036,	
  "accountId"=>772045,	
  
"emailAddress"=>"darth@empire.com",	
  
"updated"=>"2013-­‐06-­‐17T15:52:29.000+0000",	
  
"created"=>"2013-­‐06-­‐17T15:52:29.000+0000"},..]}}	
  
@headers={"Content-­‐Type"=>"application/json",	
  
"Via"=>"1.1	
  Repose	
  (Repose/2.6.11)",	
  "x-­‐api-­‐
version"=>"1.0.25",	
  "Content-­‐Length"=>"1509",	
  
"Date"=>"Fri,	
  05	
  Jul	
  2013	
  18:43:12	
  GMT",	
  
"Server"=>"Jetty(8.0.y.z-­‐SNAPSHOT)"},	
  @status=200,	
  
@remote_ip="50.56.3.32">	
  
List Domains
>>	
  r	
  =	
  service.list_domains	
  
#<Excon::Response:0x007fdf1ea0f7d0	
  
@data={:body=>{"domains"=>[{"name"=>"bespin-­‐
mining.com",	
  "id"=>3753036,	
  "accountId"=>772045,	
  
"emailAddress"=>"darth@empire.com",	
  
"updated"=>"2013-­‐06-­‐17T15:52:29.000+0000",	
  
"created"=>"2013-­‐06-­‐17T15:52:29.000+0000"},..]}}	
  
@headers={"Content-­‐Type"=>"application/json",	
  
"Via"=>"1.1	
  Repose	
  (Repose/2.6.11)",	
  "x-­‐api-­‐
version"=>"1.0.25",	
  "Content-­‐Length"=>"1509",	
  
"Date"=>"Fri,	
  05	
  Jul	
  2013	
  18:43:12	
  GMT",	
  
"Server"=>"Jetty(8.0.y.z-­‐SNAPSHOT)"},	
  @status=200,	
  
@remote_ip="50.56.3.32">	
  
Excon::Response
>>	
  domain	
  =	
  r.body["domains"].find	
  do	
  |h|	
  	
  
	
  	
  h["name"]	
  ==	
  "bespin-­‐mining.com"	
  
end	
  
=>	
  {"name"=>"bespin-­‐mining.com",	
  "id"=>3753036,	
  
"accountId"=>772045,	
  
"emailAddress"=>"darth@empire.com",	
  
"updated"=>"2013-­‐07-­‐05T19:07:42.000+0000",	
  
"created"=>"2013-­‐06-­‐17T15:52:29.000+0000"}	
  	
  
>>	
  r.status	
  
=>	
  	
  	
  200
Adding A Record
>>	
  vip	
  =	
  lb.virtual_ips.find	
  {|ip|	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ip.ip_version	
  ==	
  "IPV4"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
>>	
  service.add_records	
  domain[“id”],	
  [{	
  
	
  :name	
  =>	
  'bespin-­‐mining.com',	
  	
  
	
  :type	
  =>	
  'A',	
  	
  
	
  :data	
  =>	
  vip.address,	
  	
  
	
  :ttl	
  =>	
  600	
  
}]
Load Balancer
VMVM
DNS
bespin-mining.com
Fog deep dive
Retrieve Image
service.images.get	
  "23cebbc9-­‐3219-­‐4a27-­‐9210-­‐d63e1af7181b"	
  
module	
  Fog	
  
	
  	
  module	
  Compute	
  
	
  	
  	
  	
  class	
  RackspaceV2	
  
	
  	
  	
  	
  	
  	
  class	
  Images	
  <	
  Fog::Collection	
  
def	
  get(image_id)	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  data	
  =	
  service.get_image(image_id).body['image']	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  new(data)	
  
	
  	
  	
  	
  	
  	
  	
  	
  rescue	
  Fog::Compute::RackspaceV2::NotFound	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  nil	
  
	
  	
  	
  	
  	
  	
  	
  	
  end	
  
	
  	
  	
  	
  	
  	
  end	
  
	
  	
  	
  	
  end	
  
	
  	
  end	
  
end	
  
module	
  Fog	
  
	
  	
  module	
  Compute	
  
	
  	
  	
  	
  class	
  RackspaceV2	
  
	
  	
  	
  	
  	
  	
  class	
  Images	
  <	
  Fog::Collection	
  
def	
  get(image_id)	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  data	
  =	
  service.get_image(image_id).body['image']	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  new(data)	
  
	
  	
  	
  	
  	
  	
  	
  	
  rescue	
  Fog::Compute::RackspaceV2::NotFound	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  nil	
  
	
  	
  	
  	
  	
  	
  	
  	
  end	
  
	
  	
  	
  	
  	
  	
  end	
  
	
  	
  	
  	
  end	
  
	
  	
  end	
  
end	
  
module	
  Fog	
  
	
  	
  module	
  Compute	
  
	
  	
  	
  	
  class	
  RackspaceV2	
  
	
  	
  	
  	
  	
  	
  class	
  Real	
  
	
  	
  	
  	
  	
  	
  	
  def	
  get_image(image_id)	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  request(	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :expects	
  =>	
  [200,	
  203],	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :method	
  =>	
  'GET',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :path	
  =>	
  "images/#{image_id}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  )	
  
	
  	
  	
  	
  	
  	
  	
  	
  end	
  
	
  	
  	
  	
  end	
  
	
  	
  end	
  
end	
  
module	
  Fog	
  
	
  	
  module	
  Compute	
  
	
  	
  	
  	
  class	
  RackspaceV2	
  
	
  	
  	
  	
  	
  	
  class	
  Real	
  
	
  	
  	
  	
  	
  	
  	
  def	
  get_image(image_id)	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  request(	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :expects	
  =>	
  [200,	
  203],	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :method	
  =>	
  'GET',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :path	
  =>	
  "images/#{image_id}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  )	
  
	
  	
  	
  	
  	
  	
  	
  	
  end	
  
	
  	
  	
  	
  end	
  
	
  	
  end	
  
end	
  
module	
  Fog	
  
	
  	
  module	
  Compute	
  
	
  	
  	
  	
  class	
  RackspaceV2	
  
	
  	
  	
  	
  	
  	
  class	
  Real	
  
	
  	
  	
  	
  	
  	
  	
  def	
  get_image(image_id)	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  request(	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :expects	
  =>	
  [200,	
  203],	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :method	
  =>	
  'GET',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :path	
  =>	
  "images/#{image_id}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  )	
  
	
  	
  	
  	
  	
  	
  	
  	
  end	
  
	
  	
  	
  	
  end	
  
	
  	
  end	
  
end	
  
module	
  Fog	
  
	
  	
  module	
  Compute	
  
	
  	
  	
  	
  class	
  RackspaceV2	
  
	
  	
  	
  	
  	
  	
  class	
  Real	
  
	
  	
  	
  	
  	
  	
  	
  def	
  get_image(image_id)	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  request(	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :expects	
  =>	
  [200,	
  203],	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :method	
  =>	
  'GET',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :path	
  =>	
  "images/#{image_id}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  )	
  
	
  	
  	
  	
  	
  	
  	
  	
  end	
  
	
  	
  	
  	
  end	
  
	
  	
  end	
  
end	
  
GET https://ord.servers.api.rackspacecloud.com:443/v2/5555/
images/23cebbc9-3219-4a27-9210-d63e1af7181b HTTP/1.1
Content-Type: application/json
Accept: application/json
X-Auth-Token: abc41dc54e594e9c8fb73b89b1b79142
Host: ord.servers.api.rackspacecloud.com:443
GET https://ord.servers.api.rackspacecloud.com:443/v2/5555/
images/23cebbc9-3219-4a27-9210-d63e1af7181b HTTP/1.1
Content-Type: application/json
Accept: application/json
X-Auth-Token: abc41dc54e594e9c8fb73b89b1b79142
Host: ord.servers.api.rackspacecloud.com:443
GET https://ord.servers.api.rackspacecloud.com:443/v2/5555/
images/23cebbc9-3219-4a27-9210-d63e1af7181b HTTP/1.1
Content-Type: application/json
Accept: application/json
X-Auth-Token: abc41dc54e594e9c8fb73b89b1b79142
Host: ord.servers.api.rackspacecloud.com:443
GET https://ord.servers.api.rackspacecloud.com:443/v2/5555/
images/23cebbc9-3219-4a27-9210-d63e1af7181b HTTP/1.1
Content-Type: application/json
Accept: application/json
X-Auth-Token: abc41dc54e594e9c8fb73b89b1b79142
Host: ord.servers.api.rackspacecloud.com:443
GET https://ord.servers.api.rackspacecloud.com:443/v2/5555/
images/23cebbc9-3219-4a27-9210-d63e1af7181b HTTP/1.1
Content-Type: application/json
Accept: application/json
X-Auth-Token: abc41dc54e594e9c8fb73b89b1b79142
Host: ord.servers.api.rackspacecloud.com:443
GET https://ord.servers.api.rackspacecloud.com:443/v2/5555/
images/23cebbc9-3219-4a27-9210-d63e1af7181b HTTP/1.1
Content-Type: application/json
Accept: application/json
X-Auth-Token: abc41dc54e594e9c8fb73b89b1b79142
Host: ord.servers.api.rackspacecloud.com:443
EXCON_DEBUG=true
Fog.mock!
Testing
RACKSPACE® HOSTING | WWW.RACKSPACE.COM
http://developer.rackspace.com/#ruby
@krames
Questions?
Images
tule fog, marya, CC BY-SA 2.0
Clouds, Daniel Boyd, CC BY 2.0
Metroid II: Return of Samus, Michel Ngilen, CC BY-SA 2.0
Lego Mindstorms Kit, Marlon J. Manrique, CC BY 2.0
CD,Visual Pharm, CC BY-SA 2.0
Public Bikes, Richard Masoner / Cyclelicious, CC BY 2.0
PRIVATE, Rupert Ganzer, CC BY 2.0
Hybrid
Sorry We Are Not Open, Alan Levine, CC BY 2.0
We are, e1ther, CC BY 2.0
Images (cont)
Yipwm_1b, Greg Goebel, CC BY-SA 2.0
Pause Button, GreenLantern33, CC BY-SA 2.0
3..., Cristiano Betta, CC BY-SA 2.0

More Related Content

What's hot

Big Data and Machine Learning with FIWARE
Big Data and Machine Learning with FIWAREBig Data and Machine Learning with FIWARE
Big Data and Machine Learning with FIWARE
Fernando Lopez Aguilar
 
Debugging Big Data Analytics in Apache Spark with BigDebug with Muhammad Gulz...
Debugging Big Data Analytics in Apache Spark with BigDebug with Muhammad Gulz...Debugging Big Data Analytics in Apache Spark with BigDebug with Muhammad Gulz...
Debugging Big Data Analytics in Apache Spark with BigDebug with Muhammad Gulz...
Databricks
 
PyData Texas 2015 Keynote
PyData Texas 2015 KeynotePyData Texas 2015 Keynote
PyData Texas 2015 Keynote
Peter Wang
 
Improving Organizational Knowledge with Natural Language Processing Enriched ...
Improving Organizational Knowledge with Natural Language Processing Enriched ...Improving Organizational Knowledge with Natural Language Processing Enriched ...
Improving Organizational Knowledge with Natural Language Processing Enriched ...
DataWorks Summit
 
Optimizing Delta/Parquet Data Lakes for Apache Spark
Optimizing Delta/Parquet Data Lakes for Apache SparkOptimizing Delta/Parquet Data Lakes for Apache Spark
Optimizing Delta/Parquet Data Lakes for Apache Spark
Databricks
 
Streaming Trend Discovery: Real-Time Discovery in a Sea of Events with Scott ...
Streaming Trend Discovery: Real-Time Discovery in a Sea of Events with Scott ...Streaming Trend Discovery: Real-Time Discovery in a Sea of Events with Scott ...
Streaming Trend Discovery: Real-Time Discovery in a Sea of Events with Scott ...
Databricks
 
Deep Dive Into Elasticsearch
Deep Dive Into ElasticsearchDeep Dive Into Elasticsearch
Deep Dive Into Elasticsearch
Knoldus Inc.
 
Log analysis with elastic stack
Log analysis with elastic stackLog analysis with elastic stack
Log analysis with elastic stack
Bangladesh Network Operators Group
 
Resilience: the key requirement of a [big] [data] architecture - StampedeCon...
Resilience: the key requirement of a [big] [data] architecture  - StampedeCon...Resilience: the key requirement of a [big] [data] architecture  - StampedeCon...
Resilience: the key requirement of a [big] [data] architecture - StampedeCon...
StampedeCon
 
Open source monitoring systems
Open source monitoring systemsOpen source monitoring systems
Open source monitoring systems
Forthscale
 
Large Infrastructure Monitoring At CERN by Matthias Braeger at Big Data Spain...
Large Infrastructure Monitoring At CERN by Matthias Braeger at Big Data Spain...Large Infrastructure Monitoring At CERN by Matthias Braeger at Big Data Spain...
Large Infrastructure Monitoring At CERN by Matthias Braeger at Big Data Spain...
Big Data Spain
 
JOSA TechTalk: Realtime monitoring and alerts
JOSA TechTalk: Realtime monitoring and alerts JOSA TechTalk: Realtime monitoring and alerts
JOSA TechTalk: Realtime monitoring and alerts
Jordan Open Source Association
 
A Developer’s View into Spark's Memory Model with Wenchen Fan
A Developer’s View into Spark's Memory Model with Wenchen FanA Developer’s View into Spark's Memory Model with Wenchen Fan
A Developer’s View into Spark's Memory Model with Wenchen Fan
Databricks
 
Care and Feeding of Catalyst Optimizer
Care and Feeding of Catalyst OptimizerCare and Feeding of Catalyst Optimizer
Care and Feeding of Catalyst Optimizer
Databricks
 
data science toolkit 101: set up Python, Spark, & Jupyter
data science toolkit 101: set up Python, Spark, & Jupyterdata science toolkit 101: set up Python, Spark, & Jupyter
data science toolkit 101: set up Python, Spark, & Jupyter
Raj Singh
 
Kerberizing Spark: Spark Summit East talk by Abel Rincon and Jorge Lopez-Malla
Kerberizing Spark: Spark Summit East talk by Abel Rincon and Jorge Lopez-MallaKerberizing Spark: Spark Summit East talk by Abel Rincon and Jorge Lopez-Malla
Kerberizing Spark: Spark Summit East talk by Abel Rincon and Jorge Lopez-Malla
Spark Summit
 
What and Why and How: Apache Drill ! - Tugdual Grall
What and Why and How: Apache Drill ! - Tugdual GrallWhat and Why and How: Apache Drill ! - Tugdual Grall
What and Why and How: Apache Drill ! - Tugdual Grall
distributed matters
 
Programmatic Bidding Data Streams & Druid
Programmatic Bidding Data Streams & DruidProgrammatic Bidding Data Streams & Druid
Programmatic Bidding Data Streams & Druid
Charles Allen
 
Mining Your Logs - Gaining Insight Through Visualization
Mining Your Logs - Gaining Insight Through VisualizationMining Your Logs - Gaining Insight Through Visualization
Mining Your Logs - Gaining Insight Through Visualization
Raffael Marty
 
Lightning Talk: Why and How to Integrate MongoDB and NoSQL into Hadoop Big Da...
Lightning Talk: Why and How to Integrate MongoDB and NoSQL into Hadoop Big Da...Lightning Talk: Why and How to Integrate MongoDB and NoSQL into Hadoop Big Da...
Lightning Talk: Why and How to Integrate MongoDB and NoSQL into Hadoop Big Da...
MongoDB
 

What's hot (20)

Big Data and Machine Learning with FIWARE
Big Data and Machine Learning with FIWAREBig Data and Machine Learning with FIWARE
Big Data and Machine Learning with FIWARE
 
Debugging Big Data Analytics in Apache Spark with BigDebug with Muhammad Gulz...
Debugging Big Data Analytics in Apache Spark with BigDebug with Muhammad Gulz...Debugging Big Data Analytics in Apache Spark with BigDebug with Muhammad Gulz...
Debugging Big Data Analytics in Apache Spark with BigDebug with Muhammad Gulz...
 
PyData Texas 2015 Keynote
PyData Texas 2015 KeynotePyData Texas 2015 Keynote
PyData Texas 2015 Keynote
 
Improving Organizational Knowledge with Natural Language Processing Enriched ...
Improving Organizational Knowledge with Natural Language Processing Enriched ...Improving Organizational Knowledge with Natural Language Processing Enriched ...
Improving Organizational Knowledge with Natural Language Processing Enriched ...
 
Optimizing Delta/Parquet Data Lakes for Apache Spark
Optimizing Delta/Parquet Data Lakes for Apache SparkOptimizing Delta/Parquet Data Lakes for Apache Spark
Optimizing Delta/Parquet Data Lakes for Apache Spark
 
Streaming Trend Discovery: Real-Time Discovery in a Sea of Events with Scott ...
Streaming Trend Discovery: Real-Time Discovery in a Sea of Events with Scott ...Streaming Trend Discovery: Real-Time Discovery in a Sea of Events with Scott ...
Streaming Trend Discovery: Real-Time Discovery in a Sea of Events with Scott ...
 
Deep Dive Into Elasticsearch
Deep Dive Into ElasticsearchDeep Dive Into Elasticsearch
Deep Dive Into Elasticsearch
 
Log analysis with elastic stack
Log analysis with elastic stackLog analysis with elastic stack
Log analysis with elastic stack
 
Resilience: the key requirement of a [big] [data] architecture - StampedeCon...
Resilience: the key requirement of a [big] [data] architecture  - StampedeCon...Resilience: the key requirement of a [big] [data] architecture  - StampedeCon...
Resilience: the key requirement of a [big] [data] architecture - StampedeCon...
 
Open source monitoring systems
Open source monitoring systemsOpen source monitoring systems
Open source monitoring systems
 
Large Infrastructure Monitoring At CERN by Matthias Braeger at Big Data Spain...
Large Infrastructure Monitoring At CERN by Matthias Braeger at Big Data Spain...Large Infrastructure Monitoring At CERN by Matthias Braeger at Big Data Spain...
Large Infrastructure Monitoring At CERN by Matthias Braeger at Big Data Spain...
 
JOSA TechTalk: Realtime monitoring and alerts
JOSA TechTalk: Realtime monitoring and alerts JOSA TechTalk: Realtime monitoring and alerts
JOSA TechTalk: Realtime monitoring and alerts
 
A Developer’s View into Spark's Memory Model with Wenchen Fan
A Developer’s View into Spark's Memory Model with Wenchen FanA Developer’s View into Spark's Memory Model with Wenchen Fan
A Developer’s View into Spark's Memory Model with Wenchen Fan
 
Care and Feeding of Catalyst Optimizer
Care and Feeding of Catalyst OptimizerCare and Feeding of Catalyst Optimizer
Care and Feeding of Catalyst Optimizer
 
data science toolkit 101: set up Python, Spark, & Jupyter
data science toolkit 101: set up Python, Spark, & Jupyterdata science toolkit 101: set up Python, Spark, & Jupyter
data science toolkit 101: set up Python, Spark, & Jupyter
 
Kerberizing Spark: Spark Summit East talk by Abel Rincon and Jorge Lopez-Malla
Kerberizing Spark: Spark Summit East talk by Abel Rincon and Jorge Lopez-MallaKerberizing Spark: Spark Summit East talk by Abel Rincon and Jorge Lopez-Malla
Kerberizing Spark: Spark Summit East talk by Abel Rincon and Jorge Lopez-Malla
 
What and Why and How: Apache Drill ! - Tugdual Grall
What and Why and How: Apache Drill ! - Tugdual GrallWhat and Why and How: Apache Drill ! - Tugdual Grall
What and Why and How: Apache Drill ! - Tugdual Grall
 
Programmatic Bidding Data Streams & Druid
Programmatic Bidding Data Streams & DruidProgrammatic Bidding Data Streams & Druid
Programmatic Bidding Data Streams & Druid
 
Mining Your Logs - Gaining Insight Through Visualization
Mining Your Logs - Gaining Insight Through VisualizationMining Your Logs - Gaining Insight Through Visualization
Mining Your Logs - Gaining Insight Through Visualization
 
Lightning Talk: Why and How to Integrate MongoDB and NoSQL into Hadoop Big Da...
Lightning Talk: Why and How to Integrate MongoDB and NoSQL into Hadoop Big Da...Lightning Talk: Why and How to Integrate MongoDB and NoSQL into Hadoop Big Da...
Lightning Talk: Why and How to Integrate MongoDB and NoSQL into Hadoop Big Da...
 

Viewers also liked

Io t world_2016_iot_smart_gateways_moe
Io t world_2016_iot_smart_gateways_moeIo t world_2016_iot_smart_gateways_moe
Io t world_2016_iot_smart_gateways_moe
Shawn Moe
 
How Industry 4.0 Drives the Requirement for a Hybrid Cloud and Edge Architecture
How Industry 4.0 Drives the Requirement for a Hybrid Cloud and Edge ArchitectureHow Industry 4.0 Drives the Requirement for a Hybrid Cloud and Edge Architecture
How Industry 4.0 Drives the Requirement for a Hybrid Cloud and Edge Architecture
M2M Alliance e.V.
 
IoT Systems: Technology, Architecture & Performance
IoT Systems: Technology, Architecture & PerformanceIoT Systems: Technology, Architecture & Performance
IoT Systems: Technology, Architecture & Performance
Ashu Joshi
 
IBM IoT Architecture and Capabilities at the Edge and Cloud
IBM IoT Architecture and Capabilities at the Edge and Cloud IBM IoT Architecture and Capabilities at the Edge and Cloud
IBM IoT Architecture and Capabilities at the Edge and Cloud
Pradeep Natarajan
 
E3: Edge and Cloud Connectivity (Predix Transform 2016)
E3: Edge and Cloud Connectivity (Predix Transform 2016)E3: Edge and Cloud Connectivity (Predix Transform 2016)
E3: Edge and Cloud Connectivity (Predix Transform 2016)
Predix
 
Big Data and Internet of Things: A Roadmap For Smart Environments, Fog Comput...
Big Data and Internet of Things: A Roadmap For Smart Environments, Fog Comput...Big Data and Internet of Things: A Roadmap For Smart Environments, Fog Comput...
Big Data and Internet of Things: A Roadmap For Smart Environments, Fog Comput...Jiang Zhu
 
Edge-Fog Cloud
Edge-Fog CloudEdge-Fog Cloud
Edge-Fog Cloud
Nitinder Mohan
 
Fluid IoT Architectures
Fluid IoT ArchitecturesFluid IoT Architectures
Fluid IoT Architectures
Angelo Corsaro
 
Azure IoT Edge, the hybrid cloud answer for IoT (Glenn Colpaert @IoTFest NMCT...
Azure IoT Edge, the hybrid cloud answer for IoT (Glenn Colpaert @IoTFest NMCT...Azure IoT Edge, the hybrid cloud answer for IoT (Glenn Colpaert @IoTFest NMCT...
Azure IoT Edge, the hybrid cloud answer for IoT (Glenn Colpaert @IoTFest NMCT...
Codit
 
Edge-Fog Cloud: Scaling IoT computations on the edge
Edge-Fog Cloud: Scaling IoT computations on the edgeEdge-Fog Cloud: Scaling IoT computations on the edge
Edge-Fog Cloud: Scaling IoT computations on the edge
Nitinder Mohan
 
Fog Computing is the Future of the Industrial Internet of Things
Fog Computing is the Future of the Industrial Internet of ThingsFog Computing is the Future of the Industrial Internet of Things
Fog Computing is the Future of the Industrial Internet of Things
Real-Time Innovations (RTI)
 
The Razor's Edge: Enabling Cloud While Mitigating the Risk of a Cloud Data Br...
The Razor's Edge: Enabling Cloud While Mitigating the Risk of a Cloud Data Br...The Razor's Edge: Enabling Cloud While Mitigating the Risk of a Cloud Data Br...
The Razor's Edge: Enabling Cloud While Mitigating the Risk of a Cloud Data Br...
Netskope
 
"Blending Cloud and Edge Machine Learning to Deliver Real-time Video Monitori...
"Blending Cloud and Edge Machine Learning to Deliver Real-time Video Monitori..."Blending Cloud and Edge Machine Learning to Deliver Real-time Video Monitori...
"Blending Cloud and Edge Machine Learning to Deliver Real-time Video Monitori...
Edge AI and Vision Alliance
 
Security Issues of IoT with Fog
Security Issues of IoT with FogSecurity Issues of IoT with Fog
Security Issues of IoT with Fog
Achu Anna
 
The data streaming paradigm and its use in Fog architectures
The data streaming paradigm and its use in Fog architecturesThe data streaming paradigm and its use in Fog architectures
The data streaming paradigm and its use in Fog architectures
Vincenzo Gulisano
 
Big data caching for networking : Moving from cloud to edge
Big data caching for networking : Moving from cloud to edgeBig data caching for networking : Moving from cloud to edge
Big data caching for networking : Moving from cloud to edge
Hicham HAMMOUCHI
 
Towards the extinction of mega data centres? To which extent should the Clou...
 Towards the extinction of mega data centres? To which extent should the Clou... Towards the extinction of mega data centres? To which extent should the Clou...
Towards the extinction of mega data centres? To which extent should the Clou...
Thierry Coupaye
 
From Cloud Computing to Edge Computing
From Cloud Computing to Edge ComputingFrom Cloud Computing to Edge Computing
From Cloud Computing to Edge Computing
Julien SIMON
 
IoT Analytics from Edge to Cloud - using IBM Informix
IoT Analytics from Edge to Cloud - using IBM InformixIoT Analytics from Edge to Cloud - using IBM Informix
IoT Analytics from Edge to Cloud - using IBM Informix
Pradeep Muthalpuredathe
 
Fog computing
Fog computingFog computing
Fog computing
Ayush Chaurasia
 

Viewers also liked (20)

Io t world_2016_iot_smart_gateways_moe
Io t world_2016_iot_smart_gateways_moeIo t world_2016_iot_smart_gateways_moe
Io t world_2016_iot_smart_gateways_moe
 
How Industry 4.0 Drives the Requirement for a Hybrid Cloud and Edge Architecture
How Industry 4.0 Drives the Requirement for a Hybrid Cloud and Edge ArchitectureHow Industry 4.0 Drives the Requirement for a Hybrid Cloud and Edge Architecture
How Industry 4.0 Drives the Requirement for a Hybrid Cloud and Edge Architecture
 
IoT Systems: Technology, Architecture & Performance
IoT Systems: Technology, Architecture & PerformanceIoT Systems: Technology, Architecture & Performance
IoT Systems: Technology, Architecture & Performance
 
IBM IoT Architecture and Capabilities at the Edge and Cloud
IBM IoT Architecture and Capabilities at the Edge and Cloud IBM IoT Architecture and Capabilities at the Edge and Cloud
IBM IoT Architecture and Capabilities at the Edge and Cloud
 
E3: Edge and Cloud Connectivity (Predix Transform 2016)
E3: Edge and Cloud Connectivity (Predix Transform 2016)E3: Edge and Cloud Connectivity (Predix Transform 2016)
E3: Edge and Cloud Connectivity (Predix Transform 2016)
 
Big Data and Internet of Things: A Roadmap For Smart Environments, Fog Comput...
Big Data and Internet of Things: A Roadmap For Smart Environments, Fog Comput...Big Data and Internet of Things: A Roadmap For Smart Environments, Fog Comput...
Big Data and Internet of Things: A Roadmap For Smart Environments, Fog Comput...
 
Edge-Fog Cloud
Edge-Fog CloudEdge-Fog Cloud
Edge-Fog Cloud
 
Fluid IoT Architectures
Fluid IoT ArchitecturesFluid IoT Architectures
Fluid IoT Architectures
 
Azure IoT Edge, the hybrid cloud answer for IoT (Glenn Colpaert @IoTFest NMCT...
Azure IoT Edge, the hybrid cloud answer for IoT (Glenn Colpaert @IoTFest NMCT...Azure IoT Edge, the hybrid cloud answer for IoT (Glenn Colpaert @IoTFest NMCT...
Azure IoT Edge, the hybrid cloud answer for IoT (Glenn Colpaert @IoTFest NMCT...
 
Edge-Fog Cloud: Scaling IoT computations on the edge
Edge-Fog Cloud: Scaling IoT computations on the edgeEdge-Fog Cloud: Scaling IoT computations on the edge
Edge-Fog Cloud: Scaling IoT computations on the edge
 
Fog Computing is the Future of the Industrial Internet of Things
Fog Computing is the Future of the Industrial Internet of ThingsFog Computing is the Future of the Industrial Internet of Things
Fog Computing is the Future of the Industrial Internet of Things
 
The Razor's Edge: Enabling Cloud While Mitigating the Risk of a Cloud Data Br...
The Razor's Edge: Enabling Cloud While Mitigating the Risk of a Cloud Data Br...The Razor's Edge: Enabling Cloud While Mitigating the Risk of a Cloud Data Br...
The Razor's Edge: Enabling Cloud While Mitigating the Risk of a Cloud Data Br...
 
"Blending Cloud and Edge Machine Learning to Deliver Real-time Video Monitori...
"Blending Cloud and Edge Machine Learning to Deliver Real-time Video Monitori..."Blending Cloud and Edge Machine Learning to Deliver Real-time Video Monitori...
"Blending Cloud and Edge Machine Learning to Deliver Real-time Video Monitori...
 
Security Issues of IoT with Fog
Security Issues of IoT with FogSecurity Issues of IoT with Fog
Security Issues of IoT with Fog
 
The data streaming paradigm and its use in Fog architectures
The data streaming paradigm and its use in Fog architecturesThe data streaming paradigm and its use in Fog architectures
The data streaming paradigm and its use in Fog architectures
 
Big data caching for networking : Moving from cloud to edge
Big data caching for networking : Moving from cloud to edgeBig data caching for networking : Moving from cloud to edge
Big data caching for networking : Moving from cloud to edge
 
Towards the extinction of mega data centres? To which extent should the Clou...
 Towards the extinction of mega data centres? To which extent should the Clou... Towards the extinction of mega data centres? To which extent should the Clou...
Towards the extinction of mega data centres? To which extent should the Clou...
 
From Cloud Computing to Edge Computing
From Cloud Computing to Edge ComputingFrom Cloud Computing to Edge Computing
From Cloud Computing to Edge Computing
 
IoT Analytics from Edge to Cloud - using IBM Informix
IoT Analytics from Edge to Cloud - using IBM InformixIoT Analytics from Edge to Cloud - using IBM Informix
IoT Analytics from Edge to Cloud - using IBM Informix
 
Fog computing
Fog computingFog computing
Fog computing
 

Similar to Cutting through the fog of cloud

An intro to Docker, Terraform, and Amazon ECS
An intro to Docker, Terraform, and Amazon ECSAn intro to Docker, Terraform, and Amazon ECS
An intro to Docker, Terraform, and Amazon ECS
Yevgeniy Brikman
 
Railsconf2011 deployment tips_for_slideshare
Railsconf2011 deployment tips_for_slideshareRailsconf2011 deployment tips_for_slideshare
Railsconf2011 deployment tips_for_slidesharetomcopeland
 
fog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloudfog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloud
Wesley Beary
 
Puppetpreso
PuppetpresoPuppetpreso
Puppetpresoke4qqq
 
Fullstack conf 2017 - Basic dev pipeline end-to-end
Fullstack conf 2017 - Basic dev pipeline end-to-endFullstack conf 2017 - Basic dev pipeline end-to-end
Fullstack conf 2017 - Basic dev pipeline end-to-end
Ezequiel Maraschio
 
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
Wesley Beary
 
Puppet and Apache CloudStack
Puppet and Apache CloudStackPuppet and Apache CloudStack
Puppet and Apache CloudStack
Puppet
 
Infrastructure as code with Puppet and Apache CloudStack
Infrastructure as code with Puppet and Apache CloudStackInfrastructure as code with Puppet and Apache CloudStack
Infrastructure as code with Puppet and Apache CloudStackke4qqq
 
Automating complex infrastructures with Puppet
Automating complex infrastructures with PuppetAutomating complex infrastructures with Puppet
Automating complex infrastructures with Puppet
Kris Buytaert
 
Working in the multi-cloud with libcloud
Working in the multi-cloud with libcloudWorking in the multi-cloud with libcloud
Working in the multi-cloud with libcloud
Grig Gheorghiu
 
Docker 1.11 Presentation
Docker 1.11 PresentationDocker 1.11 Presentation
Docker 1.11 Presentation
Sreenivas Makam
 
Puppet and CloudStack
Puppet and CloudStackPuppet and CloudStack
Puppet and CloudStackke4qqq
 
Postgres the hardway
Postgres the hardwayPostgres the hardway
Postgres the hardway
Dave Pitts
 
Just one-shade-of-openstack
Just one-shade-of-openstackJust one-shade-of-openstack
Just one-shade-of-openstack
Roberto Polli
 
Easy Cloud Native Transformation using HashiCorp Nomad
Easy Cloud Native Transformation using HashiCorp NomadEasy Cloud Native Transformation using HashiCorp Nomad
Easy Cloud Native Transformation using HashiCorp Nomad
Bram Vogelaar
 
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine YardHow I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
SV Ruby on Rails Meetup
 
Automating Complex Setups with Puppet
Automating Complex Setups with PuppetAutomating Complex Setups with Puppet
Automating Complex Setups with Puppet
Kris Buytaert
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
Lindsay Holmwood
 
Puppet at Opera Sofware - PuppetCamp Oslo 2013
Puppet at Opera Sofware - PuppetCamp Oslo 2013Puppet at Opera Sofware - PuppetCamp Oslo 2013
Puppet at Opera Sofware - PuppetCamp Oslo 2013
Cosimo Streppone
 
대용량 데이타 쉽고 빠르게 분석하기 :: 김일호 솔루션즈 아키텍트 :: Gaming on AWS 2016
대용량 데이타 쉽고 빠르게 분석하기 :: 김일호 솔루션즈 아키텍트 :: Gaming on AWS 2016대용량 데이타 쉽고 빠르게 분석하기 :: 김일호 솔루션즈 아키텍트 :: Gaming on AWS 2016
대용량 데이타 쉽고 빠르게 분석하기 :: 김일호 솔루션즈 아키텍트 :: Gaming on AWS 2016
Amazon Web Services Korea
 

Similar to Cutting through the fog of cloud (20)

An intro to Docker, Terraform, and Amazon ECS
An intro to Docker, Terraform, and Amazon ECSAn intro to Docker, Terraform, and Amazon ECS
An intro to Docker, Terraform, and Amazon ECS
 
Railsconf2011 deployment tips_for_slideshare
Railsconf2011 deployment tips_for_slideshareRailsconf2011 deployment tips_for_slideshare
Railsconf2011 deployment tips_for_slideshare
 
fog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloudfog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloud
 
Puppetpreso
PuppetpresoPuppetpreso
Puppetpreso
 
Fullstack conf 2017 - Basic dev pipeline end-to-end
Fullstack conf 2017 - Basic dev pipeline end-to-endFullstack conf 2017 - Basic dev pipeline end-to-end
Fullstack conf 2017 - Basic dev pipeline end-to-end
 
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
 
Puppet and Apache CloudStack
Puppet and Apache CloudStackPuppet and Apache CloudStack
Puppet and Apache CloudStack
 
Infrastructure as code with Puppet and Apache CloudStack
Infrastructure as code with Puppet and Apache CloudStackInfrastructure as code with Puppet and Apache CloudStack
Infrastructure as code with Puppet and Apache CloudStack
 
Automating complex infrastructures with Puppet
Automating complex infrastructures with PuppetAutomating complex infrastructures with Puppet
Automating complex infrastructures with Puppet
 
Working in the multi-cloud with libcloud
Working in the multi-cloud with libcloudWorking in the multi-cloud with libcloud
Working in the multi-cloud with libcloud
 
Docker 1.11 Presentation
Docker 1.11 PresentationDocker 1.11 Presentation
Docker 1.11 Presentation
 
Puppet and CloudStack
Puppet and CloudStackPuppet and CloudStack
Puppet and CloudStack
 
Postgres the hardway
Postgres the hardwayPostgres the hardway
Postgres the hardway
 
Just one-shade-of-openstack
Just one-shade-of-openstackJust one-shade-of-openstack
Just one-shade-of-openstack
 
Easy Cloud Native Transformation using HashiCorp Nomad
Easy Cloud Native Transformation using HashiCorp NomadEasy Cloud Native Transformation using HashiCorp Nomad
Easy Cloud Native Transformation using HashiCorp Nomad
 
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine YardHow I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
 
Automating Complex Setups with Puppet
Automating Complex Setups with PuppetAutomating Complex Setups with Puppet
Automating Complex Setups with Puppet
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
 
Puppet at Opera Sofware - PuppetCamp Oslo 2013
Puppet at Opera Sofware - PuppetCamp Oslo 2013Puppet at Opera Sofware - PuppetCamp Oslo 2013
Puppet at Opera Sofware - PuppetCamp Oslo 2013
 
대용량 데이타 쉽고 빠르게 분석하기 :: 김일호 솔루션즈 아키텍트 :: Gaming on AWS 2016
대용량 데이타 쉽고 빠르게 분석하기 :: 김일호 솔루션즈 아키텍트 :: Gaming on AWS 2016대용량 데이타 쉽고 빠르게 분석하기 :: 김일호 솔루션즈 아키텍트 :: Gaming on AWS 2016
대용량 데이타 쉽고 빠르게 분석하기 :: 김일호 솔루션즈 아키텍트 :: Gaming on AWS 2016
 

Recently uploaded

GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Jeffrey Haguewood
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 

Recently uploaded (20)

GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 

Cutting through the fog of cloud

  • 1. Cutting Through The Fog Of Cloud Kyle Rames Developer Advocate @krames
  • 2. Agenda • Cloud 101 • Working in the Clouds
  • 4.
  • 5.
  • 6. Software as a Service SaaS
  • 7. Platform as a Service PaaS
  • 8. Infrastructure as a Service IaaS
  • 10. When I say Cloud, you think...
  • 11.
  • 12.
  • 13.
  • 14. When I say Cloud, you think...
  • 15.
  • 16.
  • 17. Agenda • Cloud 101 • Working in the Clouds
  • 19. Fog Providers >>  Fog.providers.keys   =>  [:atmos,  :aws,  :baremetalcloud,    :bluebox,:brightbox,  :clodo,  :cloudsigma,  :clou dstack,  :digitalocean,  :dnsimple,  :dnsmadeeasy,   :dreamhost,  :dynect,  :ecloud,  :glesys,  :gogrid,   :google,  :hp,  :ibm,  :internetarchive,  :joyent,  : libvirt,  :linode,  :local,  :ninefold,  :openstack,   :openvz,  :ovirt,  :rackspace,  :riakcs,  :serverlov e,  :stormondemand,  :vcloud,  :vmfusion,  :voxel,  : vsphere,  :xenserver,  :zerigo]    
  • 20. Rackspace Services >>  Fog.services.select  {|k,v|            v.include?(:rackspace)        }.keys   =>  [:storage,  :cdn,  :compute,  :dns,     :block_storage,  :compute_v2,  :load_balancers,  :i dentity,  :databases]
  • 22. VMVM
  • 23. Create Compute Service >>  service  =  Fog::Compute.new  {                                :provider  =>  'rackspace',                                :version  =>  :v2,                              :rackspace_username  =>  USERNAME,                              :rackspace_api_key  =>  API_KEY,                              :rackspace_region  =>  :ord
  • 25. Get List of Images >>  images  =  service.images   =>  <Fog::Compute::RackspaceV2::Images  [              <Fog::Compute::RackspaceV2::Image                  id="ccaf99bc-­‐472a-­‐46ea-­‐a125-­‐d3ecfca66695",                  name="FreeBSD  9.1",                  ...>,              <Fog::Compute::RackspaceV2::Image                  id="16e6c0ae-­‐f881-­‐4180-­‐95b0-­‐3450fe3f8e96",                  name="Red  Hat  Enterprise  Linux  6.4",                  ...>,            ...          ]>
  • 26. Get Ubuntu Image >>  image  =  images.find  do  |img|              img.name  =~  /Ubuntu/        end       =>  <Fog::Compute::RackspaceV2::Image          id="23cebbc9-­‐3219-­‐4a27-­‐9210-­‐d63e1af7181b",          name="Ubuntu  13.04  (Raring  Ringtail)",          ...        >  
  • 27. Get Flavor >>  flavor  =  service.flavors.first   =>  <Fog::Compute::RackspaceV2::Flavor          id="2",          name="512MB  Standard  Instance",          ram=nil,          disk=nil,          vcpus=nil,          links=[{"href"=>"https:// ord.servers.api.rackspacecloud.com/v2/772045/ flavors/2",  "rel"=>"self"},  {"href"=>"https:// ord.servers.api.rackspacecloud.com/772045/flavors/ 2",  "rel"=>"bookmark"}]  
  • 28.
  • 30. Create Server >>  tk_421  =  service.servers.create  {                                                        :image_id  =>  image.id,                                                          :flavor_id  =>  flavor.id,                                                          :name  =>  'TK-­‐421'}   =>  <Fog::Compute::RackspaceV2::Server          id="308e5fd5-­‐ff50-­‐42bd-­‐911c-­‐b91a9180673d",          name="TK-­‐421",          created=nil,          updated=nil,          host_id=nil,          state=nil,          progress=nil,          ...>
  • 31. Update Server Object >>  tk_421.reload
 =>  <Fog::Compute::RackspaceV2::Server          id="308e5fd5-­‐ff50-­‐42bd-­‐911c-­‐b91a9180673d",          name="TK-­‐421",          created="2013-­‐07-­‐03T18:08:40Z",          updated="2013-­‐07-­‐03T18:08:43Z",          host_id="",          state="BUILD",          progress=0,        ...>
  • 32. Server Attributes >>  tk_421.attributes   =>  {:image_id=>"23cebbc9-­‐3219-­‐4a27-­‐9210-­‐d63e1af7181b",   :flavor_id=>"2",  :name=>"TK-­‐421",  :disk_config=>"AUTO" ,  :id=>"308e5fd5-­‐ff50-­‐42bd-­‐911c-­‐ b91a9180673d"  :state=>"BUILD",  :progress=>0,     ...}
  • 33. Fog Meta Magic >>  tk_421.state   =>  "BUILD"     >>  tk_421.progress   =>  0  
  • 34. Is it ready? >>  tk_421.reload   >>  tk_421.state   =>  "BUILD"       >>  tk_421.progress   =>  17    
  • 35. Waiting for TK-421 >>  tk_421.wait_for  {  ready?  }   =>  {:duration=>197.0}  
  • 36. Login >>  tk_421.username   =>  “root”   >>  tk_421.password   =>  “r3b3lz-­‐st1nk42”
  • 37. Bootstrap 1. Creates server 2. Waits for server to finish building 3. Create ROOT_USER/.ssh/authorized_keys 4. Lock password for root user 5. Create ROOT_USER/attributes.json file 6. Create ROOT_USER/metadata.json file
  • 38. Bootstrap >>  tk_422  =  service.servers.bootstrap  {                :image_id  =>  image.id,                  :flavor_id  =>  flavor.id,                  :name  =>  'TK-­‐422',              :public_key_path  =>  '~/.ssh/fog_rsa.pub',                :private_key_path  =>  '~/.ssh/fog_rsa'        }
  • 39. SCP / SSH >>  tk_422.scp  'setup.sh',  '/root/setup.sh'   >>  results  =  tk_422.ssh  ‘sh  /root/setup.sh’   >>  results.first.stdout   =>  "Setting  up  VMrn"  
  • 40. We have only scratched the surface!
  • 41.
  • 44. Collection Methods all fetch every object of that type from the provider. get fetch a single object by its identity from the provider. create initialize a new record locally and a remote resource with the provider. new initialize a new record locally, but do not create a remote resource with the provider.
  • 45. Collections >>  service.collections   [:servers,  :flavors,  :images,  :at tachments,  :networks]
  • 47. Model Methods attributes Returns a hash containing the list of model attributes and values. save Saves object. (not all object support update) reload Updates object with latest state from service. ready? Returns true if object is in a ready state and able to perform actions. wait_for Periodically reloads model yielding to block.
  • 49. VMVM
  • 51. Create Load Balancer Service >>  lb_service  =            Fog::Rackspace::LoadBalancers.new  {                        :rackspace_username  =>  USERNAME,                      :rackspace_api_key  =>  API_KEY,                      :rackspace_region  =>  :ord              }
  • 52. Load Balancer Collections >>  lb_service.collections   =>  [:load_balancers,  :nodes,  :virtual_ips,            :access_rules]  
  • 53. Creating a Load Balancer lb  =  lb_service.load_balancers.
  • 54. Creating a Load Balancer lb  =  lb_service.load_balancers.create        :name  =>  'bob-­‐the-­‐balancer',      :protocol  =>  'HTTP',        :port  =>  80,        :virtual_ips  =>  [{:type  =>  'PUBLIC'}],        :nodes  =>  [{                              :address  =>  tk_421.ipv4_address,                                :port  =>  80,                                :condition  =>  'ENABLED'                          }]  
  • 56. Add Additional Node lb.nodes.create  {   :address  =>  tk_422.ipv4_address,        :port  =>  80,        :condition  =>  'ENABLED'   }
  • 57. IP Address >>  vip  =  lb.virtual_ips.find  do  |ip|                        ip.ip_version  ==  "IPV4"                    end   >>  vip.address   =>  "166.78.41.240"    
  • 58. Continuous Deployment [tk_602,  tk_603].each  do  |server|        lb.nodes.create(:address  =>   server.ipv4_address,            :port  =>  80,            :condition  =>  'ENABLED')   end   existing_nodes.each  do  |node|        node.condition  =  'DRAINING'      node.save   end
  • 59.
  • 61. Request Layer • Mirrors REST interface • Most efficient way to access cloud • Not portable between providers • Preference model layer!
  • 62. Requests >>  service.requests   [:copy_object,  :delete_container,   :delete_object,  :get_container,  : get_containers,  :get_object,   ...]
  • 65. Create DNS Service >>  service  =  Fog::DNS.new  {                                :provider    =>  'rackspace',                                  :rackspace_username  =>  USERNAME,                                :rackspace_api_key    =>  API_KEY                            }  
  • 66. DNS Requests >>  dns_service.requests   =>  [:callback,  :list_domains,     :list_domain_details,  :modify_domain,  :create_do mains,  :remove_domain,  :remove_domains,  :list_su bdomains,  :list_records,  :list_record_details,  : modify_record,  :remove_record,  :remove_records,   :add_records]    
  • 67. List Domains >>  r  =  service.list_domains   #<Excon::Response:0x007fdf1ea0f7d0   @data={:body=>{"domains"=>[{"name"=>"bespin-­‐ mining.com",  "id"=>3753036,  "accountId"=>772045,   "emailAddress"=>"darth@empire.com",   "updated"=>"2013-­‐06-­‐17T15:52:29.000+0000",   "created"=>"2013-­‐06-­‐17T15:52:29.000+0000"},..]}}   @headers={"Content-­‐Type"=>"application/json",   "Via"=>"1.1  Repose  (Repose/2.6.11)",  "x-­‐api-­‐ version"=>"1.0.25",  "Content-­‐Length"=>"1509",   "Date"=>"Fri,  05  Jul  2013  18:43:12  GMT",   "Server"=>"Jetty(8.0.y.z-­‐SNAPSHOT)"},  @status=200,   @remote_ip="50.56.3.32">  
  • 68. List Domains >>  r  =  service.list_domains   #<Excon::Response:0x007fdf1ea0f7d0   @data={:body=>{"domains"=>[{"name"=>"bespin-­‐ mining.com",  "id"=>3753036,  "accountId"=>772045,   "emailAddress"=>"darth@empire.com",   "updated"=>"2013-­‐06-­‐17T15:52:29.000+0000",   "created"=>"2013-­‐06-­‐17T15:52:29.000+0000"},..]}}   @headers={"Content-­‐Type"=>"application/json",   "Via"=>"1.1  Repose  (Repose/2.6.11)",  "x-­‐api-­‐ version"=>"1.0.25",  "Content-­‐Length"=>"1509",   "Date"=>"Fri,  05  Jul  2013  18:43:12  GMT",   "Server"=>"Jetty(8.0.y.z-­‐SNAPSHOT)"},  @status=200,   @remote_ip="50.56.3.32">  
  • 69. List Domains >>  r  =  service.list_domains   #<Excon::Response:0x007fdf1ea0f7d0   @data={:body=>{"domains"=>[{"name"=>"bespin-­‐ mining.com",  "id"=>3753036,  "accountId"=>772045,   "emailAddress"=>"darth@empire.com",   "updated"=>"2013-­‐06-­‐17T15:52:29.000+0000",   "created"=>"2013-­‐06-­‐17T15:52:29.000+0000"},..]}}   @headers={"Content-­‐Type"=>"application/json",   "Via"=>"1.1  Repose  (Repose/2.6.11)",  "x-­‐api-­‐ version"=>"1.0.25",  "Content-­‐Length"=>"1509",   "Date"=>"Fri,  05  Jul  2013  18:43:12  GMT",   "Server"=>"Jetty(8.0.y.z-­‐SNAPSHOT)"},  @status=200,   @remote_ip="50.56.3.32">  
  • 70. List Domains >>  r  =  service.list_domains   #<Excon::Response:0x007fdf1ea0f7d0   @data={:body=>{"domains"=>[{"name"=>"bespin-­‐ mining.com",  "id"=>3753036,  "accountId"=>772045,   "emailAddress"=>"darth@empire.com",   "updated"=>"2013-­‐06-­‐17T15:52:29.000+0000",   "created"=>"2013-­‐06-­‐17T15:52:29.000+0000"},..]}}   @headers={"Content-­‐Type"=>"application/json",   "Via"=>"1.1  Repose  (Repose/2.6.11)",  "x-­‐api-­‐ version"=>"1.0.25",  "Content-­‐Length"=>"1509",   "Date"=>"Fri,  05  Jul  2013  18:43:12  GMT",   "Server"=>"Jetty(8.0.y.z-­‐SNAPSHOT)"},  @status=200,   @remote_ip="50.56.3.32">  
  • 71. Excon::Response >>  domain  =  r.body["domains"].find  do  |h|        h["name"]  ==  "bespin-­‐mining.com"   end   =>  {"name"=>"bespin-­‐mining.com",  "id"=>3753036,   "accountId"=>772045,   "emailAddress"=>"darth@empire.com",   "updated"=>"2013-­‐07-­‐05T19:07:42.000+0000",   "created"=>"2013-­‐06-­‐17T15:52:29.000+0000"}     >>  r.status   =>      200
  • 72. Adding A Record >>  vip  =  lb.virtual_ips.find  {|ip|                        ip.ip_version  ==  "IPV4"                    }   >>  service.add_records  domain[“id”],  [{    :name  =>  'bespin-­‐mining.com',      :type  =>  'A',      :data  =>  vip.address,      :ttl  =>  600   }]
  • 74.
  • 77. module  Fog      module  Compute          class  RackspaceV2              class  Images  <  Fog::Collection   def  get(image_id)                      data  =  service.get_image(image_id).body['image']                      new(data)                  rescue  Fog::Compute::RackspaceV2::NotFound                      nil                  end              end          end      end   end  
  • 78. module  Fog      module  Compute          class  RackspaceV2              class  Images  <  Fog::Collection   def  get(image_id)                      data  =  service.get_image(image_id).body['image']                      new(data)                  rescue  Fog::Compute::RackspaceV2::NotFound                      nil                  end              end          end      end   end  
  • 79. module  Fog      module  Compute          class  RackspaceV2              class  Real                def  get_image(image_id)                    request(                      :expects  =>  [200,  203],                      :method  =>  'GET',                      :path  =>  "images/#{image_id}"                    )                  end          end      end   end  
  • 80. module  Fog      module  Compute          class  RackspaceV2              class  Real                def  get_image(image_id)                    request(                      :expects  =>  [200,  203],                      :method  =>  'GET',                      :path  =>  "images/#{image_id}"                    )                  end          end      end   end  
  • 81. module  Fog      module  Compute          class  RackspaceV2              class  Real                def  get_image(image_id)                    request(                      :expects  =>  [200,  203],                      :method  =>  'GET',                      :path  =>  "images/#{image_id}"                    )                  end          end      end   end  
  • 82. module  Fog      module  Compute          class  RackspaceV2              class  Real                def  get_image(image_id)                    request(                      :expects  =>  [200,  203],                      :method  =>  'GET',                      :path  =>  "images/#{image_id}"                    )                  end          end      end   end  
  • 83. GET https://ord.servers.api.rackspacecloud.com:443/v2/5555/ images/23cebbc9-3219-4a27-9210-d63e1af7181b HTTP/1.1 Content-Type: application/json Accept: application/json X-Auth-Token: abc41dc54e594e9c8fb73b89b1b79142 Host: ord.servers.api.rackspacecloud.com:443
  • 84. GET https://ord.servers.api.rackspacecloud.com:443/v2/5555/ images/23cebbc9-3219-4a27-9210-d63e1af7181b HTTP/1.1 Content-Type: application/json Accept: application/json X-Auth-Token: abc41dc54e594e9c8fb73b89b1b79142 Host: ord.servers.api.rackspacecloud.com:443
  • 85. GET https://ord.servers.api.rackspacecloud.com:443/v2/5555/ images/23cebbc9-3219-4a27-9210-d63e1af7181b HTTP/1.1 Content-Type: application/json Accept: application/json X-Auth-Token: abc41dc54e594e9c8fb73b89b1b79142 Host: ord.servers.api.rackspacecloud.com:443
  • 86. GET https://ord.servers.api.rackspacecloud.com:443/v2/5555/ images/23cebbc9-3219-4a27-9210-d63e1af7181b HTTP/1.1 Content-Type: application/json Accept: application/json X-Auth-Token: abc41dc54e594e9c8fb73b89b1b79142 Host: ord.servers.api.rackspacecloud.com:443
  • 87. GET https://ord.servers.api.rackspacecloud.com:443/v2/5555/ images/23cebbc9-3219-4a27-9210-d63e1af7181b HTTP/1.1 Content-Type: application/json Accept: application/json X-Auth-Token: abc41dc54e594e9c8fb73b89b1b79142 Host: ord.servers.api.rackspacecloud.com:443
  • 88. GET https://ord.servers.api.rackspacecloud.com:443/v2/5555/ images/23cebbc9-3219-4a27-9210-d63e1af7181b HTTP/1.1 Content-Type: application/json Accept: application/json X-Auth-Token: abc41dc54e594e9c8fb73b89b1b79142 Host: ord.servers.api.rackspacecloud.com:443
  • 90.
  • 92. RACKSPACE® HOSTING | WWW.RACKSPACE.COM http://developer.rackspace.com/#ruby @krames Questions?
  • 93. Images tule fog, marya, CC BY-SA 2.0 Clouds, Daniel Boyd, CC BY 2.0 Metroid II: Return of Samus, Michel Ngilen, CC BY-SA 2.0 Lego Mindstorms Kit, Marlon J. Manrique, CC BY 2.0 CD,Visual Pharm, CC BY-SA 2.0 Public Bikes, Richard Masoner / Cyclelicious, CC BY 2.0 PRIVATE, Rupert Ganzer, CC BY 2.0 Hybrid Sorry We Are Not Open, Alan Levine, CC BY 2.0 We are, e1ther, CC BY 2.0
  • 94. Images (cont) Yipwm_1b, Greg Goebel, CC BY-SA 2.0 Pause Button, GreenLantern33, CC BY-SA 2.0 3..., Cristiano Betta, CC BY-SA 2.0