blob: b3e6594b326d10e69b755fb9a0b511ce7cd56cb6 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content="The Apache Software Foundation">
<meta name="keywords" content="news,announcement" />
<title>Libcloud 1.0-pre1 open for feedback | Apache Libcloud</title>
<!-- fav icons -->
<link rel="shortcut icon" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/apple-touch-icon.png" />
<link rel="apple-touch-icon-precomposed" href="/images/apple-touch-icon.png" />
<link href="/blog/atom.xml" type="application/atom+xml" rel="alternate" title="Apache Libcloud Blog Feed" />
<link href='https://fonts.googleapis.com/css?family=Open+Sans:400,400italic' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Inconsolata' rel='stylesheet' type='text/css'>
<!-- Facebook OpenGraph tags -->
<meta content="Apache Libcloud" property="og:site_name">
<meta content="Libcloud 1.0-pre1 open for feedback" property="og:title">
<meta content="article" property="og:type">
<meta content="https://libcloud.apache.org/blog/2016/01/20/libcloud-1.0-pre1.html" property="og:url">
<meta content="2016-01-20T00:00:00+00:00" property="article:published_time">
<meta content="https://libcloud.apache.org/about.html" property="article:author">
<meta content="news" property="article:tag">
<meta content="announcement" property="article:tag">
<link href='/assets/global-49923225b15584efebd7a337daac5102.css' rel='stylesheet' type='text/css' />
</head>
<body data-spy="scroll" data-target=".sidebar-nav" data-offset="80">
<nav class="navbar navbar-fixed-top navbar-inverse" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/index.html"><img src="/images/libcloud_logo.png" class="navbar-logo" /> Apache Libcloud</a>
</div>
<div class="collapse navbar-collapse navbar-ex1-collapse">
<ul class="nav navbar-nav">
<li ><a href="/" >Home</a></li>
<li ><a href="/about.html" >About</a></li>
<li ><a href="/getting-started.html" >Quick Start</a></li>
<li ><a href="https://libcloud.readthedocs.org/en/stable/" target="_blank">Documentation</a></li>
<li ><a href="/downloads.html" >Downloads</a></li>
<li ><a href="/community.html" >Community</a></li>
<li ><a href="/blog/" >Blog</a></li>
</ul>
<div class="material-switch pull-right">
<input id="theme-switch" name="theme-switch" type="checkbox" onclick="modeSwitcher()"/>
<label for="theme-switch" class="label-default"></label>
<span id="theme-toggle" class="theme-switch">Dark mode</span>
</div>
</div><!-- /.navbar-collapse -->
</div><!-- /.container -->
</nav>
<div class="container main-container">
<div class="row section page-content">
<div class="col-lg-8 col-lg-offset-2">
<div class="post">
<h2>Libcloud 1.0-pre1 open for feedback</h2>
<span class="post-date-author">By Anthony Shaw on Jan 20, 2016</span>
<div class="post-content">
<p>We are pleased to announce that version 1.0-pre1 vote thread is open and the release is ready for community feedback.</p>
<p>1.0-pre1 marks the first pre-release of the 1.0 major release. Some years ago, Tomaz Muraus spoke on the podcast <a href="https://twit.tv/shows/floss-weekly/episodes/181">FLOSS weekly</a>.
Tomaz spoke about how much of a huge challenge porting the project to Python 3.x would be(!) as well as the 1.0 milestone.</p>
<p>It is worth listening to the podcast to see how far things have come, we now average 2 pull-requests a day and have 156 contributors.</p>
<p>As the project has matured over the last 5 years one of the most remarkable changes has been the adoption from the community and
continued support from our contributors adding new drivers, patching strange API issues and keeping the project alive.</p>
<p>Anthony Shaw will be speaking on the FLOSS weekly podcast on February 2nd and discussing our community and the project, so
please tune in.</p>
<p>The Cloud market as I’m sure you’re all aware of is thriving, the purpose of Libcloud was originally:</p>
<ul>
<li>To help prevent lock-in to a particular vendor</li>
<li>To abstract the complexity of vendor APIs</li>
<li>To give a simple way for deploying to and managing multiple cloud vendors</li>
</ul>
<p>Since that we have had (at the last count) 2,118,539 downloads. The project continues to grow in popularity with each new release.</p>
<p>So with the 1.0 major release we would like to announce 2 new driver types, containers and backup.</p>
<h2 id="history-of-our-drivers">History of our drivers</h2>
<p>The compute (IaaS) API is what libcloud is best known for but there is a range of drivers available for many other capabilities.</p>
<p>There is a presentation on the value of using Libcloud to avoid lock in <a href="http://www.slideshare.net/AnthonyShaw5/apache-libcloud-keeping-up-with-the-cloud-market-in-2016">on SlideShare</a></p>
<p>This is a history of the different driver types in the libcloud project.</p>
<ul>
<li>Compute (v0.1.0)</li>
<li>Support for nodes, node images, locations, states</li>
<li>52 providers including every major cloud provider in the market. Plus local services like Vmware, OpenStack, libvirt</li>
<li>DNS (v0.6.0)</li>
<li>Support for zones, records, recordtypes</li>
<li>19 providers including CloudFlare, DigitalOcean, DNSimple, GoDaddy, Google DNS, Linode, Rackspace, Amazon R53, Zerigo</li>
<li>Object Storage (v0.5.0)</li>
<li>Support for containers and objects</li>
<li>11 providers including Amazon S3, Azure Blobs, Google storage, CloudFiles, OpenStack Swift</li>
<li>Load Balancer (v0.5.0)</li>
<li>Support for nodes, balancers, listeners and algorithms</li>
<li>11 providers including CloudStack, Dimension Data, Amazon ELB, Google GCE LB, SoftLayer LB</li>
<li>Backup (v0.20.0)</li>
<li>Support for backup targets, recovery points and jobs</li>
<li>3 providers, Dimension Data, Amazon EBS snaps, Google snaps</li>
</ul>
<h2 id="introducing-backup-drivers">Introducing Backup Drivers</h2>
<p>With 1.0-pre1 we have introduced a new driver type for backup, <code class="language-plaintext highlighter-rouge">libcloud.backup</code></p>
<p>Backup API allows you to manage Backup as A Service and services such as EBS Snaps,
GCE volume snap and dimension data backup.</p>
<h3 id="terminology">Terminology</h3>
<ul>
<li><code class="language-plaintext highlighter-rouge">libcloud.backup.base.BackupTarget</code> - Represents a backup target, like a Virtual Machine, a folder or a database.</li>
<li><code class="language-plaintext highlighter-rouge">libcloud.backup.base.BackupTargetRecoveryPoint</code> - Represents a copy of the data in the target, a recovery point can be
recovered to a backup target. An inplace restore is where you recover to the same target and an out-of-place restore is where you
recover to another target.</li>
<li><code class="language-plaintext highlighter-rouge">libcloud.backup.base.BackupTargetJob</code> - Represents a backup job running on backup target.</li>
</ul>
<h2 id="introducing-container-as-a-service-drivers">Introducing Container-as-a-Service Drivers</h2>
<p>The API is for Container-as-a-Service providers, these new types of cloud services offer container management and hosting as a service.
The new services are already providing proprietary APIs, giving the need for a tool like Libcloud if you want to provision to any cloud provider.</p>
<p>Google, Amazon and Joyent have all announced Container cloud services and Microsoft have launched a beta service also, so we are getting on the front foot with an
abstraction API for people wishing to gain similar benefits to the compute, load balancer and storage APIs.</p>
<p><a href="http://www.slideshare.net/AnthonyShaw5/introducing-container-asaservice-support-to-apache-libcloud">A presentation on this topic is available on SlideShare.</a></p>
<p><strong>Isn’t docker a standard?</strong>
Well, yes and no.</p>
<p>Docker has been the main technology adopted by these providers as the host system for the containers and also as the specification of the containers themselves.
But, Docker is not a provisioning system, it is a virtualization host. Also there are alternatives, like CoreOS Rkt.</p>
<h3 id="container-api-design">Container API design</h3>
<p>Container-as-a-Service providers will implement the <code class="language-plaintext highlighter-rouge">ContainerDriver</code> class to provide functionality for :</p>
<ul>
<li>Listing deployed containers</li>
<li>Starting, stopping and restarting containers (where supported)</li>
<li>Destroying containers</li>
<li>Creating/deploying containers</li>
<li>Listing container images</li>
<li>Installing container images (pulling an image from a local copy or remote repository)</li>
</ul>
<h3 id="simple-container-support">Simple Container Support</h3>
<ul>
<li><code class="language-plaintext highlighter-rouge">libcloud.container.base.ContainerImage</code> - Represents an image that can be deployed, like an application or an operating system</li>
<li><code class="language-plaintext highlighter-rouge">libcloud.container.base.Container</code> - Represents a deployed container image running on a container host</li>
</ul>
<h3 id="cluster-suppport">Cluster Suppport</h3>
<p>Cluster support extends on the basic driver functions, but where drivers implement the class-level attribute <code class="language-plaintext highlighter-rouge">supports_clusters</code> as True
clusters may be listed, created and destroyed. When containers are deployed, the target cluster can be specified.</p>
<ul>
<li><code class="language-plaintext highlighter-rouge">libcloud.container.base.ContainerCluster</code> - Represents a deployed container image running on a container host</li>
<li><code class="language-plaintext highlighter-rouge">libcloud.container.base.ClusterLocation</code> - Represents a location for clusters to be deployed</li>
</ul>
<h3 id="using-the-container-drivers">Using the container drivers</h3>
<p>The container drivers have been designed around similar principles to the compute driver. It is simple to use and a flat class design.</p>
<div class="language-python highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code><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>
<span class="n">Cls</span> <span class="o">=</span> <span class="n">get_driver</span><span class="p">(</span><span class="n">Provider</span><span class="p">.</span><span class="n">DOCKER</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">'user'</span><span class="p">,</span> <span class="s">'api key'</span><span class="p">)</span>
<span class="n">image</span> <span class="o">=</span> <span class="n">driver</span><span class="p">.</span><span class="n">install_image</span><span class="p">(</span><span class="s">'tomcat:8.0'</span><span class="p">)</span>
<span class="n">container</span> <span class="o">=</span> <span class="n">driver</span><span class="p">.</span><span class="n">deploy_container</span><span class="p">(</span><span class="s">'tomcat'</span><span class="p">,</span> <span class="n">image</span><span class="p">)</span>
<span class="n">container</span><span class="p">.</span><span class="n">restart</span><span class="p">()</span>
</code></pre>
</div>
</div>
<h3 id="container-registries">Container Registries</h3>
<p>The Docker Registry API is used by services like Amazon ECR, the Docker Hub website and by anyone hosting their own Docker registry.
It doesn’t belong to a particular driver, so is a utility class.
Some providers, like Amazon ECR have a factory method to provide a registry client
Images from docker registry can be sent to the deploy_container method for any driver.</p>
<div class="language-python highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code><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="p">.</span><span class="n">get_image</span><span class="p">(</span><span class="s">'ubuntu'</span><span class="p">,</span> <span class="s">'latest'</span><span class="p">)</span>
</code></pre>
</div>
</div>
<p>When other container registry services are made available these can be provided in a similar context.</p>
<h3 id="prototype-drivers-in-libcloudcontainer">Prototype drivers in libcloud.container</h3>
<p>Drivers have been provided to show example implementations of the API, these drivers are <strong>experimental</strong> and need to go through more thorough community testing
before they are ready for a stable release.</p>
<ul>
<li><a href="http://libcloud.readthedocs.org/en/latest/container/drivers/docker.html">Docker</a></li>
<li><a href="http://libcloud.readthedocs.org/en/latest/container/drivers/joyent.html">Joyent Triton</a></li>
<li><a href="http://libcloud.readthedocs.org/en/latest/container/drivers/kubernetes.html">Google Kubernetes</a></li>
<li><a href="http://libcloud.readthedocs.org/en/latest/container/drivers/ecs.html">Amazon Elastic Container Service (as well as Amazon Container Registry Service)</a></li>
</ul>
<p>The driver with the most contentious implementation is Kubernetes. We would like users of the Amazon ECS, Google Containers and Kubernetes project to provide feedback
on how they would like to map clusters, pods, namespaces to the low level concepts in the driver.</p>
<h1 id="providing-feedback">Providing feedback</h1>
<p>The <a href="http://mail-archives.apache.org/mod_mbox/libcloud-dev/201601.mbox/%3CCAOZ4b6sJM8ofMinGJCpfJEq7BYcAbfJBVCE7cfPniESqkEpkPQ%40mail.gmail.com%3E">voting thread</a> is open, please use this as your opportunity to give feedback.</p>
<h1 id="thanks">Thanks</h1>
<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/announcement.html" rel="tag">announcement</a></p>
</div>
</div>
</div>
Share : <a href="https://twitter.com/share" class="twitter-share-button"{count} data-via="libcloud" data-size="large" data-hashtags="cloud">Tweet</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
</div>
</div>
<hr />
<footer>
<div class="row">
<div class="col-lg-12 text-center">
<div class="footer-links">
<p><a href="http://www.apache.org/licenses/">License</a> | <a
href="/security.html">Security</a> | <a
href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a> |
<a href="http://www.apache.org/foundation/thanks.html">Thanks</a> |
<a href="/credits.html">Credits</a> | <a href="/media.html">Media</a>
</div>
<div class="footer-text">
<p class="">Copyright &copy; 2009-2022 <a href="https://www.apache.org/" target="_blank">The Apache Software Foundation</a></p>
<p class="">Apache Libcloud, Libcloud, Apache, the Apache feather, and the Apache Libcloud project logo are trademarks of the Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
<p class="">Site last updated on 2022-03-29 21:34:03 +0000</p>
</div>
</div>
</div>
</footer>
</div><!-- /.container -->
<!-- JavaScript -->
<script src='/assets/global-9d3ec4fa3c143ff7102734d40de1aad8.js' type='text/javascript'></script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-23580482-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</body>
</html>