libcloud-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From to...@apache.org
Subject svn commit: r1885034 [11/13] - in /libcloud/site/trunk: generated/ generated/blog/ generated/blog/2010/02/02/ generated/blog/2010/05/11/ generated/blog/2010/10/12/ generated/blog/2011/01/17/ generated/blog/2011/02/15/ generated/blog/2011/05/25/ generat...
Date Sat, 02 Jan 2021 20:41:27 GMT
Modified: libcloud/site/trunk/generated/blog/page/7/index.html
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/generated/blog/page/7/index.html?rev=1885034&r1=1885033&r2=1885034&view=diff
==============================================================================
--- libcloud/site/trunk/generated/blog/page/7/index.html (original)
+++ libcloud/site/trunk/generated/blog/page/7/index.html Sat Jan  2 20:41:25 2021
@@ -97,6 +97,391 @@
     
       <div class="post">
   
+    <h2><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 <span style="display:none">(<a href="https://plus.google.com/+TomazMuraus?rel=author">Google+</a>)</span>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>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>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>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>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>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>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&#39;t forget to attach an example and / or test which reproduces your
+problem.</p>
+
+<h3>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%20announcement.html" rel="tag">release announcement</a></p>
+    </div>
+  </div>
+</div>
+
+    
+  
+    
+      <div class="post">
+  
+    <h2><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>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>Perth, Australia</code> and <code>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>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>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">&quot;schaubl&quot;</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">&quot;MrBasset&quot;</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>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="highlight"><pre><code class="python language-python" data-lang="python"><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="o">.</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">&#39;access key&#39;</span><span class="p">,</span> <span class="s">&#39;secret key&#39;</span><span class="p">,</span> <span class="n">region</span><span class="o">=</span><span class="s">&#39;us-east-1&#39;</span><span class="p">)</span>
+</code></pre></div>
+
+<p>This brings the Amazon API inline with the other drivers, makes it easier to maintain and switch between regions.</p>
+
+<h3>Bug fixes</h3>
+
+<h4>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>1024</code> to <code>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 &quot;No address associated with hostname&quot;.
+(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>EC2_US_EAST</code>, etc.).</p>
+
+<p>Those drivers have moved to single provider constant + <code>region</code> constructor
+argument model.
+[Tomaz Muraus]</p></li>
+</ul>
+
+<h3>New or deprecated drivers</h3>
+
+<h4>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>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>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>Loadbalancer</h4>
+
+<ul>
+<li>New driver for Aliyun SLB Loadbalancer Service.
+(LIBCLOUD-802, GITHUB-712)
+[Sam Song]</li>
+</ul>
+
+<h4>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>Bug fixes</h2>
+
+<ul>
+<li><p>Fix a bug in the GoDaddy driver - make sure <code>host</code> attribute on the
+connection class is correctly set to the hostname.
+[Tomaz Muraus]</p></li>
+<li><p>Fix handling of <code>MX</code> records in the Gandi driver.
+(GITHUB-718)
+[Ryan Lee]</p></li>
+</ul>
+
+<h2>Improvements</h2>
+
+<h3>Compute</h3>
+
+<ul>
+<li><p>Introduce new <code>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>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<em>encrypted and ex</em>kms<em>key</em>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>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>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>get_container</code>, <code>get_object</code> and <code>upload_object_via_stream</code>
+methods in the Backblaze B2 storage driver.</p>
+
+<p>Note: Backblaze API doesn&#39;t upload streaming uploads so when using
+<code>upload_object_via_stream</code> whole file is read and buffered in memory.
+(GITHUB-696)
+[Jay jshridha]</p></li>
+</ul>
+
+<h3>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>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>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>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>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>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&#39;t forget to attach an example and / or test which reproduces your
+problem.</p>
+
+<h3>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%20announcement.html" rel="tag">release announcement</a></p>
+    </div>
+  </div>
+</div>
+
+    
+  
+    
+      <div class="post">
+  
     <h2><a href="/blog/2016/04/11/libcloud-1-0-0-rc2-released.html">Libcloud 1.0.0-rc2 released</a></h2>
   
 
@@ -565,271 +950,6 @@ this provider is no longer supported wit
 
     
   
-    
-      <div class="post">
-  
-    <h2><a href="/blog/2016/02/05/libcloud-containers-example.html">Using the container abstraction API in 1.0.0-pre1</a></h2>
-  
-
-  
-    
-  
-  <span class="post-date-author">By Anthony Shaw on Feb 05, 2016</span>
-
-  <div class="post-content">
-    <h2>Background</h2>
-
-<p>Containers are the talk of the town, you can&#39;t escape an event or meetup without someone talking about containers. The lessons we
-learnt with compute abstraction are applying widely with containers in 2016. APIs are not consistent between clouds, designs are not
-standardised and yet, users are trying to consume multiple services.</p>
-
-<p>We introduced Container-as-a-Service support in <a href="http://libcloud.apache.org/blog/2016/01/26/libcloud-1-0-0-pre1-released.html">1.0.0-pre1</a>, a community pre-release with the intention of sparking feedback from 
-the open-source community about the design and the implementation of 4 example drivers :  </p>
-
-<ul>
-<li>Docker</li>
-<li>Joyent Triton</li>
-<li>Amazon EC2 Container Service</li>
-<li>Google Kubernetes</li>
-</ul>
-
-<p>In this tutorial we&#39;re going to explore how to do this:</p>
-
-<div class="imginline">
-  <img src="/images/posts/2016-02-05-containers/container_cloud_example.png" class="img-responsive inline" />
-  <p class="img-caption">Deploying containers across platforms.</p>
-</div>
-
-<p>Pulling images from the Docker hub, deploying to Docker, Kubernetes and Amazon ECS then auditing them with a single query.</p>
-
-<h2>Getting Started with 1.0.0-pre1</h2>
-
-<p>First off, let&#39;s install the new packages, you probably want to do this within a virtualenv if you&#39;re using Apache Libcloud for other projects. </p>
-
-<p>So run these commands at a Linux Shell to create a virtualenv called &#39;containers&#39; and install the pre-release packages into that environment.</p>
-
-<div class="highlight"><pre><code class="bash language-bash" data-lang="bash">   virtualenv containers
-   <span class="nb">cd </span>containers
-   <span class="nb">source </span>bin/activate
-   pip install apache-libcloud<span class="o">==</span>1.0.0-pre1
-</code></pre></div>
-
-<p>Now you can start using this package with a test script, let&#39;s create one called containers.py</p>
-
-<div class="highlight"><pre><code class="bash language-bash" data-lang="bash">   touch containers.py
-</code></pre></div>
-
-<p>Using your favourite text editor, update that file to import the 1.0.0-pre1 libraries and the factory methods for instantiating containers.</p>
-
-<div class="highlight"><pre><code class="python language-python" data-lang="python">   <span class="kn">from</span> <span class="nn">libcloud.container.providers</span> <span class="kn">import</span> <span class="n">get_driver</span>
-   <span class="kn">from</span> <span class="nn">libcloud.container.types</span> <span class="kn">import</span> <span class="n">Provider</span>
-</code></pre></div>
-
-<p><code>get_driver</code> is a factory method as with all libcloud APIs, you call this method with the <code>Provider</code> that you want to instantiate. Our options are:</p>
-
-<ul>
-<li><code>Provider.DOCKER</code> - Standalone Docker API</li>
-<li><code>Provider.KUBERNETES</code> - Kubernetes Cluster endpoint</li>
-<li><code>Provider.JOYENT</code> - Joyent Triton Public API</li>
-<li><code>Provider.ECS</code> - Amazon EC2 Container Service</li>
-</ul>
-
-<p>Calling <code>get_driver</code> will return a reference to the driver class that you requested. You can then instantiate that class into an object using the 
-contructor. This is always a set of parameters for setting the host or region, the authentication and any other options.</p>
-
-<div class="highlight"><pre><code class="python language-python" data-lang="python">   <span class="n">driver</span> <span class="o">=</span> <span class="n">get_driver</span><span class="p">(</span><span class="n">Provider</span><span class="o">.</span><span class="n">DOCKER</span><span class="p">)</span>
-</code></pre></div>
-
-<p>Now we can call our driver and get an instance of it called <code>docker_driver</code> and use that to deploy a container. For Docker you need the pem files on the server,
-the host (IP or FQDN) and the port.</p>
-
-<div class="highlight"><pre><code class="python language-python" data-lang="python">   <span class="n">docker_driver</span> <span class="o">=</span> <span class="n">driver</span><span class="p">(</span><span class="n">host</span><span class="o">=</span><span class="s">&#39;https://198.61.239.128&#39;</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="mi">4243</span><span class="p">,</span>
-             <span class="n">key_file</span><span class="o">=</span><span class="s">&#39;key.pem&#39;</span><span class="p">,</span> <span class="n">cert_file</span><span class="o">=</span><span class="s">&#39;cert.pem&#39;</span><span class="p">)</span>
-</code></pre></div>
-
-<p>Docker requires that images are available in the image database before they can be deployed as containers. With Kubernetes and Amazon ECS this step is not required
-as when you deploy a container it carries out that download for you. </p>
-
-<div class="highlight"><pre><code class="python language-python" data-lang="python">   <span class="n">image</span> <span class="o">=</span> <span class="n">driver</span><span class="o">.</span><span class="n">install_image</span><span class="p">(</span><span class="s">&#39;tomcat:8.0&#39;</span><span class="p">)</span>
-</code></pre></div>
-
-<p>Now that Docker has the version 8.0 image of Apache Tomcat, you can deploy this as a container called <code>my_tomcat_container</code>. Tomcat runs on TCP/8080 by default so we 
-want to bind that port for our container using an optional parameter <code>port_bindings</code></p>
-
-<div class="highlight"><pre><code class="python language-python" data-lang="python">   <span class="n">bindings</span> <span class="o">=</span> <span class="p">{</span> <span class="s">&quot;22/tcp&quot;</span><span class="p">:</span> <span class="p">[{</span> <span class="s">&quot;HostPort&quot;</span><span class="p">:</span> <span class="s">&quot;11022&quot;</span> <span class="p">}]</span> <span class="p">}</span>
-   <span class="n">container</span> <span class="o">=</span> <span class="n">driver</span><span class="o">.</span><span class="n">deploy_container</span><span class="p">(</span><span class="s">&#39;my_tomcat_container&#39;</span><span class="p">,</span> <span class="n">image</span><span class="p">,</span> <span class="n">port_bindings</span><span class="o">=</span><span class="n">bindings</span><span class="p">)</span>
-</code></pre></div>
-
-<p>This will have deployed the container and started it up for you, you can disable the automatic startup by using <code>start=False</code> as a keyword argument. You can now call upon this container and 
-run methods, <code>restart</code>, <code>start</code>, <code>stop</code> and <code>destroy</code>.</p>
-
-<p>For example, to blow away that test container: </p>
-
-<div class="highlight"><pre><code class="python language-python" data-lang="python">   <span class="n">container</span><span class="o">.</span><span class="n">destroy</span><span class="p">()</span>
-</code></pre></div>
-
-<h2>Crossing the streams; calling Kubernetes and Amazon EC2 Container Service</h2>
-
-<p>With Docker we saw that we needed to &quot;pull&quot; the image before we deployed it. Kubernetes and Amazon ECS don&#39;t have that requirement, but as a safeguard you can query the Docker Hub API using a 
-utility class provided</p>
-
-<div class="highlight"><pre><code class="python language-python" data-lang="python">   <span class="kn">from</span> <span class="nn">libcloud.container.utils.docker</span> <span class="kn">import</span> <span class="n">HubClient</span>
-   <span class="n">hub</span> <span class="o">=</span> <span class="n">HubClient</span><span class="p">()</span>
-   <span class="n">image</span> <span class="o">=</span> <span class="n">hub</span><span class="o">.</span><span class="n">get_image</span><span class="p">(</span><span class="s">&#39;tomcat&#39;</span><span class="p">,</span> <span class="s">&#39;8.0&#39;</span><span class="p">)</span>
-</code></pre></div>
-
-<p>Now <code>image</code> can be used to deploy to any driver instance that you create. Let&#39;s try that against Kubernetes and ECS.</p>
-
-<h3>Amazon ECS</h3>
-
-<p>Before you run this example, you will need an API key and the permissions for that key to have the <code>AmazonEC2ContainerServiceFullAccess</code> role. <code>ap-southeast-2</code> is my nearest region, but you can 
-swap this out for any of the Amazon public regions that have the ECS service available. </p>
-
-<div class="highlight"><pre><code class="python language-python" data-lang="python">   <span class="n">e_cls</span> <span class="o">=</span> <span class="n">get_driver</span><span class="p">(</span><span class="n">Provider</span><span class="o">.</span><span class="n">ECS</span><span class="p">)</span>
-   <span class="n">ecs</span> <span class="o">=</span> <span class="n">e_cls</span><span class="p">(</span><span class="n">access_id</span><span class="o">=</span><span class="s">&#39;SDHFISJDIFJSIDFJ&#39;</span><span class="p">,</span>
-               <span class="n">secret</span><span class="o">=</span><span class="s">&#39;THIS_IS)+_MY_SECRET_KEY+I6TVkv68o4H&#39;</span><span class="p">,</span>
-               <span class="n">region</span><span class="o">=</span><span class="s">&#39;ap-southeast-2&#39;</span><span class="p">)</span>
-</code></pre></div>
-
-<p>ECS and Kubernetes both support some form of grouping or clustering for your containers. This is available as <code>create_cluster</code>, <code>list_cluster</code>.</p>
-
-<div class="highlight"><pre><code class="python language-python" data-lang="python">   <span class="n">cluster</span> <span class="o">=</span> <span class="n">ecs</span><span class="o">.</span><span class="n">create_cluster</span><span class="p">(</span><span class="s">&#39;default&#39;</span><span class="p">)</span>
-   <span class="n">container</span> <span class="o">=</span> <span class="n">ecs</span><span class="o">.</span><span class="n">deploy_container</span><span class="p">(</span>
-            <span class="n">cluster</span><span class="o">=</span><span class="n">cluster</span><span class="p">,</span>
-            <span class="n">name</span><span class="o">=</span><span class="s">&#39;hello-world&#39;</span><span class="p">,</span>
-            <span class="n">image</span><span class="o">=</span><span class="n">image</span><span class="p">,</span>
-            <span class="n">start</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
-            <span class="n">ex_container_port</span><span class="o">=</span><span class="mi">8080</span><span class="p">,</span> <span class="n">ex_host_port</span><span class="o">=</span><span class="mi">8080</span><span class="p">)</span>
-</code></pre></div>
-
-<p>This will have deployed a task definition in Amazon ECS with a single container inside, with a cluster called &#39;main&#39; and deployed the tomcat:8.0 image from the Docker hub to that region. </p>
-
-<p>Check out the <a href="http://libcloud.readthedocs.org/en/latest/container/drivers/ecs.html">ECS Documentation</a> for more details.</p>
-
-<h3>Kubernetes</h3>
-
-<p>Kubernetes authentication is currently only implemented for None (off) and Basic HTTP authentication. Let&#39;s use the <a href="http://kubernetes.io/v1.1/docs/admin/authentication.html">basic HTTP authentication method</a> to connect.</p>
-
-<div class="highlight"><pre><code class="python language-python" data-lang="python"><span class="n">k_cls</span> <span class="o">=</span> <span class="n">get_driver</span><span class="p">(</span><span class="n">Provider</span><span class="o">.</span><span class="n">KUBERNETES</span><span class="p">)</span>
-
-<span class="n">kubernetes</span> <span class="o">=</span> <span class="n">k_cls</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s">&#39;my_username&#39;</span><span class="p">,</span>
-                   <span class="n">secret</span><span class="o">=</span><span class="s">&#39;THIS_IS)+_MY_SECRET_KEY+I6TVkv68o4H&#39;</span><span class="p">,</span>
-                   <span class="n">host</span><span class="o">=</span><span class="s">&#39;126.32.21.4&#39;</span><span class="p">)</span>
-<span class="n">cluster2</span> <span class="o">=</span> <span class="n">kubernetes</span><span class="o">.</span><span class="n">create_cluster</span><span class="p">(</span><span class="s">&#39;default&#39;</span><span class="p">)</span>
-<span class="n">container2</span> <span class="o">=</span> <span class="n">kubernetes</span><span class="o">.</span><span class="n">deploy_container</span><span class="p">(</span>
-            <span class="n">cluster</span><span class="o">=</span><span class="n">cluster</span><span class="p">,</span>
-            <span class="n">name</span><span class="o">=</span><span class="s">&#39;hello-world&#39;</span><span class="p">,</span>
-            <span class="n">image</span><span class="o">=</span><span class="n">image</span><span class="p">,</span>
-            <span class="n">start</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
-</code></pre></div>
-
-<h2>Wrapping it up</h2>
-
-<p>Now, let&#39;s wrap that all up by doing a list comprehension across the 3 drivers to get a list of all containers and print their ID&#39;s and Names. Then delete them.</p>
-
-<div class="highlight"><pre><code class="python language-python" data-lang="python"><span class="n">containers</span> <span class="o">=</span> <span class="p">[</span><span class="n">conn</span><span class="o">.</span><span class="n">list_containers</span><span class="p">()</span> <span class="k">for</span> <span class="n">conn</span> <span class="ow">in</span> <span class="p">[</span><span class="n">docker</span><span class="p">,</span> <span class="n">ecs</span><span class="p">,</span> <span class="n">kubernetes</span><span class="p">]]</span>
-<span class="k">for</span> <span class="n">container</span> <span class="ow">in</span> <span class="n">containers</span><span class="p">:</span>
-    <span class="k">print</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%s</span><span class="s"> : </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">container</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">container</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
-    <span class="n">container</span><span class="o">.</span><span class="n">destroy</span><span class="p">()</span>
-</code></pre></div>
-
-<h3>About the Author</h3>
-
-<p>Anthony Shaw is on the PMC for Apache Libcloud, you can follow Anthony on Twitter at <a href="https://twitter.com/anthonypjshaw">@anthonypjshaw</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/containers.html" rel="tag">containers</a>, <a href="/blog/tags/tutorial.html" rel="tag">tutorial</a></p>
-    </div>
-  </div>
-</div>
-
-    
-  
-    
-      <div class="post">
-  
-    <h2><a href="/blog/2016/01/26/libcloud-1-0-0-pre1-released.html">Libcloud 1.0.0-pre1 released</a></h2>
-  
-
-  
-    
-  
-  <span class="post-date-author">By Anthony Shaw on Jan 26, 2016</span>
-
-  <div class="post-content">
-    <p>We are pleased to announce the release of Libcloud 1.0.0-pre1.</p>
-
-<p>This is a first pre-release in the 1.0.0 series which means it brings many new
-features, improvements, bug-fixes, and DNS drivers.</p>
-
-<h3>Release highlights</h3>
-
-<p>A full blog post on the new features in 1.0.0 can be found <a href="http://libcloud.apache.org/blog/2016/01/20/libcloud-1.0-pre1.html">here</a></p>
-
-<p>This includes:</p>
-
-<ul>
-<li>Introduction of Container-as-a-Service API drivers for <a href="http://libcloud.readthedocs.org/en/latest/container/drivers/kubernetes.html">Kubernetes</a>, <a href="http://libcloud.readthedocs.org/en/latest/container/drivers/docker.html">Docker</a>, <a href="http://libcloud.readthedocs.org/en/latest/container/drivers/ecs.html">Amazon ECS</a> and <a href="http://libcloud.readthedocs.org/en/latest/container/drivers/joyent.html">Joyent Triton</a></li>
-<li>Introduction of Backup-as-a-Service API</li>
-<li>Addition of South Korea region for Amazon EC2</li>
-</ul>
-
-<p>Full change log can be found at <a href="https://libcloud.readthedocs.org/en/latest/changelog.html">here</a>.</p>
-
-<h3>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-pre1
-</pre>
-
-<h3>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-pre1
-</pre>
-
-<h3>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>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>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&#39;t forget to attach an example and / or test which reproduces your
-problem.</p>
-
-<h3>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%20announcement.html" rel="tag">release announcement</a></p>
-    </div>
-  </div>
-</div>
-
-    
-  
 </div>
 
 <p class="navigation">
@@ -854,7 +974,7 @@ list of people who contributed to this r
   <div class="col-lg-3 col-lg-offset-1">
     <h2>Archive</h1>
     <ul>
-      <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 h
 ref="/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="/blo
 g/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>
+      <li> <a href="/blog/archives/2021/01/"> January 2021</a> &nbsp;(1)</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 hr
 ef="/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="/bl
 og/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>
@@ -874,7 +994,7 @@ list of people who contributed to this r
 </div>
 
 <div class="footer-text">
-  <p class="">Copyright &copy; 2009-2020 <a href="https://www.apache.org/" target="_blank">The Apache Software Foundation</a></p>
+  <p class="">Copyright &copy; 2009-2021 <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>
 </div>
 

Modified: libcloud/site/trunk/generated/blog/page/8/index.html
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/generated/blog/page/8/index.html?rev=1885034&r1=1885033&r2=1885034&view=diff
==============================================================================
--- libcloud/site/trunk/generated/blog/page/8/index.html (original)
+++ libcloud/site/trunk/generated/blog/page/8/index.html Sat Jan  2 20:41:25 2021
@@ -97,6 +97,271 @@
     
       <div class="post">
   
+    <h2><a href="/blog/2016/02/05/libcloud-containers-example.html">Using the container abstraction API in 1.0.0-pre1</a></h2>
+  
+
+  
+    
+  
+  <span class="post-date-author">By Anthony Shaw on Feb 05, 2016</span>
+
+  <div class="post-content">
+    <h2>Background</h2>
+
+<p>Containers are the talk of the town, you can&#39;t escape an event or meetup without someone talking about containers. The lessons we
+learnt with compute abstraction are applying widely with containers in 2016. APIs are not consistent between clouds, designs are not
+standardised and yet, users are trying to consume multiple services.</p>
+
+<p>We introduced Container-as-a-Service support in <a href="http://libcloud.apache.org/blog/2016/01/26/libcloud-1-0-0-pre1-released.html">1.0.0-pre1</a>, a community pre-release with the intention of sparking feedback from 
+the open-source community about the design and the implementation of 4 example drivers :  </p>
+
+<ul>
+<li>Docker</li>
+<li>Joyent Triton</li>
+<li>Amazon EC2 Container Service</li>
+<li>Google Kubernetes</li>
+</ul>
+
+<p>In this tutorial we&#39;re going to explore how to do this:</p>
+
+<div class="imginline">
+  <img src="/images/posts/2016-02-05-containers/container_cloud_example.png" class="img-responsive inline" />
+  <p class="img-caption">Deploying containers across platforms.</p>
+</div>
+
+<p>Pulling images from the Docker hub, deploying to Docker, Kubernetes and Amazon ECS then auditing them with a single query.</p>
+
+<h2>Getting Started with 1.0.0-pre1</h2>
+
+<p>First off, let&#39;s install the new packages, you probably want to do this within a virtualenv if you&#39;re using Apache Libcloud for other projects. </p>
+
+<p>So run these commands at a Linux Shell to create a virtualenv called &#39;containers&#39; and install the pre-release packages into that environment.</p>
+
+<div class="highlight"><pre><code class="bash language-bash" data-lang="bash">   virtualenv containers
+   <span class="nb">cd </span>containers
+   <span class="nb">source </span>bin/activate
+   pip install apache-libcloud<span class="o">==</span>1.0.0-pre1
+</code></pre></div>
+
+<p>Now you can start using this package with a test script, let&#39;s create one called containers.py</p>
+
+<div class="highlight"><pre><code class="bash language-bash" data-lang="bash">   touch containers.py
+</code></pre></div>
+
+<p>Using your favourite text editor, update that file to import the 1.0.0-pre1 libraries and the factory methods for instantiating containers.</p>
+
+<div class="highlight"><pre><code class="python language-python" data-lang="python">   <span class="kn">from</span> <span class="nn">libcloud.container.providers</span> <span class="kn">import</span> <span class="n">get_driver</span>
+   <span class="kn">from</span> <span class="nn">libcloud.container.types</span> <span class="kn">import</span> <span class="n">Provider</span>
+</code></pre></div>
+
+<p><code>get_driver</code> is a factory method as with all libcloud APIs, you call this method with the <code>Provider</code> that you want to instantiate. Our options are:</p>
+
+<ul>
+<li><code>Provider.DOCKER</code> - Standalone Docker API</li>
+<li><code>Provider.KUBERNETES</code> - Kubernetes Cluster endpoint</li>
+<li><code>Provider.JOYENT</code> - Joyent Triton Public API</li>
+<li><code>Provider.ECS</code> - Amazon EC2 Container Service</li>
+</ul>
+
+<p>Calling <code>get_driver</code> will return a reference to the driver class that you requested. You can then instantiate that class into an object using the 
+contructor. This is always a set of parameters for setting the host or region, the authentication and any other options.</p>
+
+<div class="highlight"><pre><code class="python language-python" data-lang="python">   <span class="n">driver</span> <span class="o">=</span> <span class="n">get_driver</span><span class="p">(</span><span class="n">Provider</span><span class="o">.</span><span class="n">DOCKER</span><span class="p">)</span>
+</code></pre></div>
+
+<p>Now we can call our driver and get an instance of it called <code>docker_driver</code> and use that to deploy a container. For Docker you need the pem files on the server,
+the host (IP or FQDN) and the port.</p>
+
+<div class="highlight"><pre><code class="python language-python" data-lang="python">   <span class="n">docker_driver</span> <span class="o">=</span> <span class="n">driver</span><span class="p">(</span><span class="n">host</span><span class="o">=</span><span class="s">&#39;https://198.61.239.128&#39;</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="mi">4243</span><span class="p">,</span>
+             <span class="n">key_file</span><span class="o">=</span><span class="s">&#39;key.pem&#39;</span><span class="p">,</span> <span class="n">cert_file</span><span class="o">=</span><span class="s">&#39;cert.pem&#39;</span><span class="p">)</span>
+</code></pre></div>
+
+<p>Docker requires that images are available in the image database before they can be deployed as containers. With Kubernetes and Amazon ECS this step is not required
+as when you deploy a container it carries out that download for you. </p>
+
+<div class="highlight"><pre><code class="python language-python" data-lang="python">   <span class="n">image</span> <span class="o">=</span> <span class="n">driver</span><span class="o">.</span><span class="n">install_image</span><span class="p">(</span><span class="s">&#39;tomcat:8.0&#39;</span><span class="p">)</span>
+</code></pre></div>
+
+<p>Now that Docker has the version 8.0 image of Apache Tomcat, you can deploy this as a container called <code>my_tomcat_container</code>. Tomcat runs on TCP/8080 by default so we 
+want to bind that port for our container using an optional parameter <code>port_bindings</code></p>
+
+<div class="highlight"><pre><code class="python language-python" data-lang="python">   <span class="n">bindings</span> <span class="o">=</span> <span class="p">{</span> <span class="s">&quot;22/tcp&quot;</span><span class="p">:</span> <span class="p">[{</span> <span class="s">&quot;HostPort&quot;</span><span class="p">:</span> <span class="s">&quot;11022&quot;</span> <span class="p">}]</span> <span class="p">}</span>
+   <span class="n">container</span> <span class="o">=</span> <span class="n">driver</span><span class="o">.</span><span class="n">deploy_container</span><span class="p">(</span><span class="s">&#39;my_tomcat_container&#39;</span><span class="p">,</span> <span class="n">image</span><span class="p">,</span> <span class="n">port_bindings</span><span class="o">=</span><span class="n">bindings</span><span class="p">)</span>
+</code></pre></div>
+
+<p>This will have deployed the container and started it up for you, you can disable the automatic startup by using <code>start=False</code> as a keyword argument. You can now call upon this container and 
+run methods, <code>restart</code>, <code>start</code>, <code>stop</code> and <code>destroy</code>.</p>
+
+<p>For example, to blow away that test container: </p>
+
+<div class="highlight"><pre><code class="python language-python" data-lang="python">   <span class="n">container</span><span class="o">.</span><span class="n">destroy</span><span class="p">()</span>
+</code></pre></div>
+
+<h2>Crossing the streams; calling Kubernetes and Amazon EC2 Container Service</h2>
+
+<p>With Docker we saw that we needed to &quot;pull&quot; the image before we deployed it. Kubernetes and Amazon ECS don&#39;t have that requirement, but as a safeguard you can query the Docker Hub API using a 
+utility class provided</p>
+
+<div class="highlight"><pre><code class="python language-python" data-lang="python">   <span class="kn">from</span> <span class="nn">libcloud.container.utils.docker</span> <span class="kn">import</span> <span class="n">HubClient</span>
+   <span class="n">hub</span> <span class="o">=</span> <span class="n">HubClient</span><span class="p">()</span>
+   <span class="n">image</span> <span class="o">=</span> <span class="n">hub</span><span class="o">.</span><span class="n">get_image</span><span class="p">(</span><span class="s">&#39;tomcat&#39;</span><span class="p">,</span> <span class="s">&#39;8.0&#39;</span><span class="p">)</span>
+</code></pre></div>
+
+<p>Now <code>image</code> can be used to deploy to any driver instance that you create. Let&#39;s try that against Kubernetes and ECS.</p>
+
+<h3>Amazon ECS</h3>
+
+<p>Before you run this example, you will need an API key and the permissions for that key to have the <code>AmazonEC2ContainerServiceFullAccess</code> role. <code>ap-southeast-2</code> is my nearest region, but you can 
+swap this out for any of the Amazon public regions that have the ECS service available. </p>
+
+<div class="highlight"><pre><code class="python language-python" data-lang="python">   <span class="n">e_cls</span> <span class="o">=</span> <span class="n">get_driver</span><span class="p">(</span><span class="n">Provider</span><span class="o">.</span><span class="n">ECS</span><span class="p">)</span>
+   <span class="n">ecs</span> <span class="o">=</span> <span class="n">e_cls</span><span class="p">(</span><span class="n">access_id</span><span class="o">=</span><span class="s">&#39;SDHFISJDIFJSIDFJ&#39;</span><span class="p">,</span>
+               <span class="n">secret</span><span class="o">=</span><span class="s">&#39;THIS_IS)+_MY_SECRET_KEY+I6TVkv68o4H&#39;</span><span class="p">,</span>
+               <span class="n">region</span><span class="o">=</span><span class="s">&#39;ap-southeast-2&#39;</span><span class="p">)</span>
+</code></pre></div>
+
+<p>ECS and Kubernetes both support some form of grouping or clustering for your containers. This is available as <code>create_cluster</code>, <code>list_cluster</code>.</p>
+
+<div class="highlight"><pre><code class="python language-python" data-lang="python">   <span class="n">cluster</span> <span class="o">=</span> <span class="n">ecs</span><span class="o">.</span><span class="n">create_cluster</span><span class="p">(</span><span class="s">&#39;default&#39;</span><span class="p">)</span>
+   <span class="n">container</span> <span class="o">=</span> <span class="n">ecs</span><span class="o">.</span><span class="n">deploy_container</span><span class="p">(</span>
+            <span class="n">cluster</span><span class="o">=</span><span class="n">cluster</span><span class="p">,</span>
+            <span class="n">name</span><span class="o">=</span><span class="s">&#39;hello-world&#39;</span><span class="p">,</span>
+            <span class="n">image</span><span class="o">=</span><span class="n">image</span><span class="p">,</span>
+            <span class="n">start</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
+            <span class="n">ex_container_port</span><span class="o">=</span><span class="mi">8080</span><span class="p">,</span> <span class="n">ex_host_port</span><span class="o">=</span><span class="mi">8080</span><span class="p">)</span>
+</code></pre></div>
+
+<p>This will have deployed a task definition in Amazon ECS with a single container inside, with a cluster called &#39;main&#39; and deployed the tomcat:8.0 image from the Docker hub to that region. </p>
+
+<p>Check out the <a href="http://libcloud.readthedocs.org/en/latest/container/drivers/ecs.html">ECS Documentation</a> for more details.</p>
+
+<h3>Kubernetes</h3>
+
+<p>Kubernetes authentication is currently only implemented for None (off) and Basic HTTP authentication. Let&#39;s use the <a href="http://kubernetes.io/v1.1/docs/admin/authentication.html">basic HTTP authentication method</a> to connect.</p>
+
+<div class="highlight"><pre><code class="python language-python" data-lang="python"><span class="n">k_cls</span> <span class="o">=</span> <span class="n">get_driver</span><span class="p">(</span><span class="n">Provider</span><span class="o">.</span><span class="n">KUBERNETES</span><span class="p">)</span>
+
+<span class="n">kubernetes</span> <span class="o">=</span> <span class="n">k_cls</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s">&#39;my_username&#39;</span><span class="p">,</span>
+                   <span class="n">secret</span><span class="o">=</span><span class="s">&#39;THIS_IS)+_MY_SECRET_KEY+I6TVkv68o4H&#39;</span><span class="p">,</span>
+                   <span class="n">host</span><span class="o">=</span><span class="s">&#39;126.32.21.4&#39;</span><span class="p">)</span>
+<span class="n">cluster2</span> <span class="o">=</span> <span class="n">kubernetes</span><span class="o">.</span><span class="n">create_cluster</span><span class="p">(</span><span class="s">&#39;default&#39;</span><span class="p">)</span>
+<span class="n">container2</span> <span class="o">=</span> <span class="n">kubernetes</span><span class="o">.</span><span class="n">deploy_container</span><span class="p">(</span>
+            <span class="n">cluster</span><span class="o">=</span><span class="n">cluster</span><span class="p">,</span>
+            <span class="n">name</span><span class="o">=</span><span class="s">&#39;hello-world&#39;</span><span class="p">,</span>
+            <span class="n">image</span><span class="o">=</span><span class="n">image</span><span class="p">,</span>
+            <span class="n">start</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+</code></pre></div>
+
+<h2>Wrapping it up</h2>
+
+<p>Now, let&#39;s wrap that all up by doing a list comprehension across the 3 drivers to get a list of all containers and print their ID&#39;s and Names. Then delete them.</p>
+
+<div class="highlight"><pre><code class="python language-python" data-lang="python"><span class="n">containers</span> <span class="o">=</span> <span class="p">[</span><span class="n">conn</span><span class="o">.</span><span class="n">list_containers</span><span class="p">()</span> <span class="k">for</span> <span class="n">conn</span> <span class="ow">in</span> <span class="p">[</span><span class="n">docker</span><span class="p">,</span> <span class="n">ecs</span><span class="p">,</span> <span class="n">kubernetes</span><span class="p">]]</span>
+<span class="k">for</span> <span class="n">container</span> <span class="ow">in</span> <span class="n">containers</span><span class="p">:</span>
+    <span class="k">print</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%s</span><span class="s"> : </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">container</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">container</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
+    <span class="n">container</span><span class="o">.</span><span class="n">destroy</span><span class="p">()</span>
+</code></pre></div>
+
+<h3>About the Author</h3>
+
+<p>Anthony Shaw is on the PMC for Apache Libcloud, you can follow Anthony on Twitter at <a href="https://twitter.com/anthonypjshaw">@anthonypjshaw</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/containers.html" rel="tag">containers</a>, <a href="/blog/tags/tutorial.html" rel="tag">tutorial</a></p>
+    </div>
+  </div>
+</div>
+
+    
+  
+    
+      <div class="post">
+  
+    <h2><a href="/blog/2016/01/26/libcloud-1-0-0-pre1-released.html">Libcloud 1.0.0-pre1 released</a></h2>
+  
+
+  
+    
+  
+  <span class="post-date-author">By Anthony Shaw on Jan 26, 2016</span>
+
+  <div class="post-content">
+    <p>We are pleased to announce the release of Libcloud 1.0.0-pre1.</p>
+
+<p>This is a first pre-release in the 1.0.0 series which means it brings many new
+features, improvements, bug-fixes, and DNS drivers.</p>
+
+<h3>Release highlights</h3>
+
+<p>A full blog post on the new features in 1.0.0 can be found <a href="http://libcloud.apache.org/blog/2016/01/20/libcloud-1.0-pre1.html">here</a></p>
+
+<p>This includes:</p>
+
+<ul>
+<li>Introduction of Container-as-a-Service API drivers for <a href="http://libcloud.readthedocs.org/en/latest/container/drivers/kubernetes.html">Kubernetes</a>, <a href="http://libcloud.readthedocs.org/en/latest/container/drivers/docker.html">Docker</a>, <a href="http://libcloud.readthedocs.org/en/latest/container/drivers/ecs.html">Amazon ECS</a> and <a href="http://libcloud.readthedocs.org/en/latest/container/drivers/joyent.html">Joyent Triton</a></li>
+<li>Introduction of Backup-as-a-Service API</li>
+<li>Addition of South Korea region for Amazon EC2</li>
+</ul>
+
+<p>Full change log can be found at <a href="https://libcloud.readthedocs.org/en/latest/changelog.html">here</a>.</p>
+
+<h3>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-pre1
+</pre>
+
+<h3>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-pre1
+</pre>
+
+<h3>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>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>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&#39;t forget to attach an example and / or test which reproduces your
+problem.</p>
+
+<h3>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%20announcement.html" rel="tag">release announcement</a></p>
+    </div>
+  </div>
+</div>
+
+    
+  
+    
+      <div class="post">
+  
     <h2><a href="/blog/2016/01/20/libcloud-1.0-pre1.html">Libcloud 1.0-pre1 open for feedback</a></h2>
   
 
@@ -465,160 +730,6 @@ and compatibility reasons. SSL v3.0 is c
 
     
   
-    
-      <div class="post">
-  
-    <h2><a href="/blog/2015/12/15/libcloud-0-20-0-released.html">Libcloud 0.20.0 released</a></h2>
-  
-
-  
-    
-  
-  <span class="post-date-author">By Anthony Shaw on Dec 15, 2015</span>
-
-  <div class="post-content">
-    <p>We are pleased to announce the release of Libcloud 0.20.0.</p>
-
-<p>This is a first release in the 0.20 series which means it brings many new
-features, improvements, bug-fixes, and DNS drivers.</p>
-
-<h3>Release highlights</h3>
-
-<ul>
-<li>New DNS driver for <a href="http://libcloud.readthedocs.org/en/latest/dns/drivers/godaddy.html">GoDaddy</a></li>
-<li>New DNS driver for <a href="https://www.cloudflare.com/dns/">CloudFlare DNS</a></li>
-<li>Many more improvements and API v2.1 support for the <a href="http://cloud.dimensiondata.com/am/en/">Dimension Data compute driver</a></li>
-<li>Support for adding and configuring PTR (reverse DNS) record in RackSpace DNS driver</li>
-<li>Support for preemptable instances in Google Compute driver</li>
-<li>Add new eu-west-2 &amp; us-east-2 regions to the OUTSCALE<em>INC &amp; OUTSCALE</em>SAS drivers</li>
-<li>Added C4, M4 instance types in Amazon EC2 driver</li>
-<li>Add support for multiple regions in Aurora compute driver</li>
-<li>GoogleStorageDriver can now use either our S3 authentication or other Google Cloud Platform OAuth2 authentication methods.</li>
-<li>Removed DreamHosts Compute Driver, DreamHosts users will now use the OpenStack Node driver since DreamHosts are OpenStack API compliant</li>
-<li>and much more!</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-20-0">here</a>.</p>
-
-<h3>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.20.0
-</pre>
-
-<h3>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.20.0
-</pre>
-
-<h3>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>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>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&#39;t forget to attach an example and / or test which reproduces your
-problem.</p>
-
-<h3>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-20-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%20announcement.html" rel="tag">release announcement</a></p>
-    </div>
-  </div>
-</div>
-
-    
-  
-    
-      <div class="post">
-  
-    <h2><a href="/blog/2015/11/18/anthony-shaw-joins-our-team.html">Anthony Shaw (anthonyshaw) joins our team</a></h2>
-  
-
-  
-    
-  
-  <span class="post-date-author">By Tomaz Muraus <span style="display:none">(<a href="https://plus.google.com/+TomazMuraus?rel=author">Google+</a>)</span>on Nov 18, 2015</span>
-
-  <div class="post-content">
-    <p>Please help us extend a warm welcome to our newest team member <a href="https://github.com/tonybaloney">Anthony
-Shaw</a>!</p>
-
-<p>The Project Management Committee (PMC) for Apache Libcloud has invited Anthony
-Shaw to join us as a committer and a PMC member and we are pleased to announce
-that he has accepted.</p>
-
-<p>Anthony has joined the community fairly recently, but he has already made a lot
-of <a href="https://github.com/apache/libcloud/pulls?q=is%3Apr+author%3Atonybaloney+is%3Aclosed">substantial contributions</a>. Those contributions range from new Dimension
-Data drivers and various related improvements to a proposal for a new <a href="https://github.com/apache/libcloud/pull/629">backup
-API</a> for Backup as a Service products and projects.</p>
-
-<p>While we are talking about the new backup API - we would like to encourage
-everyone who is either a service provider offering Backup as a Service product
-or a person interested in using this API to join us and <a href="https://github.com/apache/libcloud/pull/629">participate in the
-discussion</a>. The more feedback we get, the better and more widely applicable
-we can make this new API.</p>
-
-<p>For anyone who would like to know more about Anthony here is his short bio:</p>
-
-<blockquote>
-<p>Anthony Shaw works for the global system integrator Dimension Data as Head of
-Innovation. Anthony has been working in the hosting/service provider industry
-for the last 10 years for MSPs within Europe, North America and Australia in
-various Product Management and Product Development roles. Anthony is an
-open-source advocate and has been promoting the Libcloud project internally to
-Dimension Data for the last 9 months as well as maintaining its driver.</p>
-</blockquote>
-
-<p>And in his own words:</p>
-
-<blockquote>
-<p>I think we will continue to see consolidation in IaaS providers over the next
-12 months, so likelihood is the number of drivers will reduce, but the
-importance of being cloud agnostic to people is becoming more apparent as some
-are already being burnt by integrations into APIs that companies like Dell and
-Ninefold have pulled the plug on. Libcloud is a key project for developers not
-wanting to lock themselves too heavily to a vendor. I would also like to see
-expansion of additional services like backup, load balancing and containers so
-that users can still take advantages of these features through our driver.</p>
-</blockquote>
-
-<p>We are happy to have him in our team and we are looking forward to his future
-participation and contributions.</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%20committer.html" rel="tag">new committer</a>, <a href="/blog/tags/new%20PMC%20member.html" rel="tag">new PMC member</a></p>
-    </div>
-  </div>
-</div>
-
-    
-  
 </div>
 
 <p class="navigation">
@@ -643,7 +754,7 @@ participation and contributions.</p>
   <div class="col-lg-3 col-lg-offset-1">
     <h2>Archive</h1>
     <ul>
-      <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 h
 ref="/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="/blo
 g/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>
+      <li> <a href="/blog/archives/2021/01/"> January 2021</a> &nbsp;(1)</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 hr
 ef="/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="/bl
 og/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>
@@ -663,7 +774,7 @@ participation and contributions.</p>
 </div>
 
 <div class="footer-text">
-  <p class="">Copyright &copy; 2009-2020 <a href="https://www.apache.org/" target="_blank">The Apache Software Foundation</a></p>
+  <p class="">Copyright &copy; 2009-2021 <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>
 </div>
 



Mime
View raw message