SlideShare a Scribd company logo
Overview

@jclouds
Agenda

• What is jclouds?
• What does it do?
• Relationship to other projects
• Code examples
• Extras
What is jclouds?
• Apache licensed Java multi-cloud SDK
• b 3/2009; ~525k loc; 110 contributors
• connects tools portably regardless of,
  yet also availing backend

• Over 40 cloud providers supported
• next release is 1.6 (March)
What does it do?
• Helps projects become cloud projects,
  and developers become cloud
  developers.

 • through consistency in
  • Tools vs Services
  • Services vs Model
  • API approach
Tools vs Services
• jclouds helps existing tools connect to
  cloud services

 • a consistent integration pattern and
    configuration

 • adjustable library dependencies
 • sample patterns, integrations, and
    abstractions
Services vs Model
• jclouds simplifies modeling of cloud
  services

 • Standards focus with pragmatic
    extensions. (JSR-330, 311)

 • Clean means of addressing service
    quirks

 • pluggable strategies for error/retry
API Approach
• Backend before abstraction
    •   proprietary features, multiple abstractions

• Async/Sync api mirroring
    •   scalably deal with 400ms-3m response time

•   Guava

• Universal Testing Approach
    •   unit, “expect”, and live tests
Who’s integrating?

      you?
Alternatives
• Roll-your-own
 • Jersey, RESTEasy
• EC2-based cloud apis
 • typica, jets3t
• Dasein Cloud API
• Proprietary Service Provider SDKs
Portable APIs

      BlobStore     LoadBalancer

                   DNS, Block Storage,
      Compute       Network, Identity


Provider-Specific Hooks
Embeddable

40 built-in providers & 20 apis and dialects!
java overview                        github jclouds/jclouds


// init
context = ContextBuilder.newBuilder(“cloudfiles-us”)
                        .credentials(apikey, secret)
                        .buildView(BlobStoreContext.class);

blobStore = context.getBlobStore();

// create container
blobStore.createContainerInLocation(null, “adriansmovies”);

// add blob
blob = blobStore.blobBuilder("sushi.avi").payload(file).build();
blobStore.putBlob(“adriansmovies”, blob);
java overview                        github jclouds/jclouds
// init
context = ContextBuilder.newBuilder(“openstack-nova”)
                        .endpoint(“https://keystone:5000/v2.0”)
                        .credentials(tenantUser, password)
                        .modules(singleton(new SshjSshClientModule()))
                        .buildView(ComputeServiceContext.class);

compute = context.getComputeService();

// create a couple nodes and open a couple ports
nodes = compute.createNodesInGroup(“hbase-master”, 1,
                                 runScript(install).
                                 inboundPorts(60000, 60010));

// gather my ip addresses
for (NodeMetadata node : nodes) {
   node.getPublicAddresses();
   node.getPrivateAddresses();
}


 @jclouds                                                                12
jclouds locations
Location helps
normalize placement
across resource types
All top-level resources   listAssignableLocations

have a location                                           US



Location metadata is                            IE
                                                     SG


extensible
jclouds modularity
APIs are software
focused                               jclouds-blobstore



Providers are offering                    s3


focused                  aws-s3
                                          scality-ring        walrus


API + location +          googlestorage

                                          scaleup-storage

defaults = Provider
                                               eucaluptus-partnercloud-s3
New	
  Toys



• Fluent	
  Pagina,on	
  (1.5)
• Small	
  distribu,on	
  (1.6)




@jclouds
Fluent Pagination

• Many apis == pagination differences
• Desire ease, but also ability to “opt-out”
    of lazy continuations
•   Can we make it easier to filter/transform
    resources?
FluentIterable
lazy advance through all your metrics:
FluentIterable<Metric> allMetrics = cloudwatch.getMetricApi().list().concat();

advance only until we find the load balancer we want:
Optional<LoadBalancer> firstInterestingLoadBalancer = elb
   .getLoadBalancerApi().list()
   .concat()
   .firstMatch(isInterestingLB());

get only the first page of google instances
IterableWithMarker<Instance> firstPage =
    gce.getInstanceApiForProject("myproject").listFirstPage();
Small Distribution

• Before 1.6 we had more deps
• We now have much less deps
• You can now make a <5MB cloud app!
Where	
  now?



• jclouds.org
• github/jclouds/jclouds-­‐examples
• jclouds@googlegroups.com
• @jclouds


@jclouds
java overview                        github jclouds/jclouds

// create a couple nodes and open a couple ports
nodes = compute.createNodesInGroup(“web-prod”, 2,
                                 runScript(installApache).
                                 inboundPorts(22, 8080));

// load balance the nodes mapping port 80 -> 8080
lb = lbapi.createLoadBalancerInLocation(null, “web-prod”,
                                        “HTTP”, 80, 8080,
                                        nodes);

// gather my lb addresses
for (String lbAddress : lb.getAddresses()) {

}




    @jclouds                                                 20
chef integration           github jclouds/jclouds-chef



if (any(cookbookVersions, containsRecipe("apache2")))
  runList = new RunListBuilder().addRecipe("apache2").build();

chef.updateRunListForGroup(runList, “web-prod”);

boot = chef.createClientAndBootstrapScriptForGroup(“web-prod”);

nodes = compute.createNodesInGroup(“web-prod”, 1, runScript(boot));
CLI   github jclouds/jclouds-cli
BYON   github jclouds/jclouds

More Related Content

jclouds High Level Overview by Adrian Cole

  • 2. Agenda • What is jclouds? • What does it do? • Relationship to other projects • Code examples • Extras
  • 3. What is jclouds? • Apache licensed Java multi-cloud SDK • b 3/2009; ~525k loc; 110 contributors • connects tools portably regardless of, yet also availing backend • Over 40 cloud providers supported • next release is 1.6 (March)
  • 4. What does it do? • Helps projects become cloud projects, and developers become cloud developers. • through consistency in • Tools vs Services • Services vs Model • API approach
  • 5. Tools vs Services • jclouds helps existing tools connect to cloud services • a consistent integration pattern and configuration • adjustable library dependencies • sample patterns, integrations, and abstractions
  • 6. Services vs Model • jclouds simplifies modeling of cloud services • Standards focus with pragmatic extensions. (JSR-330, 311) • Clean means of addressing service quirks • pluggable strategies for error/retry
  • 7. API Approach • Backend before abstraction • proprietary features, multiple abstractions • Async/Sync api mirroring • scalably deal with 400ms-3m response time • Guava • Universal Testing Approach • unit, “expect”, and live tests
  • 9. Alternatives • Roll-your-own • Jersey, RESTEasy • EC2-based cloud apis • typica, jets3t • Dasein Cloud API • Proprietary Service Provider SDKs
  • 10. Portable APIs BlobStore LoadBalancer DNS, Block Storage, Compute Network, Identity Provider-Specific Hooks Embeddable 40 built-in providers & 20 apis and dialects!
  • 11. java overview github jclouds/jclouds // init context = ContextBuilder.newBuilder(“cloudfiles-us”) .credentials(apikey, secret) .buildView(BlobStoreContext.class); blobStore = context.getBlobStore(); // create container blobStore.createContainerInLocation(null, “adriansmovies”); // add blob blob = blobStore.blobBuilder("sushi.avi").payload(file).build(); blobStore.putBlob(“adriansmovies”, blob);
  • 12. java overview github jclouds/jclouds // init context = ContextBuilder.newBuilder(“openstack-nova”) .endpoint(“https://keystone:5000/v2.0”) .credentials(tenantUser, password) .modules(singleton(new SshjSshClientModule())) .buildView(ComputeServiceContext.class); compute = context.getComputeService(); // create a couple nodes and open a couple ports nodes = compute.createNodesInGroup(“hbase-master”, 1, runScript(install). inboundPorts(60000, 60010)); // gather my ip addresses for (NodeMetadata node : nodes) { node.getPublicAddresses(); node.getPrivateAddresses(); } @jclouds 12
  • 13. jclouds locations Location helps normalize placement across resource types All top-level resources listAssignableLocations have a location US Location metadata is IE SG extensible
  • 14. jclouds modularity APIs are software focused jclouds-blobstore Providers are offering s3 focused aws-s3 scality-ring walrus API + location + googlestorage scaleup-storage defaults = Provider eucaluptus-partnercloud-s3
  • 15. New  Toys • Fluent  Pagina,on  (1.5) • Small  distribu,on  (1.6) @jclouds
  • 16. Fluent Pagination • Many apis == pagination differences • Desire ease, but also ability to “opt-out” of lazy continuations • Can we make it easier to filter/transform resources?
  • 17. FluentIterable lazy advance through all your metrics: FluentIterable<Metric> allMetrics = cloudwatch.getMetricApi().list().concat(); advance only until we find the load balancer we want: Optional<LoadBalancer> firstInterestingLoadBalancer = elb .getLoadBalancerApi().list() .concat() .firstMatch(isInterestingLB()); get only the first page of google instances IterableWithMarker<Instance> firstPage = gce.getInstanceApiForProject("myproject").listFirstPage();
  • 18. Small Distribution • Before 1.6 we had more deps • We now have much less deps • You can now make a <5MB cloud app!
  • 19. Where  now? • jclouds.org • github/jclouds/jclouds-­‐examples • jclouds@googlegroups.com • @jclouds @jclouds
  • 20. java overview github jclouds/jclouds // create a couple nodes and open a couple ports nodes = compute.createNodesInGroup(“web-prod”, 2, runScript(installApache). inboundPorts(22, 8080)); // load balance the nodes mapping port 80 -> 8080 lb = lbapi.createLoadBalancerInLocation(null, “web-prod”, “HTTP”, 80, 8080, nodes); // gather my lb addresses for (String lbAddress : lb.getAddresses()) { } @jclouds 20
  • 21. chef integration github jclouds/jclouds-chef if (any(cookbookVersions, containsRecipe("apache2"))) runList = new RunListBuilder().addRecipe("apache2").build(); chef.updateRunListForGroup(runList, “web-prod”); boot = chef.createClientAndBootstrapScriptForGroup(“web-prod”); nodes = compute.createNodesInGroup(“web-prod”, 1, runScript(boot));
  • 22. CLI github jclouds/jclouds-cli
  • 23. BYON github jclouds/jclouds