Author: nacx
Date: Mon Apr  1 17:24:50 2019
New Revision: 1856753

URL: http://svn.apache.org/viewvc?rev=1856753&view=rev
Log:
deploy jclouds site content

Added:
    jclouds/site-content/blog/2014/08/04/
    jclouds/site-content/blog/2014/08/04/1-release-2-committers/
    jclouds/site-content/blog/2014/08/04/1-release-2-committers/index.html
    jclouds/site-content/blog/2014/09/03/
    jclouds/site-content/blog/2014/09/03/better-builders/
    jclouds/site-content/blog/2014/09/03/better-builders/index.html
    jclouds/site-content/blog/2018/01/15/
    jclouds/site-content/blog/2018/01/15/keystone-v3/
    jclouds/site-content/blog/2018/01/15/keystone-v3/index.html
    jclouds/site-content/blog/2018/02/05/
    jclouds/site-content/blog/2018/02/05/nova-neutron/
    jclouds/site-content/blog/2018/02/05/nova-neutron/index.html
Removed:
    jclouds/site-content/blog/2014/08/05/
    jclouds/site-content/blog/2014/09/04/
    jclouds/site-content/blog/2018/01/16/
    jclouds/site-content/blog/2018/02/06/
Modified:
    jclouds/site-content/blog/atom.xml
    jclouds/site-content/blog/index.html
    jclouds/site-content/blog/page2/index.html
    jclouds/site-content/guides/dimensiondata/index.html
    jclouds/site-content/releasenotes/2.1.2/index.html
    jclouds/site-content/releasenotes/atom.xml

Added: jclouds/site-content/blog/2014/08/04/1-release-2-committers/index.html
URL: 
http://svn.apache.org/viewvc/jclouds/site-content/blog/2014/08/04/1-release-2-committers/index.html?rev=1856753&view=auto
==============================================================================
--- jclouds/site-content/blog/2014/08/04/1-release-2-committers/index.html 
(added)
+++ jclouds/site-content/blog/2014/08/04/1-release-2-committers/index.html Mon 
Apr  1 17:24:50 2019
@@ -0,0 +1,264 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+<title>Apache jclouds&reg; :: 1 release, 2 committers...a busy week for 
jclouds!</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>
+
+<script type="text/javascript">
+    var _gaq = _gaq || [];
+    _gaq.push(['_setAccount', 'UA-8638379-1']);
+    _gaq.push(['_trackPageview']);
+
+    (function() {
+     var ga = document.createElement('script'); ga.type = 'text/javascript'; 
ga.async = true;
+     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 
'http://www') + '.google-analytics.com/ga.js';
+     var s = document.getElementsByTagName('script')[0]; 
s.parentNode.insertBefore(ga, s);
+     })();
+</script>
+<script type="text/javascript">
+    
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+     (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new 
Date();a=s.createElement(o),
+     
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+     
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+    ga('create', 'UA-47106724-1', 'jclouds.apache.org');
+    ga('send', 'pageview');
+</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="http://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://builds.apache.org/view/J/view/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="http://www.apache.org";>The Apache 
Software Foundation</a></li>
+                        <li><a 
href="http://www.apache.org/licenses/";>License</a></li>
+                        <li><a 
href="http://www.apache.org/foundation/contributing.html";>Donations</a></li>
+                        <li><a 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li>
+                        <li><a 
href="http://www.apache.org/security/";>Security</a></li>
+                        <li><a 
href="http://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.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><a href="/releasenotes/1.9.3">1.9.3</a></li>
+                        <li><a href="/releasenotes/1.9.2">1.9.2</a></li>
+                        <li><a href="/releasenotes/1.9.1">1.9.1</a></li>
+                        <li><a href="/releasenotes/1.9.0">1.9.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>1 release, 2 committers...a busy week for jclouds!</h1>
+                <span class="text-muted">04 August 2014, by <a 
href="http://blog.xebialabs.com/author/aphillips/";>Andrew Phillips</a></span>
+            </div>
+            <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/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>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>
+
+            
+            <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="http://disqus.com/?ref_noscript";>Comments powered by 
Disqus.</a></noscript>
+<a href="http://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/2014-08-04-1-release-2-committers.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="http://www.apache.org";>The 
Apache Software Foundation</a>. All Rights Reserved.
+            </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/2014/09/03/better-builders/index.html
URL: 
http://svn.apache.org/viewvc/jclouds/site-content/blog/2014/09/03/better-builders/index.html?rev=1856753&view=auto
==============================================================================
--- jclouds/site-content/blog/2014/09/03/better-builders/index.html (added)
+++ jclouds/site-content/blog/2014/09/03/better-builders/index.html Mon Apr  1 
17:24:50 2019
@@ -0,0 +1,372 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+<title>Apache jclouds&reg; :: Better Builders with jclouds!</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>
+
+<script type="text/javascript">
+    var _gaq = _gaq || [];
+    _gaq.push(['_setAccount', 'UA-8638379-1']);
+    _gaq.push(['_trackPageview']);
+
+    (function() {
+     var ga = document.createElement('script'); ga.type = 'text/javascript'; 
ga.async = true;
+     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 
'http://www') + '.google-analytics.com/ga.js';
+     var s = document.getElementsByTagName('script')[0]; 
s.parentNode.insertBefore(ga, s);
+     })();
+</script>
+<script type="text/javascript">
+    
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+     (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new 
Date();a=s.createElement(o),
+     
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+     
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+    ga('create', 'UA-47106724-1', 'jclouds.apache.org');
+    ga('send', 'pageview');
+</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="http://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://builds.apache.org/view/J/view/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="http://www.apache.org";>The Apache 
Software Foundation</a></li>
+                        <li><a 
href="http://www.apache.org/licenses/";>License</a></li>
+                        <li><a 
href="http://www.apache.org/foundation/contributing.html";>Donations</a></li>
+                        <li><a 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li>
+                        <li><a 
href="http://www.apache.org/security/";>Security</a></li>
+                        <li><a 
href="http://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.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><a href="/releasenotes/1.9.3">1.9.3</a></li>
+                        <li><a href="/releasenotes/1.9.2">1.9.2</a></li>
+                        <li><a href="/releasenotes/1.9.1">1.9.1</a></li>
+                        <li><a href="/releasenotes/1.9.0">1.9.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>Better Builders with jclouds!</h1>
+                <span class="text-muted">03 September 2014, by Zack 
Shoylev</span>
+            </div>
+            <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>
+
+
+<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>
+
+
+<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>
+
+<p>However, some APIs send or receive significantly more complex JSON 
structures. Recent work on Neutron has shown that there are benefits to 
increased consistency among the domain classes and the OpenStack API calls that 
use them.</p>
+
+<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>
+</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>
+</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>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>
+
+<p>Some <a 
href="https://github.com/jclouds/jclouds-labs-openstack/blob/master/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/domain/AddressPair.java";>simpler
 classes</a> implement the regular fluent builder pattern.</p>
+
+<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>
+</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>
+
+<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>
+           <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="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="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>
+
+
+<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>
+
+            
+            <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="http://disqus.com/?ref_noscript";>Comments powered by 
Disqus.</a></noscript>
+<a href="http://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/2014-09-03-better-builders.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="http://www.apache.org";>The 
Apache Software Foundation</a>. All Rights Reserved.
+            </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/15/keystone-v3/index.html
URL: 
http://svn.apache.org/viewvc/jclouds/site-content/blog/2018/01/15/keystone-v3/index.html?rev=1856753&view=auto
==============================================================================
--- jclouds/site-content/blog/2018/01/15/keystone-v3/index.html (added)
+++ jclouds/site-content/blog/2018/01/15/keystone-v3/index.html Mon Apr  1 
17:24:50 2019
@@ -0,0 +1,336 @@
+<!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>
+
+<script type="text/javascript">
+    var _gaq = _gaq || [];
+    _gaq.push(['_setAccount', 'UA-8638379-1']);
+    _gaq.push(['_trackPageview']);
+
+    (function() {
+     var ga = document.createElement('script'); ga.type = 'text/javascript'; 
ga.async = true;
+     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 
'http://www') + '.google-analytics.com/ga.js';
+     var s = document.getElementsByTagName('script')[0]; 
s.parentNode.insertBefore(ga, s);
+     })();
+</script>
+<script type="text/javascript">
+    
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+     (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new 
Date();a=s.createElement(o),
+     
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+     
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+    ga('create', 'UA-47106724-1', 'jclouds.apache.org');
+    ga('send', 'pageview');
+</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="http://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://builds.apache.org/view/J/view/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="http://www.apache.org";>The Apache 
Software Foundation</a></li>
+                        <li><a 
href="http://www.apache.org/licenses/";>License</a></li>
+                        <li><a 
href="http://www.apache.org/foundation/contributing.html";>Donations</a></li>
+                        <li><a 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li>
+                        <li><a 
href="http://www.apache.org/security/";>Security</a></li>
+                        <li><a 
href="http://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.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><a href="/releasenotes/1.9.3">1.9.3</a></li>
+                        <li><a href="/releasenotes/1.9.2">1.9.2</a></li>
+                        <li><a href="/releasenotes/1.9.1">1.9.1</a></li>
+                        <li><a href="/releasenotes/1.9.0">1.9.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">15 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>2.1.0</code> release, jclouds will also 
support version 3 of the OpenStack Keystone API!</p>
+
+<!--more-->
+
+
+<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>
+
+<h1>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>
+
+
+<h3>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>
+
+<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="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="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>
+
+
+<p>Credentials in Keystone V3 must include the <code>domain</code> name and 
the <code>username</code>, as shown above.</p>
+
+<h1>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>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>
+
+<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>
+   <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>
+
+
+<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>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>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>
+   <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>
+
+
+<h1>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>
+
+<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>
+</ul>
+
+
+<p>Use <code>AuthenticationModule</code> and <code>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="http://disqus.com/?ref_noscript";>Comments powered by 
Disqus.</a></noscript>
+<a href="http://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="http://www.apache.org";>The 
Apache Software Foundation</a>. All Rights Reserved.
+            </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/05/nova-neutron/index.html
URL: 
http://svn.apache.org/viewvc/jclouds/site-content/blog/2018/02/05/nova-neutron/index.html?rev=1856753&view=auto
==============================================================================
--- jclouds/site-content/blog/2018/02/05/nova-neutron/index.html (added)
+++ jclouds/site-content/blog/2018/02/05/nova-neutron/index.html Mon Apr  1 
17:24:50 2019
@@ -0,0 +1,310 @@
+<!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>
+
+<script type="text/javascript">
+    var _gaq = _gaq || [];
+    _gaq.push(['_setAccount', 'UA-8638379-1']);
+    _gaq.push(['_trackPageview']);
+
+    (function() {
+     var ga = document.createElement('script'); ga.type = 'text/javascript'; 
ga.async = true;
+     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 
'http://www') + '.google-analytics.com/ga.js';
+     var s = document.getElementsByTagName('script')[0]; 
s.parentNode.insertBefore(ga, s);
+     })();
+</script>
+<script type="text/javascript">
+    
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+     (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new 
Date();a=s.createElement(o),
+     
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+     
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+    ga('create', 'UA-47106724-1', 'jclouds.apache.org');
+    ga('send', 'pageview');
+</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="http://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://builds.apache.org/view/J/view/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="http://www.apache.org";>The Apache 
Software Foundation</a></li>
+                        <li><a 
href="http://www.apache.org/licenses/";>License</a></li>
+                        <li><a 
href="http://www.apache.org/foundation/contributing.html";>Donations</a></li>
+                        <li><a 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li>
+                        <li><a 
href="http://www.apache.org/security/";>Security</a></li>
+                        <li><a 
href="http://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.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><a href="/releasenotes/1.9.3">1.9.3</a></li>
+                        <li><a href="/releasenotes/1.9.2">1.9.2</a></li>
+                        <li><a href="/releasenotes/1.9.1">1.9.1</a></li>
+                        <li><a href="/releasenotes/1.9.0">1.9.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">05 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>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>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>
+
+<h2>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>
+   <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">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="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="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>
+
+
+<p>With this configuration the <code>nova</code> API is configured to use the 
linked <code>neutron</code> for all networking operations.</p>
+
+<h2>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>
+
+
+<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>
+</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="http://disqus.com/?ref_noscript";>Comments powered by 
Disqus.</a></noscript>
+<a href="http://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="http://www.apache.org";>The 
Apache Software Foundation</a>. All Rights Reserved.
+            </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>

Modified: jclouds/site-content/blog/atom.xml
URL: 
http://svn.apache.org/viewvc/jclouds/site-content/blog/atom.xml?rev=1856753&r1=1856752&r2=1856753&view=diff
==============================================================================
--- jclouds/site-content/blog/atom.xml (original)
+++ jclouds/site-content/blog/atom.xml Mon Apr  1 17:24:50 2019
@@ -8,10 +8,10 @@
 
   
   <entry>
-    <id>https://jclouds.apache.org/blog/2018/02/06/nova-neutron</id>
+    <id>https://jclouds.apache.org/blog/2018/02/05/nova-neutron</id>
     <title type="html"><![CDATA[Introducing context linking & Neutron support 
for Nova]]></title>
-    <link href="https://jclouds.apache.org/blog/2018/02/06/nova-neutron"/>
-    <updated>2018-02-06T00:00:00Z</updated>
+    <link href="https://jclouds.apache.org/blog/2018/02/05/nova-neutron"/>
+    <updated>2018-02-05T00:00:00Z</updated>
     <content type="html"><![CDATA[<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>
@@ -74,10 +74,10 @@
   </entry>
   
   <entry>
-    <id>https://jclouds.apache.org/blog/2018/01/16/keystone-v3</id>
+    <id>https://jclouds.apache.org/blog/2018/01/15/keystone-v3</id>
     <title type="html"><![CDATA[OpenStack Keystone V3 Support]]></title>
-    <link href="https://jclouds.apache.org/blog/2018/01/16/keystone-v3"/>
-    <updated>2018-01-16T00:00:00Z</updated>
+    <link href="https://jclouds.apache.org/blog/2018/01/15/keystone-v3"/>
+    <updated>2018-01-15T00: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>
@@ -391,10 +391,10 @@
   </entry>
   
   <entry>
-    <id>https://jclouds.apache.org/blog/2014/09/04/better-builders</id>
+    <id>https://jclouds.apache.org/blog/2014/09/03/better-builders</id>
     <title type="html"><![CDATA[Better Builders with jclouds!]]></title>
-    <link href="https://jclouds.apache.org/blog/2014/09/04/better-builders"/>
-    <updated>2014-09-04T00:00:00Z</updated>
+    <link href="https://jclouds.apache.org/blog/2014/09/03/better-builders"/>
+    <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>
 
@@ -519,10 +519,10 @@ These classes are used to represent Open
   </entry>
   
   <entry>
-    <id>https://jclouds.apache.org/blog/2014/08/05/1-release-2-committers</id>
+    <id>https://jclouds.apache.org/blog/2014/08/04/1-release-2-committers</id>
     <title type="html"><![CDATA[1 release, 2 committers...a busy week for 
jclouds!]]></title>
-    <link 
href="https://jclouds.apache.org/blog/2014/08/05/1-release-2-committers"/>
-    <updated>2014-08-05T00:00:00Z</updated>
+    <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>
 
 <!--more-->


Reply via email to