Added: jclouds/site-content/blog/2016/08/22/arbitrary-cpu-ram.html
URL: 
http://svn.apache.org/viewvc/jclouds/site-content/blog/2016/08/22/arbitrary-cpu-ram.html?rev=1923693&view=auto
==============================================================================
--- jclouds/site-content/blog/2016/08/22/arbitrary-cpu-ram.html (added)
+++ jclouds/site-content/blog/2016/08/22/arbitrary-cpu-ram.html Mon Feb 10 
07:25:53 2025
@@ -0,0 +1,329 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+<title>Apache jclouds&reg; :: Adding support for arbitrary CPU and RAM to 
ComputeService</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="description" content="">
+<meta name="author" content="">
+
+<!--link rel="stylesheet/less" href="less/bootstrap.less" type="text/css" /-->
+<!--link rel="stylesheet/less" href="less/responsive.less" type="text/css" /-->
+<!--script src="js/less-1.3.3.min.js"></script-->
+<!--append ‘#!watch’ to the browser URL, then refresh the page. -->
+
+<link href="/css/bootstrap.min.css" rel="stylesheet">
+<link href="/css/style.css" rel="stylesheet">
+<link href="/css/syntax.css" rel="stylesheet">
+
+<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
+<!--[if lt IE 9]>
+<script src="js/html5shiv.js"></script>
+<![endif]-->
+
+<!-- Fav and touch icons -->
+<!--
+<link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="/img/apple-touch-icon-144-precomposed.png">
+<link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="/img/apple-touch-icon-114-precomposed.png">
+<link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="/img/apple-touch-icon-72-precomposed.png">
+<link rel="apple-touch-icon-precomposed" 
href="/img/apple-touch-icon-57-precomposed.png">
+-->
+<link rel="shortcut icon" href="/favicon.ico">
+
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" 
title="Blog Posts Feed">
+<link rel="alternate" type="application/atom+xml" 
href="/releasenotes/atom.xml" title="Release Notes Feed">
+
+<script type="text/javascript" src="/js/jquery.min.js"></script>
+<script type="text/javascript" src="/js/bootstrap.min.js"></script>
+<script type="text/javascript" src="/js/toc.js"></script>
+
+
+    </head>
+    <body>
+        <nav class="navbar navbar-default navbar-fixed-top" role="navigation">
+    <div class="container">
+        <div class="navbar-header">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" 
data-target="#bs-example-navbar-collapse-1">
+                <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="/">Apache jclouds &reg;</a>
+        </div>
+
+        <div class="collapse navbar-collapse" 
id="bs-example-navbar-collapse-1">
+            <ul class="nav navbar-nav">
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" 
data-toggle="dropdown">Getting Started<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <li><a href="/start/what-is-jclouds/">What Is Apache 
jclouds?</a></li>
+                        <li><a href="/start/install/">Installation 
Guide</a></li>
+                        <li class="divider"></li>
+                        <li><a href="/start/concepts/">Core Concepts</a></li>
+                        <li><a href="/start/compute/">ComputeService</a></li>
+                        <li><a href="/start/blobstore/">BlobStore</a></li>
+                        <li><a 
href="https://github.com/apache/jclouds-examples";>Examples</a></li>
+                    </ul>
+                </li>
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" 
data-toggle="dropdown">Documentation<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <li><a href="/reference/providers/">Cloud 
Providers</a></li>
+                        <li><a href="/guides">User Guides</a></li>
+                        <li><a 
href="/reference/troubleshooting/">Troubleshooting</a></li>
+                        <li><a 
href="/reference/configuration/">Configuration</a></li>
+                        <li><a href="/reference/logging/">Logging</a></li>
+                        <li><a href="/reference/javadoc/">Javadoc</a></li>
+                        <li class="divider"></li>
+                        <li class="dropdown-header">Developer Guides</li>
+                        <li><a 
href="https://cwiki.apache.org/confluence/display/JCLOUDS/";>Wiki</a></li>
+                    </ul>
+                </li>
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" 
data-toggle="dropdown">Community<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <li><a href="/community/">Get In Touch!</a></li>
+                        <li><a href="/community/users/">Who Is Using 
jclouds?</a></li>
+                        <li class="divider"></li>
+                        <li class="dropdown-header">Contribute</li>
+                        <li><a href="/reference/report-a-bug/">Report a 
Bug</a></li>
+                        <li><a 
href="https://ci-builds.apache.org/job/JClouds/";>Continuous Integration</a></li>
+                        <li><a 
href="https://cwiki.apache.org/confluence/display/JCLOUDS/How+to+Contribute";>How
 To Contribute Code</a></li>
+                        <li><a 
href="https://cwiki.apache.org/confluence/display/JCLOUDS/How+to+Contribute+Documentation";>How
 To Contribute Documentation</a></li>
+                    </ul>
+                </li>
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" 
data-toggle="dropdown">About Apache<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <li><a href="https://www.apache.org";>The Apache 
Software Foundation</a></li>
+                        <li><a 
href="https://www.apache.org/licenses/";>License</a></li>
+                        <li><a 
href="https://www.apache.org/foundation/contributing.html";>Donations</a></li>
+                        <li><a 
href="https://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li>
+                        <li><a 
href="https://www.apache.org/security/";>Security</a></li>
+                        <li><a 
href="https://www.apache.org/foundation/thanks.html";>Thanks</a></li>
+                        <li class="divider"></li>
+                        <li class="dropdown-header">Apache Events</li>
+                        <li><a 
href="https://www.apache.org/events/current-event.html";><img 
src="https://www.apache.org/events/current-event-234x60.png"/></a></li>
+                    </ul>
+                </li>
+                <li><a href="/blog">Blog</a></li>
+            </ul>
+            <ul class="nav navbar-nav navbar-right">
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" 
data-toggle="dropdown">Release Notes<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <!-- only keep the release notes for supported 
versions in this list -->
+                        <li><a href="/releasenotes/2.5.0">2.5.0</a></li>
+                        <li><a href="/releasenotes/2.4.0">2.4.0</a></li>
+                        <li><a href="/releasenotes/2.3.0">2.3.0</a></li>
+                        <li><a href="/releasenotes/2.2.1">2.2.1</a></li>
+                        <li><a href="/releasenotes/2.2.0">2.2.0</a></li>
+                        <li><a href="/releasenotes/2.1.3">2.1.3</a></li>
+                        <li><a href="/releasenotes/2.1.2">2.1.2</a></li>
+                        <li><a href="/releasenotes/2.1.1">2.1.1</a></li>
+                        <li><a href="/releasenotes/2.1.0">2.1.0</a></li>
+                        <li><a href="/releasenotes/2.0.3">2.0.3</a></li>
+                        <li><a href="/releasenotes/2.0.2">2.0.2</a></li>
+                        <li><a href="/releasenotes/2.0.1">2.0.1</a></li>
+                        <li><a href="/releasenotes/2.0.0">2.0.0</a></li>
+                        <li class="divider"></li>
+                        <li class="dropdown-header">Previous releases</li>
+                        <li><a href="/releasenotes">Release archive</a></li>
+                    </ul>
+                </li>
+                <li>
+                    <div>
+                        <a class="btn btn-success navbar-btn" 
href="/start/install/">
+                            <span class="glyphicon glyphicon-download"></span>
+                            Install
+                        </a>
+                    </div>
+                </li>
+            </ul>
+        </div>
+    </div>
+</nav>
+
+        <div class="container">
+            <div class="page-header">
+                <h1>Adding support for arbitrary CPU and RAM to 
ComputeService</h1>
+                <span class="text-muted">22 August 2016, by <a 
href="https://github.com/ivanlomba";>Iván Lomba</a></span>
+            </div>
+            <p>Through of a <a 
href="https://developers.google.com/open-source/gsoc/";>Google Summer of 
Code</a> project, Apache jclouds now allows users to manually set arbitrary 
values for desired CPU and RAM of compute instances.
+<!--more--></p>
+
+<p>The previous ComputeService abstraction assumed that all providers have 
hardware profiles: a list of “specs” of available CPU, memory and disk 
configurations that can be used when creating a node. Some providers, such as 
<a href="https://www.profitbricks.com/";>ProfitBricks</a> or <a 
href="https://www.elastichosts.com/";>ElasticHosts</a>, do not have the concept 
of hardware profiles; the previous implementation provided a fixed 
configuration with a fixed, hard-coded list of “fake” profiles just to 
conform to the Apache jclouds interface. The new implementation allows  users 
to create nodes with arbitrary settings or, where supported, to choose between 
provided hardware profiles or custom settings.</p>
+
+<p>Note that pre-defined hardware profiles can sometimes be more performant 
and/or cheaper than custom settings.</p>
+
+<h3 id="how-to-create-a-node-with-custom-settings">How to create a node with 
custom settings</h3>
+<p>There are two ways to use the new feature: setting an appropriate value for 
the <code class="language-plaintext highlighter-rouge">hardwareId</code> 
property, or specifying the desired number of cores, amount of RAM and, in some 
cases, disk size via the <code class="language-plaintext 
highlighter-rouge">minCores</code>, <code class="language-plaintext 
highlighter-rouge">minRam</code> and <code class="language-plaintext 
highlighter-rouge">minDisk</code> properties.</p>
+
+<h4 id="creating-a-node-with-custom-settings-using-the-hardwareid">Creating a 
node with custom settings using the <code class="language-plaintext 
highlighter-rouge">hardwareId</code></h4>
+
+<p>If the user sets the <code class="language-plaintext 
highlighter-rouge">hardwareId</code> property, the Apache jclouds <a 
href="/reference/javadoc/1.9.x/org/jclouds/compute/domain/TemplateBuilder.html">TemplateBuilder</a>
 implementation first checks if the provided ID matches an existing hardware 
profile. If so, the matching profile is used.</p>
+
+<p>If the provided ID does <em>not</em> match an existing hardware profile, 
and it has the format of an “automatic” hardware ID, Apache jclouds will 
create a node with custom settings.</p>
+
+<p>To set CPU and RAM via an automatic hardware ID, <a 
href="https://jclouds.apache.org/reference/javadoc/1.9.x/org/jclouds/compute/domain/TemplateBuilder.html#hardwareId\(java.lang.String\)">set
 the  <code class="language-plaintext highlighter-rouge">hardwareId</code></a> 
property on your <code class="language-plaintext 
highlighter-rouge">TemplateBuilder</code> to a value with the format:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre 
class="highlight"><code>automatic:cores=&lt;num-cores&gt;;ram=&lt;memory-size&gt;
+</code></pre></div></div>
+
+<p>For example:</p>
+
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span class="nc">Template</span> <span 
class="n">template</span> <span class="o">=</span> <span 
class="n">templateBuilder</span>
+    <span class="o">.</span><span class="na">hardwareId</span><span 
class="o">(</span><span class="s">"automatic:cores=2;ram=4096"</span><span 
class="o">)</span>
+    <span class="o">.</span><span class="na">build</span><span 
class="o">()</span>
+<span class="n">compute</span><span class="o">.</span><span 
class="na">createNodesInGroup</span><span class="o">(</span><span 
class="s">"jclouds"</span><span class="o">,</span> <span 
class="mi">1</span><span class="o">,</span> <span 
class="n">template</span><span class="o">);</span></code></pre></figure>
+
+<p>For providers such as ProfitBricks that configure disks based on the volume 
information provided in the hardware profile, you will also need to specify the 
desired disk size:</p>
+
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span class="nc">Template</span> <span 
class="n">template</span> <span class="o">=</span> <span 
class="n">templateBuilder</span>
+    <span class="o">.</span><span class="na">hardwareId</span><span 
class="o">(</span><span 
class="s">"automatic:cores=2;ram=4096;disk=100"</span><span class="o">)</span>
+    <span class="o">.</span><span class="na">build</span><span 
class="o">()</span>
+<span class="n">compute</span><span class="o">.</span><span 
class="na">createNodesInGroup</span><span class="o">(</span><span 
class="s">"jclouds"</span><span class="o">,</span> <span 
class="mi">1</span><span class="o">,</span> <span 
class="n">template</span><span class="o">);</span></code></pre></figure>
+
+<p>You can use the <code class="language-plaintext 
highlighter-rouge">AutomaticHardwareIdSpec</code> to more easily construct 
automatic hardware IDs:</p>
+
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span class="nc">Template</span> <span 
class="n">template</span> <span class="o">=</span> <span 
class="n">templateBuilder</span>
+    <span class="o">.</span><span class="na">hardwareId</span><span 
class="o">(</span><span class="nc">AutomaticHardwareIdSpec</span>
+        <span class="o">.</span><span 
class="na">automaticHardwareIdSpecBuilder</span><span class="o">(</span><span 
class="mf">2.0</span><span class="o">,</span> <span class="mi">4096</span><span 
class="o">,</span> <span class="nc">Optional</span><span 
class="o">.&lt;</span><span class="nc">Float</span><span 
class="o">&gt;</span><span class="n">absent</span><span class="o">())</span>
+        <span class="o">.</span><span class="na">toString</span><span 
class="o">()))</span>
+    <span class="o">.</span><span class="na">build</span><span 
class="o">()</span>
+<span class="n">compute</span><span class="o">.</span><span 
class="na">createNodesInGroup</span><span class="o">(</span><span 
class="s">"jclouds"</span><span class="o">,</span> <span 
class="mi">1</span><span class="o">,</span> <span 
class="n">template</span><span class="o">);</span></code></pre></figure>
+
+<h4 
id="creating-a-node-with-custom-settings-using-mincores-minram-and-mindisk">Creating
 a node with custom settings using <code class="language-plaintext 
highlighter-rouge">minCores</code>, <code class="language-plaintext 
highlighter-rouge">minRam</code> and <code class="language-plaintext 
highlighter-rouge">minDisk</code></h4>
+
+<p>If the user sets the <code class="language-plaintext 
highlighter-rouge">minCores</code>, <code class="language-plaintext 
highlighter-rouge">minRam</code> and, where required, <code 
class="language-plaintext highlighter-rouge">minDisk</code> properties, Apache 
jclouds first checks if a hardware profile matching the desired values exists. 
If no such profile can be found, Apache jclouds will create a node with custom 
settings.</p>
+
+<p>Set the appropriate properties on your <code class="language-plaintext 
highlighter-rouge">TemplateBuilder</code>:</p>
+
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span class="nc">Template</span> <span 
class="n">template</span> <span class="o">=</span> <span 
class="n">templateBuilder</span>
+    <span class="o">.</span><span class="na">minCores</span><span 
class="o">(</span><span class="mi">2</span><span class="o">)</span>
+    <span class="o">.</span><span class="na">minRam</span><span 
class="o">(</span><span class="mi">4096</span><span class="o">)</span>
+    <span class="o">.</span><span class="na">build</span><span 
class="o">();</span>
+<span class="n">compute</span><span class="o">.</span><span 
class="na">createNodesInGroup</span><span class="o">(</span><span 
class="s">"jclouds"</span><span class="o">,</span> <span 
class="mi">1</span><span class="o">,</span> <span 
class="n">template</span><span class="o">);</span></code></pre></figure>
+
+<p>For providers that need a disk size specification also set <code 
class="language-plaintext highlighter-rouge">minDisk</code>:</p>
+
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span class="nc">Template</span> <span 
class="n">template</span> <span class="o">=</span> <span 
class="n">templateBuilder</span>
+    <span class="o">.</span><span class="na">minCores</span><span 
class="o">(</span><span class="mi">2</span><span class="o">)</span>
+    <span class="o">.</span><span class="na">minRam</span><span 
class="o">(</span><span class="mi">4096</span><span class="o">)</span>
+    <span class="o">.</span><span class="na">minDisk</span><span 
class="o">(</span><span class="mi">100</span><span class="o">)</span>
+    <span class="o">.</span><span class="na">build</span><span 
class="o">();</span>
+<span class="n">compute</span><span class="o">.</span><span 
class="na">createNodesInGroup</span><span class="o">(</span><span 
class="s">"jclouds"</span><span class="o">,</span> <span 
class="mi">1</span><span class="o">,</span> <span 
class="n">template</span><span class="o">);</span></code></pre></figure>
+
+<h3 id="supported-providers">Supported providers</h3>
+
+<p>There are several providers that support arbitrary values of CPU and RAM, 
such as Docker, ElasticHosts, Google Compute Engine, etc. The first available 
Apache jclouds providers to support this feature are:</p>
+
+<ul>
+  <li><a href="/guides/google/">Google Compute Engine</a></li>
+  <li><a href="/guides/profitbricks/">ProfitBricks</a></li>
+</ul>
+
+<p>To add this feature to other providers, bind the  <code 
class="language-plaintext 
highlighter-rouge">ArbitraryCpuRamTemplateBuilderImpl</code> class in the 
provider’s context module:</p>
+
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span class="n">bind</span><span class="o">(</span><span 
class="nc">TemplateBuilderImpl</span><span class="o">.</span><span 
class="na">class</span><span class="o">).</span><span class="na">to</span><span 
class="o">(</span><span 
class="nc">ArbitraryCpuRamTemplateBuilderImpl</span><span 
class="o">.</span><span class="na">class</span><span 
class="o">);</span></code></pre></figure>
+
+<p>You will also need to modify the function that converts the representation 
of a node from the provider’s model to the jclouds representation, so that 
the required automatic <code class="language-plaintext 
highlighter-rouge">hardwareId</code> is included.</p>
+
+<h3 id="further-development">Further development</h3>
+
+<ul>
+  <li><strong>Support other providers</strong>: add support for other 
providers such as <a href="https://www.elastichosts.com/";>ElasticHosts</a> or 
<a href="https://www.docker.com/";>Docker</a>.</li>
+  <li><strong>Improve <code class="language-plaintext 
highlighter-rouge">AutomaticHardwareSpec</code></strong>: add parsers to <code 
class="language-plaintext highlighter-rouge">AutomaticHardwareSpec</code> for 
further properties that can have arbitrary values, such as <code 
class="language-plaintext highlighter-rouge">bootDisk</code> or <code 
class="language-plaintext highlighter-rouge">durable</code> (part of a volume 
description).</li>
+  <li><strong>Usage examples of the new features</strong>: add examples of 
using the new features to the <a 
href="http://github.com/jclouds/jclouds-examples";>jclouds-examples</a> 
repo.</li>
+  <li><strong>Custom <code class="language-plaintext 
highlighter-rouge">TemplateBuilderImpl</code> for ProfitBricks</strong>: add a 
custom implementation of the <code class="language-plaintext 
highlighter-rouge">TemplateBuilderImpl</code> that fails fast if <code 
class="language-plaintext highlighter-rouge">minDisk</code> is not set.</li>
+</ul>
+
+<h3 id="special-thanks">Special thanks</h3>
+
+<p>Special thanks to <a href="https://github.com/nacx";>Ignasi Barrera</a> for 
all the help, <a href="https://github.com/demobox";>Andrew Phillips</a> for code 
reviews and the rest of jclouds comunity.</p>
+
+<p>Of course, thanks also to Google for running GSoC.</p>
+
+            
+            <div id="comments">
+                <hr/>
+                <div id="disqus_thread"></div>
+<script type="text/javascript">
+var disqus_shortname = 'jclouds';
+/* * * DON'T EDIT BELOW THIS LINE * * */
+(function() {
+    var dsq = document.createElement('script'); dsq.type = 'text/javascript'; 
dsq.async = true;
+    dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
+    (document.getElementsByTagName('head')[0] || 
document.getElementsByTagName('body')[0]).appendChild(dsq);
+})();
+</script>
+<noscript>Please enable JavaScript to view the <a 
href="https://disqus.com/?ref_noscript";>Comments powered by 
Disqus.</a></noscript>
+<a href="https://disqus.com"; class="dsq-brlink">Comments powered by <span 
class="logo-disqus">Disqus</span></a>
+
+            </div>
+            
+            <div class="row clearfix">
+                <div id="footer" class="col-md-12 column">
+                    <div id="footer">
+    <hr/>
+    <div class="row clearfix">
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" href="/start/">Getting Started</a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" href="/reference/report-a-bug/">Report 
a Bug</a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a 
href="https://github.com/apache/jclouds-site/edit/master/_posts/2016-08-22-arbitrary-cpu-ram.md";>Fix
 This Page</a><a class="text-primary" 
href="https://cwiki.apache.org/confluence/display/JCLOUDS/How+to+Contribute+Documentation";><sup>*</sup></a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" 
href="https://cwiki.apache.org/confluence/display/JCLOUDS/How+to+Contribute";>Contribute
 Code</a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" href="/community/">Contact Us</a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" 
href="https://twitter.com/jclouds";>Follow Us</a>
+            </p>
+        </div>
+    </div>
+    <hr style="margin-top: 10px"/>
+    <div class="row clearfix">
+        <div class="col-md-12 column">
+            <p class="text-center">
+              Copyright &copy; 2011-2014 <a href="https://www.apache.org";>The 
Apache Software Foundation</a>. All Rights Reserved.
+              <a 
href="https://privacy.apache.org/policies/privacy-policy-public.html";>Privacy 
policy</a>.
+            </p>
+            <p class="text-center">
+              Apache, jclouds, Apache jclouds, the jclouds logo, and the 
Apache feather logos are registered trademarks or trademarks of the Apache 
Software Foundation.
+            </p>
+            <p class="text-center">
+              <img src="/img/Apache_Logo.png" height="120" />
+            </p>
+            <p class="text-center">
+                <a href="https://donate.apache.org/"; title="Support Apache">
+                    <img src="/img/support-apache.png" height="120" />
+                </a>
+            </p>
+            <br/>
+        </div>
+    </div>
+</div>
+
+                </div>
+            </div>
+        </div>
+    </body>
+</html>

Added: jclouds/site-content/blog/2018/01/16/keystone-v3.html
URL: 
http://svn.apache.org/viewvc/jclouds/site-content/blog/2018/01/16/keystone-v3.html?rev=1923693&view=auto
==============================================================================
--- jclouds/site-content/blog/2018/01/16/keystone-v3.html (added)
+++ jclouds/site-content/blog/2018/01/16/keystone-v3.html Mon Feb 10 07:25:53 
2025
@@ -0,0 +1,307 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+<title>Apache jclouds&reg; :: OpenStack Keystone V3 Support</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="description" content="">
+<meta name="author" content="">
+
+<!--link rel="stylesheet/less" href="less/bootstrap.less" type="text/css" /-->
+<!--link rel="stylesheet/less" href="less/responsive.less" type="text/css" /-->
+<!--script src="js/less-1.3.3.min.js"></script-->
+<!--append ‘#!watch’ to the browser URL, then refresh the page. -->
+
+<link href="/css/bootstrap.min.css" rel="stylesheet">
+<link href="/css/style.css" rel="stylesheet">
+<link href="/css/syntax.css" rel="stylesheet">
+
+<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
+<!--[if lt IE 9]>
+<script src="js/html5shiv.js"></script>
+<![endif]-->
+
+<!-- Fav and touch icons -->
+<!--
+<link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="/img/apple-touch-icon-144-precomposed.png">
+<link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="/img/apple-touch-icon-114-precomposed.png">
+<link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="/img/apple-touch-icon-72-precomposed.png">
+<link rel="apple-touch-icon-precomposed" 
href="/img/apple-touch-icon-57-precomposed.png">
+-->
+<link rel="shortcut icon" href="/favicon.ico">
+
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" 
title="Blog Posts Feed">
+<link rel="alternate" type="application/atom+xml" 
href="/releasenotes/atom.xml" title="Release Notes Feed">
+
+<script type="text/javascript" src="/js/jquery.min.js"></script>
+<script type="text/javascript" src="/js/bootstrap.min.js"></script>
+<script type="text/javascript" src="/js/toc.js"></script>
+
+
+    </head>
+    <body>
+        <nav class="navbar navbar-default navbar-fixed-top" role="navigation">
+    <div class="container">
+        <div class="navbar-header">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" 
data-target="#bs-example-navbar-collapse-1">
+                <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="/">Apache jclouds &reg;</a>
+        </div>
+
+        <div class="collapse navbar-collapse" 
id="bs-example-navbar-collapse-1">
+            <ul class="nav navbar-nav">
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" 
data-toggle="dropdown">Getting Started<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <li><a href="/start/what-is-jclouds/">What Is Apache 
jclouds?</a></li>
+                        <li><a href="/start/install/">Installation 
Guide</a></li>
+                        <li class="divider"></li>
+                        <li><a href="/start/concepts/">Core Concepts</a></li>
+                        <li><a href="/start/compute/">ComputeService</a></li>
+                        <li><a href="/start/blobstore/">BlobStore</a></li>
+                        <li><a 
href="https://github.com/apache/jclouds-examples";>Examples</a></li>
+                    </ul>
+                </li>
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" 
data-toggle="dropdown">Documentation<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <li><a href="/reference/providers/">Cloud 
Providers</a></li>
+                        <li><a href="/guides">User Guides</a></li>
+                        <li><a 
href="/reference/troubleshooting/">Troubleshooting</a></li>
+                        <li><a 
href="/reference/configuration/">Configuration</a></li>
+                        <li><a href="/reference/logging/">Logging</a></li>
+                        <li><a href="/reference/javadoc/">Javadoc</a></li>
+                        <li class="divider"></li>
+                        <li class="dropdown-header">Developer Guides</li>
+                        <li><a 
href="https://cwiki.apache.org/confluence/display/JCLOUDS/";>Wiki</a></li>
+                    </ul>
+                </li>
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" 
data-toggle="dropdown">Community<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <li><a href="/community/">Get In Touch!</a></li>
+                        <li><a href="/community/users/">Who Is Using 
jclouds?</a></li>
+                        <li class="divider"></li>
+                        <li class="dropdown-header">Contribute</li>
+                        <li><a href="/reference/report-a-bug/">Report a 
Bug</a></li>
+                        <li><a 
href="https://ci-builds.apache.org/job/JClouds/";>Continuous Integration</a></li>
+                        <li><a 
href="https://cwiki.apache.org/confluence/display/JCLOUDS/How+to+Contribute";>How
 To Contribute Code</a></li>
+                        <li><a 
href="https://cwiki.apache.org/confluence/display/JCLOUDS/How+to+Contribute+Documentation";>How
 To Contribute Documentation</a></li>
+                    </ul>
+                </li>
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" 
data-toggle="dropdown">About Apache<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <li><a href="https://www.apache.org";>The Apache 
Software Foundation</a></li>
+                        <li><a 
href="https://www.apache.org/licenses/";>License</a></li>
+                        <li><a 
href="https://www.apache.org/foundation/contributing.html";>Donations</a></li>
+                        <li><a 
href="https://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li>
+                        <li><a 
href="https://www.apache.org/security/";>Security</a></li>
+                        <li><a 
href="https://www.apache.org/foundation/thanks.html";>Thanks</a></li>
+                        <li class="divider"></li>
+                        <li class="dropdown-header">Apache Events</li>
+                        <li><a 
href="https://www.apache.org/events/current-event.html";><img 
src="https://www.apache.org/events/current-event-234x60.png"/></a></li>
+                    </ul>
+                </li>
+                <li><a href="/blog">Blog</a></li>
+            </ul>
+            <ul class="nav navbar-nav navbar-right">
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" 
data-toggle="dropdown">Release Notes<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <!-- only keep the release notes for supported 
versions in this list -->
+                        <li><a href="/releasenotes/2.5.0">2.5.0</a></li>
+                        <li><a href="/releasenotes/2.4.0">2.4.0</a></li>
+                        <li><a href="/releasenotes/2.3.0">2.3.0</a></li>
+                        <li><a href="/releasenotes/2.2.1">2.2.1</a></li>
+                        <li><a href="/releasenotes/2.2.0">2.2.0</a></li>
+                        <li><a href="/releasenotes/2.1.3">2.1.3</a></li>
+                        <li><a href="/releasenotes/2.1.2">2.1.2</a></li>
+                        <li><a href="/releasenotes/2.1.1">2.1.1</a></li>
+                        <li><a href="/releasenotes/2.1.0">2.1.0</a></li>
+                        <li><a href="/releasenotes/2.0.3">2.0.3</a></li>
+                        <li><a href="/releasenotes/2.0.2">2.0.2</a></li>
+                        <li><a href="/releasenotes/2.0.1">2.0.1</a></li>
+                        <li><a href="/releasenotes/2.0.0">2.0.0</a></li>
+                        <li class="divider"></li>
+                        <li class="dropdown-header">Previous releases</li>
+                        <li><a href="/releasenotes">Release archive</a></li>
+                    </ul>
+                </li>
+                <li>
+                    <div>
+                        <a class="btn btn-success navbar-btn" 
href="/start/install/">
+                            <span class="glyphicon glyphicon-download"></span>
+                            Install
+                        </a>
+                    </div>
+                </li>
+            </ul>
+        </div>
+    </div>
+</nav>
+
+        <div class="container">
+            <div class="page-header">
+                <h1>OpenStack Keystone V3 Support</h1>
+                <span class="text-muted">16 January 2018, by <a 
href="https://twitter.com/IgnasiBarrera";>Ignasi Barrera</a></span>
+            </div>
+            <p>In the last few months, the jclouds community has been working 
hard on adding support for <strong>OpenStack Keystone V3</strong>. This has not 
been easy, as all the existing OpenStack APIs depend on it and we try hard to 
keep our APIs backwards-compatible. We wanted a clean solution that allowed 
users to upgrade with minimal changes required to existing code.</p>
+
+<p>After lots of work, we’re finally there and are very happy to announce 
that, starting from the upcoming <code class="language-plaintext 
highlighter-rouge">2.1.0</code> release, jclouds will also support version 3 of 
the OpenStack Keystone API!
+<!--more--></p>
+
+<p>No new dependencies will be required to use the OpenStack Keystone V3 API: 
<code class="language-plaintext highlighter-rouge">openstack-keystone</code> 
contains the code for both V2 and V3, so all jclouds providers and APIs can 
support both versions.</p>
+
+<h1 id="configuring-openstack-services-to-use-keystone-v3">Configuring 
OpenStack services to use Keystone V3</h1>
+
+<p>Configuring OpenStack services to use Keystone V3 is pretty 
straightforward. Just create your jclouds <a 
href="/start/concepts/">context</a> with the following configuration 
property:</p>
+
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span class="nc">Properties</span> <span 
class="n">overrides</span> <span class="o">=</span> <span class="k">new</span> 
<span class="nc">Properties</span><span class="o">();</span>
+<span class="n">overrides</span><span class="o">.</span><span 
class="na">put</span><span class="o">(</span><span 
class="nc">KeystoneProperties</span><span class="o">.</span><span 
class="na">KEYSTONE_VERSION</span><span class="o">,</span> <span 
class="s">"3"</span><span class="o">);</span></code></pre></figure>
+
+<h3 id="configuring-authentication">Configuring authentication</h3>
+
+<p>Keystone V3 supports several authentication mechanisms, which provide 
authentication tokens with different permissions. It is important to configure 
the correct authentication method, otherwise some operations offered by the 
Keystone API might not be available.</p>
+
+<p>By default, jclouds uses <strong>password authentication with unscoped 
authorization</strong>. Project or domain authorization scopes can be 
configured by setting the <code class="language-plaintext 
highlighter-rouge">KeystoneProperties.SCOPE</code> property when creating your 
jclouds context, for example:</p>
+
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span class="nc">Properties</span> <span 
class="n">overrides</span> <span class="o">=</span> <span class="k">new</span> 
<span class="nc">Properties</span><span class="o">();</span>
+<span class="c1">// Project scoped authorization (can use the project name or 
the ID)</span>
+<span class="n">overrides</span><span class="o">.</span><span 
class="na">put</span><span class="o">(</span><span 
class="nc">KeystoneProperties</span><span class="o">.</span><span 
class="na">SCOPE</span><span class="o">,</span> <span 
class="s">"project:jclouds"</span><span class="o">);</span>
+<span class="n">overrides</span><span class="o">.</span><span 
class="na">put</span><span class="o">(</span><span 
class="nc">KeystoneProperties</span><span class="o">.</span><span 
class="na">SCOPE</span><span class="o">,</span> <span 
class="s">"projectId:2f9b30f706bc45d7923e055567be2e98"</span><span 
class="o">);</span>
+<span class="c1">// Domain scoped authorization (can use the domain name or 
the ID)</span>
+<span class="n">overrides</span><span class="o">.</span><span 
class="na">put</span><span class="o">(</span><span 
class="nc">KeystoneProperties</span><span class="o">.</span><span 
class="na">SCOPE</span><span class="o">,</span> <span 
class="s">"domain:default"</span><span class="o">);</span>
+<span class="n">overrides</span><span class="o">.</span><span 
class="na">put</span><span class="o">(</span><span 
class="nc">KeystoneProperties</span><span class="o">.</span><span 
class="na">SCOPE</span><span class="o">,</span> <span 
class="s">"domainId:2f9b30f706bc45d7923e055567be2e98"</span><span 
class="o">);</span></code></pre></figure>
+
+<p>Credentials in Keystone V3 must include the <code class="language-plaintext 
highlighter-rouge">domain</code> name and the <code class="language-plaintext 
highlighter-rouge">username</code>, as shown above.</p>
+
+<h1 id="using-keystone-v3-apis">Using Keystone V3 APIs</h1>
+
+<p>If you are using <code class="language-plaintext 
highlighter-rouge">openstack-nova</code> or other OpenStack APIs, configuring 
the properties above will suffice. This section describes changes needed only 
if you are using the Keystone API <strong>directly</strong>.</p>
+
+<p>In order to use the <code class="language-plaintext 
highlighter-rouge">openstack-keystone</code> API to connect to Keystone V3, use 
the <code class="language-plaintext 
highlighter-rouge">openstack-keystone-3</code> API ID when creating the 
context. For example:</p>
+
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span class="nc">KeystoneApi</span> <span 
class="n">keystone</span> <span class="o">=</span> <span 
class="nc">ContextBuilder</span><span class="o">.</span><span 
class="na">newBuilder</span><span class="o">(</span><span 
class="s">"openstack-keystone-3"</span><span class="o">)</span>
+   <span class="o">.</span><span class="na">endpoint</span><span 
class="o">(</span><span 
class="s">"http://openstack-keystone/identity/v3";</span><span class="o">)</span>
+   <span class="o">.</span><span class="na">credentials</span><span 
class="o">(</span><span class="s">"domain:admin"</span><span class="o">,</span> 
<span class="s">"password"</span><span class="o">)</span>
+   <span class="o">.</span><span class="na">overrides</span><span 
class="o">(</span><span class="n">overrides</span><span class="o">)</span>
+   <span class="o">.</span><span class="na">modules</span><span 
class="o">(</span><span class="nc">ImmutableSet</span><span 
class="o">.</span><span class="na">of</span><span class="o">(</span><span 
class="k">new</span> <span class="nc">SLF4JLoggingModule</span><span 
class="o">()))</span>
+   <span class="o">.</span><span class="na">buildApi</span><span 
class="o">(</span><span class="nc">KeystoneApi</span><span 
class="o">.</span><span class="na">class</span><span 
class="o">);</span></code></pre></figure>
+
+<h3 id="invoking-keystone-api-methods-that-use-patch-operations">Invoking 
Keystone API methods that use PATCH operations</h3>
+
+<p>In the Keystone V3 API, most of the update operations are carried out by 
sending <code class="language-plaintext highlighter-rouge">PATCH</code> HTTP 
requests. The <code class="language-plaintext highlighter-rouge">PATCH</code> 
verb, however, is not supported by jclouds’ default Java HTTP driver. If you 
plan to use such API methods, you will use an HTTP driver with support for 
<code class="language-plaintext highlighter-rouge">PATCH</code>, such as the <a 
href="https://github.com/jclouds/jclouds/tree/master/drivers/okhttp";>OkHttp</a> 
or <a 
href="https://github.com/jclouds/jclouds/tree/master/drivers/apachehc";>ApacheHC</a>
 drivers.</p>
+
+<p>To configure an HTTP driver, add the corresponding module to the list of 
modules passed to the <code class="language-plaintext 
highlighter-rouge">ContextBuilder</code> when creating your jclouds context. 
For example:</p>
+
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span class="nc">KeystoneApi</span> <span 
class="n">keystone</span> <span class="o">=</span> <span 
class="nc">ContextBuilder</span><span class="o">.</span><span 
class="na">newBuilder</span><span class="o">(</span><span 
class="s">"openstack-keystone-3"</span><span class="o">)</span>
+   <span class="o">.</span><span class="na">endpoint</span><span 
class="o">(</span><span 
class="s">"http://openstack-keystone/identity/v3";</span><span class="o">)</span>
+   <span class="o">.</span><span class="na">credentials</span><span 
class="o">(</span><span class="s">"domain:admin"</span><span class="o">,</span> 
<span class="s">"password"</span><span class="o">)</span>
+   <span class="o">.</span><span class="na">overrides</span><span 
class="o">(</span><span class="n">overrides</span><span class="o">)</span>
+   <span class="o">.</span><span class="na">modules</span><span 
class="o">(</span><span class="nc">ImmutableSet</span><span 
class="o">.</span><span class="na">of</span><span class="o">(</span><span 
class="k">new</span> <span class="nc">SLF4JLoggingModule</span><span 
class="o">(),</span> <span class="k">new</span> <span 
class="nc">OkHttpCommandExecutorServiceModule</span><span class="o">()))</span> 
<span class="c1">// use OkHttp driver</span>
+   <span class="o">.</span><span class="na">buildApi</span><span 
class="o">(</span><span class="nc">KeystoneApi</span><span 
class="o">.</span><span class="na">class</span><span 
class="o">);</span></code></pre></figure>
+
+<h1 id="notes-and-breaking-changes">Notes and breaking changes</h1>
+
+<p>Supporting both the V2 and V3 Keystone APIs required a major refactor of 
the <code class="language-plaintext 
highlighter-rouge">openstack-keystone</code> API. Many packages and classes 
have been renamed, moved and deleted as a result. If your code uses constants 
or other global classes, you may need to update the following package 
references:</p>
+
+<ul>
+  <li>Class <code class="language-plaintext 
highlighter-rouge">KeystoneProperties</code> has been moved to <code 
class="language-plaintext 
highlighter-rouge">org.jclouds.openstack.keystone.config</code>.</li>
+  <li>Class <code class="language-plaintext 
highlighter-rouge">CredentialTypes</code> has been moved to <code 
class="language-plaintext 
highlighter-rouge">org.jclouds.openstack.keystone.auth.config</code>.</li>
+  <li>The <code class="language-plaintext 
highlighter-rouge">KeystoneAuthenticationModule</code> and the <code 
class="language-plaintext highlighter-rouge">AuthenticationApiModule</code> 
have been refactored and generalised into:
+    <ul>
+      <li><code class="language-plaintext 
highlighter-rouge">AuthenticationModule</code> - Providing authentication 
services to all OpenStack APIs and providers.</li>
+      <li><code class="language-plaintext 
highlighter-rouge">ServiceCatalogModule</code> - Providing endpoint resolution 
to all OpenStack APIs and providers.</li>
+    </ul>
+  </li>
+</ul>
+
+<p>Use <code class="language-plaintext 
highlighter-rouge">AuthenticationModule</code> and <code 
class="language-plaintext highlighter-rouge">ServiceCatalogModule</code> when 
developing OpenStack APIs.</p>
+
+            
+            <div id="comments">
+                <hr/>
+                <div id="disqus_thread"></div>
+<script type="text/javascript">
+var disqus_shortname = 'jclouds';
+/* * * DON'T EDIT BELOW THIS LINE * * */
+(function() {
+    var dsq = document.createElement('script'); dsq.type = 'text/javascript'; 
dsq.async = true;
+    dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
+    (document.getElementsByTagName('head')[0] || 
document.getElementsByTagName('body')[0]).appendChild(dsq);
+})();
+</script>
+<noscript>Please enable JavaScript to view the <a 
href="https://disqus.com/?ref_noscript";>Comments powered by 
Disqus.</a></noscript>
+<a href="https://disqus.com"; class="dsq-brlink">Comments powered by <span 
class="logo-disqus">Disqus</span></a>
+
+            </div>
+            
+            <div class="row clearfix">
+                <div id="footer" class="col-md-12 column">
+                    <div id="footer">
+    <hr/>
+    <div class="row clearfix">
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" href="/start/">Getting Started</a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" href="/reference/report-a-bug/">Report 
a Bug</a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a 
href="https://github.com/apache/jclouds-site/edit/master/_posts/2018-01-16-keystone-v3.md";>Fix
 This Page</a><a class="text-primary" 
href="https://cwiki.apache.org/confluence/display/JCLOUDS/How+to+Contribute+Documentation";><sup>*</sup></a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" 
href="https://cwiki.apache.org/confluence/display/JCLOUDS/How+to+Contribute";>Contribute
 Code</a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" href="/community/">Contact Us</a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" 
href="https://twitter.com/jclouds";>Follow Us</a>
+            </p>
+        </div>
+    </div>
+    <hr style="margin-top: 10px"/>
+    <div class="row clearfix">
+        <div class="col-md-12 column">
+            <p class="text-center">
+              Copyright &copy; 2011-2014 <a href="https://www.apache.org";>The 
Apache Software Foundation</a>. All Rights Reserved.
+              <a 
href="https://privacy.apache.org/policies/privacy-policy-public.html";>Privacy 
policy</a>.
+            </p>
+            <p class="text-center">
+              Apache, jclouds, Apache jclouds, the jclouds logo, and the 
Apache feather logos are registered trademarks or trademarks of the Apache 
Software Foundation.
+            </p>
+            <p class="text-center">
+              <img src="/img/Apache_Logo.png" height="120" />
+            </p>
+            <p class="text-center">
+                <a href="https://donate.apache.org/"; title="Support Apache">
+                    <img src="/img/support-apache.png" height="120" />
+                </a>
+            </p>
+            <br/>
+        </div>
+    </div>
+</div>
+
+                </div>
+            </div>
+        </div>
+    </body>
+</html>

Added: jclouds/site-content/blog/2018/02/06/nova-neutron.html
URL: 
http://svn.apache.org/viewvc/jclouds/site-content/blog/2018/02/06/nova-neutron.html?rev=1923693&view=auto
==============================================================================
--- jclouds/site-content/blog/2018/02/06/nova-neutron.html (added)
+++ jclouds/site-content/blog/2018/02/06/nova-neutron.html Mon Feb 10 07:25:53 
2025
@@ -0,0 +1,287 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+<title>Apache jclouds&reg; :: Introducing context linking & Neutron support 
for Nova</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="description" content="">
+<meta name="author" content="">
+
+<!--link rel="stylesheet/less" href="less/bootstrap.less" type="text/css" /-->
+<!--link rel="stylesheet/less" href="less/responsive.less" type="text/css" /-->
+<!--script src="js/less-1.3.3.min.js"></script-->
+<!--append ‘#!watch’ to the browser URL, then refresh the page. -->
+
+<link href="/css/bootstrap.min.css" rel="stylesheet">
+<link href="/css/style.css" rel="stylesheet">
+<link href="/css/syntax.css" rel="stylesheet">
+
+<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
+<!--[if lt IE 9]>
+<script src="js/html5shiv.js"></script>
+<![endif]-->
+
+<!-- Fav and touch icons -->
+<!--
+<link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="/img/apple-touch-icon-144-precomposed.png">
+<link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="/img/apple-touch-icon-114-precomposed.png">
+<link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="/img/apple-touch-icon-72-precomposed.png">
+<link rel="apple-touch-icon-precomposed" 
href="/img/apple-touch-icon-57-precomposed.png">
+-->
+<link rel="shortcut icon" href="/favicon.ico">
+
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" 
title="Blog Posts Feed">
+<link rel="alternate" type="application/atom+xml" 
href="/releasenotes/atom.xml" title="Release Notes Feed">
+
+<script type="text/javascript" src="/js/jquery.min.js"></script>
+<script type="text/javascript" src="/js/bootstrap.min.js"></script>
+<script type="text/javascript" src="/js/toc.js"></script>
+
+
+    </head>
+    <body>
+        <nav class="navbar navbar-default navbar-fixed-top" role="navigation">
+    <div class="container">
+        <div class="navbar-header">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" 
data-target="#bs-example-navbar-collapse-1">
+                <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="/">Apache jclouds &reg;</a>
+        </div>
+
+        <div class="collapse navbar-collapse" 
id="bs-example-navbar-collapse-1">
+            <ul class="nav navbar-nav">
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" 
data-toggle="dropdown">Getting Started<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <li><a href="/start/what-is-jclouds/">What Is Apache 
jclouds?</a></li>
+                        <li><a href="/start/install/">Installation 
Guide</a></li>
+                        <li class="divider"></li>
+                        <li><a href="/start/concepts/">Core Concepts</a></li>
+                        <li><a href="/start/compute/">ComputeService</a></li>
+                        <li><a href="/start/blobstore/">BlobStore</a></li>
+                        <li><a 
href="https://github.com/apache/jclouds-examples";>Examples</a></li>
+                    </ul>
+                </li>
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" 
data-toggle="dropdown">Documentation<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <li><a href="/reference/providers/">Cloud 
Providers</a></li>
+                        <li><a href="/guides">User Guides</a></li>
+                        <li><a 
href="/reference/troubleshooting/">Troubleshooting</a></li>
+                        <li><a 
href="/reference/configuration/">Configuration</a></li>
+                        <li><a href="/reference/logging/">Logging</a></li>
+                        <li><a href="/reference/javadoc/">Javadoc</a></li>
+                        <li class="divider"></li>
+                        <li class="dropdown-header">Developer Guides</li>
+                        <li><a 
href="https://cwiki.apache.org/confluence/display/JCLOUDS/";>Wiki</a></li>
+                    </ul>
+                </li>
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" 
data-toggle="dropdown">Community<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <li><a href="/community/">Get In Touch!</a></li>
+                        <li><a href="/community/users/">Who Is Using 
jclouds?</a></li>
+                        <li class="divider"></li>
+                        <li class="dropdown-header">Contribute</li>
+                        <li><a href="/reference/report-a-bug/">Report a 
Bug</a></li>
+                        <li><a 
href="https://ci-builds.apache.org/job/JClouds/";>Continuous Integration</a></li>
+                        <li><a 
href="https://cwiki.apache.org/confluence/display/JCLOUDS/How+to+Contribute";>How
 To Contribute Code</a></li>
+                        <li><a 
href="https://cwiki.apache.org/confluence/display/JCLOUDS/How+to+Contribute+Documentation";>How
 To Contribute Documentation</a></li>
+                    </ul>
+                </li>
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" 
data-toggle="dropdown">About Apache<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <li><a href="https://www.apache.org";>The Apache 
Software Foundation</a></li>
+                        <li><a 
href="https://www.apache.org/licenses/";>License</a></li>
+                        <li><a 
href="https://www.apache.org/foundation/contributing.html";>Donations</a></li>
+                        <li><a 
href="https://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li>
+                        <li><a 
href="https://www.apache.org/security/";>Security</a></li>
+                        <li><a 
href="https://www.apache.org/foundation/thanks.html";>Thanks</a></li>
+                        <li class="divider"></li>
+                        <li class="dropdown-header">Apache Events</li>
+                        <li><a 
href="https://www.apache.org/events/current-event.html";><img 
src="https://www.apache.org/events/current-event-234x60.png"/></a></li>
+                    </ul>
+                </li>
+                <li><a href="/blog">Blog</a></li>
+            </ul>
+            <ul class="nav navbar-nav navbar-right">
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" 
data-toggle="dropdown">Release Notes<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <!-- only keep the release notes for supported 
versions in this list -->
+                        <li><a href="/releasenotes/2.5.0">2.5.0</a></li>
+                        <li><a href="/releasenotes/2.4.0">2.4.0</a></li>
+                        <li><a href="/releasenotes/2.3.0">2.3.0</a></li>
+                        <li><a href="/releasenotes/2.2.1">2.2.1</a></li>
+                        <li><a href="/releasenotes/2.2.0">2.2.0</a></li>
+                        <li><a href="/releasenotes/2.1.3">2.1.3</a></li>
+                        <li><a href="/releasenotes/2.1.2">2.1.2</a></li>
+                        <li><a href="/releasenotes/2.1.1">2.1.1</a></li>
+                        <li><a href="/releasenotes/2.1.0">2.1.0</a></li>
+                        <li><a href="/releasenotes/2.0.3">2.0.3</a></li>
+                        <li><a href="/releasenotes/2.0.2">2.0.2</a></li>
+                        <li><a href="/releasenotes/2.0.1">2.0.1</a></li>
+                        <li><a href="/releasenotes/2.0.0">2.0.0</a></li>
+                        <li class="divider"></li>
+                        <li class="dropdown-header">Previous releases</li>
+                        <li><a href="/releasenotes">Release archive</a></li>
+                    </ul>
+                </li>
+                <li>
+                    <div>
+                        <a class="btn btn-success navbar-btn" 
href="/start/install/">
+                            <span class="glyphicon glyphicon-download"></span>
+                            Install
+                        </a>
+                    </div>
+                </li>
+            </ul>
+        </div>
+    </div>
+</nav>
+
+        <div class="container">
+            <div class="page-header">
+                <h1>Introducing context linking & Neutron support for Nova</h1>
+                <span class="text-muted">06 February 2018, by <a 
href="https://twitter.com/IgnasiBarrera";>Ignasi Barrera</a></span>
+            </div>
+            <p>One of the limitations of some jclouds APIs and Providers is 
that they are isolated libraries that cannot directly interact between them. 
There are scenarios where this would be desirable, such as letting OpenStack 
Nova (compute) use the OpenStack Neutron API (networking) to perform all 
networking related operations. There was no direct way to implement this in the 
jclouds APIs code, and users were left with the responsibility of invoking both 
APIs to have the desired behavior.</p>
+
+<p>Apache jclouds 2.1.0 comes with a <strong>context linking</strong> feature, 
where APIs and providers that have dependencies between them can be 
<em>linked</em> so they can call each other where needed.</p>
+
+<!-- more -->
+
+<h2 id="context-linking">Context Linking</h2>
+
+<p>Linking one API or Provider to another is something that has to be defined 
in the API or Provider itself. It is a mechanism that allows users to inject an 
API or Provider <em>inside</em> a given jclouds context, so the API that 
<em>receives</em> the linked context can use it internally. Linking is not 
supposed to be used to link arbitrary APIs and Providers (that would have no 
effect), but APIs that are <em>prepared</em> to receive linked contexts and 
call its API methods.</p>
+
+<p>For example, in jclouds 2.1.0, OpenStack Nova has been integrated with 
Neutron, and users will be able to link the <code class="language-plaintext 
highlighter-rouge">openstack-nova</code> context to an <code 
class="language-plaintext highlighter-rouge">openstack-neutron</code> one so 
the Nova API can use the Neutron features to manage all networking stuff. On 
the other hand, linking other APIs or providers together may have no effect, as 
the code for those APIs and providers may not expect any linked context. When 
thinking about linking two contexts together, please refer to the docs.</p>
+
+<p>Linking is done at <em>context</em> level, and links are specified in the 
<em>using</em> context and point to the context(s) that it uses. This isolates 
each individual context and allows users to configure an independent set of 
properties for each one without overlapping issues. The <code 
class="language-plaintext highlighter-rouge">ContextLinking.linkContext</code> 
and <code class="language-plaintext 
highlighter-rouge">ContextLinking.linkView</code> helper methods can be used to 
easily link one context or view to another.</p>
+
+<h2 id="linking-openstack-nova-to-neutron">Linking OpenStack Nova to 
Neutron</h2>
+
+<p>The following example shows how to link an OpenStack Nova API to a Neutron 
API context, to leverage Neutron features when provisioning instances with 
Nova:</p>
+
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span class="c1">// Create the connection to OpenStack 
Neutron</span>
+<span class="nc">ApiContext</span><span class="o">&lt;</span><span 
class="nc">NeutronApi</span><span class="o">&gt;</span> <span 
class="n">neutronCtx</span> <span class="o">=</span> <span 
class="nc">ContextBuilder</span><span class="o">.</span><span 
class="na">newBuilder</span><span class="o">(</span><span 
class="s">"openstack-neutron"</span><span class="o">)</span>
+   <span class="o">.</span><span class="na">endpoint</span><span 
class="o">(</span><span class="s">"http://localhost/identity/v3/";</span><span 
class="o">)</span>
+   <span class="o">.</span><span class="na">credentials</span><span 
class="o">(</span><span class="s">"domain:user"</span><span class="o">,</span> 
<span class="s">"password"</span><span class="o">)</span>
+   <span class="o">.</span><span class="na">overrides</span><span 
class="o">(</span><span class="n">neutronProperties</span><span 
class="o">)</span>
+   <span class="o">.</span><span class="na">modules</span><span 
class="o">(</span><span class="nc">ImmutableSet</span><span 
class="o">.</span><span class="na">of</span><span class="o">(</span><span 
class="k">new</span> <span class="nc">SLF4JLoggingModule</span><span 
class="o">()))</span>
+   <span class="o">.</span><span class="na">build</span><span 
class="o">();</span>
+
+<span class="c1">// Create the connection to OpenStack nova and link it to 
Neutron</span>
+<span class="nc">NovaApi</span> <span class="n">nova</span> <span 
class="o">=</span> <span class="nc">ContextBuilder</span><span 
class="o">.</span><span class="na">newBuilder</span><span 
class="o">(</span><span class="s">"openstack-nova"</span><span 
class="o">)</span>
+   <span class="o">.</span><span class="na">endpoint</span><span 
class="o">(</span><span class="s">"http://localhost/identity/v3/";</span><span 
class="o">)</span>
+   <span class="o">.</span><span class="na">credentials</span><span 
class="o">(</span><span class="s">"domain:user"</span><span class="o">,</span> 
<span class="s">"password"</span><span class="o">)</span>
+   <span class="o">.</span><span class="na">overrides</span><span 
class="o">(</span><span class="n">novaProperties</span><span class="o">)</span>
+   <span class="o">.</span><span class="na">modules</span><span 
class="o">(</span><span class="nc">ImmutableSet</span><span 
class="o">.</span><span class="na">of</span><span class="o">(</span>
+               <span class="nc">ContextLinking</span><span 
class="o">.</span><span class="na">linkContext</span><span 
class="o">(</span><span class="n">neutronCtx</span><span class="o">),</span>
+               <span class="k">new</span> <span 
class="nf">SLF4JLoggingModule</span><span class="o">()))</span>
+   <span class="o">.</span><span class="na">buildApi</span><span 
class="o">(</span><span class="nc">NovaApi</span><span class="o">.</span><span 
class="na">class</span><span class="o">);</span></code></pre></figure>
+
+<p>With this configuration the <code class="language-plaintext 
highlighter-rouge">nova</code> API is configured to use the linked <code 
class="language-plaintext highlighter-rouge">neutron</code> for all networking 
operations.</p>
+
+<h2 id="writing-code-that-accepts-a-linked-context">Writing code that accepts 
a linked context</h2>
+
+<p>When writing an API or Provider that needs to use another jclouds API, you 
can easily leverage the context linking feature by injecting the target API as 
follows:</p>
+
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span class="nd">@Inject</span><span class="o">(</span><span 
class="n">optional</span> <span class="o">=</span> <span 
class="kc">true</span><span class="o">)</span>
+<span class="nd">@Named</span><span class="o">(</span><span 
class="s">"openstack-neutron"</span><span class="o">)</span>
+<span class="kd">private</span> <span class="nc">Supplier</span><span 
class="o">&lt;</span><span class="nc">Context</span><span class="o">&gt;</span> 
<span class="n">neutronContextSupplier</span><span 
class="o">;</span></code></pre></figure>
+
+<ul>
+  <li>You must use the <strong>Provider or API id</strong> in the <code 
class="language-plaintext highlighter-rouge">@Named</code> annotation.</li>
+  <li>If the linked context is optional you can declare an optional 
injection.</li>
+</ul>
+
+<p>Then you can access the portble abstraction view or provider-specific API 
from the injected context.</p>
+
+            
+            <div id="comments">
+                <hr/>
+                <div id="disqus_thread"></div>
+<script type="text/javascript">
+var disqus_shortname = 'jclouds';
+/* * * DON'T EDIT BELOW THIS LINE * * */
+(function() {
+    var dsq = document.createElement('script'); dsq.type = 'text/javascript'; 
dsq.async = true;
+    dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
+    (document.getElementsByTagName('head')[0] || 
document.getElementsByTagName('body')[0]).appendChild(dsq);
+})();
+</script>
+<noscript>Please enable JavaScript to view the <a 
href="https://disqus.com/?ref_noscript";>Comments powered by 
Disqus.</a></noscript>
+<a href="https://disqus.com"; class="dsq-brlink">Comments powered by <span 
class="logo-disqus">Disqus</span></a>
+
+            </div>
+            
+            <div class="row clearfix">
+                <div id="footer" class="col-md-12 column">
+                    <div id="footer">
+    <hr/>
+    <div class="row clearfix">
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" href="/start/">Getting Started</a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" href="/reference/report-a-bug/">Report 
a Bug</a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a 
href="https://github.com/apache/jclouds-site/edit/master/_posts/2018-02-06-nova-neutron.md";>Fix
 This Page</a><a class="text-primary" 
href="https://cwiki.apache.org/confluence/display/JCLOUDS/How+to+Contribute+Documentation";><sup>*</sup></a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" 
href="https://cwiki.apache.org/confluence/display/JCLOUDS/How+to+Contribute";>Contribute
 Code</a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" href="/community/">Contact Us</a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" 
href="https://twitter.com/jclouds";>Follow Us</a>
+            </p>
+        </div>
+    </div>
+    <hr style="margin-top: 10px"/>
+    <div class="row clearfix">
+        <div class="col-md-12 column">
+            <p class="text-center">
+              Copyright &copy; 2011-2014 <a href="https://www.apache.org";>The 
Apache Software Foundation</a>. All Rights Reserved.
+              <a 
href="https://privacy.apache.org/policies/privacy-policy-public.html";>Privacy 
policy</a>.
+            </p>
+            <p class="text-center">
+              Apache, jclouds, Apache jclouds, the jclouds logo, and the 
Apache feather logos are registered trademarks or trademarks of the Apache 
Software Foundation.
+            </p>
+            <p class="text-center">
+              <img src="/img/Apache_Logo.png" height="120" />
+            </p>
+            <p class="text-center">
+                <a href="https://donate.apache.org/"; title="Support Apache">
+                    <img src="/img/support-apache.png" height="120" />
+                </a>
+            </p>
+            <br/>
+        </div>
+    </div>
+</div>
+
+                </div>
+            </div>
+        </div>
+    </body>
+</html>


Reply via email to