You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2022/03/12 23:17:57 UTC

svn commit: r1898884 [6/6] - in /libcloud/site/trunk: generated/ generated/blog/ generated/blog/2021/11/11/ generated/blog/2022/ generated/blog/2022/03/ generated/blog/2022/03/12/ generated/blog/archives/2021/11/ generated/blog/archives/2022/ generated...

Modified: libcloud/site/trunk/generated/blog/page/9/index.html
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/generated/blog/page/9/index.html?rev=1898884&r1=1898883&r2=1898884&view=diff
==============================================================================
--- libcloud/site/trunk/generated/blog/page/9/index.html (original)
+++ libcloud/site/trunk/generated/blog/page/9/index.html Sat Mar 12 23:17:57 2022
@@ -97,6 +97,189 @@
     
       <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>
   
 
@@ -547,92 +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>
 
 <p class="navigation">
@@ -657,7 +754,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/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/201
 4/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/2022/03/"> March 2022</a> &nbsp;(1)</li><li> <a href="/blog/archives/2021/11/"> November 2021</a> &nbsp;(2)</li><li> <a href="/blog/archives/2021/06/"> June 2021</a> &nbsp;(1)</li><li> <a href="/blog/archives/2021/01/"> January 2021</a> &nbsp;(2)</li><li> <a href="/blog/archives/2020/09/"> September 2020</a> &nbsp;(1)</li><li> <a href="/blog/archives/2020/08/"> August 2020</a> &nbsp;(2)</li><li> <a href="/blog/archives/2020/06/"> June 2020</a> &nbsp;(2)</li><li> <a href="/blog/archives/2020/04/"> April 2020</a> &nbsp;(2)</li><li> <a href="/blog/archives/2020/03/"> March 2020</a> &nbsp;(1)</li><li> <a href="/blog/archives/2020/01/"> January 2020</a> &nbsp;(2)</li><li> <a href="/blog/archives/2019/12/"> December 2019</a> &nbsp;(1)</li><li> <a href="/blog/archives/2019/11/"> November 2019</a> &nbsp;(1)</li><li> <a href="/blog/archives/2019/08/"> August 2019</a> &nbsp;(2)</li><li> <a href="/blog/archives/2019/05/"> May 2019</a> &nbsp;(1)</li><li> <a hr
 ef="/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/arc
 hives/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/0
 2/"> 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>

Modified: libcloud/site/trunk/generated/blog/tags/news.html
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/generated/blog/tags/news.html?rev=1898884&r1=1898883&r2=1898884&view=diff
==============================================================================
--- libcloud/site/trunk/generated/blog/tags/news.html (original)
+++ libcloud/site/trunk/generated/blog/tags/news.html Sat Mar 12 23:17:57 2022
@@ -96,6 +96,105 @@
   
     <div class="post">
   
+    <h2><a href="/blog/2022/03/12/libcloud-3-5-0-released.html">Libcloud 3.5.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 Mar 12, 2022</span>
+
+  <div class="post-content">
+    <p>We are happy to announce Libcloud v3.5.0.</p>
+
+<p>This release includes new features, improvements and bug fixes.</p>
+
+<p>Highlights include:</p>
+
+<ul>
+<li>Improvements to the OpenStack driver</li>
+<li>New storage driver for Scaleway Object Storage</li>
+<li>Improvements to the HTTP requests retrying code</li>
+</ul>
+
+<p>A list of all the changes can be found at
+<a href="https://libcloud.readthedocs.io/en/latest/changelog.html#changes-in-apache-libcloud-3.5.0">https://libcloud.readthedocs.io/en/latest/changelog.html#changes-in-apache-libcloud-3.5.0</a>.</p>
+
+<h3>Note on Python 3.5 support</h3>
+
+<p>This release drops support for Python 3.5.</p>
+
+<p>Python 3.5 has been EOL and non-supported for more than a year
+(<a href="https://endoflife.date/python">https://endoflife.date/python</a>) now and a lot of libraries (including some we
+depend on) have already dropped support for it.</p>
+
+<p>Last release which still supports Python 3.5 is Libcloud v3.4.1.</p>
+
+<h3>Note on code style change (developers only)</h3>
+
+<p>To make formating and styling in our code base more consistent, we have
+re-formatted all the code with black (<a href="https://github.com/psf/black">https://github.com/psf/black</a>) and we will
+automatically enforce black code style (<a href="https://black.readthedocs.io/en/stable/">https://black.readthedocs.io/en/stable/</a>)
+for all the new code going forward.</p>
+
+<p>This should make it easier to contribute and read the code since all the code
+will be using the same style.</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==3.5.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==3.5.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/v3.5.0/">https://libcloud.readthedocs.org/en/v3.5.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://github.com/apache/libcloud/issues">https://github.com/apache/libcloud/issues</a>.</p>
+
+<p>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/v3.5.0/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/2021/11/15/libcloud-3-4-1-released.html">Libcloud 3.4.1 released</a></h2>
   
 
@@ -255,7 +354,7 @@ pip install "apache-libcloud==3.4.0"
 <p>If you have installed Libcloud using pip you can also use it to upgrade it:</p>
 
 <pre>
-pip install --upgrade "apache-libcloud==3.4.1"
+pip install --upgrade "apache-libcloud==3.4.0"
 </pre>
 
 <h3>Upgrade notes</h3>

Modified: libcloud/site/trunk/generated/blog/tags/release announcement.html
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/generated/blog/tags/release%20announcement.html?rev=1898884&r1=1898883&r2=1898884&view=diff
==============================================================================
--- libcloud/site/trunk/generated/blog/tags/release announcement.html (original)
+++ libcloud/site/trunk/generated/blog/tags/release announcement.html Sat Mar 12 23:17:57 2022
@@ -96,6 +96,105 @@
   
     <div class="post">
   
+    <h2><a href="/blog/2022/03/12/libcloud-3-5-0-released.html">Libcloud 3.5.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 Mar 12, 2022</span>
+
+  <div class="post-content">
+    <p>We are happy to announce Libcloud v3.5.0.</p>
+
+<p>This release includes new features, improvements and bug fixes.</p>
+
+<p>Highlights include:</p>
+
+<ul>
+<li>Improvements to the OpenStack driver</li>
+<li>New storage driver for Scaleway Object Storage</li>
+<li>Improvements to the HTTP requests retrying code</li>
+</ul>
+
+<p>A list of all the changes can be found at
+<a href="https://libcloud.readthedocs.io/en/latest/changelog.html#changes-in-apache-libcloud-3.5.0">https://libcloud.readthedocs.io/en/latest/changelog.html#changes-in-apache-libcloud-3.5.0</a>.</p>
+
+<h3>Note on Python 3.5 support</h3>
+
+<p>This release drops support for Python 3.5.</p>
+
+<p>Python 3.5 has been EOL and non-supported for more than a year
+(<a href="https://endoflife.date/python">https://endoflife.date/python</a>) now and a lot of libraries (including some we
+depend on) have already dropped support for it.</p>
+
+<p>Last release which still supports Python 3.5 is Libcloud v3.4.1.</p>
+
+<h3>Note on code style change (developers only)</h3>
+
+<p>To make formating and styling in our code base more consistent, we have
+re-formatted all the code with black (<a href="https://github.com/psf/black">https://github.com/psf/black</a>) and we will
+automatically enforce black code style (<a href="https://black.readthedocs.io/en/stable/">https://black.readthedocs.io/en/stable/</a>)
+for all the new code going forward.</p>
+
+<p>This should make it easier to contribute and read the code since all the code
+will be using the same style.</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==3.5.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==3.5.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/v3.5.0/">https://libcloud.readthedocs.org/en/v3.5.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://github.com/apache/libcloud/issues">https://github.com/apache/libcloud/issues</a>.</p>
+
+<p>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/v3.5.0/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/2021/11/15/libcloud-3-4-1-released.html">Libcloud 3.4.1 released</a></h2>
   
 
@@ -255,7 +354,7 @@ pip install "apache-libcloud==3.4.0"
 <p>If you have installed Libcloud using pip you can also use it to upgrade it:</p>
 
 <pre>
-pip install --upgrade "apache-libcloud==3.4.1"
+pip install --upgrade "apache-libcloud==3.4.0"
 </pre>
 
 <h3>Upgrade notes</h3>

Modified: libcloud/site/trunk/generated/index.html
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/generated/index.html?rev=1898884&r1=1898883&r2=1898884&view=diff
==============================================================================
--- libcloud/site/trunk/generated/index.html (original)
+++ libcloud/site/trunk/generated/index.html Sat Mar 12 23:17:57 2022
@@ -243,19 +243,19 @@
         <h3>Latest Blog Posts</h3>
         
           
-            <p><a href="/blog/2021/11/15/libcloud-3-4-1-released.html">Libcloud 3.4.1 released</a>
+            <p><a href="/blog/2022/03/12/libcloud-3-5-0-released.html">Libcloud 3.5.0 released</a>
           
         
           
-            <p><a href="/blog/2021/11/11/libcloud-3-4-0-released.html">Libcloud 3.4.0 released</a>
+            <p><a href="/blog/2021/11/15/libcloud-3-4-1-released.html">Libcloud 3.4.1 released</a>
           
         
           
-            <p><a href="/blog/2021/06/03/dimitris-moraitis-joins-our-team.html">Dimitris Moraitis (dmo) joins our team</a>
+            <p><a href="/blog/2021/11/11/libcloud-3-4-0-released.html">Libcloud 3.4.0 released</a>
           
         
           
-            <p><a href="/blog/2021/01/25/libcloud-3-3-1-released.html">Libcloud 3.3.1 released</a>
+            <p><a href="/blog/2021/06/03/dimitris-moraitis-joins-our-team.html">Dimitris Moraitis (dmo) joins our team</a>
           
         
 

Modified: libcloud/site/trunk/generated/sitemap.xml
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/generated/sitemap.xml?rev=1898884&r1=1898883&r2=1898884&view=diff
==============================================================================
--- libcloud/site/trunk/generated/sitemap.xml (original)
+++ libcloud/site/trunk/generated/sitemap.xml Sat Mar 12 23:17:57 2022
@@ -471,6 +471,10 @@
         <lastmod>2021-11-15T00:00:00+01:00</lastmod>
     </url>
     <url>
+        <loc>https://libcloud.apache.org/blog/2022/03/12/libcloud-3-5-0-released.html</loc>
+        <lastmod>2022-03-12T00:00:00+01:00</lastmod>
+    </url>
+    <url>
         <loc>https://libcloud.apache.org/community-resources.html</loc>
         <lastmod>2019-09-09T18:11:27+02:00</lastmod>
     </url>
@@ -500,7 +504,7 @@
     </url>
     <url>
         <loc>https://libcloud.apache.org/blog/blog/</loc>
-        <lastmod>2021-11-15T22:01:51+01:00</lastmod>
+        <lastmod>2022-03-13T00:16:31+01:00</lastmod>
     </url>
     <url>
         <loc>https://libcloud.apache.org/gsoc.html</loc>
@@ -520,7 +524,7 @@
     </url>
     <url>
         <loc>https://libcloud.apache.org/</loc>
-        <lastmod>2022-03-11T21:47:26+01:00</lastmod>
+        <lastmod>2022-03-13T00:16:31+01:00</lastmod>
     </url>
     <url>
         <loc>https://libcloud.apache.org/media.html</loc>

Modified: libcloud/site/trunk/source/_posts/2021-11-11-libcloud-3-4-0-released.md
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/source/_posts/2021-11-11-libcloud-3-4-0-released.md?rev=1898884&r1=1898883&r2=1898884&view=diff
==============================================================================
--- libcloud/site/trunk/source/_posts/2021-11-11-libcloud-3-4-0-released.md (original)
+++ libcloud/site/trunk/source/_posts/2021-11-11-libcloud-3-4-0-released.md Sat Mar 12 23:17:57 2022
@@ -59,7 +59,7 @@ pip install "apache-libcloud==3.4.0"
 If you have installed Libcloud using pip you can also use it to upgrade it:
 
 <pre>
-pip install --upgrade "apache-libcloud==3.4.1"
+pip install --upgrade "apache-libcloud==3.4.0"
 </pre>
 
 ### Upgrade notes

Added: libcloud/site/trunk/source/_posts/2022-03-12-libcloud-3-5-0-released.md
URL: http://svn.apache.org/viewvc/libcloud/site/trunk/source/_posts/2022-03-12-libcloud-3-5-0-released.md?rev=1898884&view=auto
==============================================================================
--- libcloud/site/trunk/source/_posts/2022-03-12-libcloud-3-5-0-released.md (added)
+++ libcloud/site/trunk/source/_posts/2022-03-12-libcloud-3-5-0-released.md Sat Mar 12 23:17:57 2022
@@ -0,0 +1,84 @@
+---
+layout: post
+title: Libcloud 3.5.0 released
+author: Tomaz Muraus
+tags:
+  - news
+  - release announcement
+---
+
+We are happy to announce Libcloud v3.5.0.
+
+This release includes new features, improvements and bug fixes.
+
+Highlights include:
+
+- Improvements to the OpenStack driver
+- New storage driver for Scaleway Object Storage
+- Improvements to the HTTP requests retrying code
+
+A list of all the changes can be found at
+<https://libcloud.readthedocs.io/en/latest/changelog.html#changes-in-apache-libcloud-3.5.0>.
+
+### Note on Python 3.5 support
+
+This release drops support for Python 3.5.
+
+Python 3.5 has been EOL and non-supported for more than a year
+(<https://endoflife.date/python>) now and a lot of libraries (including some we
+depend on) have already dropped support for it.
+
+Last release which still supports Python 3.5 is Libcloud v3.4.1.
+
+### Note on code style change (developers only)
+
+To make formating and styling in our code base more consistent, we have
+re-formatted all the code with black (<https://github.com/psf/black>) and we will
+automatically enforce black code style (<https://black.readthedocs.io/en/stable/>)
+for all the new code going forward.
+
+This should make it easier to contribute and read the code since all the code
+will be using the same style.
+
+### Download
+
+The release can can be downloaded from
+<https://libcloud.apache.org/downloads.html> or installed using pip:
+
+<pre>
+pip install "apache-libcloud==3.5.0"
+</pre>
+
+### Upgrading
+
+If you have installed Libcloud using pip you can also use it to upgrade it:
+
+<pre>
+pip install --upgrade "apache-libcloud==3.5.0"
+</pre>
+
+### Upgrade notes
+
+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 <https://libcloud.readthedocs.org/en/latest/upgrade_notes.html>
+
+### Documentation
+
+Regular and API documentation is available at <https://libcloud.readthedocs.org/en/v3.5.0/>
+
+### Bugs / Issues
+
+If you find any bug or issue, please report it on our issue tracker
+<https://github.com/apache/libcloud/issues>.
+
+Don't forget to attach an example and / or test which reproduces your
+problem.
+
+### Thanks
+
+Thanks to everyone who contributed and made this release possible! Full
+list of people who contributed to this release can be found in the
+[CHANGES file][1].
+
+[1]: https://libcloud.readthedocs.org/en/v3.5.0/changelog.html