blob: 97c5b8204640070a6879d24b71b68788b834c9bb [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/9/" property="og:url">
<link href='/assets/global-1768bfa479597eed443be67c5aec2edc.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="/"><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 class="post-title"><a href="/blog/2016/09/23/libcloud-1-2-1-released.html">Libcloud 1.2.1 released</a></h2>
<span class="post-date-author">By Anthony Shaw on Sep 23, 2016</span>
<div class="post-content">
<p>We are pleased to announce the release of Libcloud 1.2.1.</p>
<p>This release brings many new features, improvements, bug-fixes, and drivers.</p>
<h2 id="release-highlights">Release highlights</h2>
<h3 id="changes-in-apache-libcloud-121">Changes in Apache Libcloud 1.2.1</h3>
<ul>
<li>Fix issue enabling backups on Dimension Data driver</li>
</ul>
<h3 id="changes-in-apache-libcloud-120">Changes in Apache Libcloud 1.2.0</h3>
<h4 id="general">General</h4>
<ul>
<li>Fix caching of auth tokens in the Google Compute Engine drivers. Now we make
sure that the file is truncated before writing a new token. Not truncating the
file would cause issues if the new token is shorted then the existing one
which is cached in the file.</li>
</ul>
<h4 id="compute">Compute</h4>
<ul>
<li>Fix image undeprecation in GCE</li>
<li>Added Managed Instance Groups in GCE</li>
<li>Allow undeprecation of an image in GCE</li>
<li>BUGFIX Values with wildcards failed signature validation in cloudstack</li>
<li>Added StorageState-Migrating to the cloudstack driver.</li>
<li>Update copy image logic to match create image in GCE driver.</li>
<li>Removed HD attribute from the Abiquo compute driver to support the 3.4 API</li>
<li>Add image and size details to list_nodes response in Dimension Data driver</li>
<li>Add support for changing VM admin password in VMware driver</li>
<li>Add Barcelona (Spain) region to the Aurora Compute driver.</li>
<li>Various improvements in the libvirt driver.</li>
</ul>
<h4 id="load-balancer">Load balancer</h4>
<ul>
<li>Add support for temporary IAM role credentials (token) to the AWS ELB driver.</li>
</ul>
<h4 id="dns">DNS</h4>
<ul>
<li>Updated the ‘extra’ parameter in update_record() to be optional in aurora driver</li>
<li>Support for iterating over records and zones in the Aurora DNS driver</li>
<li>Add support for DS, PTR, SSFHFP and TLSA record type to the Aurora DNS driver.</li>
</ul>
<h4 id="container">Container</h4>
<ul>
<li>Add network mode and labels when creating containers within docker driver</li>
</ul>
<h4 id="storage">Storage</h4>
<ul>
<li>Fix authentication issue in S3/China region, disabled multipart uploads as
not supported by region.</li>
</ul>
<p>Full change log can be found at <a href="https://libcloud.readthedocs.org/en/latest/changelog.html">here</a>.</p>
<h3 id="special-thank-you">Special thank you</h3>
<p>I would like to wish a special thank you to all of our community contributors
for their ongoing support to the project.</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==1.2.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==1.2.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">https://libcloud.readthedocs.org/en/latest/upgrade_notes.html</a></p>
<h3 id="documentation">Documentation</h3>
<p>Regular and API documentation is available at <a href="https://libcloud.readthedocs.org/en/latest/">https://libcloud.readthedocs.org/en/latest/</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 file</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 class="post">
<h2 class="post-title"><a href="/blog/2016/07/07/libcloud-1-1-0-released.html">Libcloud 1.1.0 released</a></h2>
<span class="post-date-author">By Tomaz Muraus on Jul 07, 2016</span>
<div class="post-content">
<p>We are pleased to announce the release of Libcloud 1.1.0.</p>
<p>This is a first release after v1.0.0. It includes various improvements
and bug-fixes.</p>
<h3 id="release-highlights">Release highlights</h3>
<ul>
<li>Support for automatic SNI (SSL extension) using the hostname
supplied to connect to.</li>
<li>Various improvements in the libvirt driver</li>
<li>Various improvements in the DimensionData driver</li>
<li>Various improvements in the Aliyun driver</li>
</ul>
<p>Full change log can be found at <a href="https://libcloud.readthedocs.io/en/v1.1.0/changelog.html#changes-with-apache-libcloud-1-1-0">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==1.1.0
</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==1.1.0
</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">https://libcloud.readthedocs.org/en/latest/upgrade_notes.html</a></p>
<h3 id="documentation">Documentation</h3>
<p>Regular and API documentation is available at <a href="https://libcloud.readthedocs.org/en/v1.1.0/">https://libcloud.readthedocs.org/en/v1.1.0/</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.io/en/v1.1.0/changelog.html#changes-with-apache-libcloud-1-1-0">CHANGES file</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 class="post">
<h2 class="post-title"><a href="/blog/2016/06/22/libcloud-1-0-0-released.html">Libcloud 1.0.0 released</a></h2>
<span class="post-date-author">By Anthony Shaw on Jun 22, 2016</span>
<div class="post-content">
<p>We are pleased to announce the release of Libcloud 1.0.0.</p>
<p>This first release in the 1.0 series which means it brings many new
features, improvements, bug-fixes, and drivers. The 1.0 series includes 2 new driver types, <a href="http://libcloud.readthedocs.io/en/latest/container/index.html">container-as-a-service</a> and <a href="http://libcloud.readthedocs.io/en/latest/backup/index.html">backup-as-a-service</a>.</p>
<h3 id="release-highlights">Release highlights</h3>
<p>This includes:</p>
<ul>
<li>New backup-as-a-service and container-as-a-service driver types</li>
<li>Deprecated drivers that were no longer available such as Ninefold, IBM SCE <a href="http://libcloud.apache.org/blog/2016/02/16/new-drivers-deprecated-drivers.html">more details</a></li>
<li>Add support for authenticating against Keystone and OpenStack based clouds
using OpenID Connect tokens.</li>
<li>GCE nodes can be launched in a subnetwork and support for subnetworks</li>
<li>Add Image Family support for GCE</li>
<li>Add new <code class="language-plaintext highlighter-rouge">Perth, Australia</code> and <code class="language-plaintext highlighter-rouge">Manila, Philippines</code> region to the CloudSigma
v2 driver.</li>
<li>Add new S3 RGW storage driver.</li>
<li>The Amazon EC2 driver has been changed to use region codes instead of separate drivers for each region.</li>
<li>Introduce new <code class="language-plaintext highlighter-rouge">list_regions</code> class method on the base driver class</li>
<li>Support for Dimension Data backup</li>
<li>Added NSOne, LuaDNS, NearlyFreeSpeech.NET, BuddyNS, DNSPod DNS drivers</li>
<li>Added Aliyun compute, load balancer and storage drivers</li>
<li>Added Outscale storage driver</li>
</ul>
<p>Full change log can be found at <a href="https://libcloud.readthedocs.org/en/latest/changelog.html">here</a>.</p>
<h3 id="special-thank-you">Special thank you</h3>
<p>I would like to wish a special thank you to all of our community contributors for their ongoing support to the project.</p>
<p><a href="https://github.com/Kami">Tomaz Muraus</a>, <a href="https://github.com/pquerna">Paul Querna</a>,
<a href="https://github.com/jcsalterego">Jerry Chen</a>, <a href="https://github.com/jadunham1">Jeff Dunham</a>, <a href="https://github.com/erjohnso">Eric Johnson</a>,
<a href="https://github.com/jedsmith">Jed Smith</a>, <a href="https://github.com/wrigri">Rick Wright</a>, <a href="https://github.com/novel">Roman Bogorodskiy</a>,
<a href="https://github.com/baldwinmathew">Mathew Baldwin</a>, <a href="https://github.com/davidcrossland">David Crossland</a>, <a href="https://github.com/alex">Alex Gaynor</a>,
<a href="https://github.com/allardhoeve">Allard Hoeve</a>, <a href="https://github.com/runseb">Sebastien Goasguen</a>, <a href="https://github.com/franckcuny">Franck Cuny</a>,
<a href="https://github.com/ktdreyer">Ken Dreyer</a>, <a href="https://github.com/jcastillo2nd">Javier Castillo II</a>, <a href="https://github.com/wido">Wido den Hollander</a>,
<a href="https://github.com/bennettaur">Michael Bennett</a>, <a href="https://github.com/ZuluPro">Anthony Monthe</a>, <a href="https://github.com/zerthimon">Lior Goikhburg</a>,
<a href="https://github.com/encyphered">Geunwoo Shin</a>, <a href="https://github.com/juanfont">Juan Font</a>, <a href="https://github.com/schaubl">“schaubl”</a>,
<a href="https://github.com/mbrukman">Misha Brukman</a>, <a href="https://github.com/jetbird">Oltjano Terpollari</a>, <a href="https://github.com/pzrq">Peter Schmidt</a>,
<a href="https://github.com/mingsheng36">Ming Sheng</a>, <a href="https://github.com/gertjanol">Gertjan Oude Lohuis</a>,
<a href="https://github.com/mgogoulos">Markos Gogoulos</a>, <a href="https://github.com/bernard357">Bernard Paques</a>,
<a href="https://github.com/Phreedom">Evgeny Egorochkin</a>, <a href="https://github.com/gigimon">Oleg</a>, <a href="https://github.com/atsaki">Atsushi Sasaki</a>,
<a href="https://github.com/micafer">Miguel Caballer</a>, <a href="https://github.com/kumarappanc">Kumar</a>, <a href="https://github.com/gmcdonald">Gavin McDonald</a>,
<a href="https://github.com/boul">Roeland Kuipers</a>, <a href="https://github.com/briancurtin">Brian Curtin</a>, <a href="https://github.com/ikusalic">Ivan Kusalic</a>,
<a href="https://github.com/ferewuz">Vanč Levstik</a>, <a href="https://github.com/davidwilson2038">None</a>, <a href="https://github.com/Smotko">Anže Pečar</a>,
<a href="https://github.com/MrBasset">“MrBasset”</a>, <a href="https://github.com/crunkleton">None</a>, <a href="https://github.com/jmunhoz">Javier M. Mellid</a>,
<a href="https://github.com/jimbobhickville">Greg Hill</a>, <a href="https://github.com/Jc2k">None</a>, <a href="https://github.com/sfriesel">Stefan Friesel</a>,
<a href="https://github.com/relaxdiego">Mark Maglana</a>, <a href="https://github.com/aleGpereira">Alejandro Gabriel Pereira</a>,
<a href="https://github.com/kyle-long">Kyle Long</a>, <a href="https://github.com/teemuvesala">Teemu Vesala</a>, <a href="https://github.com/LordShion">Filipe Silva</a>,
<a href="https://github.com/jshridha">Jay</a>, <a href="https://github.com/bernieke">Bernard Kerckenaere</a>, <a href="https://github.com/jobelenus">John Obelenus</a>,
<a href="https://github.com/bsdlp">Jon Chen</a>, <a href="https://github.com/lawrencellui-dd">Larry Lui</a>,</p>
<h3 id="important-breaking-change---amazon-ec2-driver-changes">Important breaking change- Amazon EC2 driver changes</h3>
<p>The Amazon EC2 API was updated to consolidate the regional-based drivers into a single driver with a region argument in the constructor.</p>
<p>Amazon Instances should now be instantiated using the following syntax:</p>
<div class="language-python highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code><span class="kn">from</span> <span class="nn">libcloud.compute.types</span> <span class="kn">import</span> <span class="n">Provider</span>
<span class="kn">from</span> <span class="nn">libcloud.compute.providers</span> <span class="kn">import</span> <span class="n">get_driver</span>
<span class="n">cls</span> <span class="o">=</span> <span class="n">get_driver</span><span class="p">(</span><span class="n">Provider</span><span class="p">.</span><span class="n">EC2</span><span class="p">)</span>
<span class="n">driver</span> <span class="o">=</span> <span class="n">cls</span><span class="p">(</span><span class="s">'access key'</span><span class="p">,</span> <span class="s">'secret key'</span><span class="p">,</span> <span class="n">region</span><span class="o">=</span><span class="s">'us-east-1'</span><span class="p">)</span>
</code></pre>
</div>
</div>
<p>This brings the Amazon API inline with the other drivers, makes it easier to maintain and switch between regions.</p>
<h3 id="bug-fixes">Bug fixes</h3>
<h4 id="general">General</h4>
<ul>
<li>
<p>Fix a bug with consuming stdout and stderr in the paramiko SSH client which
would manifest itself under very rare condition when a consumed chunk only
contained a single byte or part of a multi byte UTF-8 character.
[Lakshmi Kannan, Tomaz Muraus]</p>
</li>
<li>
<p>Increase default chunk size from <code class="language-plaintext highlighter-rouge">1024</code> to <code class="language-plaintext highlighter-rouge">4096</code> bytes in the paramiko
SSH client. This results in smaller number of receive calls on the average.
[Tomaz Muraus]</p>
</li>
<li>
<p>Fix to Dimension Data API address for Middle-East and Africa
(GITHUB-700)
[Anthony Shaw]</p>
</li>
<li>
<p>Throw a more user-friendly exception on “No address associated with hostname”.
(GITHUB-711, GITHUB-714, LIBCLOUD-803)
[Tomaz Muraus, Scott Crunkleton]</p>
</li>
<li>
<p>Remove deprecated provider constants with the region in the name and related
driver classes (e.g. <code class="language-plaintext highlighter-rouge">EC2_US_EAST</code>, etc.).</p>
<p>Those drivers have moved to single provider constant + <code class="language-plaintext highlighter-rouge">region</code> constructor
argument model.
[Tomaz Muraus]</p>
</li>
</ul>
<h3 id="new-or-deprecated-drivers">New or deprecated drivers</h3>
<h4 id="compute">Compute</h4>
<ul>
<li>
<p>Deprecated IBM SCE, HP Helion, OpSource, Ninefold and CloudFrames drivers, removed
driver code and tests.
(GITHUB-701, LIBCLOUD-801)
[Anthony Shaw]</p>
</li>
<li>
<p>Introduced error messages (<code class="language-plaintext highlighter-rouge">libcloud.compute.deprecated</code>) for deprecated drivers
(GITHUB-701, LIBCLOUD-801)
[Anthony Shaw]</p>
</li>
<li>
<p>New Compute drivers- BSNL, Indosat, Med-1, NTT-America, Internet Solutions
(GITHUB-700)
[Anthony Shaw]</p>
</li>
<li>
<p>New driver for Aliyun Elastic Compute Service.
(LIBCLOUD-802, GITHUB-712)
[Sam Song]</p>
</li>
</ul>
<h4 id="storage">Storage</h4>
<ul>
<li>
<p>Added Outscale storage driver
(GITHUB-730)
[Javier M. Mellid]</p>
</li>
<li>
<p>New driver for Aliyun OSS Storage Service.
(LIBCLOUD-802, GITHUB-712)
[Sam Song]</p>
</li>
</ul>
<h4 id="loadbalancer">Loadbalancer</h4>
<ul>
<li>New driver for Aliyun SLB Loadbalancer Service.
(LIBCLOUD-802, GITHUB-712)
[Sam Song]</li>
</ul>
<h4 id="dns">DNS</h4>
<ul>
<li>
<p>Added NearlyFreeSpeech.net (NSFN) driver
[Ken Drayer]</p>
</li>
<li>
<p>Added Lua DNS driver
[Oltjano Terpollari]</p>
</li>
<li>
<p>Added NSOne driver
[Oltjano Terpollari]</p>
</li>
</ul>
<h2 id="bug-fixes-1">Bug fixes</h2>
<ul>
<li>
<p>Fix a bug in the GoDaddy driver - make sure <code class="language-plaintext highlighter-rouge">host</code> attribute on the
connection class is correctly set to the hostname.
[Tomaz Muraus]</p>
</li>
<li>
<p>Fix handling of <code class="language-plaintext highlighter-rouge">MX</code> records in the Gandi driver.
(GITHUB-718)
[Ryan Lee]</p>
</li>
</ul>
<h2 id="improvements">Improvements</h2>
<h3 id="compute-1">Compute</h3>
<ul>
<li>
<p>Introduce new <code class="language-plaintext highlighter-rouge">list_regions</code> class method on the base driver class. This
method is to be used with provider drivers which support multiple regions and
<code class="language-plaintext highlighter-rouge">region</code> constructor argument. It allows users to enumerate available /
supported regions.
[Tomaz Muraus]</p>
</li>
<li>
<p>[dimension data] added support for VMWare tools VM information inside list_nodes responses
(GITHUB-734)
[Jeff Dunham]</p>
</li>
<li>
<p>[ec2] added ex_encrypted and ex_kms_key_id optional parameters to the create volume method
(GITHUB-729)
[Viktor Ognev]</p>
</li>
<li>
<p>[dimension data] added support for managing host anti-affinity rules, added paging support to
all supported calls and added support for requesting priority ordering when creating ACL rules
(GITHUB-726)
[Jeff Dunham]</p>
</li>
<li>
<p>Addition of Dimension Data Australia federal government region to dimension data
drivers.
(GITHUB-700)
[Anthony Shaw]</p>
</li>
<li>
<p>[openstack] when creating floating IPs, added pool_id as an optional argument
(GITHUB-725)
[marko-p]</p>
</li>
<li>
<p>[google compute] Added setMachineType method to allow for changing sizes of instances
(GITHUB-721)
[Eric Johnson]</p>
</li>
<li>
<p>[google compute] allow bypassing image search in standard project list
(GITHUB-713)
[Max Illfelder]</p>
</li>
<li>
<p>Add support for requesting a MKS token for accessing the remote console in VMware
vCloud driver
(GITHUB-706)
[Juan Font Alonso]</p>
</li>
<li>
<p>Add support in VMware vCloud driver for v5.5 API, with snapshot support
(GITHUB-658)
[Juan Font Alonso]</p>
</li>
<li>
<p>Added support for adding a family to an image on Google Compute Driver
(GITHUB-704)
[Max Illfelder]</p>
</li>
<li>
<p>Fix to set default signature version for AWS Seoul region to v4, removed
non-supported size (hs1.xlarge)
(GITHUB-684)
[Geunwoo Shin]</p>
</li>
<li>
<p>Support filtering by location in list_nodes for dimension data compute driver
fix lack of paging support
(GITHUB-691)
[Jeff Dunham]</p>
</li>
<li>
<p>Support for filtering by IPv4, IPv6, network, network domain, VLAN in Dimension
data driver.
(GITHUB-694)
[Jeff Dunham]</p>
</li>
<li>
<p>Added <code class="language-plaintext highlighter-rouge">Node.created_at</code> which, on supported drivers, contains the datetime the
node was first started.
(GITHUB-698)
[Allard Hoeve] [Rick van de Loo]</p>
</li>
</ul>
<h3 id="storage-1">Storage</h3>
<ul>
<li>
<p>Improvements to Google Auth for Storage and Compute and MIME bug fix
(LIBCLOUD-800, GITHUB-689)
[Scott Crunkleton]</p>
</li>
<li>
<p>Implement <code class="language-plaintext highlighter-rouge">get_container</code>, <code class="language-plaintext highlighter-rouge">get_object</code> and <code class="language-plaintext highlighter-rouge">upload_object_via_stream</code>
methods in the Backblaze B2 storage driver.</p>
<p>Note: Backblaze API doesn’t upload streaming uploads so when using
<code class="language-plaintext highlighter-rouge">upload_object_via_stream</code> whole file is read and buffered in memory.
(GITHUB-696)
[Jay jshridha]</p>
</li>
</ul>
<h3 id="backup">Backup</h3>
<ul>
<li>Dimension Data - added additional testing, fixed bug on client response naming,
added support for adding backup clients to a backup enabled node.
(GITHUB-692, GITHUB-693, GITHUB-695)
[Jeff Dunham]</li>
</ul>
<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==1.0.0
</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==1.0.0
</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">https://libcloud.readthedocs.org/en/latest/upgrade_notes.html</a></p>
<h3 id="documentation">Documentation</h3>
<p>Regular and API documentation is available at <a href="https://libcloud.readthedocs.org/en/latest/">https://libcloud.readthedocs.org/en/latest/</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 file</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 class="post">
<h2 class="post-title"><a href="/blog/2016/04/11/libcloud-1-0-0-rc2-released.html">Libcloud 1.0.0-rc2 released</a></h2>
<span class="post-date-author">By Anthony Shaw on Apr 11, 2016</span>
<div class="post-content">
<p>We are pleased to announce the release of Libcloud 1.0.0-rc2.</p>
<p>This the second pre-release in the 1.0.0 series which means it brings many new
features, improvements, bug-fixes, and DNS drivers.</p>
<h3 id="release-highlights">Release highlights</h3>
<p>This includes:</p>
<ul>
<li>Deprecated drivers that were no longer available such as Ninefold, IBM SCE <a href="http://libcloud.apache.org/blog/2016/02/16/new-drivers-deprecated-drivers.html">more details</a></li>
<li>The Amazon EC2 driver has been changed to use region codes instead of separate drivers for each region.</li>
<li>Introduce new <code class="language-plaintext highlighter-rouge">list_regions</code> class method on the base driver class</li>
<li>Support for Dimension Data backup</li>
<li>Added NSOne, LuaDNS, NearlyFreeSpeech.NET DNS drivers</li>
<li>Added Aliyun compute, load balancer and storage drivers</li>
<li>Added Outscale storage driver</li>
</ul>
<p>Full change log can be found at <a href="https://libcloud.readthedocs.org/en/latest/changelog.html">here</a>.</p>
<h3 id="important-breaking-change---amazon-ec2-driver-changes">Important breaking change- Amazon EC2 driver changes</h3>
<p>The Amazon EC2 API was updated to consolidate the regional-based drivers into a single driver with a region argument in the constructor.</p>
<p>Amazon Instances should now be instantiated using the following syntax:</p>
<div class="language-python highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code><span class="kn">from</span> <span class="nn">libcloud.compute.types</span> <span class="kn">import</span> <span class="n">Provider</span>
<span class="kn">from</span> <span class="nn">libcloud.compute.providers</span> <span class="kn">import</span> <span class="n">get_driver</span>
<span class="n">cls</span> <span class="o">=</span> <span class="n">get_driver</span><span class="p">(</span><span class="n">Provider</span><span class="p">.</span><span class="n">EC2</span><span class="p">,</span> <span class="n">region</span><span class="o">=</span><span class="s">'us-east-i1'</span><span class="p">)</span>
<span class="n">driver</span> <span class="o">=</span> <span class="n">cls</span><span class="p">(</span><span class="s">'access key'</span><span class="p">,</span> <span class="s">'secret key'</span><span class="p">)</span>
</code></pre>
</div>
</div>
<p>This brings the Amazon API inline with the other drivers, makes it easier to maintain and switch between regions.</p>
<h3 id="bug-fixes">Bug fixes</h3>
<h4 id="general">General</h4>
<ul>
<li>
<p>Fix a bug with consuming stdout and stderr in the paramiko SSH client which
would manifest itself under very rare condition when a consumed chunk only
contained a single byte or part of a multi byte UTF-8 character.
[Lakshmi Kannan, Tomaz Muraus]</p>
</li>
<li>
<p>Increase default chunk size from <code class="language-plaintext highlighter-rouge">1024</code> to <code class="language-plaintext highlighter-rouge">4096</code> bytes in the paramiko
SSH client. This results in smaller number of receive calls on the average.
[Tomaz Muraus]</p>
</li>
<li>
<p>Fix to Dimension Data API address for Middle-East and Africa
(GITHUB-700)
[Anthony Shaw]</p>
</li>
<li>
<p>Throw a more user-friendly exception on “No address associated with hostname”.
(GITHUB-711, GITHUB-714, LIBCLOUD-803)
[Tomaz Muraus, Scott Crunkleton]</p>
</li>
<li>
<p>Remove deprecated provider constants with the region in the name and related
driver classes (e.g. <code class="language-plaintext highlighter-rouge">EC2_US_EAST</code>, etc.).</p>
<p>Those drivers have moved to single provider constant + <code class="language-plaintext highlighter-rouge">region</code> constructor
argument model.
[Tomaz Muraus]</p>
</li>
</ul>
<h3 id="new-or-deprecated-drivers">New or deprecated drivers</h3>
<h4 id="compute">Compute</h4>
<ul>
<li>
<p>Deprecated IBM SCE, HP Helion, OpSource, Ninefold and CloudFrames drivers, removed
driver code and tests.
(GITHUB-701, LIBCLOUD-801)
[Anthony Shaw]</p>
</li>
<li>
<p>Introduced error messages (<code class="language-plaintext highlighter-rouge">libcloud.compute.deprecated</code>) for deprecated drivers
(GITHUB-701, LIBCLOUD-801)
[Anthony Shaw]</p>
</li>
<li>
<p>New Compute drivers- BSNL, Indosat, Med-1, NTT-America, Internet Solutions
(GITHUB-700)
[Anthony Shaw]</p>
</li>
<li>
<p>New driver for Aliyun Elastic Compute Service.
(LIBCLOUD-802, GITHUB-712)
[Sam Song]</p>
</li>
</ul>
<h4 id="storage">Storage</h4>
<ul>
<li>
<p>Added Outscale storage driver
(GITHUB-730)
[Javier M. Mellid]</p>
</li>
<li>
<p>New driver for Aliyun OSS Storage Service.
(LIBCLOUD-802, GITHUB-712)
[Sam Song]</p>
</li>
</ul>
<h4 id="loadbalancer">Loadbalancer</h4>
<ul>
<li>New driver for Aliyun SLB Loadbalancer Service.
(LIBCLOUD-802, GITHUB-712)
[Sam Song]</li>
</ul>
<h4 id="dns">DNS</h4>
<ul>
<li>
<p>Added NearlyFreeSpeech.net (NSFN) driver
[Ken Drayer]</p>
</li>
<li>
<p>Added Lua DNS driver
[Oltjano Terpollari]</p>
</li>
<li>
<p>Added NSOne driver
[Oltjano Terpollari]</p>
</li>
</ul>
<h2 id="bug-fixes-1">Bug fixes</h2>
<ul>
<li>
<p>Fix a bug in the GoDaddy driver - make sure <code class="language-plaintext highlighter-rouge">host</code> attribute on the
connection class is correctly set to the hostname.
[Tomaz Muraus]</p>
</li>
<li>
<p>Fix handling of <code class="language-plaintext highlighter-rouge">MX</code> records in the Gandi driver.
(GITHUB-718)
[Ryan Lee]</p>
</li>
</ul>
<h2 id="improvements">Improvements</h2>
<h3 id="compute-1">Compute</h3>
<ul>
<li>
<p>Introduce new <code class="language-plaintext highlighter-rouge">list_regions</code> class method on the base driver class. This
method is to be used with provider drivers which support multiple regions and
<code class="language-plaintext highlighter-rouge">region</code> constructor argument. It allows users to enumerate available /
supported regions.
[Tomaz Muraus]</p>
</li>
<li>
<p>[dimension data] added support for VMWare tools VM information inside list_nodes responses
(GITHUB-734)
[Jeff Dunham]</p>
</li>
<li>
<p>[ec2] added ex_encrypted and ex_kms_key_id optional parameters to the create volume method
(GITHUB-729)
[Viktor Ognev]</p>
</li>
<li>
<p>[dimension data] added support for managing host anti-affinity rules, added paging support to
all supported calls and added support for requesting priority ordering when creating ACL rules
(GITHUB-726)
[Jeff Dunham]</p>
</li>
<li>
<p>Addition of Dimension Data Australia federal government region to dimension data
drivers.
(GITHUB-700)
[Anthony Shaw]</p>
</li>
<li>
<p>[openstack] when creating floating IPs, added pool_id as an optional argument
(GITHUB-725)
[marko-p]</p>
</li>
<li>
<p>[google compute] Added setMachineType method to allow for changing sizes of instances
(GITHUB-721)
[Eric Johnson]</p>
</li>
<li>
<p>[google compute] allow bypassing image search in standard project list
(GITHUB-713)
[Max Illfelder]</p>
</li>
<li>
<p>Add support for requesting a MKS token for accessing the remote console in VMware
vCloud driver
(GITHUB-706)
[Juan Font Alonso]</p>
</li>
<li>
<p>Add support in VMware vCloud driver for v5.5 API, with snapshot support
(GITHUB-658)
[Juan Font Alonso]</p>
</li>
<li>
<p>Added support for adding a family to an image on Google Compute Driver
(GITHUB-704)
[Max Illfelder]</p>
</li>
<li>
<p>Fix to set default signature version for AWS Seoul region to v4, removed
non-supported size (hs1.xlarge)
(GITHUB-684)
[Geunwoo Shin]</p>
</li>
<li>
<p>Support filtering by location in list_nodes for dimension data compute driver
fix lack of paging support
(GITHUB-691)
[Jeff Dunham]</p>
</li>
<li>
<p>Support for filtering by IPv4, IPv6, network, network domain, VLAN in Dimension
data driver.
(GITHUB-694)
[Jeff Dunham]</p>
</li>
<li>
<p>Added <code class="language-plaintext highlighter-rouge">Node.created_at</code> which, on supported drivers, contains the datetime the
node was first started.
(GITHUB-698)
[Allard Hoeve] [Rick van de Loo]</p>
</li>
</ul>
<h3 id="storage-1">Storage</h3>
<ul>
<li>
<p>Improvements to Google Auth for Storage and Compute and MIME bug fix
(LIBCLOUD-800, GITHUB-689)
[Scott Crunkleton]</p>
</li>
<li>
<p>Implement <code class="language-plaintext highlighter-rouge">get_container</code>, <code class="language-plaintext highlighter-rouge">get_object</code> and <code class="language-plaintext highlighter-rouge">upload_object_via_stream</code>
methods in the Backblaze B2 storage driver.</p>
<p>Note: Backblaze API doesn’t upload streaming uploads so when using
<code class="language-plaintext highlighter-rouge">upload_object_via_stream</code> whole file is read and buffered in memory.
(GITHUB-696)
[Jay jshridha]</p>
</li>
</ul>
<h3 id="backup">Backup</h3>
<ul>
<li>Dimension Data - added additional testing, fixed bug on client response naming,
added support for adding backup clients to a backup enabled node.
(GITHUB-692, GITHUB-693, GITHUB-695)
[Jeff Dunham]</li>
</ul>
<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==1.0.0-rc2
</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==1.0.0-rc2
</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">https://libcloud.readthedocs.org/en/latest/upgrade_notes.html</a></p>
<h3 id="documentation">Documentation</h3>
<p>Regular and API documentation is available at <a href="https://libcloud.readthedocs.org/en/latest/">https://libcloud.readthedocs.org/en/latest/</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 file</a>.</p>
<p>We would like to thank the following community members for their contribution to this release:</p>
<ul>
<li>Jeff Dunham</li>
<li>Max Illfelder</li>
<li>Ken Dreyer</li>
<li>Sam Song</li>
<li>Oltjano Terpollari</li>
<li>Javier M. Mellid</li>
</ul>
</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 class="post">
<h2 class="post-title"><a href="/blog/2016/04/06/requests-support.html">Experimental support for the requests package</a></h2>
<span class="post-date-author">By Anthony Shaw on Apr 06, 2016</span>
<div class="post-content">
<h2 id="background">Background</h2>
<p>I’ve just pushed a branch of the latest version of libcloud using the popular <code class="language-plaintext highlighter-rouge">requests</code> package by Kenneth Reitz instead of our home-rolled HTTP client library.</p>
<p>This article is for both users and developers of libcloud. If you want to give feedback, please join the developer mailing list.</p>
<h2 id="why">Why?</h2>
<ul>
<li>requests is the defacto standard - it would be in the standard library but agreed against to allow it to develop faster https://github.com/kennethreitz/requests/issues/2424</li>
<li>it works with python 2.6-&gt;3.5</li>
<li>Our SSL experience has a lot to be desired for Windows users, having to download the CA cert package and setting environment variables just to get SSL working</li>
<li>Developers can use requests_mock for deeper integration testing</li>
<li>less code to maintain</li>
<li>the role of libcloud is for cloud abstraction, we provide no value in writing and maintaining our own HTTP client library</li>
</ul>
<h2 id="benefits-of-requests">Benefits of requests</h2>
<p>There are a number of benefits to having a requests package</p>
<ul>
<li>The client library code is smaller, leaner and simpler.</li>
<li>Requests has built in decompression support, we no longer need to support this</li>
<li>Requests has built in RAW download, upload support, helping with our storage drivers</li>
</ul>
<h2 id="implications-of-the-change">Implications of the change</h2>
<ul>
<li>There are no longer 2 classes (<code class="language-plaintext highlighter-rouge">LibcloudHTTPSConnection</code> and <code class="language-plaintext highlighter-rouge">LibcloudHTTPConnection</code>) to be provided to each driver, they are now 1 class - <code class="language-plaintext highlighter-rouge">LibcloudConnection</code>. You probably won’t notice this because it is a property of the <code class="language-plaintext highlighter-rouge">Connection</code> class, but
if you are developing or extending functionality then it is implicated.</li>
<li>Unit tests will look slightly different (see below)</li>
<li>This change broke 4200 unit tests (out of 6340)! I’ve since fixed them all since they were coupled to the original implementation, but now I don’t know if all of tests are valid.</li>
</ul>
<h2 id="testing-with-requests">Testing with requests</h2>
<p>Unit tests that were written like this:</p>
<div class="language-python highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code><span class="k">class</span> <span class="nc">DigitalOceanTests</span><span class="p">(</span><span class="n">LibcloudTestCase</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">DigitalOceanBaseDriver</span><span class="p">.</span><span class="n">connectionCls</span><span class="p">.</span><span class="n">conn_classes</span> <span class="o">=</span> \
<span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">DigitalOceanMockHttp</span><span class="p">)</span>
<span class="n">DigitalOceanMockHttp</span><span class="p">.</span><span class="nb">type</span> <span class="o">=</span> <span class="bp">None</span>
<span class="bp">self</span><span class="p">.</span><span class="n">driver</span> <span class="o">=</span> <span class="n">DigitalOceanBaseDriver</span><span class="p">(</span><span class="o">*</span><span class="n">DIGITALOCEAN_v1_PARAMS</span><span class="p">)</span>
</code></pre>
</div>
</div>
<p>Because of the change have been modified to (I updated all of them - so this is just for future reference)</p>
<div class="language-python highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code><span class="k">class</span> <span class="nc">DigitalOceanTests</span><span class="p">(</span><span class="n">LibcloudTestCase</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">DigitalOceanBaseDriver</span><span class="p">.</span><span class="n">connectionCls</span><span class="p">.</span><span class="n">conn_class</span> <span class="o">=</span> <span class="n">DigitalOceanMockHttp</span>
<span class="n">DigitalOceanMockHttp</span><span class="p">.</span><span class="nb">type</span> <span class="o">=</span> <span class="bp">None</span>
<span class="bp">self</span><span class="p">.</span><span class="n">driver</span> <span class="o">=</span> <span class="n">DigitalOceanBaseDriver</span><span class="p">(</span><span class="o">*</span><span class="n">DIGITALOCEAN_v1_PARAMS</span><span class="p">)</span>
</code></pre>
</div>
</div>
<h1 id="check-it-out">Check it out!</h1>
<p>The package is on my personal apache site, you can download it and install it in a virtualenv for testing.</p>
<p><code class="language-plaintext highlighter-rouge">pip install -e http://people.apache.org/~anthonyshaw/libcloud/1.0.0-rc2-requests/apache-libcloud-1.0.0-rc2-requests.zip@feature#egg=apache-libcloud</code></p>
<p>The hashes are my <a href="http://people.apache.org/~anthonyshaw/libcloud/1.0.0-rc2-requests/">apache space</a></p>
<p>Have a look at the <a href="https://github.com/apache/libcloud/pull/728/files">PR and the change set</a> for a list of changes</p>
<h1 id="what-might-break">What might break?</h1>
<p>What I’m really looking for is for users of Libcloud to take 15 minutes, an existing (working) libcloud script, install this package in a virtualenv and just validate
that there are no regression bugs with this change.</p>
<p>I’m particularly sceptical about the storage drivers.</p>
<p>Once we have enough community feedback, we will propose a vote to merge this into trunk for future release.</p>
<h2 id="credit">Credit</h2>
<p>Credit to dz0ny on IRC for contributing some of the requests patch.</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/api.html" rel="tag">API</a>, <a href="/blog/tags/tutorial.html" rel="tag">tutorial</a></p>
</div>
</div>
</div>
</div>
<p class="navigation">
<span class="alignleft"><a href="/blog/page/10/">« Previous Page</a></span>
<span class="pull-right"><a href="/blog/page/8/">Next Page »</a></span>
</p>
</div>
<div class="col-lg-3 col-lg-offset-1">
<h2>Archive</h1>
<ul>
<li> <a href="/blog/archives/2023/08/"> August 2023</a> &nbsp;(1)</li><li> <a href="/blog/archives/2023/01/"> January 2023</a> &nbsp;(1)</li><li> <a href="/blog/archives/2022/10/"> October 2022</a> &nbsp;(1)</li><li> <a href="/blog/archives/2022/05/"> May 2022</a> &nbsp;(1)</li><li> <a href="/blog/archives/2022/03/"> March 2022</a> &nbsp;(3)</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="https://www.apache.org/events/">Events</a> |
<a href="/credits.html">Credits</a> | <a href="/media.html">Media</a>
</div>
<div class="footer-text">
<p><a class="acevent" data-format="wide"></a></p>
<p class="">Copyright &copy; 2009-2023 <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 2023-09-09 21:33:21 +0000</p>
</div>
</div>
</div>
</footer>
</div><!-- /.container -->
<!-- JavaScript -->
<script src='/assets/global-20157a00c0e17a775f45ed99ccdf79d7.js' type='text/javascript'></script>
<script type="text/javascript">
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before
"trackPageView" */
/* We explicitly disable cookie tracking to avoid privacy issues */
_paq.push(['disableCookies']);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="https://analytics.apache.org/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '7']);
var d=document, g=d.createElement('script'),
s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<script src="https://www.apachecon.com/event-images/snippet.js"></script>
</body>
</html>