blob: d696bc932737e31a638a01d29d96afb42e00cbd0 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content="The Apache Software Foundation">
<meta name="keywords" content="python,libcloud,cloud,cloud computing,rackspace,amazon ec2,cloudfiles,openstack,cloudstack" />
<title>Blog | Apache Libcloud</title>
<!-- fav icons -->
<link rel="shortcut icon" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/apple-touch-icon.png" />
<link rel="apple-touch-icon-precomposed" href="/images/apple-touch-icon.png" />
<link href="/blog/atom.xml" type="application/atom+xml" rel="alternate" title="Apache Libcloud Blog Feed" />
<!-- Facebook OpenGraph tags -->
<meta content="Apache Libcloud" property="og:site_name">
<meta content="Blog" property="og:title">
<meta content="website" property="og:type">
<meta content="https://libcloud.apache.org/blog/page/13/" property="og:url">
<link href='/assets/global-49923225b15584efebd7a337daac5102.css' rel='stylesheet' type='text/css' />
</head>
<body data-spy="scroll" data-target=".sidebar-nav" data-offset="80">
<nav class="navbar navbar-fixed-top navbar-inverse" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/index.html"><img src="/images/libcloud_logo.png" class="navbar-logo" /> Apache Libcloud</a>
</div>
<div class="collapse navbar-collapse navbar-ex1-collapse">
<ul class="nav navbar-nav">
<li ><a href="/" >Home</a></li>
<li ><a href="/about.html" >About</a></li>
<li ><a href="/getting-started.html" >Quick Start</a></li>
<li ><a href="https://libcloud.readthedocs.org/en/stable/" target="_blank">Documentation</a></li>
<li ><a href="/downloads.html" >Downloads</a></li>
<li ><a href="/community.html" >Community</a></li>
<li ><a href="/blog/" >Blog</a></li>
</ul>
<div class="material-switch pull-right">
<input id="theme-switch" name="theme-switch" type="checkbox" onclick="modeSwitcher()"/>
<label for="theme-switch" class="label-default"></label>
<span id="theme-toggle" class="theme-switch">Dark mode</span>
</div>
</div><!-- /.navbar-collapse -->
</div><!-- /.container -->
</nav>
<div class="container main-container">
<div class="row section page-content">
<div class="col-lg-8">
<h1>Blog</h1>
<div class="posts">
<div class="post">
<h2><a href="/blog/2014/02/18/libcloud-0-14-and-google-cloud-platform.html">Libcloud 0.14 and Google Cloud Platform</a></h2>
<span class="post-date-author">By Rick Wright on Feb 18, 2014</span>
<div class="post-content">
<p><em>This is a guest post by <a href="https://github.com/wrigri">Rick Wright</a>. Rick is an engineer at Google and
the main contributor to the Libcloud Google Compute Engine driver.</em></p>
<p>As anyone following this blog knows, Libcloud 0.14 was <a href="/blog/2014/01/22/libcloud-0-14-0-released.html">recently released</a>.
Included in this release is new support for the Google Compute Engine service
that was recently made generally available.</p>
<p>The first Libcloud driver for Google Compute Engine was initially released last
summer, and has been continually updated to support new Compute Engine
features. Support for the Compute Engine Load Balancer was also recently added.</p>
<p>Libcloud had previously added support for Google Cloud Storage through the S3
compatibility API.</p>
<p>In this post, we’ll show you how to get up and running with Google Compute
Engine with Libcloud, show you how to create some instances (nodes) and point
you to additional resources. We also show you how you can start up 20
instances in under a minute.</p>
<div class="imginline">
<p><a href="https://cloud.google.com/" target="_blank">
<img src="/images/posts/gce/image03.png" class="img-responsive inline" />
</a></p>
</div>
<h2 id="getting-started">Getting Started</h2>
<p>If you haven’t yet signed up for Google Compute Engine, more information can
be found on the <a href="https://cloud.google.com/">Google Cloud Platform</a> site. We hope that you will look at
the Google Cloud Platform and consider Compute Engine for workloads of any
size.</p>
<p>If you are familiar with Libcloud, using the driver for Compute Engine will
also be familiar to you as nearly all of the standard Libcloud API methods for
Compute and Load Balancing are supported by the Compute Engine drivers.</p>
<h2 id="setting-up-authentication">Setting up Authentication</h2>
<p>Google Compute Engine uses OAuth2 for authentication and Libcloud supports two
different authentication methods for Compute Engine: Service Accounts and
Installed Applications. More information can be found about these options in
the <a href="https://libcloud.readthedocs.org/en/latest/compute/drivers/gce.html">driver documentation</a>, but here is a simple walk-through for getting
your Service Account credentials (note that the Service Account authentication
requires the PyCrypto library):</p>
<p>From the Console (<a href="https://cloud.google.com/console">https://cloud.google.com/console</a>), select your project. When
your project is open, select “APIs &amp; auth” and then “Credentials” as shown
below:</p>
<div class="imginline">
<p><img src="/images/posts/gce/image01.png" class="img-responsive inline" /></p>
</div>
<p>To create a new Service Account ID, click on “Create New Client ID”</p>
<div class="imginline">
<p><img src="/images/posts/gce/image04.png" class="img-responsive inline" /></p>
</div>
<p>Select “Service account” and click “Create Client ID”</p>
<div class="imginline">
<p><img src="/images/posts/gce/image00.png" class="img-responsive inline" /></p>
</div>
<p>This will create and download a PCKS-12 private key to your local machine. You
will need to convert this to a .pem format key. (See additional instructions
in the <a href="https://libcloud.readthedocs.org/en/latest/compute/drivers/gce.html">driver documentation</a>).</p>
<div class="imginline">
<p><img src="/images/posts/gce/image02.png" class="img-responsive inline" /></p>
</div>
<p>To connect to Compute Engine from Libclould, you will need to provide both the
“Email address” for the service account and the path to the key file.</p>
<h2 id="creating-an-instance">Creating an Instance</h2>
<p>The Compute Engine driver supports the normal Libcloud ways of doing things.
For example, to create the driver you would do something like this:</p>
<pre>
from libcloud.compute.types import Provider
from libcloud.compute.providers import get_driver
Driver = get_driver(Provider.GCE)
gce = Driver('your_service_account_email', 'path_to_pem_file',
datacenter='us-central1-a',
project='your_project_id')
</pre>
<p>Then, you may want to get a list of machine sizes or images to use for your
node creation:</p>
<pre>
sizes = gce.list_sizes()
images = gce.list_images()
</pre>
<p>and then filter them to find the correct size/image object to create your
node. For example:</p>
<pre>
size_obj = [s for s in sizes if s.id == 'n1-standard-1'][0]
image_obj = [i for i in images if i.name == 'debian-7'][0]
</pre>
<p>Finally, you would create the node using the create_node() method:</p>
<pre>
new_node = gce.create_node(name='my_node', size=size_obj,
image=img_obj)
</pre>
<p>The GCE driver also supports the ability to pass in size/image by name instead
of by object, so you could create your new node like this, without looking up
the sizes/images:</p>
<pre>
new_node = gce.create_node(name='my_node', size='n1-standard-1',
image='debian-7')
</pre>
<p>In this case a new node will be created using the “n1-standard-1” machine
type and will use the latest “debian-7” image that is available.</p>
<h2 id="creating-multiple-instances">Creating Multiple Instances</h2>
<p>We have added an extra method to the Compute Engine driver to help in the
creation of multiple instances/nodes in parallel. This is the
“ex_create_multiple_nodes()” method, and it can be used like this:</p>
<pre>
base_name = 'multiple-nodes'
number = 20
start_time = time.time()
multi_nodes = gce.ex_create_multiple_nodes(
base_name, 'n1-standard-1', 'debian-7', number)
end_time = time.time()
print('Created the following %s nodes in %.2f seconds' % (
number, end_time-start_time))
for node in multi_nodes:
print(' %s' % node.name)
</pre>
<p>Running this gives the following output (timing will likely vary somewhat):</p>
<pre>
Created the following 20 nodes in 35.77 seconds
multiple-nodes-000
multiple-nodes-001
multiple-nodes-002
multiple-nodes-003
multiple-nodes-004
...
</pre>
<h2 id="onward">Onward</h2>
<p>This post showed you how to get started, and additional example code can be
found in the <a href="https://github.com/apache/libcloud/blob/trunk/demos/gce_demo.py">Libcloud Compute Engine demo code</a>. The demo code can show you
how to use most of the features of the driver, including: Creating disks,
firewalls and addresses; setting tags; attaching and detaching disks and
deleting resources. There is <a href="https://github.com/apache/libcloud/blob/trunk/demos/gce_lb_demo.py">separate demo code</a> for the Load Balancer
functions which shows how to quickly set up 3 web servers with a Load Balancer
controlling the traffic to them. In addition, the driver documentation
contains the documentation for the extra methods that cover nearly all of the
features of the Compute Engine API.</p>
<p>We are excited to be able to contribute to the Libcloud project and hope that
you will find it useful. We like working with Libcloud and have used it as the
basis for contributing code to other open source projects such as <a href="http://ansible.com/">Ansible</a>
and <a href="http://www.saltstack.com/">SaltStack</a>. If you run into problems or find bugs, please
<a href="https://issues.apache.org/jira/browse/LIBCLOUD">report them</a> (or send a <a href="https://github.com/apache/libcloud">pull request</a>) and we will be happy to continue
to fix and enhance the Compute Engine driver in Libcloud.</p>
</div>
<div class="row section post-meta">
<div class="col-md-12 post-tags">
<p>Tags: <a href="/blog/tags/articles.html" rel="tag">articles</a>, <a href="/blog/tags/providers.html" rel="tag">providers</a>, <a href="/blog/tags/gce.html" rel="tag">gce</a></p>
</div>
</div>
</div>
<div class="post">
<h2><a href="/blog/2014/02/17/sebastien-goasguen-joins-our-team.html">Sebastien Goasguen (sebgoa) joins our team</a></h2>
<span class="post-date-author">By Tomaz Muraus on Feb 17, 2014</span>
<div class="post-content">
<p>The Project Management Committee (PMC) for Apache Libcloud has asked Sebastien
Goasguen (sebgoa) to join us as a committer and a PMC member. We are pleased
to announce that he has accepted.</p>
<p>Sebastien is no stranger to the Libcloud project. He has been contributing and
actively participating in the Libcloud community for quite a while now.</p>
<p>On top of that, he is also a PMC member at the Apache CloudStack project and
our local “CloudStack guy”.</p>
<p>We are happy to have him and some direct CloudStack expertise in our team.</p>
</div>
<div class="row section post-meta">
<div class="col-md-12 post-tags">
<p>Tags: <a href="/blog/tags/news.html" rel="tag">news</a>, <a href="/blog/tags/new-committer.html" rel="tag">new committer</a>, <a href="/blog/tags/new-pmc-member.html" rel="tag">new pmc member</a></p>
</div>
</div>
</div>
<div class="post">
<h2><a href="/blog/2014/02/14/call-for-participation-in-gsoc-2014.html">Call for Participation in Google Summer of Code 2014</a></h2>
<span class="post-date-author">By Tomaz Muraus on Feb 14, 2014</span>
<div class="post-content">
<div class="imginline">
<p><a href="/gsoc-2014.html">
<img src="/images/gsoc/gsoc2014_2.jpg" class="img-responsive inline" />
</a></p>
</div>
<p>If you would like to participate in Google Summer of Code 2014 and work on
Apache Libcloud, we invite you to read the following blog post for more
information - <a href="http://www.tomaz.me/2014/02/11/libcloud-gsoc-cfp.html">Libcloud Google Summer of Code 2014 Call for Participation</a>.</p>
</div>
<div class="row section post-meta">
<div class="col-md-12 post-tags">
<p>Tags: <a href="/blog/tags/news.html" rel="tag">news</a>, <a href="/blog/tags/gsoc.html" rel="tag">gsoc</a>, <a href="/blog/tags/gsoc2014.html" rel="tag">gsoc2014</a></p>
</div>
</div>
</div>
<div class="post">
<h2><a href="/blog/2014/02/11/libcloud-0-14-1-and-cloudsigma.html">Libcloud 0.14.1 and the new CloudSigma driver</a></h2>
<span class="post-date-author">By Tomaz Muraus on Feb 11, 2014</span>
<div class="post-content">
<p>Libcloud 0.14.1 has been <a href="/blog/2014/02/08/libcloud-0-14-1-released.html">release recently</a>. Among other bug fixes,
improvements and new features, this release also includes a brand new compute
driver for <a href="https://www.cloudsigma.com">CloudSigma</a> API 2.0 with an <a href="https://libcloud.readthedocs.org/en//latest/compute/drivers/cloudsigma.html">extensive documentation</a>.</p>
<div class="imginline">
<p><a href="https://www.cloudsigma.com" target="_blank">
<img src="/images/posts/2014-02-11-libcloud-0-14-1-and-cloudsigma/cloudsigma.png" class="img-responsive inline" />
</a></p>
</div>
<p>If you want to learn more about this new driver, I encourage you to check a guest
post I wrote on the CloudSigma blog which shows some examples of how to use this new
driver - <a href="https://www.cloudsigma.com/2014/02/11/cloudsigma-api-v2-0-is-now-supported-in-libcloud/">CloudSigma API v2.0 is now supported in Libcloud</a>.</p>
</div>
<div class="row section post-meta">
<div class="col-md-12 post-tags">
<p>Tags: <a href="/blog/tags/articles.html" rel="tag">articles</a>, <a href="/blog/tags/new-features.html" rel="tag">new features</a></p>
</div>
</div>
</div>
<div class="post">
<h2><a href="/blog/2014/02/08/libcloud-0-14-1-released.html">Libcloud 0.14.1 released</a></h2>
<span class="post-date-author">By Tomaz Muraus on Feb 08, 2014</span>
<div class="post-content">
<p>We are pleased to announce the release of Libcloud 0.14.1!</p>
<p>This release includes some bug-fixes, improvements and new features.</p>
<h3 id="release-highlights">Release highlights</h3>
<ul>
<li>New driver for <a href="https://libcloud.readthedocs.org/en//latest/compute/drivers/cloudsigma.html">CloudSigma API 2.0</a></li>
<li>Improvements in the OpenStack driver</li>
<li>Support for records with multiple values in the Route53 DNS driver</li>
<li>Support for paging through zones and records in the Rackspace DNS driver</li>
</ul>
<p>Full change log can be found at <a href="https://libcloud.readthedocs.org/en//latest/changelog.html#changes-with-apache-libcloud-0-14-1">here</a>.</p>
<h3 id="download">Download</h3>
<p>The release can can be downloaded from
<a href="https://libcloud.apache.org/downloads.html">https://libcloud.apache.org/downloads.html</a> or installed using pip:</p>
<pre>
pip install apache-libcloud==0.14.1
</pre>
<h3 id="upgrading">Upgrading</h3>
<p>If you have installed Libcloud using pip you can also use it to upgrade it:</p>
<pre>
pip install --upgrade apache-libcloud==0.14.1
</pre>
<h3 id="upgrade-notes">Upgrade notes</h3>
<p>A page which describes backward incompatible or semi-incompatible
changes and how to preserve the old behavior when this is possible
can be found at <a href="https://libcloud.readthedocs.org/en/latest/upgrade_notes.html#libcloud-0-14-1">https://libcloud.readthedocs.org/en/latest/upgrade_notes.html#libcloud-0-14-1</a></p>
<h3 id="documentation">Documentation</h3>
<p>Regular and API documentation is available at <a href="https://libcloud.readthedocs.org/en/v0.14.1/">https://libcloud.readthedocs.org/en/v0.14.1/</a></p>
<h3 id="bugs--issues">Bugs / Issues</h3>
<p>If you find any bug or issue, please report it on our issue tracker
<a href="https://issues.apache.org/jira/browse/LIBCLOUD">https://issues.apache.org/jira/browse/LIBCLOUD</a>.
Don’t forget to attach an example and / or test which reproduces your
problem.</p>
<h3 id="thanks">Thanks</h3>
<p>Thanks to everyone who contributed and made this release possible! Full
list of people who contributed to this release can be found in the
<a href="https://libcloud.readthedocs.org/en//latest/changelog.html#changes-with-apache-libcloud-0-14-1">CHANGES file</a>.</p>
<p>Source: <a href="http://mail-archives.apache.org/mod_mbox/libcloud-users/201309.mbox/%3CCAJMHEmL4-Xuysx13z1EDwq-1K95eDyANqgY2tYGUT-MB5Sz4bQ%40mail.gmail.com%3E">release announcement</a>.</p>
</div>
<div class="row section post-meta">
<div class="col-md-12 post-tags">
<p>Tags: <a href="/blog/tags/news.html" rel="tag">news</a>, <a href="/blog/tags/release-announcement.html" rel="tag">release announcement</a></p>
</div>
</div>
</div>
</div>
<p class="navigation">
<span class="alignleft"><a href="/blog/page/14/">« Previous Page</a></span>
<span class="pull-right"><a href="/blog/page/12/">Next Page »</a></span>
</p>
</div>
<div class="col-lg-3 col-lg-offset-1">
<h2>Archive</h1>
<ul>
<li> <a href="/blog/archives/2022/03/"> March 2022</a> &nbsp;(1)</li><li> <a href="/blog/archives/2021/11/"> November 2021</a> &nbsp;(2)</li><li> <a href="/blog/archives/2021/06/"> June 2021</a> &nbsp;(1)</li><li> <a href="/blog/archives/2021/01/"> January 2021</a> &nbsp;(2)</li><li> <a href="/blog/archives/2020/09/"> September 2020</a> &nbsp;(1)</li><li> <a href="/blog/archives/2020/08/"> August 2020</a> &nbsp;(2)</li><li> <a href="/blog/archives/2020/06/"> June 2020</a> &nbsp;(2)</li><li> <a href="/blog/archives/2020/04/"> April 2020</a> &nbsp;(2)</li><li> <a href="/blog/archives/2020/03/"> March 2020</a> &nbsp;(1)</li><li> <a href="/blog/archives/2020/01/"> January 2020</a> &nbsp;(2)</li><li> <a href="/blog/archives/2019/12/"> December 2019</a> &nbsp;(1)</li><li> <a href="/blog/archives/2019/11/"> November 2019</a> &nbsp;(1)</li><li> <a href="/blog/archives/2019/08/"> August 2019</a> &nbsp;(2)</li><li> <a href="/blog/archives/2019/05/"> May 2019</a> &nbsp;(1)</li><li> <a href="/blog/archives/2018/11/"> November 2018</a> &nbsp;(1)</li><li> <a href="/blog/archives/2018/06/"> June 2018</a> &nbsp;(1)</li><li> <a href="/blog/archives/2018/03/"> March 2018</a> &nbsp;(1)</li><li> <a href="/blog/archives/2017/12/"> December 2017</a> &nbsp;(1)</li><li> <a href="/blog/archives/2017/09/"> September 2017</a> &nbsp;(2)</li><li> <a href="/blog/archives/2017/07/"> July 2017</a> &nbsp;(1)</li><li> <a href="/blog/archives/2017/04/"> April 2017</a> &nbsp;(3)</li><li> <a href="/blog/archives/2016/12/"> December 2016</a> &nbsp;(1)</li><li> <a href="/blog/archives/2016/11/"> November 2016</a> &nbsp;(1)</li><li> <a href="/blog/archives/2016/10/"> October 2016</a> &nbsp;(1)</li><li> <a href="/blog/archives/2016/09/"> September 2016</a> &nbsp;(1)</li><li> <a href="/blog/archives/2016/07/"> July 2016</a> &nbsp;(1)</li><li> <a href="/blog/archives/2016/06/"> June 2016</a> &nbsp;(1)</li><li> <a href="/blog/archives/2016/04/"> April 2016</a> &nbsp;(2)</li><li> <a href="/blog/archives/2016/02/"> February 2016</a> &nbsp;(2)</li><li> <a href="/blog/archives/2016/01/"> January 2016</a> &nbsp;(4)</li><li> <a href="/blog/archives/2015/12/"> December 2015</a> &nbsp;(1)</li><li> <a href="/blog/archives/2015/11/"> November 2015</a> &nbsp;(1)</li><li> <a href="/blog/archives/2015/10/"> October 2015</a> &nbsp;(2)</li><li> <a href="/blog/archives/2015/08/"> August 2015</a> &nbsp;(1)</li><li> <a href="/blog/archives/2015/03/"> March 2015</a> &nbsp;(1)</li><li> <a href="/blog/archives/2015/02/"> February 2015</a> &nbsp;(1)</li><li> <a href="/blog/archives/2014/12/"> December 2014</a> &nbsp;(1)</li><li> <a href="/blog/archives/2014/11/"> November 2014</a> &nbsp;(1)</li><li> <a href="/blog/archives/2014/07/"> July 2014</a> &nbsp;(2)</li><li> <a href="/blog/archives/2014/06/"> June 2014</a> &nbsp;(1)</li><li> <a href="/blog/archives/2014/05/"> May 2014</a> &nbsp;(1)</li><li> <a href="/blog/archives/2014/04/"> April 2014</a> &nbsp;(1)</li><li> <a href="/blog/archives/2014/02/"> February 2014</a> &nbsp;(8)</li><li> <a href="/blog/archives/2014/01/"> January 2014</a> &nbsp;(4)</li><li> <a href="/blog/archives/2013/12/"> December 2013</a> &nbsp;(3)</li><li> <a href="/blog/archives/2013/11/"> November 2013</a> &nbsp;(2)</li><li> <a href="/blog/archives/2013/09/"> September 2013</a> &nbsp;(1)</li><li> <a href="/blog/archives/2013/08/"> August 2013</a> &nbsp;(1)</li><li> <a href="/blog/archives/2013/07/"> July 2013</a> &nbsp;(1)</li><li> <a href="/blog/archives/2013/03/"> March 2013</a> &nbsp;(1)</li><li> <a href="/blog/archives/2013/02/"> February 2013</a> &nbsp;(1)</li><li> <a href="/blog/archives/2012/12/"> December 2012</a> &nbsp;(2)</li><li> <a href="/blog/archives/2012/11/"> November 2012</a> &nbsp;(2)</li><li> <a href="/blog/archives/2012/09/"> September 2012</a> &nbsp;(1)</li><li> <a href="/blog/archives/2012/08/"> August 2012</a> &nbsp;(1)</li><li> <a href="/blog/archives/2012/07/"> July 2012</a> &nbsp;(1)</li><li> <a href="/blog/archives/2012/05/"> May 2012</a> &nbsp;(2)</li><li> <a href="/blog/archives/2012/04/"> April 2012</a> &nbsp;(1)</li><li> <a href="/blog/archives/2012/02/"> February 2012</a> &nbsp;(1)</li><li> <a href="/blog/archives/2011/12/"> December 2011</a> &nbsp;(2)</li><li> <a href="/blog/archives/2011/11/"> November 2011</a> &nbsp;(3)</li><li> <a href="/blog/archives/2011/10/"> October 2011</a> &nbsp;(1)</li><li> <a href="/blog/archives/2011/09/"> September 2011</a> &nbsp;(1)</li><li> <a href="/blog/archives/2011/07/"> July 2011</a> &nbsp;(1)</li><li> <a href="/blog/archives/2011/06/"> June 2011</a> &nbsp;(1)</li><li> <a href="/blog/archives/2011/05/"> May 2011</a> &nbsp;(1)</li><li> <a href="/blog/archives/2011/02/"> February 2011</a> &nbsp;(1)</li><li> <a href="/blog/archives/2011/01/"> January 2011</a> &nbsp;(1)</li><li> <a href="/blog/archives/2010/10/"> October 2010</a> &nbsp;(1)</li><li> <a href="/blog/archives/2010/05/"> May 2010</a> &nbsp;(1)</li><li> <a href="/blog/archives/2010/02/"> February 2010</a> &nbsp;(1)</li>
</ul>
</div>
</div>
<hr />
<footer>
<div class="row">
<div class="col-lg-12 text-center">
<div class="footer-links">
<p><a href="http://www.apache.org/licenses/">License</a> | <a
href="/security.html">Security</a> | <a
href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a> |
<a href="http://www.apache.org/foundation/thanks.html">Thanks</a> |
<a href="/credits.html">Credits</a> | <a href="/media.html">Media</a>
</div>
<div class="footer-text">
<p class="">Copyright &copy; 2009-2022 <a href="https://www.apache.org/" target="_blank">The Apache Software Foundation</a></p>
<p class="">Apache Libcloud, Libcloud, Apache, the Apache feather, and the Apache Libcloud project logo are trademarks of the Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
<p class="">Site last updated on 2022-03-29 22:17:41 +0000</p>
</div>
</div>
</div>
</footer>
</div><!-- /.container -->
<!-- JavaScript -->
<script src='/assets/global-23549af89e29254587a07d91b7eb9749.js' type='text/javascript'></script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-23580482-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</body>
</html>