SlideShare una empresa de Scribd logo
1 de 94
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

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 FIWAREFernando 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 KeynotePeter 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 SparkDatabricks
 
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 ElasticsearchKnoldus Inc.
 
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 systemsForthscale
 
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
 
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 FanDatabricks
 
Care and Feeding of Catalyst Optimizer
Care and Feeding of Catalyst OptimizerCare and Feeding of Catalyst Optimizer
Care and Feeding of Catalyst OptimizerDatabricks
 
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, & JupyterRaj 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-MallaSpark 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 Gralldistributed matters
 
Programmatic Bidding Data Streams & Druid
Programmatic Bidding Data Streams & DruidProgrammatic Bidding Data Streams & Druid
Programmatic Bidding Data Streams & DruidCharles 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 VisualizationRaffael 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
 

La actualidad más candente (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...
 

Destacado

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_moeShawn 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 ArchitectureM2M Alliance e.V.
 
IoT Systems: Technology, Architecture & Performance
IoT Systems: Technology, Architecture & PerformanceIoT Systems: Technology, Architecture & Performance
IoT Systems: Technology, Architecture & PerformanceAshu 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
 
Fluid IoT Architectures
Fluid IoT ArchitecturesFluid IoT Architectures
Fluid IoT ArchitecturesAngelo 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 edgeNitinder 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 ThingsReal-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 FogAchu 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 architecturesVincenzo 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 edgeHicham 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 ComputingJulien 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 InformixPradeep Muthalpuredathe
 

Destacado (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 a 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 ECSYevgeniy 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 CloudWesley 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-endEzequiel 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 CloudStackPuppet
 
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 PuppetKris 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 libcloudGrig Gheorghiu
 
Docker 1.11 Presentation
Docker 1.11 PresentationDocker 1.11 Presentation
Docker 1.11 PresentationSreenivas Makam
 
Puppet and CloudStack
Puppet and CloudStackPuppet and CloudStack
Puppet and CloudStackke4qqq
 
Postgres the hardway
Postgres the hardwayPostgres the hardway
Postgres the hardwayDave Pitts
 
Just one-shade-of-openstack
Just one-shade-of-openstackJust one-shade-of-openstack
Just one-shade-of-openstackRoberto 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 NomadBram 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 YardSV Ruby on Rails Meetup
 
Automating Complex Setups with Puppet
Automating Complex Setups with PuppetAutomating Complex Setups with Puppet
Automating Complex Setups with PuppetKris 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 websitesLindsay 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 2013Cosimo Streppone
 
대용량 데이타 쉽고 빠르게 분석하기 :: 김일호 솔루션즈 아키텍트 :: Gaming on AWS 2016
대용량 데이타 쉽고 빠르게 분석하기 :: 김일호 솔루션즈 아키텍트 :: Gaming on AWS 2016대용량 데이타 쉽고 빠르게 분석하기 :: 김일호 솔루션즈 아키텍트 :: Gaming on AWS 2016
대용량 데이타 쉽고 빠르게 분석하기 :: 김일호 솔루션즈 아키텍트 :: Gaming on AWS 2016Amazon Web Services Korea
 

Similar a 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
 

Último

Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKJago de Vreede
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Introduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMIntroduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMKumar Satyam
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 

Último (20)

Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Introduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMIntroduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDM
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 

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