You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by ri...@apache.org on 2015/07/31 14:24:01 UTC

svn commit: r1693583 [6/9] - in /incubator/brooklyn/site/v: 0.7.0-incubating/concepts/ 0.7.0-incubating/dev/tips/images/ 0.7.0-incubating/ops/ 0.7.0-incubating/ops/catalog/ 0.7.0-incubating/ops/locations/ 0.7.0-incubating/ops/persistence/ 0.7.0-incubat...

Added: incubator/brooklyn/site/v/latest/ops/troubleshooting/connectivity.html
URL: http://svn.apache.org/viewvc/incubator/brooklyn/site/v/latest/ops/troubleshooting/connectivity.html?rev=1693583&view=auto
==============================================================================
--- incubator/brooklyn/site/v/latest/ops/troubleshooting/connectivity.html (added)
+++ incubator/brooklyn/site/v/latest/ops/troubleshooting/connectivity.html Fri Jul 31 12:23:59 2015
@@ -0,0 +1,880 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+
+
+<head>
+
+    
+<title>Troubleshooting Server Connectivity Issues in the Cloud - Apache Brooklyn (incubating)</title>
+
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+
+<link href="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
+<link href="/v/latest/style/deps/octicons/octicons.css" rel="stylesheet">
+<link href="/v/latest/style/deps/bootstrap-theme.css" rel="stylesheet">
+
+<link rel="stylesheet" href="/v/latest/style/css/code.css" type="text/css" media="screen" />
+
+<link href="/v/latest/style/css/website.css" rel="stylesheet">
+
+<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
+<script src="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
+<script type="text/javascript" src="/v/latest/style/deps/jquery.cookie.js"></script>
+
+
+</head>
+
+
+<body>
+
+<nav class="navbar navbar-default navbar-fixed-top" id="header" role="navigation">
+    <div class="container-and-sidebars">
+
+        <div class="container-sidebar-left feather">
+          <a href="http://www.apache.org/">
+            <img src="/v/latest/style/img/feather.png" alt="[Apache]" width="80" class="flip navbar-feather">
+          </a>
+        </div>
+
+        <div class="container container-between-sidebars top-menu">
+          <div class="container-fluid">
+            <!-- Brand and toggle get grouped for better mobile display -->
+            <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="/"><img src="/v/latest/style/img/apache-brooklyn-logo-244px-wide.png" alt="brooklyn"></a>
+            </div>
+
+            <!-- Collect the nav links, forms, and other content for toggling -->
+            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
+                <ul class="nav navbar-nav navbar-right">
+                  
+                   
+                    <li class="dropdown">
+                        <a href="/learnmore/index.html">learn more</a>
+                        <ul class="dropdown-menu" role="menu">
+                            <li>
+                                <a href="/learnmore/index.html">Learn More</a>
+                            </li>
+                            <li class="divider"></li>
+                            
+                              <li>
+                                
+                                <a href="/learnmore/blueprint-tour.html">Blueprint Tour
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/learnmore/features/index.html">Features
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/learnmore/theory.html">Theory
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/learnmore/catalog/index.html">Browse Catalog
+                                  </a>
+                                
+                              </li>
+                            
+                        </ul>
+                    </li>
+                   
+                  
+                   
+                    <li class="">
+                      <a href="/download/index.html">download</a>
+                    </li>
+                   
+                  
+                   
+                    <li class="">
+                      <a href="/v/latest/start/running.html">get started</a>
+                    </li>
+                   
+                  
+                   
+                    <li class="dropdown active">
+                        <a href="/documentation/index.html">documentation</a>
+                        <ul class="dropdown-menu" role="menu">
+                            <li>
+                                <a href="/documentation/index.html">Documentation</a>
+                            </li>
+                            <li class="divider"></li>
+                            
+                              <li>
+                                
+                                <a href="/v/latest/index.html">User Guide
+                                  </a>
+                                
+                                  <div class="dropdown_section_header"><hr></div>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/v/latest/yaml/creating-yaml.html">YAML Blueprints
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/v/latest/java/index.html">Java Blueprints
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/v/latest/ops/index.html">Operations
+                                  </a>
+                                
+                                  <div class="dropdown_section_header"><hr></div>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/v/latest/dev/index.html">Developer Guide
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                  <div class="dropdown_new_section"><hr></div>
+                                
+                                <a href="/documentation/other-docs.html">Other Resources
+                                  </a>
+                                
+                              </li>
+                            
+                        </ul>
+                    </li>
+                   
+                  
+                   
+                    <li class="dropdown">
+                        <a href="/community/index.html">community</a>
+                        <ul class="dropdown-menu" role="menu">
+                            <li>
+                                <a href="/community/index.html">Community</a>
+                            </li>
+                            <li class="divider"></li>
+                            
+                              <li>
+                                
+                                <a href="/community/mailing-lists.html">Mailing Lists
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/community/irc.html">IRC
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="https://issues.apache.org/jira/browse/BROOKLYN">Bug Tracker (JIRA)
+                                  &nbsp;<span class="octicon octicon-link-external"></span></a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/community/how-to-contribute-docs.html">How to Contribute Documentation
+                                  </a>
+                                
+                              </li>
+                            
+                        </ul>
+                    </li>
+                   
+                  
+                   
+                    <li class="dropdown">
+                        <a href="/developers/index.html">developers</a>
+                        <ul class="dropdown-menu" role="menu">
+                            <li>
+                                <a href="/developers/index.html">Developers</a>
+                            </li>
+                            <li class="divider"></li>
+                            
+                              <li>
+                                
+                                <a href="/developers/how-to-contribute.html">How to Contribute
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/v/latest/dev/index.html">Developer Guide
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/developers/committers/index.html">Committer Guide
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/developers/code-standards.html">Code Standards
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="http://github.com/apache/incubator-brooklyn">GitHub
+                                  &nbsp;<span class="octicon octicon-link-external"></span></a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="https://issues.apache.org/jira/browse/BROOKLYN">Bug Tracker (JIRA)
+                                  &nbsp;<span class="octicon octicon-link-external"></span></a>
+                                
+                              </li>
+                            
+                        </ul>
+                    </li>
+                   
+                  
+                </ul>
+            </div><!-- /.navbar-collapse -->
+          </div><!-- /.container-fluid -->
+        </div><!-- /.container -->
+        
+        <div class="container-sidebar-right">
+          <div class="navbar-sidebar-right-icons">
+            <a href="https://github.com/apache/incubator-brooklyn" class="navbar-icon navbar-icon-shift icon-github"
+              data-toggle="tooltip" data-placement="bottom" title="GitHub: apache/incubator-brooklyn"/>
+            <a href="https://twitter.com/#!/search?q=brooklyncentral" class="navbar-icon navbar-icon-shift icon-twitter"
+              data-toggle="tooltip" data-placement="bottom" title="Twitter: @brooklyncentral"/>
+            <a href="http://webchat.freenode.net/?channels=brooklyncentral" class="navbar-icon icon-irc"
+              data-toggle="tooltip" data-placement="bottom" title="IRC: freenode #brooklyncentral"/>
+            <!-- extra a element seems needed as landing page seems to copy the last element here (!?) 
+            -->
+            <a href="/" style="width: 0px; height: 0px;"></a>
+         </div>
+      </div>
+      
+  </div>
+</nav>
+
+
+<div class="container" id="main_container">
+    <div class="row">
+        <div class="col-md-9" id="content_container">
+            <div id="page_notes"></div>
+            <h1>Troubleshooting Server Connectivity Issues in the Cloud</h1>
+            <p>A common problem when setting up an application in the cloud is getting the basic connectivity right - how
+do I get my service (e.g. a TCP host:port) publicly accessible over the internet?</p>
+
+<p>This varies a lot - e.g. Is the VM public or in a private network? Is the service only accessible through
+a load balancer? Should the service be globally reachable or only to a particular CIDR?</p>
+
+<p>This guide gives some general tips for debugging connectivity issues, which are applicable to a 
+range of different service types. Choose those that are appropriate for your use-case.</p>
+
+<h2 id="vm-reachable">VM reachable</h2>
+<p>If the VM is supposed to be accessible directly (e.g. from the public internet, or if in a private network
+then from a jump host)…</p>
+
+<h3 id="ping">ping</h3>
+<p>Can you <code>ping</code> the VM from the machine you are trying to reach it from?</p>
+
+<p>However, ping is over ICMP. If the VM is unreachable, it could be that the firewall forbids ICMP but still
+lets TCP traffic through.</p>
+
+<h3 id="telnet-to-tcp-port">telnet to TCP port</h3>
+<p>You can check if a given TCP port is reachable and listening using <code>telnet &lt;host&gt; &lt;port&gt;</code>, such as
+<code>telnet www.google.com 80</code>, which gives output like:</p>
+
+<p><code>
+    Trying 31.55.163.219...
+    Connected to www.google.com.
+    Escape character is '^]'.
+</code></p>
+
+<p>If this is very slow to respond, it can be caused by a firewall blocking access. If it is fast, it could
+be that the server is just not listening on that port.</p>
+
+<h3 id="dns-and-routing">DNS and routing</h3>
+<p>If using a hostname rather than IP, then is it resolving to a sensible IP?</p>
+
+<p>Is the route to the server sensible? (e.g. one can hit problems with proxy servers in a corporate
+network, or ISPs returning a default result for unknown hosts).</p>
+
+<p>The following commands can be useful:</p>
+
+<ul>
+  <li><code>host</code> is a DNS lookup utility. e.g. <code>host www.google.com</code>.</li>
+  <li><code>dig</code> stands for “domain information groper”. e.g. <code>dig www.google.com</code>.</li>
+  <li><code>traceroute</code> prints the route that packets take to a network host. e.g. <code>traceroute www.google.com</code>.</li>
+</ul>
+
+<h2 id="service-is-listening">Service is listening</h2>
+
+<h3 id="service-responds">Service responds</h3>
+<p>Try connecting to the service from the VM itself. For example, <code>curl http://localhost:8080</code> for a
+web-service.</p>
+
+<p>On dev/test VMs, don’t be afraid to install the utilities you need such as <code>curl</code>, <code>telnet</code>, <code>nc</code>,
+etc. Cloud VMs often have a very cut-down set of packages installed. For example, execute
+<code>sudo apt-get update; sudo apt-get install -y curl</code> or <code>sudo yum install -y curl</code>.</p>
+
+<h3 id="listening-on-port">Listening on port</h3>
+<p>Check that the service is listening on the port, and on the correct NIC(s).</p>
+
+<p>Execute <code>netstat -antp</code> (or on OS X <code>netstat -antp TCP</code>) to list the TCP ports in use (or use
+<code>-anup</code> for UDP). You should expect to see the something like the output below for a service.</p>
+
+<p><code>
+Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
+tcp        0      0 :::8080                     :::*                        LISTEN      8276/java           
+</code></p>
+
+<p>In this case a Java process with pid 8276 is listening on port 8080. The local address <code>:::8080</code>
+format means all NICs (in IPv6 address format). You may also see <code>0.0.0.0:8080</code> for IPv4 format.
+If it says 127.0.0.1:8080 then your service will most likely not be reachable externally.</p>
+
+<p>Use <code>ip addr show</code> (or the obsolete <code>ifconfig -a</code>) to see the network interfaces on your server.</p>
+
+<p>For <code>netstat</code>, run with <code>sudo</code> to see the pid for all listed ports.</p>
+
+<h2 id="firewalls">Firewalls</h2>
+<p>On Linux, check if <code>iptables</code> is preventing the remote connection. On Windows, check the Windows Firewall.</p>
+
+<p>If it is acceptable (e.g. it is not a server in production), try turning off the firewall temporarily,
+and testing connectivity again. Remember to re-enable it afterwards! On CentOS, this is <code>sudo service
+iptables stop</code>. On Ubuntu, use <code>sudo ufw disable</code>. On Windows, press the Windows key and type ‘Windows
+Firewall with Advanced Security’ to open the firewall tools, then click ‘Windows Firewall Properties’
+and set the firewall state to ‘Off’ in the Domain, Public and Private profiles.</p>
+
+<p>If you cannot temporarily turn off the firewall, then look carefully at the firewall settings. For
+example, execute <code>sudo iptables -n --list</code> and <code>iptables -t nat -n --list</code>.</p>
+
+<h2 id="cloud-firewalls">Cloud firewalls</h2>
+<p>Some clouds offer a firewall service, where ports need to be explicitly listed to be reachable.</p>
+
+<p>For example, [security groups for EC2-classic]
+(http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html#ec2-classic-security-groups)
+have rules for the protocols and ports to be reachable from specific CIDRs.</p>
+
+<p>Check these settings via the cloud provider’s web-console (or API).</p>
+
+<h2 id="quick-test-of-a-listener-port">Quick test of a listener port</h2>
+<p>It can be useful to start listening on a given port, and to then check if that port is reachable.
+This is useful for testing basic connectivity when your service is not yet running, or to a
+different port to compare behaviour, or to compare with another VM in the network.</p>
+
+<p>The <code>nc</code> netcat tool is useful for this. For example, <code>nc -l 0.0.0.0 8080</code> will listen on port
+TCP 8080 on all network interfaces. On another server, you can then run <code>echo hello from client
+| nc &lt;hostname&gt; 8080</code>. If all works well, this will send “hello from client” over the TCP port 8080,
+which will be written out by the <code>nc -l</code> process before exiting.</p>
+
+<p>Similarly for UDP, you use <code>-lU</code>.</p>
+
+<p>You may first have to install <code>nc</code>, e.g. with <code>sudo yum install -y nc</code> or <code>sudo apt-get install netcat</code>.</p>
+
+<h3 id="cloud-load-balancers">Cloud load balancers</h3>
+<p>For some use-cases, it is good practice to use the load balancer service offered by the cloud provider
+(e.g. <a href="http://aws.amazon.com/elasticloadbalancing/">ELB in AWS</a> or the [Cloudstack Load Balancer]
+(http://docs.cloudstack.apache.org/projects/cloudstack-installation/en/latest/network_setup.html#management-server-load-balancing))</p>
+
+<p>The VMs can all be isolated within a private network, with access only through the load balancer service.</p>
+
+<p>Debugging techniques here include ensuring connectivity from another jump server within the private
+network, and careful checking of the load-balancer configuration from the Cloud Provider’s web-console.</p>
+
+<h3 id="dnat">DNAT</h3>
+<p>Use of DNAT is appropriate for some use-cases, where a particular port on a particular VM is to be
+made available.</p>
+
+<p>Debugging connectivity issues here is similar to the steps for a cloud load balancer. Ensure
+connectivity from another jump server within the private network. Carefully check the NAT rules from
+the Cloud Provider’s web-console.</p>
+
+<h3 id="guest-wifi">Guest wifi</h3>
+<p>It is common for guest wifi to restrict access to only specific ports (e.g. 80 and 443, restricting
+ssh over port 22 etc).</p>
+
+<p>Normally your best bet is then to abandon the guest wifi (e.g. to tether to a mobile phone instead).</p>
+
+<p>There are some unconventional workarounds such as <a href="http://askubuntu.com/questions/107173/is-it-possible-to-ssh-through-port-80">configuring sshd to listen on port 80 so you can
+use an ssh tunnel</a>.
+However, the firewall may well inspect traffic so sending non-http traffic over port 80 may still fail.</p>
+
+
+        </div>
+
+        <div class="col-md-3">
+            <div class="list-group side-menu" id="side-menu">
+
+
+
+  
+     
+              
+                  <h4 class=" with_following">
+                    <a href="/v/latest/index.html" class="list-group-item breadcrumb breadcrumb0">
+                      User Guide
+                      </a></h4>
+              
+                  <h4 class=" with_preceding with_following">
+                    <a href="/v/latest/ops/index.html" class="list-group-item breadcrumb breadcrumb1">
+                      Operations
+                      </a></h4>
+              
+                  <h4 class=" with_preceding">
+                    <a href="/v/latest/ops/troubleshooting/index.html" class="list-group-item breadcrumb breadcrumb2">
+                      Troubleshooting
+                      </a></h4>
+              
+              
+                 
+                
+                  
+                  <a href="/v/latest/ops/troubleshooting/overview.html" class="list-group-item">Overview
+                    </a>
+                
+              
+                 
+                
+                  
+                  <a href="/v/latest/ops/troubleshooting/deployment.html" class="list-group-item">Deployment
+                    </a>
+                
+              
+                 
+                
+                  
+                  <a href="/v/latest/ops/troubleshooting/connectivity.html" class="list-group-item active">Server Connectivity
+                    </a>
+                
+              
+                 
+                
+                  
+                  <a href="/v/latest/ops/troubleshooting/softwareprocess.html" class="list-group-item">SoftwareProcess Entities
+                    </a>
+                
+              
+                 
+                
+                  
+                  <a href="/v/latest/ops/troubleshooting/going-deep-in-java-and-logs.html" class="list-group-item">Going Deep in Java and Logs
+                    </a>
+                
+              
+        
+        
+  
+
+        
+</div>
+<div id="width_reference"></div>
+
+
+<script language="JavaScript" type="application/javascript">
+
+ 
+sidemenu_x_sizer=function(){ $('#side-menu').width($('#side-menu').parent().find('#width_reference').outerWidth()); };
+$(sidemenu_x_sizer);
+$(window).resize(sidemenu_x_sizer);
+
+ 
+sidemenu_y_nonfloater=function(){
+  if ($('#side-menu').outerHeight(true) + $('#header').outerHeight(true) + $('#footer').outerHeight(true) > window.innerHeight ||
+      $('#side-menu').width() >= $('#content_container').width()/2) {
+    $('#side-menu').css('position', 'inherit');
+  } else {
+    // restore if screen has grown
+    $('#side-menu').css('position', 'fixed');
+  }
+};
+$(sidemenu_y_nonfloater);
+$(window).resize(sidemenu_y_nonfloater);
+
+ 
+
+var sideMenu = $("#side-menu"),
+    sideItems = sideMenu.find("a"),
+    // Anchors corresponding to menu items
+    scrollItems = sideItems.map(function(){
+      var item = $(this).attr("section-target");
+      if (item && item.length) { return item; }
+    });
+
+var highlight_section_last_top = -1;
+var highlight_section_completed = false;
+
+var highlight_section = function() {
+   // Get container scroll position
+   var highlight_section_new_top = $(this).scrollTop();
+   if (highlight_section_new_top == highlight_section_last_top) return;
+   var highlight_section_new_bottom = highlight_section_new_top + $(window).height();
+   var scroll_advancing = (highlight_section_new_top > highlight_section_last_top);
+
+   var last_item = null, active_item = $("#side-menu a.section#active");
+   
+   var found_top = false;
+   var displayable_items = scrollItems.map(function(itemI){
+     item = $(scrollItems[itemI]);
+     if (item && item.length) {
+       if (highlight_section_last_top == -1 || !highlight_section_completed) {
+         // just opening page - take item matching hash, or otherwise the first item visible
+         if (item.selector === window.location.hash || (item.offset().top > highlight_section_new_top - 20 && !found_top)) {
+           found_top = true;
+           if (item.selector === window.location.hash && item.offset().top < highlight_section_new_top + 60) {
+             // because of our top header, we need to scroll 64px down from any link
+             $('html, body').animate({scrollTop: item.offset().top - 64}, 0);
+           }
+           return item;
+         }
+       } else if (scroll_advancing) {
+         // if scrolling advance, pick up a section when title starts before 1/3 height 
+         if (item.offset().top < highlight_section_new_top + $(window).height()/3)
+           return item;
+           
+         // or if containing div is finished (usu the whole main content)
+         div_containing_item = item.closest("div");
+         if (div_containing_item.offset().top + div_containing_item.height() < highlight_section_new_bottom + 15)
+           return item;
+         // or when next title is visible
+         if (last_item && item.offset().top < highlight_section_new_bottom + 15)
+           return last_item;
+       } else {
+         // if scrolling back, pick up a section as soon as the title is visible,
+         if (item.offset().top < highlight_section_new_top)
+           return item;
+         // or if title is before the 2/3 point
+         // (not sure about this, probably want also to have 
+         // "AND the id.top is <= displayable_itemsrent_active_it.top" so we don't jump FORWARD a section
+         // when scrolling BACK, with lots of tiny sections) 
+         if ((item.offset().top < highlight_section_new_top + 2*$(window).height()/3)
+             && (!active_item || !active_item.offset() || active_item.offset().top >= item.offset().top))
+           return item;
+         
+       }
+       last_item = item;
+     }
+   });
+   if (!highlight_section_completed && document.readyState === "complete") {
+     highlight_section_completed = true;
+   }
+   if (!displayable_items.length) {
+     $("#side-menu a.section").removeClass("active");
+   } else {
+     displayable_items = displayable_items[displayable_items.length-1];
+     var id = displayable_items && displayable_items.length ? displayable_items[0].id : "";
+   // Set/remove active class
+     new_active = $("#side-menu a.section").filter("[section-target='#"+id+"']");
+     if (new_active.hasClass("active")) {
+       // nothing needed
+     } else {
+       $("#side-menu a.section").removeClass("active");
+       $("#side-menu a.section").filter("[section-target='#"+id+"']").addClass("active");
+     }
+   }
+   
+   highlight_section_last_top = highlight_section_new_top;
+};
+var highlight_new_section = function() {
+  highlight_section_completed = false;
+  highlight_section_last_top = -1;
+  highlight_section();
+}
+
+$(window).scroll(highlight_section);
+$(highlight_new_section);
+
+// detect link change - courtesy http://www.bennadel.com/blog/1520-binding-events-to-non-dom-objects-with-jquery.htm
+    (
+        function( $ ){
+            // Default to the current location.
+            var strLocation = window.location.href;
+            var strHash = window.location.hash;
+            var strPrevLocation = "";
+            var strPrevHash = "";
+
+            // This is how often we will be checkint for
+            // changes on the location.
+            var intIntervalTime = 100;
+
+            // This method removes the pound from the hash.
+            var fnCleanHash = function( strHash ){
+                return(
+                    strHash.substring( 1, strHash.length )
+                    );
+            }
+
+            // This will be the method that we use to check
+            // changes in the window location.
+            var fnCheckLocation = function(){
+                // Check to see if the location has changed.
+                if (strLocation != window.location.href){
+
+                    // Store the new and previous locations.
+                    strPrevLocation = strLocation;
+                    strPrevHash = strHash;
+                    strLocation = window.location.href;
+                    strHash = window.location.hash;
+
+                    // The location has changed. Trigger a
+                    // change event on the location object,
+                    // passing in the current and previous
+                    // location values.
+                    $( window.location ).trigger(
+                        "change",
+                        {
+                            currentHref: strLocation,
+                            currentHash: fnCleanHash( strHash ),
+                            previousHref: strPrevLocation,
+                            previousHash: fnCleanHash( strPrevHash )
+                        }
+                        );
+
+                }
+            }
+
+            // Set an interval to check the location changes.
+            setInterval( fnCheckLocation, intIntervalTime );
+        }
+    )( jQuery );
+// and trigger highlight section on link change
+$(window.location).bind("change", highlight_new_section);
+
+</script>
+
+        </div>
+    </div>
+</div>
+
+<div id="footer">
+    <div class="container">
+        <div class="row">
+            <div class="col-md-10 text-muted">
+                Apache Brooklyn is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+                License v2.0</a>.
+                <br />
+                Apache Brooklyn is currently undergoing Incubation at The Apache Software
+                Foundation.
+            </div>
+            <div class="col-md-2">
+                <a class="btn btn-sm btn-default" href="https://github.com/apache/incubator-brooklyn/edit/master/docs/guide/ops/troubleshooting/connectivity.md">Edit This Page</a>
+                <a href="http://0.0.0.0:4000/community/how-to-contribute-docs.html"
+                    data-toggle="tooltip" data-placement="top" title="How to Edit Documentation" data-delay="400"/>
+                  <span class="octicon octicon-question octicon-footer"></span>
+                </a>
+            </div>
+        </div>
+    </div>
+</div>
+
+
+
+
+
+<script src="//cdnjs.cloudflare.com/ajax/libs/zeroclipboard/1.3.1/ZeroClipboard.min.js"></script>
+
+<script language="JavaScript" type="application/javascript">
+    fix_padding_function = function () { 
+        $('body').css('padding-top', parseInt($('#header').css("height"))+10);
+        $('body').css('padding-bottom', parseInt($('#footer').css("height"))+10);
+    };
+    $(window).resize(fix_padding_function);
+    $(window).load(fix_padding_function);
+    
+    $(function () {
+        $('[data-toggle="tooltip"]').tooltip({ delay: { show: 600, hide: 100 }})
+    });
+    
+/* generate anchors for headers, a la github and http://blog.parkermoore.de/2014/08/01/header-anchor-links-in-vanilla-javascript-for-github-pages-and-jekyll/ */
+var anchorForId = function (id, text) {
+  var anchor = document.createElement("a");
+  anchor.className = "header-link";
+  anchor.href      = "#" + id;
+  anchor.innerHTML = "<i class=\"fa fa-link\"></i>";
+  return anchor;
+};
+
+var linkifyAnchors = function (level, containingElement) {
+  var headers = contentBlock.find("h" + level);
+  for (var h = 0; h < headers.length; h++) {
+    var header = headers[h];
+    if (typeof header.id !== "undefined" && header.id !== "") {
+      header.appendChild(anchorForId(header.id, $(header).text()));
+    }
+  }
+};
+
+$(function () {
+    contentBlock = $("#content_container");
+    if (!contentBlock) return;
+    for (var level = 1; level <= 6; level++) {
+      linkifyAnchors(level, contentBlock);
+    }
+});
+
+<!-- Clipboard support -->
+  ZeroClipboard.config({ moviePath: '//cdnjs.cloudflare.com/ajax/libs/zeroclipboard/1.3.1/ZeroClipboard.swf' });
+
+$(function() {
+  $('div.highlight').prepend(
+  $('<div class="clipboard_container" title="Copy to Clipboard">'+
+    '<div class="fa clipboard_button">'+
+    '<div class="on-active"><div>Copied to Clipboard</div></div>'+
+  '</div></div>'));
+  $('div.clipboard_container').each(function(index) {
+    var clipboard = new ZeroClipboard();
+    clipboard.clip( $(this).find(":first")[0], $(this)[0] );
+    var target = $(this).next();
+    var txt = target.text().trim();
+    if (target.find('code.bash')) {
+      // Strip out bash prompts from the start of each line (i.e. '$' or '%' characters
+      // at the very start, or immediately following any newline). Correctly handles continuation
+      // lines, where a leading '$' or '%' is *not* a prompt character.
+      txt = txt.replace(/(^|[^\\]\n)[$%] /g, "$1");
+    }
+    clipboard.on( 'dataRequested', function (client, args) {
+      client.setText( txt );
+    });
+  });
+});
+
+<!-- search -->
+    $(function() {
+        $('#simple_google')
+            .submit(function() {
+                $('input[name="q"]').val("site:" + document.location.hostname + " " + $('input[name="brooklyn-search"]').val());
+            return true;
+            });
+        $('input[name="brooklyn-search"]').focus(function() {
+                if ($(this).val() === $(this).attr('placeholder')) {
+                    $(this).val('');
+                }
+            })
+            .blur(function() {
+                if ($(this).val() === '') {
+                    $(this).val($(this).attr('placeholder'));
+                }
+            })
+            .blur();
+    });
+
+
+ <!-- analytics -->
+    var _gaq = _gaq || [];
+    _gaq.push(['_setAccount', 'UA-30530918-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);
+    })();
+
+
+<!-- page warning (for archive pages) -->
+
+ 
+    $(function() {
+        if (document.location.pathname.replace(/^\/([^\/]*).*$/, '$1') === "v"){
+            var thisversion = document.location.pathname.split("/")[2],
+                msg = "";
+            if (thisversion != 'latest' && (!$.cookie('brooklyn_versions') || 
+                    (($.inArray('ALL', $.cookie('brooklyn_versions').split(",")) === -1) &&
+                    ($.inArray(thisversion, $.cookie('brooklyn_versions').split(",")) === -1))) ){
+                msg += "<div class='warning_banner_image'><img src='/v/latest/style/img/warning.png'/></div>";
+                msg += "<p>You are browsing the archive site for version <strong>"+thisversion+"</strong>.</p>";
+                if (thisversion.indexOf("SNAPSHOT") >= 0) {
+                  msg += "<p>Note that SNAPSHOT versions have not been voted on and are not endorsed by the Apache Software Foundation.</p>";
+                  msg += "<p>Do you understand and accept the risks?</p>";
+                } else {
+                  msg += "<p>Is this deliberate?</p>";
+                }
+                msg += "<center><p class='warning_banner_buttons'>";
+                msg += "<a href = 'javascript:void(0);' onclick=\"set_user_version('"+thisversion+"');\">Yes, hide this warning</a>";
+                msg += "<a href = '/v/latest/'>No, take me to the latest version guide</a>";
+                msg += "<a href = '/meta/versions.html'>Show all versions</a>";
+                msg += "</p></center>"
+                            
+                $('#page_notes').html(msg);
+                $('#page_notes').fadeIn('slow');
+            }
+        }
+    });
+
+    function get_user_versions() {
+        return $.cookie("brooklyn_versions") ? $.cookie("brooklyn_versions").split(",") : [];
+    };
+    function set_user_version(version) {
+        var version_cookie = get_user_versions();
+        version_cookie.push(version);
+        $.cookie('brooklyn_versions', version_cookie, { expires: 365, path: '/' });
+        $('#page_notes').fadeOut();
+        event.preventDefault ? event.preventDefault() : event.returnValue = false;
+    };
+    function set_user_versions_all() {
+        var version_cookie = get_user_versions();
+        version_cookie.push("ALL");
+        $.cookie('brooklyn_versions', version_cookie, { expires: 365, path: '/' });
+        $('#page_notes').fadeOut();
+        event.preventDefault ? event.preventDefault() : event.returnValue = false;
+    };
+    function clear_user_versions() {
+        $.removeCookie('brooklyn_versions', { path: '/' });
+        $('#page_notes').fadeIn('slow');
+        event.preventDefault ? event.preventDefault() : event.returnValue = false;
+    };
+
+</script>
+
+</body>
+
+</html>

Added: incubator/brooklyn/site/v/latest/ops/troubleshooting/deployment.html
URL: http://svn.apache.org/viewvc/incubator/brooklyn/site/v/latest/ops/troubleshooting/deployment.html?rev=1693583&view=auto
==============================================================================
--- incubator/brooklyn/site/v/latest/ops/troubleshooting/deployment.html (added)
+++ incubator/brooklyn/site/v/latest/ops/troubleshooting/deployment.html Fri Jul 31 12:23:59 2015
@@ -0,0 +1,825 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+
+
+<head>
+
+    
+<title>Troubleshooting Deployment - Apache Brooklyn (incubating)</title>
+
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+
+<link href="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
+<link href="/v/latest/style/deps/octicons/octicons.css" rel="stylesheet">
+<link href="/v/latest/style/deps/bootstrap-theme.css" rel="stylesheet">
+
+<link rel="stylesheet" href="/v/latest/style/css/code.css" type="text/css" media="screen" />
+
+<link href="/v/latest/style/css/website.css" rel="stylesheet">
+
+<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
+<script src="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
+<script type="text/javascript" src="/v/latest/style/deps/jquery.cookie.js"></script>
+
+
+</head>
+
+
+<body>
+
+<nav class="navbar navbar-default navbar-fixed-top" id="header" role="navigation">
+    <div class="container-and-sidebars">
+
+        <div class="container-sidebar-left feather">
+          <a href="http://www.apache.org/">
+            <img src="/v/latest/style/img/feather.png" alt="[Apache]" width="80" class="flip navbar-feather">
+          </a>
+        </div>
+
+        <div class="container container-between-sidebars top-menu">
+          <div class="container-fluid">
+            <!-- Brand and toggle get grouped for better mobile display -->
+            <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="/"><img src="/v/latest/style/img/apache-brooklyn-logo-244px-wide.png" alt="brooklyn"></a>
+            </div>
+
+            <!-- Collect the nav links, forms, and other content for toggling -->
+            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
+                <ul class="nav navbar-nav navbar-right">
+                  
+                   
+                    <li class="dropdown">
+                        <a href="/learnmore/index.html">learn more</a>
+                        <ul class="dropdown-menu" role="menu">
+                            <li>
+                                <a href="/learnmore/index.html">Learn More</a>
+                            </li>
+                            <li class="divider"></li>
+                            
+                              <li>
+                                
+                                <a href="/learnmore/blueprint-tour.html">Blueprint Tour
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/learnmore/features/index.html">Features
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/learnmore/theory.html">Theory
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/learnmore/catalog/index.html">Browse Catalog
+                                  </a>
+                                
+                              </li>
+                            
+                        </ul>
+                    </li>
+                   
+                  
+                   
+                    <li class="">
+                      <a href="/download/index.html">download</a>
+                    </li>
+                   
+                  
+                   
+                    <li class="">
+                      <a href="/v/latest/start/running.html">get started</a>
+                    </li>
+                   
+                  
+                   
+                    <li class="dropdown active">
+                        <a href="/documentation/index.html">documentation</a>
+                        <ul class="dropdown-menu" role="menu">
+                            <li>
+                                <a href="/documentation/index.html">Documentation</a>
+                            </li>
+                            <li class="divider"></li>
+                            
+                              <li>
+                                
+                                <a href="/v/latest/index.html">User Guide
+                                  </a>
+                                
+                                  <div class="dropdown_section_header"><hr></div>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/v/latest/yaml/creating-yaml.html">YAML Blueprints
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/v/latest/java/index.html">Java Blueprints
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/v/latest/ops/index.html">Operations
+                                  </a>
+                                
+                                  <div class="dropdown_section_header"><hr></div>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/v/latest/dev/index.html">Developer Guide
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                  <div class="dropdown_new_section"><hr></div>
+                                
+                                <a href="/documentation/other-docs.html">Other Resources
+                                  </a>
+                                
+                              </li>
+                            
+                        </ul>
+                    </li>
+                   
+                  
+                   
+                    <li class="dropdown">
+                        <a href="/community/index.html">community</a>
+                        <ul class="dropdown-menu" role="menu">
+                            <li>
+                                <a href="/community/index.html">Community</a>
+                            </li>
+                            <li class="divider"></li>
+                            
+                              <li>
+                                
+                                <a href="/community/mailing-lists.html">Mailing Lists
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/community/irc.html">IRC
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="https://issues.apache.org/jira/browse/BROOKLYN">Bug Tracker (JIRA)
+                                  &nbsp;<span class="octicon octicon-link-external"></span></a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/community/how-to-contribute-docs.html">How to Contribute Documentation
+                                  </a>
+                                
+                              </li>
+                            
+                        </ul>
+                    </li>
+                   
+                  
+                   
+                    <li class="dropdown">
+                        <a href="/developers/index.html">developers</a>
+                        <ul class="dropdown-menu" role="menu">
+                            <li>
+                                <a href="/developers/index.html">Developers</a>
+                            </li>
+                            <li class="divider"></li>
+                            
+                              <li>
+                                
+                                <a href="/developers/how-to-contribute.html">How to Contribute
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/v/latest/dev/index.html">Developer Guide
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/developers/committers/index.html">Committer Guide
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="/developers/code-standards.html">Code Standards
+                                  </a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="http://github.com/apache/incubator-brooklyn">GitHub
+                                  &nbsp;<span class="octicon octicon-link-external"></span></a>
+                                
+                              </li>
+                            
+                              <li>
+                                
+                                <a href="https://issues.apache.org/jira/browse/BROOKLYN">Bug Tracker (JIRA)
+                                  &nbsp;<span class="octicon octicon-link-external"></span></a>
+                                
+                              </li>
+                            
+                        </ul>
+                    </li>
+                   
+                  
+                </ul>
+            </div><!-- /.navbar-collapse -->
+          </div><!-- /.container-fluid -->
+        </div><!-- /.container -->
+        
+        <div class="container-sidebar-right">
+          <div class="navbar-sidebar-right-icons">
+            <a href="https://github.com/apache/incubator-brooklyn" class="navbar-icon navbar-icon-shift icon-github"
+              data-toggle="tooltip" data-placement="bottom" title="GitHub: apache/incubator-brooklyn"/>
+            <a href="https://twitter.com/#!/search?q=brooklyncentral" class="navbar-icon navbar-icon-shift icon-twitter"
+              data-toggle="tooltip" data-placement="bottom" title="Twitter: @brooklyncentral"/>
+            <a href="http://webchat.freenode.net/?channels=brooklyncentral" class="navbar-icon icon-irc"
+              data-toggle="tooltip" data-placement="bottom" title="IRC: freenode #brooklyncentral"/>
+            <!-- extra a element seems needed as landing page seems to copy the last element here (!?) 
+            -->
+            <a href="/" style="width: 0px; height: 0px;"></a>
+         </div>
+      </div>
+      
+  </div>
+</nav>
+
+
+<div class="container" id="main_container">
+    <div class="row">
+        <div class="col-md-9" id="content_container">
+            <div id="page_notes"></div>
+            <h1>Troubleshooting Deployment</h1>
+            <p>This guide describes common problems encountered when deploying applications.</p>
+
+<h2 id="yaml-deployment-errors">YAML deployment errors</h2>
+
+<p>The error <code>Invalid YAML: Plan not in acceptable format: Cannot convert ...</code> means that the text is not 
+valid YAML. Common reasons include that the indentation is incorrect, or that there are non-matching
+brackets.</p>
+
+<p>The error <code>Unrecognized application blueprint format: no services defined</code> means that the <code>services:</code>
+section is missing.</p>
+
+<p>An error like <code>Deployment plan item io.brooklyn.camp.spi.pdp.Service@23c159e2[name=&lt;null&gt;,description=&lt;null&gt;,serviceType=com.acme.Foo,characteristics=[],customAttributes={}] cannot be matched</code> means that the given entity type (in this case com.acme.Foo) is not in the catalog or on the classpath.</p>
+
+<p>An error like <code>Illegal parameter for 'location' (aws-ec3); not resolvable: java.util.NoSuchElementException: Unknown location 'aws-ec3': either this location is not recognised or there is a problem with location resolver configuration</code> means that the given location (in this case aws-ec3) 
+was unknown. This means it does not match any of the named locations in brooklyn.properties, nor any of the
+clouds enabled in the jclouds support, nor any of the locations added dynamically through the catalog API.</p>
+
+<h2 id="vm-provisioning-failures">VM Provisioning Failures</h2>
+
+<p>There are many stages at which VM provisioning can fail! An error <code>Failure running task provisioning</code> 
+means there was some problem obtaining or connecting to the machine.</p>
+
+<p>An error like <code>... Not authorized to access cloud ...</code> usually means the wrong identity/credential was used.</p>
+
+<p>An error like <code>Unable to match required VM template constraints</code> means that a matching image (e.g. AMI in AWS terminology) could not be found. This 
+could be because an incorrect explicit image id was supplied, or because the match-criteria could not
+be satisfied using the given images available in the given cloud. The first time this error is 
+encountered, a listing of all images in that cloud/region will be written to the debug log.</p>
+
+<p>Failure to form an ssh connection to the newly provisioned VM can be reported in several different ways, 
+depending on the nature of the error. This breaks down into failures at different points:</p>
+
+<ul>
+  <li>Failure to reach the ssh port (e.g. <code>... could not connect to any ip address port 22 on node ...</code>).</li>
+  <li>Failure to do the very initial ssh login (e.g. <code>... Exhausted available authentication methods ...</code>).</li>
+  <li>Failure to ssh using the newly created user.</li>
+</ul>
+
+<p>There are many possible reasons for this ssh failure, which include:</p>
+
+<ul>
+  <li>The VM was “dead on arrival” (DOA) - sometimes a cloud will return an unusable VM. One can work around
+this using the <code>machineCreateAttempts</code> configuration option, to automatically retry with a new VM.</li>
+  <li>Local network restrictions. On some guest wifis, external access to port 22 is forbidden.
+Check by manually trying to reach port 22 on a different machine that you have access it.</li>
+  <li>NAT rules not set up correctly. On some clouds that have only private IPs, Brooklyn can automatically
+create NAT rules to provide access to port 22. If this NAT rule creation fails for some reason,
+then Brooklyn will not be able to reach the VM. If NAT rules are being created for your cloud, then
+check the logs for warnings or errors about the NAT rule creation.</li>
+  <li>ssh credentials incorrectly configured. The Brooklyn configuration is very flexible in how ssh
+credentials can be configured. However, if a more advanced configuration is used incorrectly (e.g. 
+the wrong login user, or invalid ssh keys) then this will fail.</li>
+  <li>Wrong login user. The initial login user to use when first logging into the new VM is inferred from 
+the metadata provided by the cloud provider about that image. This can sometimes be incomplete, so
+the wrong user may be used. This can be explicitly set using the <code>loginUser</code> configuration option.
+An example of this is with some Ubuntu VMs, where the “ubuntu” user should be used. However, on some clouds
+it defaults to trying to ssh as “root”.</li>
+  <li>Bad choice of user. By default, Brooklyn will create a user with the same name as the user running the
+Brooklyn process; the choice of user name is configurable. If this user already exists on the machine, 
+then the user setup will not behave as expected. Subsequent attempts to ssh using this user could then fail.</li>
+  <li>Custom credentials on the VM. Most clouds will automatically set the ssh login details (e.g. in AWS using<br />
+the key-pair, or in CloudStack by auto-generating a password). However, with some custom images the VM
+will have hard-coded credentials that must be used. If Brooklyn’s configuration does not match that,
+then it will fail.</li>
+  <li>Guest customisation by the cloud. On some clouds (e.g. vCloud Air), the VM can be configured to do
+guest customisation immediately after the VM starts. This can include changing the root password.
+If Brooklyn is not configured with the expected changed password, then the VM provisioning may fail
+(depending if Brooklyn connects before or after the password is changed!).</li>
+</ul>
+
+<p>A very useful debug configuration is to set <code>destroyOnFailure</code> to false. This will allow ssh failures to
+be more easily investigated.</p>
+
+<h2 id="timeout-waiting-for-service-up">Timeout Waiting For Service-Up</h2>
+
+<p>A common generic error message is that there was a timeout waiting for service-up.</p>
+
+<p>This just means that the entity did not get to service-up in the pre-defined time period (the default is 
+two minutes, and can be configured using the <code>start.timeout</code> config key; the timer begins after the 
+start tasks are completed).</p>
+
+<p>See the guide on <a href="troubleshooting-runtime-errors.html">runtime errors</a> for where to find additional information, especially the section on
+“Entity’s Error Status”.</p>
+
+        </div>
+
+        <div class="col-md-3">
+            <div class="list-group side-menu" id="side-menu">
+
+
+
+  
+     
+              
+                  <h4 class=" with_following">
+                    <a href="/v/latest/index.html" class="list-group-item breadcrumb breadcrumb0">
+                      User Guide
+                      </a></h4>
+              
+                  <h4 class=" with_preceding with_following">
+                    <a href="/v/latest/ops/index.html" class="list-group-item breadcrumb breadcrumb1">
+                      Operations
+                      </a></h4>
+              
+                  <h4 class=" with_preceding">
+                    <a href="/v/latest/ops/troubleshooting/index.html" class="list-group-item breadcrumb breadcrumb2">
+                      Troubleshooting
+                      </a></h4>
+              
+              
+                 
+                
+                  
+                  <a href="/v/latest/ops/troubleshooting/overview.html" class="list-group-item">Overview
+                    </a>
+                
+              
+                 
+                
+                  
+                  <a href="/v/latest/ops/troubleshooting/deployment.html" class="list-group-item active">Deployment
+                    </a>
+                
+              
+                 
+                
+                  
+                  <a href="/v/latest/ops/troubleshooting/connectivity.html" class="list-group-item">Server Connectivity
+                    </a>
+                
+              
+                 
+                
+                  
+                  <a href="/v/latest/ops/troubleshooting/softwareprocess.html" class="list-group-item">SoftwareProcess Entities
+                    </a>
+                
+              
+                 
+                
+                  
+                  <a href="/v/latest/ops/troubleshooting/going-deep-in-java-and-logs.html" class="list-group-item">Going Deep in Java and Logs
+                    </a>
+                
+              
+        
+        
+  
+
+        
+</div>
+<div id="width_reference"></div>
+
+
+<script language="JavaScript" type="application/javascript">
+
+ 
+sidemenu_x_sizer=function(){ $('#side-menu').width($('#side-menu').parent().find('#width_reference').outerWidth()); };
+$(sidemenu_x_sizer);
+$(window).resize(sidemenu_x_sizer);
+
+ 
+sidemenu_y_nonfloater=function(){
+  if ($('#side-menu').outerHeight(true) + $('#header').outerHeight(true) + $('#footer').outerHeight(true) > window.innerHeight ||
+      $('#side-menu').width() >= $('#content_container').width()/2) {
+    $('#side-menu').css('position', 'inherit');
+  } else {
+    // restore if screen has grown
+    $('#side-menu').css('position', 'fixed');
+  }
+};
+$(sidemenu_y_nonfloater);
+$(window).resize(sidemenu_y_nonfloater);
+
+ 
+
+var sideMenu = $("#side-menu"),
+    sideItems = sideMenu.find("a"),
+    // Anchors corresponding to menu items
+    scrollItems = sideItems.map(function(){
+      var item = $(this).attr("section-target");
+      if (item && item.length) { return item; }
+    });
+
+var highlight_section_last_top = -1;
+var highlight_section_completed = false;
+
+var highlight_section = function() {
+   // Get container scroll position
+   var highlight_section_new_top = $(this).scrollTop();
+   if (highlight_section_new_top == highlight_section_last_top) return;
+   var highlight_section_new_bottom = highlight_section_new_top + $(window).height();
+   var scroll_advancing = (highlight_section_new_top > highlight_section_last_top);
+
+   var last_item = null, active_item = $("#side-menu a.section#active");
+   
+   var found_top = false;
+   var displayable_items = scrollItems.map(function(itemI){
+     item = $(scrollItems[itemI]);
+     if (item && item.length) {
+       if (highlight_section_last_top == -1 || !highlight_section_completed) {
+         // just opening page - take item matching hash, or otherwise the first item visible
+         if (item.selector === window.location.hash || (item.offset().top > highlight_section_new_top - 20 && !found_top)) {
+           found_top = true;
+           if (item.selector === window.location.hash && item.offset().top < highlight_section_new_top + 60) {
+             // because of our top header, we need to scroll 64px down from any link
+             $('html, body').animate({scrollTop: item.offset().top - 64}, 0);
+           }
+           return item;
+         }
+       } else if (scroll_advancing) {
+         // if scrolling advance, pick up a section when title starts before 1/3 height 
+         if (item.offset().top < highlight_section_new_top + $(window).height()/3)
+           return item;
+           
+         // or if containing div is finished (usu the whole main content)
+         div_containing_item = item.closest("div");
+         if (div_containing_item.offset().top + div_containing_item.height() < highlight_section_new_bottom + 15)
+           return item;
+         // or when next title is visible
+         if (last_item && item.offset().top < highlight_section_new_bottom + 15)
+           return last_item;
+       } else {
+         // if scrolling back, pick up a section as soon as the title is visible,
+         if (item.offset().top < highlight_section_new_top)
+           return item;
+         // or if title is before the 2/3 point
+         // (not sure about this, probably want also to have 
+         // "AND the id.top is <= displayable_itemsrent_active_it.top" so we don't jump FORWARD a section
+         // when scrolling BACK, with lots of tiny sections) 
+         if ((item.offset().top < highlight_section_new_top + 2*$(window).height()/3)
+             && (!active_item || !active_item.offset() || active_item.offset().top >= item.offset().top))
+           return item;
+         
+       }
+       last_item = item;
+     }
+   });
+   if (!highlight_section_completed && document.readyState === "complete") {
+     highlight_section_completed = true;
+   }
+   if (!displayable_items.length) {
+     $("#side-menu a.section").removeClass("active");
+   } else {
+     displayable_items = displayable_items[displayable_items.length-1];
+     var id = displayable_items && displayable_items.length ? displayable_items[0].id : "";
+   // Set/remove active class
+     new_active = $("#side-menu a.section").filter("[section-target='#"+id+"']");
+     if (new_active.hasClass("active")) {
+       // nothing needed
+     } else {
+       $("#side-menu a.section").removeClass("active");
+       $("#side-menu a.section").filter("[section-target='#"+id+"']").addClass("active");
+     }
+   }
+   
+   highlight_section_last_top = highlight_section_new_top;
+};
+var highlight_new_section = function() {
+  highlight_section_completed = false;
+  highlight_section_last_top = -1;
+  highlight_section();
+}
+
+$(window).scroll(highlight_section);
+$(highlight_new_section);
+
+// detect link change - courtesy http://www.bennadel.com/blog/1520-binding-events-to-non-dom-objects-with-jquery.htm
+    (
+        function( $ ){
+            // Default to the current location.
+            var strLocation = window.location.href;
+            var strHash = window.location.hash;
+            var strPrevLocation = "";
+            var strPrevHash = "";
+
+            // This is how often we will be checkint for
+            // changes on the location.
+            var intIntervalTime = 100;
+
+            // This method removes the pound from the hash.
+            var fnCleanHash = function( strHash ){
+                return(
+                    strHash.substring( 1, strHash.length )
+                    );
+            }
+
+            // This will be the method that we use to check
+            // changes in the window location.
+            var fnCheckLocation = function(){
+                // Check to see if the location has changed.
+                if (strLocation != window.location.href){
+
+                    // Store the new and previous locations.
+                    strPrevLocation = strLocation;
+                    strPrevHash = strHash;
+                    strLocation = window.location.href;
+                    strHash = window.location.hash;
+
+                    // The location has changed. Trigger a
+                    // change event on the location object,
+                    // passing in the current and previous
+                    // location values.
+                    $( window.location ).trigger(
+                        "change",
+                        {
+                            currentHref: strLocation,
+                            currentHash: fnCleanHash( strHash ),
+                            previousHref: strPrevLocation,
+                            previousHash: fnCleanHash( strPrevHash )
+                        }
+                        );
+
+                }
+            }
+
+            // Set an interval to check the location changes.
+            setInterval( fnCheckLocation, intIntervalTime );
+        }
+    )( jQuery );
+// and trigger highlight section on link change
+$(window.location).bind("change", highlight_new_section);
+
+</script>
+
+        </div>
+    </div>
+</div>
+
+<div id="footer">
+    <div class="container">
+        <div class="row">
+            <div class="col-md-10 text-muted">
+                Apache Brooklyn is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+                License v2.0</a>.
+                <br />
+                Apache Brooklyn is currently undergoing Incubation at The Apache Software
+                Foundation.
+            </div>
+            <div class="col-md-2">
+                <a class="btn btn-sm btn-default" href="https://github.com/apache/incubator-brooklyn/edit/master/docs/guide/ops/troubleshooting/deployment.md">Edit This Page</a>
+                <a href="http://0.0.0.0:4000/community/how-to-contribute-docs.html"
+                    data-toggle="tooltip" data-placement="top" title="How to Edit Documentation" data-delay="400"/>
+                  <span class="octicon octicon-question octicon-footer"></span>
+                </a>
+            </div>
+        </div>
+    </div>
+</div>
+
+
+
+
+
+<script src="//cdnjs.cloudflare.com/ajax/libs/zeroclipboard/1.3.1/ZeroClipboard.min.js"></script>
+
+<script language="JavaScript" type="application/javascript">
+    fix_padding_function = function () { 
+        $('body').css('padding-top', parseInt($('#header').css("height"))+10);
+        $('body').css('padding-bottom', parseInt($('#footer').css("height"))+10);
+    };
+    $(window).resize(fix_padding_function);
+    $(window).load(fix_padding_function);
+    
+    $(function () {
+        $('[data-toggle="tooltip"]').tooltip({ delay: { show: 600, hide: 100 }})
+    });
+    
+/* generate anchors for headers, a la github and http://blog.parkermoore.de/2014/08/01/header-anchor-links-in-vanilla-javascript-for-github-pages-and-jekyll/ */
+var anchorForId = function (id, text) {
+  var anchor = document.createElement("a");
+  anchor.className = "header-link";
+  anchor.href      = "#" + id;
+  anchor.innerHTML = "<i class=\"fa fa-link\"></i>";
+  return anchor;
+};
+
+var linkifyAnchors = function (level, containingElement) {
+  var headers = contentBlock.find("h" + level);
+  for (var h = 0; h < headers.length; h++) {
+    var header = headers[h];
+    if (typeof header.id !== "undefined" && header.id !== "") {
+      header.appendChild(anchorForId(header.id, $(header).text()));
+    }
+  }
+};
+
+$(function () {
+    contentBlock = $("#content_container");
+    if (!contentBlock) return;
+    for (var level = 1; level <= 6; level++) {
+      linkifyAnchors(level, contentBlock);
+    }
+});
+
+<!-- Clipboard support -->
+  ZeroClipboard.config({ moviePath: '//cdnjs.cloudflare.com/ajax/libs/zeroclipboard/1.3.1/ZeroClipboard.swf' });
+
+$(function() {
+  $('div.highlight').prepend(
+  $('<div class="clipboard_container" title="Copy to Clipboard">'+
+    '<div class="fa clipboard_button">'+
+    '<div class="on-active"><div>Copied to Clipboard</div></div>'+
+  '</div></div>'));
+  $('div.clipboard_container').each(function(index) {
+    var clipboard = new ZeroClipboard();
+    clipboard.clip( $(this).find(":first")[0], $(this)[0] );
+    var target = $(this).next();
+    var txt = target.text().trim();
+    if (target.find('code.bash')) {
+      // Strip out bash prompts from the start of each line (i.e. '$' or '%' characters
+      // at the very start, or immediately following any newline). Correctly handles continuation
+      // lines, where a leading '$' or '%' is *not* a prompt character.
+      txt = txt.replace(/(^|[^\\]\n)[$%] /g, "$1");
+    }
+    clipboard.on( 'dataRequested', function (client, args) {
+      client.setText( txt );
+    });
+  });
+});
+
+<!-- search -->
+    $(function() {
+        $('#simple_google')
+            .submit(function() {
+                $('input[name="q"]').val("site:" + document.location.hostname + " " + $('input[name="brooklyn-search"]').val());
+            return true;
+            });
+        $('input[name="brooklyn-search"]').focus(function() {
+                if ($(this).val() === $(this).attr('placeholder')) {
+                    $(this).val('');
+                }
+            })
+            .blur(function() {
+                if ($(this).val() === '') {
+                    $(this).val($(this).attr('placeholder'));
+                }
+            })
+            .blur();
+    });
+
+
+ <!-- analytics -->
+    var _gaq = _gaq || [];
+    _gaq.push(['_setAccount', 'UA-30530918-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);
+    })();
+
+
+<!-- page warning (for archive pages) -->
+
+ 
+    $(function() {
+        if (document.location.pathname.replace(/^\/([^\/]*).*$/, '$1') === "v"){
+            var thisversion = document.location.pathname.split("/")[2],
+                msg = "";
+            if (thisversion != 'latest' && (!$.cookie('brooklyn_versions') || 
+                    (($.inArray('ALL', $.cookie('brooklyn_versions').split(",")) === -1) &&
+                    ($.inArray(thisversion, $.cookie('brooklyn_versions').split(",")) === -1))) ){
+                msg += "<div class='warning_banner_image'><img src='/v/latest/style/img/warning.png'/></div>";
+                msg += "<p>You are browsing the archive site for version <strong>"+thisversion+"</strong>.</p>";
+                if (thisversion.indexOf("SNAPSHOT") >= 0) {
+                  msg += "<p>Note that SNAPSHOT versions have not been voted on and are not endorsed by the Apache Software Foundation.</p>";
+                  msg += "<p>Do you understand and accept the risks?</p>";
+                } else {
+                  msg += "<p>Is this deliberate?</p>";
+                }
+                msg += "<center><p class='warning_banner_buttons'>";
+                msg += "<a href = 'javascript:void(0);' onclick=\"set_user_version('"+thisversion+"');\">Yes, hide this warning</a>";
+                msg += "<a href = '/v/latest/'>No, take me to the latest version guide</a>";
+                msg += "<a href = '/meta/versions.html'>Show all versions</a>";
+                msg += "</p></center>"
+                            
+                $('#page_notes').html(msg);
+                $('#page_notes').fadeIn('slow');
+            }
+        }
+    });
+
+    function get_user_versions() {
+        return $.cookie("brooklyn_versions") ? $.cookie("brooklyn_versions").split(",") : [];
+    };
+    function set_user_version(version) {
+        var version_cookie = get_user_versions();
+        version_cookie.push(version);
+        $.cookie('brooklyn_versions', version_cookie, { expires: 365, path: '/' });
+        $('#page_notes').fadeOut();
+        event.preventDefault ? event.preventDefault() : event.returnValue = false;
+    };
+    function set_user_versions_all() {
+        var version_cookie = get_user_versions();
+        version_cookie.push("ALL");
+        $.cookie('brooklyn_versions', version_cookie, { expires: 365, path: '/' });
+        $('#page_notes').fadeOut();
+        event.preventDefault ? event.preventDefault() : event.returnValue = false;
+    };
+    function clear_user_versions() {
+        $.removeCookie('brooklyn_versions', { path: '/' });
+        $('#page_notes').fadeIn('slow');
+        event.preventDefault ? event.preventDefault() : event.returnValue = false;
+    };
+
+</script>
+
+</body>
+
+</html>