Modified: jclouds/site-content/blog/atom.xml
URL: 
http://svn.apache.org/viewvc/jclouds/site-content/blog/atom.xml?rev=1923693&r1=1923692&r2=1923693&view=diff
==============================================================================
--- jclouds/site-content/blog/atom.xml (original)
+++ jclouds/site-content/blog/atom.xml Mon Feb 10 07:25:53 2025
@@ -18,57 +18,51 @@
 
 <!-- more -->
 
-
-<h2>Context Linking</h2>
+<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>openstack-nova</code> context 
to an <code>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>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>ContextLinking.linkContext</code> and 
<code>ContextLinking.linkView</code> helper methods can be used to easily link 
one context or view to another.</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>Linking OpenStack Nova to Neutron</h2>
+<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>
 
-<div class="highlight"><pre><code class="java"><span class="c1">// Create the 
connection to OpenStack Neutron</span>
-<span class="n">ApiContext</span><span class="o">&lt;</span><span 
class="n">NeutronApi</span><span class="o">&gt;</span> <span 
class="n">neutronCtx</span> <span class="o">=</span> <span 
class="n">ContextBuilder</span><span class="o">.</span><span 
class="na">newBuilder</span><span class="o">(</span><span 
class="s">&quot;openstack-neutron&quot;</span><span class="o">)</span>
-   <span class="o">.</span><span class="na">endpoint</span><span 
class="o">(</span><span 
class="s">&quot;http://localhost/identity/v3/&quot;</span><span 
class="o">)</span>
-   <span class="o">.</span><span class="na">credentials</span><span 
class="o">(</span><span class="s">&quot;domain:user&quot;</span><span 
class="o">,</span> <span class="s">&quot;password&quot;</span><span 
class="o">)</span>
+<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="n">ImmutableSet</span><span 
class="o">.</span><span class="na">of</span><span class="o">(</span><span 
class="k">new</span> <span class="n">SLF4JLoggingModule</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="n">NovaApi</span> <span class="n">nova</span> <span 
class="o">=</span> <span class="n">ContextBuilder</span><span 
class="o">.</span><span class="na">newBuilder</span><span 
class="o">(</span><span class="s">&quot;openstack-nova&quot;</span><span 
class="o">)</span>
-   <span class="o">.</span><span class="na">endpoint</span><span 
class="o">(</span><span 
class="s">&quot;http://localhost/identity/v3/&quot;</span><span 
class="o">)</span>
-   <span class="o">.</span><span class="na">credentials</span><span 
class="o">(</span><span class="s">&quot;domain:user&quot;</span><span 
class="o">,</span> <span class="s">&quot;password&quot;</span><span 
class="o">)</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="n">ImmutableSet</span><span 
class="o">.</span><span class="na">of</span><span class="o">(</span>
-               <span class="n">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="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="n">NovaApi</span><span class="o">.</span><span 
class="na">class</span><span class="o">);</span>
-</code></pre></div>
-
+   <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>nova</code> API is configured to use the 
linked <code>neutron</code> for all networking operations.</p>
+<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>Writing code that accepts a linked context</h2>
+<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>
 
-<div class="highlight"><pre><code class="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">&quot;openstack-neutron&quot;</span><span class="o">)</span>
-<span class="kd">private</span> <span class="n">Supplier</span><span 
class="o">&lt;</span><span class="n">Context</span><span class="o">&gt;</span> 
<span class="n">neutronContextSupplier</span><span class="o">;</span>
-</code></pre></div>
-
+<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>@Named</code> annotation.</li>
-<li>If the linked context is optional you can declare an optional 
injection.</li>
+  <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>
 ]]></content>
   </entry>
@@ -80,88 +74,76 @@
     <updated>2018-01-16T00:00:00Z</updated>
     <content type="html"><![CDATA[<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>2.1.0</code> release, jclouds will also 
support version 3 of the OpenStack Keystone API!</p>
-
-<!--more-->
-
+<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>openstack-keystone</code> contains the code for both V2 and V3, so all 
jclouds providers and APIs can support both versions.</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>Configuring OpenStack services to use Keystone V3</h1>
+<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>
 
-<div class="highlight"><pre><code class="java"><span 
class="n">Properties</span> <span class="n">overrides</span> <span 
class="o">=</span> <span class="k">new</span> <span 
class="n">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="n">KeystoneProperties</span><span class="o">.</span><span 
class="na">KEYSTONE_VERSION</span><span class="o">,</span> <span 
class="s">&quot;3&quot;</span><span class="o">);</span>
-</code></pre></div>
+<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>Configuring authentication</h3>
+<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>KeystoneProperties.SCOPE</code> property when 
creating your jclouds context, for example:</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>
 
-<div class="highlight"><pre><code class="java"><span 
class="n">Properties</span> <span class="n">overrides</span> <span 
class="o">=</span> <span class="k">new</span> <span 
class="n">Properties</span><span class="o">();</span>
+<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="n">KeystoneProperties</span><span class="o">.</span><span 
class="na">SCOPE</span><span class="o">,</span> <span 
class="s">&quot;project:jclouds&quot;</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="n">KeystoneProperties</span><span class="o">.</span><span 
class="na">SCOPE</span><span class="o">,</span> <span 
class="s">&quot;projectId:2f9b30f706bc45d7923e055567be2e98&quot;</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">"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="n">KeystoneProperties</span><span class="o">.</span><span 
class="na">SCOPE</span><span class="o">,</span> <span 
class="s">&quot;domain:default&quot;</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="n">KeystoneProperties</span><span class="o">.</span><span 
class="na">SCOPE</span><span class="o">,</span> <span 
class="s">&quot;domainId:2f9b30f706bc45d7923e055567be2e98&quot;</span><span 
class="o">);</span>
-</code></pre></div>
-
+<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>domain</code> name and 
the <code>username</code>, as shown above.</p>
+<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>Using Keystone V3 APIs</h1>
+<h1 id="using-keystone-v3-apis">Using Keystone V3 APIs</h1>
 
-<p>If you are using <code>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>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>openstack-keystone</code> API to connect to 
Keystone V3, use the <code>openstack-keystone-3</code> API ID when creating the 
context. For example:</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>
 
-<div class="highlight"><pre><code class="java"><span 
class="n">KeystoneApi</span> <span class="n">keystone</span> <span 
class="o">=</span> <span class="n">ContextBuilder</span><span 
class="o">.</span><span class="na">newBuilder</span><span 
class="o">(</span><span class="s">&quot;openstack-keystone-3&quot;</span><span 
class="o">)</span>
-   <span class="o">.</span><span class="na">endpoint</span><span 
class="o">(</span><span 
class="s">&quot;http://openstack-keystone/identity/v3&quot;</span><span 
class="o">)</span>
-   <span class="o">.</span><span class="na">credentials</span><span 
class="o">(</span><span class="s">&quot;domain:admin&quot;</span><span 
class="o">,</span> <span class="s">&quot;password&quot;</span><span 
class="o">)</span>
+<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="n">ImmutableSet</span><span 
class="o">.</span><span class="na">of</span><span class="o">(</span><span 
class="k">new</span> <span class="n">SLF4JLoggingModule</span><span 
class="o">()))</span>
-   <span class="o">.</span><span class="na">buildApi</span><span 
class="o">(</span><span class="n">KeystoneApi</span><span 
class="o">.</span><span class="na">class</span><span class="o">);</span>
-</code></pre></div>
+   <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>
 
-<h3>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>In the Keystone V3 API, most of the update operations are carried out by 
sending <code>PATCH</code> HTTP requests. The <code>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>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>
 
-<p>To configure an HTTP driver, add the corresponding module to the list of 
modules passed to the <code>ContextBuilder</code> when creating your jclouds 
context. For example:</p>
-
-<div class="highlight"><pre><code class="java"><span 
class="n">KeystoneApi</span> <span class="n">keystone</span> <span 
class="o">=</span> <span class="n">ContextBuilder</span><span 
class="o">.</span><span class="na">newBuilder</span><span 
class="o">(</span><span class="s">&quot;openstack-keystone-3&quot;</span><span 
class="o">)</span>
-   <span class="o">.</span><span class="na">endpoint</span><span 
class="o">(</span><span 
class="s">&quot;http://openstack-keystone/identity/v3&quot;</span><span 
class="o">)</span>
-   <span class="o">.</span><span class="na">credentials</span><span 
class="o">(</span><span class="s">&quot;domain:admin&quot;</span><span 
class="o">,</span> <span class="s">&quot;password&quot;</span><span 
class="o">)</span>
+<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="n">ImmutableSet</span><span 
class="o">.</span><span class="na">of</span><span class="o">(</span><span 
class="k">new</span> <span class="n">SLF4JLoggingModule</span><span 
class="o">(),</span> <span class="k">new</span> <span 
class="n">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="n">KeystoneApi</span><span 
class="o">.</span><span class="na">class</span><span class="o">);</span>
-</code></pre></div>
-
+   <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>Notes and breaking changes</h1>
+<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>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>
+<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>KeystoneProperties</code> has been moved to 
<code>org.jclouds.openstack.keystone.config</code>.</li>
-<li>Class <code>CredentialTypes</code> has been moved to 
<code>org.jclouds.openstack.keystone.auth.config</code>.</li>
-<li>The <code>KeystoneAuthenticationModule</code> and the 
<code>AuthenticationApiModule</code> have been refactored and generalised into:
-
-<ul>
-<li><code>AuthenticationModule</code> - Providing authentication services to 
all OpenStack APIs and providers.</li>
-<li><code>ServiceCatalogModule</code> - Providing endpoint resolution to all 
OpenStack APIs and providers.</li>
-</ul>
-</li>
+  <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>AuthenticationModule</code> and <code>ServiceCatalogModule</code> 
when developing OpenStack APIs.</p>
+<p>Use <code class="language-plaintext 
highlighter-rouge">AuthenticationModule</code> and <code 
class="language-plaintext highlighter-rouge">ServiceCatalogModule</code> when 
developing OpenStack APIs.</p>
 ]]></content>
   </entry>
   
@@ -170,113 +152,96 @@
     <title type="html"><![CDATA[Adding support for arbitrary CPU and RAM to 
ComputeService]]></title>
     <link href="https://jclouds.apache.org/blog/2016/08/22/arbitrary-cpu-ram"/>
     <updated>2016-08-22T00:00:00Z</updated>
-    <content type="html"><![CDATA[<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.</p>
-
-<!--more-->
-
+    <content type="html"><![CDATA[<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>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>How to create a node with custom settings</h3>
+<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>
 
-<p>There are two ways to use the new feature: setting an appropriate value for 
the <code>hardwareId</code> property, or specifying the desired number of 
cores, amount of RAM and, in some cases, disk size via the 
<code>minCores</code>, <code>minRam</code> and <code>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>
 
-<h4>Creating a node with custom settings using the <code>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 user sets the <code>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>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>
 
-<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>hardwareId</code></a> property on your <code>TemplateBuilder</code> 
to a value with the format:</p>
-
-<pre><code>automatic:cores=&lt;num-cores&gt;;ram=&lt;memory-size&gt;
-</code></pre>
+<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>
 
-<div class="highlight"><pre><code class="java"><span class="n">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">&quot;automatic:cores=2;ram=4096&quot;</span><span class="o">)</span>
+<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">&quot;jclouds&quot;</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></div>
-
+<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>
 
-<div class="highlight"><pre><code class="java"><span class="n">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">&quot;automatic:cores=2;ram=4096;disk=100&quot;</span><span 
class="o">)</span>
+<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">&quot;jclouds&quot;</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></div>
-
+<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>AutomaticHardwareIdSpec</code> to more easily 
construct automatic hardware IDs:</p>
+<p>You can use the <code class="language-plaintext 
highlighter-rouge">AutomaticHardwareIdSpec</code> to more easily construct 
automatic hardware IDs:</p>
 
-<div class="highlight"><pre><code class="java"><span class="n">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="n">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="n">Optional</span><span 
class="o">.&lt;</span><span class="n">Float</span><span 
class="o">&gt;</span><span class="n">absent</span><span class="o">())</span>
+<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">&quot;jclouds&quot;</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></div>
+<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>
 
-<h4>Creating a node with custom settings using <code>minCores</code>, 
<code>minRam</code> and <code>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>If the user sets the <code>minCores</code>, <code>minRam</code> and, where 
required, <code>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>
 
-<p>Set the appropriate properties on your <code>TemplateBuilder</code>:</p>
-
-<div class="highlight"><pre><code class="java"><span class="n">Template</span> 
<span class="n">template</span> <span class="o">=</span> <span 
class="n">templateBuilder</span>
+<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">&quot;jclouds&quot;</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></div>
-
+<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>minDisk</code>:</p>
+<p>For providers that need a disk size specification also set <code 
class="language-plaintext highlighter-rouge">minDisk</code>:</p>
 
-<div class="highlight"><pre><code class="java"><span class="n">Template</span> 
<span class="n">template</span> <span class="o">=</span> <span 
class="n">templateBuilder</span>
+<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">&quot;jclouds&quot;</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></div>
+<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>Supported providers</h3>
+<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>
+  <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>
 
-<p>To add this feature to other providers, bind the  
<code>ArbitraryCpuRamTemplateBuilderImpl</code> class in the provider's context 
module:</p>
-
-<div class="highlight"><pre><code class="java"><span 
class="n">bind</span><span class="o">(</span><span 
class="n">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="n">ArbitraryCpuRamTemplateBuilderImpl</span><span 
class="o">.</span><span class="na">class</span><span class="o">);</span>
-</code></pre></div>
+<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>
 
-<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>hardwareId</code> is included.</p>
-
-<h3>Further development</h3>
+<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>AutomaticHardwareSpec</code></strong>: add parsers 
to <code>AutomaticHardwareSpec</code> for further properties that can have 
arbitrary values, such as <code>bootDisk</code> or <code>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>TemplateBuilderImpl</code> for ProfitBricks</strong>: 
add a custom implementation of the <code>TemplateBuilderImpl</code> that fails 
fast if <code>minDisk</code> is not set.</li>
+  <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>Special thanks</h3>
+<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>
 
@@ -285,40 +250,38 @@
   </entry>
   
   <entry>
-    <id>https://jclouds.apache.org/blog/2014/10/25/poodle-and-jclouds</id>
+    <id>https://jclouds.apache.org/blog/2014/10/25/poole-jclouds</id>
     <title type="html"><![CDATA[About POODLE and jclouds]]></title>
-    <link 
href="https://jclouds.apache.org/blog/2014/10/25/poodle-and-jclouds"/>
+    <link href="https://jclouds.apache.org/blog/2014/10/25/poole-jclouds"/>
     <updated>2014-10-25T00:00:00Z</updated>
     <content type="html"><![CDATA[<p><a 
href="http://googleonlinesecurity.blogspot.com.au/2014/10/this-poodle-bites-exploiting-ssl-30.html";>POODLE</a>
 is a recently discovered attack against SSLv3. If the endpoints you are 
communicating with do not support this version of the SSL protocol, this attack 
is not relevant.</p>
 
 <!--more-->
 
+<h3 id="how-does-this-relate-to-jclouds">How does this relate to jclouds?</h3>
 
-<h3>How does this relate to jclouds?</h3>
-
-<p>In all but the three exceptional cases described below, jclouds uses the 
default SSL configuration inherited from the JVM. If you are communicating with 
endpoints that support SSLv3, you can change the SSL configuration inherited by 
jclouds by creating an appropriate <a 
href="http://docs.oracle.com/javase/7/docs/api/javax/net/ssl/SSLContext.html";>SSLContext</a>
 for <a 
href="http://docs.oracle.com/javase/7/docs/api/javax/net/ssl/HttpsURLConnection.html#setSSLSocketFactory(javax.net.ssl.SSLSocketFactory)">HttpsURLConnection</a>.</p>
+<p>In all but the three exceptional cases described below, jclouds uses the 
default SSL configuration inherited from the JVM. If you are communicating with 
endpoints that support SSLv3, you can change the SSL configuration inherited by 
jclouds by creating an appropriate <a 
href="http://docs.oracle.com/javase/7/docs/api/javax/net/ssl/SSLContext.html";>SSLContext</a>
 for <a 
href="http://docs.oracle.com/javase/7/docs/api/javax/net/ssl/HttpsURLConnection.html#setSSLSocketFactory\(javax.net.ssl.SSLSocketFactory\)">HttpsURLConnection</a>.</p>
 
-<h4>jclouds.trust-all-certs</h4>
+<h4 id="jcloudstrust-all-certs">jclouds.trust-all-certs</h4>
 
-<p>If you are running with <code>jclouds.trust-all-certs=true</code>, jclouds 
will configure SSL connection settings explicitly, rather than inheriting them 
from the JVM. This setting is inherently not secure and should not be used if 
you are running in a secure environment.</p>
+<p>If you are running with <code class="language-plaintext 
highlighter-rouge">jclouds.trust-all-certs=true</code>, jclouds will configure 
SSL connection settings explicitly, rather than inheriting them from the JVM. 
This setting is inherently not secure and should not be used if you are running 
in a secure environment.</p>
 
-<h4>Apache HC HTTP driver</h4>
+<h4 id="apache-hc-http-driver">Apache HC HTTP driver</h4>
 
 <p>If you are using the <a 
href="https://github.com/jclouds/jclouds/blob/master/drivers/apachehc/";>Apache 
HC HTTP driver</a>, jclouds will not inherit the SSL configuration from the 
JVM. See <a 
href="https://issues.apache.org/jira/browse/JCLOUDS-759";>JCLOUDS-759</a> for 
details or contact the <a href="/community/">dev list</a> in case of 
questions.</p>
 
-<h4>Azure Compute and FGCP</h4>
+<h4 id="azure-compute-and-fgcp">Azure Compute and FGCP</h4>
 
-<p>If you are using the <a 
href="https://github.com/jclouds/jclouds-labs/tree/master/azurecompute";>Azure 
Compute provider</a> or one of the <a 
href="https://github.com/jclouds/jclouds-labs/tree/jclouds-labs-1.8.1/fgcp-de";>FGCP</a>
 <a 
href="https://github.com/jclouds/jclouds-labs/tree/jclouds-labs-1.8.1/fgcp-au";>providers</a>
 in jclouds-labs, jclouds will not inherit the SSL configuration from the JVM, 
in order to support these providers' key authentication schemes. Please contact 
the <a href="/community/">dev list</a> in case of questions.</p>
+<p>If you are using the <a 
href="https://github.com/jclouds/jclouds-labs/tree/master/azurecompute";>Azure 
Compute provider</a> or one of the <a 
href="https://github.com/jclouds/jclouds-labs/tree/jclouds-labs-1.8.1/fgcp-de";>FGCP</a>
 <a 
href="https://github.com/jclouds/jclouds-labs/tree/jclouds-labs-1.8.1/fgcp-au";>providers</a>
 in jclouds-labs, jclouds will not inherit the SSL configuration from the JVM, 
in order to support these providers’ key authentication schemes. Please 
contact the <a href="/community/">dev list</a> in case of questions.</p>
 
-<h4>More information</h4>
+<h4 id="more-information">More information</h4>
 
 <ul>
-<li>Discussion on the potential impact of POODLE on your applications: <a 
href="https://www.netmeister.org/blog/poodle.html";>https://www.netmeister.org/blog/poodle.html</a></li>
-<li>Question about Java HTTP clients and POODLE: <a 
href="https://stackoverflow.com/questions/26429751/java-http-clients-and-poodle";>https://stackoverflow.com/questions/26429751/java-http-clients-and-poodle</a></li>
-<li>Umbrella jclouds JIRA issue: <a 
href="https://issues.apache.org/jira/browse/JCLOUDS-753";>JCLOUDS-753</a></li>
-<li>Apache HC HTTP driver issue: <a 
href="https://issues.apache.org/jira/browse/JCLOUDS-759";>JCLOUDS-759</a></li>
+  <li>Discussion on the potential impact of POODLE on your applications: <a 
href="https://www.netmeister.org/blog/poodle.html";>https://www.netmeister.org/blog/poodle.html</a></li>
+  <li>Question about Java HTTP clients and POODLE: <a 
href="https://stackoverflow.com/questions/26429751/java-http-clients-and-poodle";>https://stackoverflow.com/questions/26429751/java-http-clients-and-poodle</a></li>
+  <li>Umbrella jclouds JIRA issue: <a 
href="https://issues.apache.org/jira/browse/JCLOUDS-753";>JCLOUDS-753</a></li>
+  <li>Apache HC HTTP driver issue: <a 
href="https://issues.apache.org/jira/browse/JCLOUDS-759";>JCLOUDS-759</a></li>
 </ul>
-
 ]]></content>
   </entry>
   
@@ -330,9 +293,7 @@
     <content type="html"><![CDATA[<p><a 
href="http://events.linuxfoundation.org/events/apachecon-europe";>ApacheCon EU 
2014</a> accepted three jclouds-related talks, including an overview of jclouds 
and detailed discussions of cloud object storage and cloud databases.</p>
 
 <!--more-->
-
-
-<p><br/></p>
+<p><br /></p>
 
 <div class="row clearfix">
 
@@ -346,7 +307,7 @@
 </div>
 
 <div class="col-md-4 column">
-<img src="https://avatars3.githubusercontent.com/u/848247"; width=80 
height="80" class="center-block img-circle"/>
+<img src="https://avatars3.githubusercontent.com/u/848247"; width="80" 
height="80" class="center-block img-circle" />
 <div class="caption">
 <h3 class="text-primary">Cloud storage with Apache jclouds</h3>
 <p><a href="http://gaul.org/";>Andrew Gaul</a> will discuss jclouds support for 
cloud object storage. Andrew will describe how to build applications portable 
between providers and how to scale up in capacity and out to many clients.</p>
@@ -365,10 +326,9 @@
 
 </div>
 
+<p><br /></p>
 
-<p><br/></p>
-
-<p>There will also be several talks on other projects in the jclouds 
ecosystem, such as <a 
href="http://apacheconeu2014.sched.org/?s=apache+stratos";>Apache Stratos</a> or 
<a href="http://apacheconeu2014.sched.org/?s=apache+brooklyn";>Apache Brooklyn 
(incubating)</a>, you might like if you're interested in jclouds.</p>
+<p>There will also be several talks on other projects in the jclouds 
ecosystem, such as <a 
href="http://apacheconeu2014.sched.org/?s=apache+stratos";>Apache Stratos</a> or 
<a href="http://apacheconeu2014.sched.org/?s=apache+brooklyn";>Apache Brooklyn 
(incubating)</a>, you might like if you’re interested in jclouds.</p>
 ]]></content>
   </entry>
   
@@ -381,7 +341,6 @@
 
 <!--more-->
 
-
 <p><a href="https://github.com/rcoedo";>Roman Coedo</a> implemented <a 
href="http://aws.amazon.com/glacier/";>Amazon Glacier</a> support.  
Implementation of this provider presented challenges due to its long retrieval 
times and archive storage semantics.  jclouds 1.8.0 includes Glacier 
support.</p>
 
 <p><a href="https://github.com/hsbhathiya";>Bhathiya Supun</a> implemented <a 
href="https://cloud.google.com/storage/";>Google Cloud Storage</a> support.  
This provider has long been requested by the community and completes jclouds 
support for all major object stores.  jclouds 1.8.1 will include GCS 
support.</p>
@@ -391,63 +350,58 @@
   </entry>
   
   <entry>
-    <id>https://jclouds.apache.org/blog/2014/09/03/better-builders</id>
+    
<id>https://jclouds.apache.org/blog/2014/09/03/better-builders-with-jclouds</id>
     <title type="html"><![CDATA[Better Builders with jclouds!]]></title>
-    <link href="https://jclouds.apache.org/blog/2014/09/03/better-builders"/>
+    <link 
href="https://jclouds.apache.org/blog/2014/09/03/better-builders-with-jclouds"/>
     <updated>2014-09-03T00:00:00Z</updated>
     <content type="html"><![CDATA[<p>If you are a new <a 
href="jclouds.apache.org">jclouds</a> developer, or even if you are already 
developing jclouds support for any of the OpenStack or Rackspace APIs, you have 
likely seen the domain classes that are used throughout the the jclouds 
codebase.
 These classes are used to represent OpenStack resources, particularly the JSON 
structures supported by OpenStack APIs.</p>
 
 <!--more-->
 
-
 <p>For example, when listing database users in openstack-trove (the OpenStack 
database API), the service returns a JSON response body describing the existing 
users. This JSON might look something like this:</p>
 
-<div class="highlight"><pre><code class="json"><span class="p">{</span>
-    <span class="nt">&quot;users&quot;</span><span class="p">:</span> <span 
class="p">[</span>
-        <span class="p">{</span>
-            <span class="nt">&quot;databases&quot;</span><span 
class="p">:</span> <span class="p">[],</span>
-            <span class="nt">&quot;host&quot;</span><span class="p">:</span> 
<span class="s2">&quot;%&quot;</span><span class="p">,</span> 
-            <span class="nt">&quot;name&quot;</span><span class="p">:</span> 
<span class="s2">&quot;dbuser1&quot;</span>
-        <span class="p">},</span> 
-        <span class="p">{</span>
-            <span class="nt">&quot;databases&quot;</span><span 
class="p">:</span> <span class="p">[</span>
-                <span class="p">{</span>
-                    <span class="nt">&quot;name&quot;</span><span 
class="p">:</span> <span class="s2">&quot;databaseB&quot;</span>
-                <span class="p">},</span> 
-                <span class="p">{</span>
-                    <span class="nt">&quot;name&quot;</span><span 
class="p">:</span> <span class="s2">&quot;databaseC&quot;</span>
-                <span class="p">}</span>
-            <span class="p">],</span>
-            <span class="nt">&quot;host&quot;</span><span class="p">:</span> 
<span class="s2">&quot;%&quot;</span><span class="p">,</span>
-            <span class="nt">&quot;name&quot;</span><span class="p">:</span> 
<span class="s2">&quot;dbuser2&quot;</span>
-        <span class="p">},</span> 
-        <span class="p">{</span>
-            <span class="nt">&quot;databases&quot;</span><span 
class="p">:</span> <span class="p">[],</span> 
-            <span class="nt">&quot;name&quot;</span><span class="p">:</span> 
<span class="s2">&quot;dbuser3&quot;</span><span class="p">,</span>
-            <span class="nt">&quot;host&quot;</span><span class="p">:</span> 
<span class="s2">&quot;%&quot;</span>
-        <span class="p">},</span> 
-        <span class="p">{</span>
-            <span class="nt">&quot;databases&quot;</span><span 
class="p">:</span> <span class="p">[</span>
-                <span class="p">{</span>
-                    <span class="nt">&quot;name&quot;</span><span 
class="p">:</span> <span class="s2">&quot;sampledb&quot;</span>
-                <span class="p">}</span>
-            <span class="p">],</span>
-            <span class="nt">&quot;host&quot;</span><span class="p">:</span> 
<span class="s2">&quot;%&quot;</span><span class="p">,</span>
-            <span class="nt">&quot;name&quot;</span><span class="p">:</span> 
<span class="s2">&quot;demouser&quot;</span>
-        <span class="p">}</span>
-    <span class="p">]</span>
-<span class="p">}</span>
-</code></pre></div>
-
+<figure class="highlight"><pre><code class="language-json" 
data-lang="json"><span class="p">{</span><span class="w">
+    </span><span class="nl">"users"</span><span class="p">:</span><span 
class="w"> </span><span class="p">[</span><span class="w">
+        </span><span class="p">{</span><span class="w">
+            </span><span class="nl">"databases"</span><span 
class="p">:</span><span class="w"> </span><span class="p">[],</span><span 
class="w">
+            </span><span class="nl">"host"</span><span class="p">:</span><span 
class="w"> </span><span class="s2">"%"</span><span class="p">,</span><span 
class="w"> 
+            </span><span class="nl">"name"</span><span class="p">:</span><span 
class="w"> </span><span class="s2">"dbuser1"</span><span class="w">
+        </span><span class="p">},</span><span class="w"> 
+        </span><span class="p">{</span><span class="w">
+            </span><span class="nl">"databases"</span><span 
class="p">:</span><span class="w"> </span><span class="p">[</span><span 
class="w">
+                </span><span class="p">{</span><span class="w">
+                    </span><span class="nl">"name"</span><span 
class="p">:</span><span class="w"> </span><span 
class="s2">"databaseB"</span><span class="w">
+                </span><span class="p">},</span><span class="w"> 
+                </span><span class="p">{</span><span class="w">
+                    </span><span class="nl">"name"</span><span 
class="p">:</span><span class="w"> </span><span 
class="s2">"databaseC"</span><span class="w">
+                </span><span class="p">}</span><span class="w">
+            </span><span class="p">],</span><span class="w">
+            </span><span class="nl">"host"</span><span class="p">:</span><span 
class="w"> </span><span class="s2">"%"</span><span class="p">,</span><span 
class="w">
+            </span><span class="nl">"name"</span><span class="p">:</span><span 
class="w"> </span><span class="s2">"dbuser2"</span><span class="w">
+        </span><span class="p">},</span><span class="w"> 
+        </span><span class="p">{</span><span class="w">
+            </span><span class="nl">"databases"</span><span 
class="p">:</span><span class="w"> </span><span class="p">[],</span><span 
class="w"> 
+            </span><span class="nl">"name"</span><span class="p">:</span><span 
class="w"> </span><span class="s2">"dbuser3"</span><span 
class="p">,</span><span class="w">
+            </span><span class="nl">"host"</span><span class="p">:</span><span 
class="w"> </span><span class="s2">"%"</span><span class="w">
+        </span><span class="p">},</span><span class="w"> 
+        </span><span class="p">{</span><span class="w">
+            </span><span class="nl">"databases"</span><span 
class="p">:</span><span class="w"> </span><span class="p">[</span><span 
class="w">
+                </span><span class="p">{</span><span class="w">
+                    </span><span class="nl">"name"</span><span 
class="p">:</span><span class="w"> </span><span 
class="s2">"sampledb"</span><span class="w">
+                </span><span class="p">}</span><span class="w">
+            </span><span class="p">],</span><span class="w">
+            </span><span class="nl">"host"</span><span class="p">:</span><span 
class="w"> </span><span class="s2">"%"</span><span class="p">,</span><span 
class="w">
+            </span><span class="nl">"name"</span><span class="p">:</span><span 
class="w"> </span><span class="s2">"demouser"</span><span class="w">
+        </span><span class="p">}</span><span class="w">
+    </span><span class="p">]</span><span class="w">
+</span><span class="p">}</span></code></pre></figure>
 
-<p>To parse the response, jclouds uses <a 
href="https://github.com/jclouds/jclouds/blob/master/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/domain/User.java";>domain
 classes</a> to represent the JSON data returned by the service. The array of 
"users" is unwrapped into individual User domain objects. Conversely, when 
creating users, domain objects are transformed into a JSON request body.</p>
+<p>To parse the response, jclouds uses <a 
href="https://github.com/jclouds/jclouds/blob/master/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/domain/User.java";>domain
 classes</a> to represent the JSON data returned by the service. The array of 
“users” is unwrapped into individual User domain objects. Conversely, when 
creating users, domain objects are transformed into a JSON request body.</p>
 
 <p>Because of the relative simplicity of user creation in trove, jclouds 
developers can use a create method in the features package without having to 
build an instance of the User class. For example, the developer might use a 
method such as</p>
 
-<div class="highlight"><pre><code class="java"><span class="kt">boolean</span> 
<span class="nf">create</span><span class="o">(</span><span 
class="n">String</span> <span class="n">userName</span><span class="o">,</span> 
<span class="n">String</span> <span class="n">password</span><span 
class="o">,</span> <span class="n">String</span> <span 
class="n">databaseName</span><span class="o">);</span>
-</code></pre></div>
-
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span class="kt">boolean</span> <span 
class="nf">create</span><span class="o">(</span><span class="nc">String</span> 
<span class="n">userName</span><span class="o">,</span> <span 
class="nc">String</span> <span class="n">password</span><span 
class="o">,</span> <span class="nc">String</span> <span 
class="n">databaseName</span><span class="o">);</span></code></pre></figure>
 
 <p>In this case, it was easy to add support for this call by using a <a 
href="https://github.com/jclouds/jclouds/blob/master/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/binders/BindCreateUserToJson.java";>map
 binder</a>.</p>
 
@@ -456,29 +410,27 @@ These classes are used to represent Open
 <p>Current implementations have the following two issues :</p>
 
 <ol>
-<li>Heavy use of map-binders and parsers to transform JSON. Map-binders use  
annotation-selected classes to map method data (such as the data in the 
create-user call above) to the JSON required by the service. The <a 
href="https://github.com/jclouds/jclouds-labs-openstack/blob/master/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParseNetworkDetails.java";>parsers</a>
 apply the reverse transformation: from JSON to domain objects.</li>
-<li>Lack of consistent, concise, and user-friendly way to use domain objects 
in create/update/list methods.</li>
+  <li>Heavy use of map-binders and parsers to transform JSON. Map-binders use  
annotation-selected classes to map method data (such as the data in the 
create-user call above) to the JSON required by the service. The <a 
href="https://github.com/jclouds/jclouds-labs-openstack/blob/master/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParseNetworkDetails.java";>parsers</a>
 apply the reverse transformation: from JSON to domain objects.</li>
+  <li>Lack of consistent, concise, and user-friendly way to use domain objects 
in create/update/list methods.</li>
 </ol>
 
-
 <p>In addition to fixing these issues, jclouds wants to provide developers 
with some compiler checks and other syntactic sugar (fluent builders), while 
also supporting different updating, creating, or listing validation 
strategies.</p>
 
 <p>We want to</p>
 
 <ol>
-<li>Ensure object immutability.</li>
-<li>Utilize the fluent builder pattern.</li>
-<li>Ensure that "create" objects can only be used for create; update for 
update; and listed resources cannot be directly sent back to the service.</li>
-<li>Reuse code and keep domain classes <a 
href="http://en.wikipedia.org/wiki/Don't_repeat_yourself">DRY</a>.</li>
-<li>Allow using different validation strategies (for example, create vs 
update).</li>
+  <li>Ensure object immutability.</li>
+  <li>Utilize the fluent builder pattern.</li>
+  <li>Ensure that “create” objects can only be used for create; update for 
update; and listed resources cannot be directly sent back to the service.</li>
+  <li>Reuse code and keep domain classes <a 
href="http://en.wikipedia.org/wiki/Don't_repeat_yourself">DRY</a>.</li>
+  <li>Allow using different validation strategies (for example, create vs 
update).</li>
 </ol>
 
-
 <p>We have been able to identify a pattern that addresses these issues. Here 
is some <a 
href="https://github.com/jclouds/jclouds-labs-openstack/blob/master/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/domain/Router.java";>sample
 code</a>.</p>
 
 <p>This approach reuses code by having <a 
href="https://code.google.com/p/google-gson/";>GSON</a> handle the domain 
objects directly, as much as possible, both for serialization and 
deserialization, thus eliminating map-binders and parsers in most cases. The 
domain classes annotate their member variables using the @Named (for 
serialization) and @ConstructorProperties (for deserialization) annotations.</p>
 
-<p>Many of the JSON attributes in Neutron are optional. GSON's jclouds 
configuration supports such optional values by using @Nullable and boxed types. 
An alternate supported method, more convoluted, implements Optional<T> private 
member variables and getter return types.</p>
+<p>Many of the JSON attributes in Neutron are optional. GSON’s jclouds 
configuration supports such optional values by using @Nullable and boxed types. 
An alternate supported method, more convoluted, implements Optional<T> private 
member variables and getter return types.</T></p>
 
 <p>To ensure immutability, users have no access to a constructor or setters, 
and instead they must instantiate domain objects by using a slightly modified 
Builder pattern. The builder pattern also provides proper validation and 
user-friendliness.</p>
 
@@ -487,32 +439,29 @@ These classes are used to represent Open
 <p>In <a 
href="https://github.com/jclouds/jclouds-labs-openstack/blob/master/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/features/NetworkApi.java";>other
 cases</a>, the same domain class has several different purposes, such as 
making sure users have different Network-subtype object instances for updating, 
creating, and listing networks:</p>
 
 <ol>
-<li>Listing networks returns a Network or a list of Networks.</li>
-<li>Updating a network requires Network.UpdateOptions.</li>
-<li>Creating a network requires Network.CreateOptions.</li>
+  <li>Listing networks returns a Network or a list of Networks.</li>
+  <li>Updating a network requires Network.UpdateOptions.</li>
+  <li>Creating a network requires Network.CreateOptions.</li>
 </ol>
 
-
 <p>CreateOptions and UpdateOptions extend Network and implement their own copy 
constructors, with custom validation, if needed.</p>
 
 <p>To instantiate these create or update-specific objects, developers have 
access to CreateBuilder and UpdateBuilder, which both extend the regular 
Network builder abstract class. The only code these special builders implement: 
the constructor (taking as parameters any required properties), a build() 
method returning the create or update object, and also self(). The self method 
is needed to make sure we can reuse most of the Builder code, but still be able 
to chain the fluent builder methods.</p>
 
-<p>This is how it all works out from the developer's perspective:</p>
+<p>This is how it all works out from the developer’s perspective:</p>
 
-<div class="highlight"><pre><code class="java"><span 
class="n">Network</span><span class="o">.</span><span 
class="na">CreateOptions</span> <span class="n">createNetwork</span> <span 
class="o">=</span> <span class="n">Network</span><span class="o">.</span><span 
class="na">createOptions</span><span class="o">(</span><span 
class="s">&quot;jclouds-wibble&quot;</span><span class="o">)</span>
-           <span class="o">.</span><span class="na">networkType</span><span 
class="o">(</span><span class="n">NetworkType</span><span 
class="o">.</span><span class="na">LOCAL</span><span class="o">)</span>
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span class="nc">Network</span><span class="o">.</span><span 
class="na">CreateOptions</span> <span class="n">createNetwork</span> <span 
class="o">=</span> <span class="nc">Network</span><span class="o">.</span><span 
class="na">createOptions</span><span class="o">(</span><span 
class="s">"jclouds-wibble"</span><span class="o">)</span>
+           <span class="o">.</span><span class="na">networkType</span><span 
class="o">(</span><span class="nc">NetworkType</span><span 
class="o">.</span><span class="na">LOCAL</span><span class="o">)</span>
            <span class="o">.</span><span class="na">build</span><span 
class="o">();</span>
 
-<span class="n">Network</span> <span class="n">network</span> <span 
class="o">=</span> <span class="n">networkApi</span><span 
class="o">.</span><span class="na">create</span><span class="o">(</span><span 
class="n">createNetwork</span><span class="o">);</span>
+<span class="nc">Network</span> <span class="n">network</span> <span 
class="o">=</span> <span class="n">networkApi</span><span 
class="o">.</span><span class="na">create</span><span class="o">(</span><span 
class="n">createNetwork</span><span class="o">);</span>
 
-<span class="n">Network</span><span class="o">.</span><span 
class="na">UpdateOptions</span> <span class="n">updateNetwork</span> <span 
class="o">=</span> <span class="n">Network</span><span class="o">.</span><span 
class="na">updateOptions</span><span class="o">()</span>
-           <span class="o">.</span><span class="na">name</span><span 
class="o">(</span><span 
class="s">&quot;jclouds-wibble-updated&quot;</span><span class="o">)</span>
-           <span class="o">.</span><span class="na">networkType</span><span 
class="o">(</span><span class="n">NetworkType</span><span 
class="o">.</span><span class="na">LOCAL</span><span class="o">)</span>
+<span class="nc">Network</span><span class="o">.</span><span 
class="na">UpdateOptions</span> <span class="n">updateNetwork</span> <span 
class="o">=</span> <span class="nc">Network</span><span class="o">.</span><span 
class="na">updateOptions</span><span class="o">()</span>
+           <span class="o">.</span><span class="na">name</span><span 
class="o">(</span><span class="s">"jclouds-wibble-updated"</span><span 
class="o">)</span>
+           <span class="o">.</span><span class="na">networkType</span><span 
class="o">(</span><span class="nc">NetworkType</span><span 
class="o">.</span><span class="na">LOCAL</span><span class="o">)</span>
            <span class="o">.</span><span class="na">build</span><span 
class="o">();</span>
 
-<span class="n">networkApi</span><span class="o">.</span><span 
class="na">update</span><span class="o">(</span><span class="s">&quot;some 
id&quot;</span><span class="o">,</span> <span 
class="n">updateNetwork</span><span class="o">);</span>
-</code></pre></div>
-
+<span class="n">networkApi</span><span class="o">.</span><span 
class="na">update</span><span class="o">(</span><span class="s">"some 
id"</span><span class="o">,</span> <span class="n">updateNetwork</span><span 
class="o">);</span></code></pre></figure>
 
 <p>This ensures developers get an easy to understand interface, with 
validation and compiler checks. It also allows jclouds developers to use 
significantly less code when developing complex domain classes that need to be 
reused in list/create/update API calls.</p>
 ]]></content>
@@ -523,18 +472,17 @@ These classes are used to represent Open
     <title type="html"><![CDATA[1 release, 2 committers...a busy week for 
jclouds!]]></title>
     <link 
href="https://jclouds.apache.org/blog/2014/08/04/1-release-2-committers"/>
     <updated>2014-08-04T00:00:00Z</updated>
-    <content type="html"><![CDATA[<p><img class="img-right" 
src="/img/posts/chris-and-andrea.png"/>There's a lot going on this week for the 
jclouds community. Most importantly, we're really pleased to introduce two new 
committers: Andrea Turli and Chris Custine.</p>
+    <content type="html"><![CDATA[<p><img class="img-right" 
src="/img/posts/chris-and-andrea.png" />There’s a lot going on this week for 
the jclouds community. Most importantly, we’re really pleased to introduce 
two new committers: Andrea Turli and Chris Custine.</p>
 
 <!--more-->
 
+<p><a href="https://twitter.com/turlinux";>Andrea</a> has been involved with 
jclouds for quite a while, working previously on the libvirt and vSphere <a 
href="/start/compute/">compute</a> providers. He’s recently brought SoftLayer 
support up to speed and contributed the new <a href="/guides/docker/">Docker 
provider</a>, which is a really exciting addition.</p>
 
-<p><a href="https://twitter.com/turlinux";>Andrea</a> has been involved with 
jclouds for quite a while, working previously on the libvirt and vSphere <a 
href="/start/compute/">compute</a> providers. He's recently brought SoftLayer 
support up to speed and contributed the new <a href="/guides/docker/">Docker 
provider</a>, which is a really exciting addition.</p>
-
-<p><a href="https://twitter.com/ccustine";>Chris</a> also has a lot of prior 
experience with many areas of jclouds, including <a 
href="/guides/chef/">Chef</a> and <a href="/guides/karaf/">Karaf</a>, as well 
as contributing to a number of projects in the surrounding ecosystem. He's 
recently worked on <a href="/guides/openstack">OpenStack</a>, especially on 
getting <a href="/guides/hpcloud/">HP Cloud</a>'s compute and blobstore 
providers back in shape.</p>
+<p><a href="https://twitter.com/ccustine";>Chris</a> also has a lot of prior 
experience with many areas of jclouds, including <a 
href="/guides/chef/">Chef</a> and <a href="/guides/karaf/">Karaf</a>, as well 
as contributing to a number of projects in the surrounding ecosystem. He’s 
recently worked on <a href="/guides/openstack">OpenStack</a>, especially on 
getting <a href="/guides/hpcloud/">HP Cloud</a>’s compute and blobstore 
providers back in shape.</p>
 
-<p>Both Andrea and Chris have been active in the jclouds community too, 
regularly contributing to discussions and helping to answer questions on the 
mailing lists and IRC. We're very glad to have both on board!</p>
+<p>Both Andrea and Chris have been active in the jclouds community too, 
regularly contributing to discussions and helping to answer questions on the 
mailing lists and IRC. We’re very glad to have both on board!</p>
 
-<p>In other news: we've been busy <a 
href="http://markmail.org/thread/7ixght2jgfbu73ok";>getting the 1.8.0 release 
ready</a>, which (advance warning here!) will be the last jclouds release to 
support Java 6. More details to come once the release has been 
finalized...watch this space!</p>
+<p>In other news: we’ve been busy <a 
href="http://markmail.org/thread/7ixght2jgfbu73ok";>getting the 1.8.0 release 
ready</a>, which (advance warning here!) will be the last jclouds release to 
support Java 6. More details to come once the release has been 
finalized…watch this space!</p>
 ]]></content>
   </entry>
   
@@ -543,15 +491,11 @@ These classes are used to represent Open
     <title type="html"><![CDATA[Walk n' Doc Ignite Talk]]></title>
     <link href="https://jclouds.apache.org/blog/2014/07/30/walk-n-doc-ignite"/>
     <updated>2014-07-30T00:00:00Z</updated>
-    <content type="html"><![CDATA[<p><img class="img-right" 
src="/img/posts/ignite-logo.gif"/>At OSCON 2014 I was fortunate enough to be 
selected to give an Ignite talk on the topic of documentation contribution. 
Below is a video from that Ignite. If you'd like to learn more about it, please 
read <a href="/blog/2014/06/25/walk-n-doc">Walk n' Doc</a>.</p>
+    <content type="html"><![CDATA[<p><img class="img-right" 
src="/img/posts/ignite-logo.gif" />At OSCON 2014 I was fortunate enough to be 
selected to give an Ignite talk on the topic of documentation contribution. 
Below is a video from that Ignite. If you’d like to learn more about it, 
please read <a href="/blog/2014/06/25/walk-n-doc">Walk n’ Doc</a>.</p>
 
 <!--more-->
 
-
-
-
-<iframe width="560" height="315" 
src="//www.youtube.com/embed/kP3R6WBbbTY?rel=0" frameborder="0" 
allowfullscreen></iframe>
-
+<iframe width="560" height="315" 
src="//www.youtube.com/embed/kP3R6WBbbTY?rel=0" frameborder="0" 
allowfullscreen=""></iframe>
 ]]></content>
   </entry>
   
@@ -560,213 +504,192 @@ These classes are used to represent Open
     <title type="html"><![CDATA[Walk n' Doc]]></title>
     <link href="https://jclouds.apache.org/blog/2014/06/25/walk-n-doc"/>
     <updated>2014-06-25T00:00:00Z</updated>
-    <content type="html"><![CDATA[<p><img class="img-right" 
src="/img/posts/pedestrian-sign.jpg"/>A common complaint about many open source 
projects is documentation. Insufficient, incorrect, non-existent, hard to find, 
and difficult to update are things we typically all hear. There are a lot of 
different ways to tackle these problems. There's no silver bullet but one of my 
favourite tactics is lowering the barriers for absolutely anyone to walk up and 
contribute documentation.</p>
+    <content type="html"><![CDATA[<p><img class="img-right" 
src="/img/posts/pedestrian-sign.jpg" />A common complaint about many open 
source projects is documentation. Insufficient, incorrect, non-existent, hard 
to find, and difficult to update are things we typically all hear. There are a 
lot of different ways to tackle these problems. There’s no silver bullet but 
one of my favourite tactics is lowering the barriers for absolutely anyone to 
walk up and contribute documentation.</p>
 
 <!--more-->
 
-
-<h2>Lowering the Barriers</h2>
+<h2 id="lowering-the-barriers">Lowering the Barriers</h2>
 
 <p>Lowering the barriers means:</p>
 
 <ol>
-<li>Using a platform conducive to contributions</li>
-<li>Using ubiquitous documentation editors</li>
-<li>Using a common and well understood documentation markup language</li>
-<li>Not requiring your contributors to install and configure tools</li>
-<li>Providing a preview of the updates to make reviews easier</li>
+  <li>Using a platform conducive to contributions</li>
+  <li>Using ubiquitous documentation editors</li>
+  <li>Using a common and well understood documentation markup language</li>
+  <li>Not requiring your contributors to install and configure tools</li>
+  <li>Providing a preview of the updates to make reviews easier</li>
 </ol>
 
+<p>I built a system for the <a href="http://jclouds.apache.org/";>Apache 
jclouds</a> community that lowers these barriers. But before getting into the 
details of exactly how I implemented this, let’s take a look at the process 
of actually making a contribution.</p>
 
-<p>I built a system for the <a href="http://jclouds.apache.org/";>Apache 
jclouds</a> community that lowers these barriers. But before getting into the 
details of exactly how I implemented this, let's take a look at the process of 
actually making a contribution.</p>
-
-<h2>The Process</h2>
+<h2 id="the-process">The Process</h2>
 
 <p>There are 3 actors in this process:</p>
 
 <ul>
-<li>The contributor who wants to improve the jclouds' documentation.</li>
-<li>The reviewer who is most likely a committer on jclouds that will review 
the changes.</li>
-<li>The doc system responsible for building the staging website and making it 
available to the contributor and the reviewer.</li>
+  <li>The contributor who wants to improve the jclouds’ documentation.</li>
+  <li>The reviewer who is most likely a committer on jclouds that will review 
the changes.</li>
+  <li>The doc system responsible for building the staging website and making 
it available to the contributor and the reviewer.</li>
 </ul>
 
-
 <p>This is the process they go through:</p>
 
 <ol>
-<li>The contributor, wanting to make an improvement, clicks on the Fix This 
Page link at the bottom of any page on the jclouds <a 
href="http://jclouds.apache.org/";>website</a> (<a 
href="/img/posts/walk-n-doc-01.png">screenshot</a>).</li>
-<li>The contributor edits the page while GitHub automatically forks the <a 
href="https://github.com/jclouds/jclouds-site/";>jclouds-site repo</a> in the 
background, if necessary (<a 
href="/img/posts/walk-n-doc-02.png">screenshot</a>). Note that the contributor 
needs a GitHub account and will need to be logged in.</li>
-<li>The contributor proposes the edits while GitHub automatically create a 
branch for the commit (<a 
href="/img/posts/walk-n-doc-03.png">screenshot</a>).</li>
-<li>The contributor creates a pull request (<a 
href="/img/posts/walk-n-doc-04.png">screenshot</a>).</li>
-<li>The doc system automatically builds the entire jclouds website with the 
contributor's edits included and comments on the pull request when done (<a 
href="/img/posts/walk-n-doc-05.png">screenshot</a>).</li>
-<li>The doc system automatically uploads the staging jclouds website to <a 
href="http://jclouds.apache.org/guides/rackspace/#files";>Rackspace Cloud 
Files</a> and comments on the pull request with a link to the staging website 
when done (<a href="/img/posts/walk-n-doc-06.png">screenshot</a>).</li>
-<li>The contributor and the reviewer both click on the link to the staging 
website so they can both review the exact same rendered changes (<a 
href="/img/posts/walk-n-doc-07.png">screenshot</a>).</li>
-<li>If the reviewer requests changes, the contributor edits the file(s) within 
the pull request and proposes those edits in an additional commit. The process 
goes back to #5 (<a href="/img/posts/walk-n-doc-08.png">screenshot</a>).</li>
-<li>The reviewer rejoices when the changes look good and merges the pull 
request (<a href="/img/posts/walk-n-doc-09.png">screenshot</a>).</li>
+  <li>The contributor, wanting to make an improvement, clicks on the Fix This 
Page link at the bottom of any page on the jclouds <a 
href="http://jclouds.apache.org/";>website</a> (<a 
href="/img/posts/walk-n-doc-01.png">screenshot</a>).</li>
+  <li>The contributor edits the page while GitHub automatically forks the <a 
href="https://github.com/jclouds/jclouds-site/";>jclouds-site repo</a> in the 
background, if necessary (<a 
href="/img/posts/walk-n-doc-02.png">screenshot</a>). Note that the contributor 
needs a GitHub account and will need to be logged in.</li>
+  <li>The contributor proposes the edits while GitHub automatically create a 
branch for the commit (<a 
href="/img/posts/walk-n-doc-03.png">screenshot</a>).</li>
+  <li>The contributor creates a pull request (<a 
href="/img/posts/walk-n-doc-04.png">screenshot</a>).</li>
+  <li>The doc system automatically builds the entire jclouds website with the 
contributor’s edits included and comments on the pull request when done (<a 
href="/img/posts/walk-n-doc-05.png">screenshot</a>).</li>
+  <li>The doc system automatically uploads the staging jclouds website to <a 
href="http://jclouds.apache.org/guides/rackspace/#files";>Rackspace Cloud 
Files</a> and comments on the pull request with a link to the staging website 
when done (<a href="/img/posts/walk-n-doc-06.png">screenshot</a>).</li>
+  <li>The contributor and the reviewer both click on the link to the staging 
website so they can both review the exact same rendered changes (<a 
href="/img/posts/walk-n-doc-07.png">screenshot</a>).</li>
+  <li>If the reviewer requests changes, the contributor edits the file(s) 
within the pull request and proposes those edits in an additional commit. The 
process goes back to #5 (<a 
href="/img/posts/walk-n-doc-08.png">screenshot</a>).</li>
+  <li>The reviewer rejoices when the changes look good and merges the pull 
request (<a href="/img/posts/walk-n-doc-09.png">screenshot</a>).</li>
 </ol>
 
-

[... 686 lines stripped ...]


Reply via email to