Apache Libcloud API Driven Operations Paul Querna September 29, - - PowerPoint PPT Presentation

apache libcloud
SMART_READER_LITE
LIVE PREVIEW

Apache Libcloud API Driven Operations Paul Querna September 29, - - PowerPoint PPT Presentation

Apache Libcloud API Driven Operations Paul Querna September 29, 2010 Thursday, September 30, 2010 About Me Chief Architect at Cloudkick Developer on Apache HTTP Server Former VP Infrastructure @ ASF Libcloud developer!


slide-1
SLIDE 1

Apache Libcloud

API Driven Operations Paul Querna September 29, 2010

Thursday, September 30, 2010

slide-2
SLIDE 2

About Me

  • Chief Architect at Cloudkick
  • Developer on Apache HTTP Server
  • Former

VP Infrastructure @ ASF

  • Libcloud developer!

Thursday, September 30, 2010

slide-3
SLIDE 3

About the Cloud

Thursday, September 30, 2010

slide-4
SLIDE 4

About the Cloud

  • Awesome.

Thursday, September 30, 2010

slide-5
SLIDE 5

About the Cloud

  • Awesome.
  • Really.

Thursday, September 30, 2010

slide-6
SLIDE 6

About the Cloud

  • Awesome.
  • Really.
  • Maybe not always.

Thursday, September 30, 2010

slide-7
SLIDE 7

About the Cloud

  • Awesome.
  • Really.
  • Maybe not always.
  • But mostly.

Thursday, September 30, 2010

slide-8
SLIDE 8

Compute

  • Amazon EC2
  • Rackspace Cloud
  • Linode
  • GoGrid
  • Voxel
  • And many more!

Thursday, September 30, 2010

slide-9
SLIDE 9

I want a server.

Thursday, September 30, 2010

slide-10
SLIDE 10

I want a server right now.

Thursday, September 30, 2010

slide-11
SLIDE 11

from libcloud.types import Provider from libcloud.providers import get_driver rs = get_driver(Provider.RACKSPACE)('rackspace-apikey') rs.create_node('serverA')

Enter Libcloud

Thursday, September 30, 2010

slide-12
SLIDE 12

About Libcloud

  • Started in the summer of 2009
  • Easy to use.
  • Portable.
  • Pure Python
  • Java version also underway

Thursday, September 30, 2010

slide-13
SLIDE 13

Why?

  • API Styles:
  • Amazon: XML + Custom HMAC Auth
  • Rackspace: JSON + Auth Tickets
  • SoftLayer: XML RPC + User / Password

Thursday, September 30, 2010

slide-14
SLIDE 14

16 Providers

Thursday, September 30, 2010

slide-15
SLIDE 15

Libcloud APIs

  • Originally 6 Core APIs
  • List Nodes
  • List Images
  • List Sizes
  • Create / Destroy / Reboot Node

Thursday, September 30, 2010

slide-16
SLIDE 16

list_nodes

foo = d.list_nodes() for node in foo: print node.id print node.public_ip

Thursday, September 30, 2010

slide-17
SLIDE 17

Extended APIs

  • Providers inconsistent about services.
  • Have a “ex_” prefix, documented per-

driver.

  • Amazon Security Groups:
  • amz.create_node(‘foo’,

ex_securitygroup=‘groupA’)

Thursday, September 30, 2010

slide-18
SLIDE 18

Getting Started

  • easy_install apache-libcloud

Thursday, September 30, 2010

slide-19
SLIDE 19

Get your Provider Info

  • Amazon:
  • http://aws-portal.amazon.com/gp/aws/

developer/account/index.html? action=access-key

  • Rackspace:
  • https://manage.rackspacecloud.com/

APIAccess.do

Thursday, September 30, 2010

slide-20
SLIDE 20

List your Machines

from libcloud.types import Provider from libcloud.providers import get_driver d = get_driver(Provider.RACKSPACE)("xxxxxxx") nodes = d.list_nodes() for node in nodes: print "id: %s name: %s public_ips: %s" % (node.id, node.name, node.public_ip)

Thursday, September 30, 2010

slide-21
SLIDE 21

Tricks!

  • Included data:
  • Location
  • Price-per-hour in USD
  • Cheapest 4 gigabyte node outside the US

Thursday, September 30, 2010

slide-22
SLIDE 22

Cheapest 4 gig node

  • utside the US

possible = [] for d in drivers: loc = filter(lambda x: x.country != 'US', d.list_locations()) for l in loc: sizes = filter(lambda x: x.ram >= 4096, d.list_sizes(l)) for s in sizes: possible.append({'size': s, 'location': l, 'driver': d}) best = sorted(possible, lambda x,y: x['size'].price < y['size'].price)[0] print best

Thursday, September 30, 2010

slide-23
SLIDE 23

One more thing!

  • deploy_node
  • Calls create_node
  • Consistent initial bootstrapping of

machines.

  • SSH Keys
  • Configuration Management

Thursday, September 30, 2010

slide-24
SLIDE 24

Installing Puppet

skey = SSHKeyDeployment(key) sd = ScriptDeployment("apt-get install -y puppet") msd = MultiStepDeployment([skey, sd]) node = d.deploy_node(name="lc-test", deploy=msd)

Thursday, September 30, 2010

slide-25
SLIDE 25

Running commands

  • Fabric
  • http://www.fabfile.org/

Thursday, September 30, 2010

slide-26
SLIDE 26

Integrating with Fabric

env.hosts = [x.public_ip[0] for x in d.list_nodes()] def hostname(): run('hostname')

Thursday, September 30, 2010

slide-27
SLIDE 27

$ fab hostname [173.45.245.33] run: hostname [173.45.245.33] out: lctest3.k1k.me [173.45.245.32] run: hostname [173.45.245.32] out: lctest2.k1k.me Done. Disconnecting from 173.45.245.33... done. Disconnecting from 173.45.245.32... done.

Thursday, September 30, 2010

slide-28
SLIDE 28

Up next for Libcloud?

Thursday, September 30, 2010

slide-29
SLIDE 29

Higher Level Apps

  • Silver Lining: Python Deployment on the

Cloud

  • http://cloudsilverlining.org/
  • Pantheon Mercury: Drupal Deployment on

the Cloud

  • http://getpantheon.com/

Thursday, September 30, 2010

slide-30
SLIDE 30

Applications; Not just VMs

  • Cast:
  • http://github.com/cloudkick/cast
  • Galaxy:
  • http://github.com/ning/galaxy

Thursday, September 30, 2010

slide-31
SLIDE 31

Related Projects

  • JClouds
  • Java
  • Apache Deltacloud
  • Ruby, little different ideas

Thursday, September 30, 2010

slide-32
SLIDE 32

Questions?

  • Apache Libcloud:

http://libcloud.org/ #libcloud on Freenode IRC

  • Slides online:

http://paul.querna.org/slides

Thursday, September 30, 2010