You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by jf...@apache.org on 2014/12/17 19:30:36 UTC

[11/18] incubator-aurora-website git commit: Initial move of website over to git

http://git-wip-us.apache.org/repos/asf/incubator-aurora-website/blob/c43a3a2d/publish/documentation/latest/deploying-aurora-scheduler/index.html
----------------------------------------------------------------------
diff --git a/publish/documentation/latest/deploying-aurora-scheduler/index.html b/publish/documentation/latest/deploying-aurora-scheduler/index.html
new file mode 100644
index 0000000..abbf8ba
--- /dev/null
+++ b/publish/documentation/latest/deploying-aurora-scheduler/index.html
@@ -0,0 +1,368 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+	<title>Apache Aurora</title>
+    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
+    <link href="/assets/css/main.css" rel="stylesheet">
+	<!-- Analytics -->
+	<script type="text/javascript">
+		  var _gaq = _gaq || [];
+		  _gaq.push(['_setAccount', 'UA-45879646-1']);
+		  _gaq.push(['_setDomainName', 'apache.org']);
+		  _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>
+  </head>
+  <body>
+	  
+        <div class="container-fluid section-header">
+  <div class="container">
+    <div class="nav nav-bar">
+    <a href="/"><img src="/assets/img/aurora_logo_white_bkg.svg" width="300" alt="Transparent Apache Aurora logo with dark background"/></a>
+	<ul class="nav navbar-nav navbar-right">
+      <li><a href="/documentation/latest/">Documentation</a></li>
+      <li><a href="/community/">Community</a></li>
+      <li><a href="/downloads/">Downloads</a></li>
+      <li><a href="/blog/">Blog</a></li>
+    </ul>
+    </div>
+  </div>
+</div>	
+  	  <div class="container-fluid">
+  	  	<div class="container content">
+          <h1 id="deploying-the-aurora-scheduler">Deploying the Aurora Scheduler</h1>
+
+<p>When setting up your cluster, you will install the scheduler on a small number (usually 3 or 5) of
+machines.  This guide helps you get the scheduler set up and troubleshoot some common hurdles.</p>
+
+<ul>
+<li><a href="#installing-aurora">Installing Aurora</a>
+
+<ul>
+<li><a href="#creating-the-distribution-zip-file-optional">Creating the Distribution .zip File (Optional)</a></li>
+<li><a href="#installing-aurora-1">Installing Aurora</a></li>
+</ul></li>
+<li><a href="#configuring-aurora">Configuring Aurora</a>
+
+<ul>
+<li><a href="#a-note-on-configuration">A Note on Configuration</a></li>
+<li><a href="#replicated-log-configuration">Replicated Log Configuration</a></li>
+<li><a href="#initializing-the-replicated-log">Initializing the Replicated Log</a></li>
+<li><a href="#storage-performance-considerations">Storage Performance Considerations</a></li>
+<li><a href="#network-considerations">Network considerations</a></li>
+</ul></li>
+<li><a href="#running-aurora">Running Aurora</a>
+
+<ul>
+<li><a href="#maintaining-an-aurora-installation">Maintaining an Aurora Installation</a></li>
+<li><a href="#monitoring">Monitoring</a></li>
+<li><a href="#running-stateful-services">Running stateful services</a></li>
+<li><a href="#dedicated-attribute">Dedicated attribute</a>
+
+<ul>
+<li><a href="#syntax">Syntax</a></li>
+<li><a href="#example">Example</a></li>
+</ul></li>
+</ul></li>
+<li><a href="#common-problems">Common problems</a>
+
+<ul>
+<li><a href="#replicated-log-not-initialized">Replicated log not initialized</a></li>
+<li><a href="#symptoms">Symptoms</a></li>
+<li><a href="#solution">Solution</a></li>
+<li><a href="#scheduler-not-registered">Scheduler not registered</a></li>
+<li><a href="#symptoms-1">Symptoms</a></li>
+<li><a href="#solution-1">Solution</a></li>
+<li><a href="#tasks-are-stuck-in-pending-forever">Tasks are stuck in PENDING forever</a></li>
+<li><a href="#symptoms-2">Symptoms</a></li>
+<li><a href="#solution-2">Solution</a></li>
+</ul></li>
+</ul>
+
+<h2 id="installing-aurora">Installing Aurora</h2>
+
+<p>The Aurora scheduler is a standalone Java server. As part of the build process it creates a bundle
+of all its dependencies, with the notable exceptions of the JVM and libmesos. Each target server
+should have a JVM (Java 7 or higher) and libmesos (0.20.1) installed.</p>
+
+<h3 id="creating-the-distribution-.zip-file-(optional)">Creating the Distribution .zip File (Optional)</h3>
+
+<p>To create a distribution for installation you will need build tools installed. On Ubuntu this can be
+done with <code>sudo apt-get install build-essential default-jdk</code>.</p>
+<pre class="highlight text">git clone http://git-wip-us.apache.org/repos/asf/incubator-aurora.git
+cd incubator-aurora
+./gradlew distZip
+</pre>
+<p>Copy the generated <code>dist/distributions/aurora-scheduler-*.zip</code> to each node that will run a scheduler.</p>
+
+<h3 id="installing-aurora">Installing Aurora</h3>
+
+<p>Extract the aurora-scheduler zip file. The example configurations assume it is extracted to
+<code>/usr/local/aurora-scheduler</code>.</p>
+<pre class="highlight text">sudo unzip dist/distributions/aurora-scheduler-*.zip -d /usr/local
+sudo ln -nfs &quot;$(ls -dt /usr/local/aurora-scheduler-* | head -1)&quot; /usr/local/aurora-scheduler
+</pre>
+<h2 id="configuring-aurora">Configuring Aurora</h2>
+
+<h3 id="a-note-on-configuration">A Note on Configuration</h3>
+
+<p>Like Mesos, Aurora uses command-line flags for runtime configuration. As such the Aurora
+&ldquo;configuration file&rdquo; is typically a <code>scheduler.sh</code> shell script of the form.</p>
+<pre class="highlight shell"><span class="c">#!/bin/bash</span>
+<span class="nv">AURORA_HOME</span><span class="o">=</span>/usr/local/aurora-scheduler
+
+<span class="c"># Flags controlling the JVM.</span>
+<span class="nv">JAVA_OPTS</span><span class="o">=(</span>
+  -Xmx2g
+  -Xms2g
+  <span class="c"># GC tuning, etc.</span>
+<span class="o">)</span>
+
+<span class="c"># Flags controlling the scheduler.</span>
+<span class="nv">AURORA_FLAGS</span><span class="o">=(</span>
+  -http_port<span class="o">=</span>8081
+  <span class="c"># Log configuration, etc.</span>
+<span class="o">)</span>
+
+<span class="c"># Environment variables controlling libmesos</span>
+<span class="nb">export </span><span class="nv">JAVA_HOME</span><span class="o">=</span>...
+<span class="nb">export </span><span class="nv">GLOG_v</span><span class="o">=</span>1
+<span class="nb">export </span><span class="nv">LIBPROCESS_PORT</span><span class="o">=</span>8083
+
+<span class="nv">JAVA_OPTS</span><span class="o">=</span><span class="s2">&quot;</span><span class="k">${</span><span class="nv">JAVA_OPTS</span><span class="p">[*]</span><span class="k">}</span><span class="s2">&quot;</span> <span class="nb">exec</span> <span class="s2">&quot;</span><span class="nv">$AURORA_HOME</span><span class="s2">/bin/aurora-scheduler&quot;</span> <span class="s2">&quot;</span><span class="k">${</span><span class="nv">AURORA_FLAGS</span><span class="p">[@]</span><span class="k">}</span><span class="s2">&quot;</span>
+</pre>
+<p>That way Aurora&rsquo;s current flags are visible in <code>ps</code> and in the <code>/vars</code> admin endpoint.</p>
+
+<p>Examples are available under <code>examples/scheduler/</code>. For a list of available Aurora flags and their
+documentation run</p>
+<pre class="highlight text">/usr/local/aurora-scheduler/bin/aurora-scheduler -help
+</pre>
+<h3 id="replicated-log-configuration">Replicated Log Configuration</h3>
+
+<p>All Aurora state is persisted to a replicated log. This includes all jobs Aurora is running
+including where in the cluster they are being run and the configuration for running them, as
+well as other information such as metadata needed to reconnect to the Mesos master, resource
+quotas, and any other locks in place.</p>
+
+<p>Aurora schedulers use ZooKeeper to discover log replicas and elect a leader. Only one scheduler is
+leader at a given time - the other schedulers follow log writes and prepare to take over as leader
+but do not communicate with the Mesos master. Either 3 or 5 schedulers are recommended in a
+production deployment depending on failure tolerance and they must have persistent storage.</p>
+
+<p>In a cluster with <code>N</code> schedulers, the flag <code>-native_log_quorum_size</code> should be set to
+<code>floor(N/2) + 1</code>. So in a cluster with 1 scheduler it should be set to <code>1</code>, in a cluster with 3 it
+should be set to <code>2</code>, and in a cluster of 5 it should be set to <code>3</code>.</p>
+
+<table><thead>
+<tr>
+<th>Number of schedulers (N)</th>
+<th><code>-native_log_quorum_size</code> setting (<code>floor(N/2) + 1</code>)</th>
+</tr>
+</thead><tbody>
+<tr>
+<td>1</td>
+<td>1</td>
+</tr>
+<tr>
+<td>3</td>
+<td>2</td>
+</tr>
+<tr>
+<td>5</td>
+<td>3</td>
+</tr>
+<tr>
+<td>7</td>
+<td>4</td>
+</tr>
+</tbody></table>
+
+<p><em>Incorrectly setting this flag will cause data corruption to occur!</em></p>
+
+<p>See <a href="storage-config.md#scheduler-storage-configuration-flags">this document</a> for more replicated
+log and storage configuration options.</p>
+
+<h2 id="initializing-the-replicated-log">Initializing the Replicated Log</h2>
+
+<p>Before you start Aurora you will also need to initialize the log on the first master.</p>
+<pre class="highlight text">mesos-log initialize --path=&quot;$AURORA_HOME/scheduler/db&quot;
+</pre>
+<p>Failing to do this will result the following message when you try to start the scheduler.</p>
+<pre class="highlight text">Replica in EMPTY status received a broadcasted recover request
+</pre>
+<h3 id="storage-performance-considerations">Storage Performance Considerations</h3>
+
+<p>See <a href="/documentation/latest/scheduler-storage/">this document</a> for scheduler storage performance considerations.</p>
+
+<h3 id="network-considerations">Network considerations</h3>
+
+<p>The Aurora scheduler listens on 2 ports - an HTTP port used for client RPCs and a web UI,
+and a libprocess (HTTP+Protobuf) port used to communicate with the Mesos master and for the log
+replication protocol. These can be left unconfigured (the scheduler publishes all selected ports
+to ZooKeeper) or explicitly set in the startup script as follows:</p>
+<pre class="highlight text"># ...
+AURORA_FLAGS=(
+  # ...
+  -http_port=8081
+  # ...
+)
+# ...
+export LIBPROCESS_PORT=8083
+# ...
+</pre>
+<h2 id="running-aurora">Running Aurora</h2>
+
+<p>Configure a supervisor like <a href="http://mmonit.com/monit/">Monit</a> or
+<a href="http://supervisord.org/">supervisord</a> to run the created <code>scheduler.sh</code> file and restart it
+whenever it fails. Aurora expects to be restarted by an external process when it fails. Aurora
+supports an active health checking protocol on its admin HTTP interface - if a <code>GET /health</code> times
+out or returns anything other than <code>200 OK</code> the scheduler process is unhealthy and should be
+restarted.</p>
+
+<p>For example, monit can be configured with</p>
+<pre class="highlight text">if failed port 8081 send &quot;GET /health HTTP/1.0\r\n&quot; expect &quot;OK\n&quot; with timeout 2 seconds for 10 cycles then restart
+</pre>
+<p>assuming you set <code>-http_port=8081</code>.</p>
+
+<h3 id="maintaining-an-aurora-installation">Maintaining an Aurora Installation</h3>
+
+<h3 id="monitoring">Monitoring</h3>
+
+<p>Please see our dedicated <a href="/documentation/latest/monitoring/">monitoring guide</a> for in-depth discussion on monitoring.</p>
+
+<h3 id="running-stateful-services">Running stateful services</h3>
+
+<p>Aurora is best suited to run stateless applications, but it also accommodates for stateful services
+like databases, or services that otherwise need to always run on the same machines.</p>
+
+<h4 id="dedicated-attribute">Dedicated attribute</h4>
+
+<p>The Mesos slave has the <code>--attributes</code> command line argument which can be used to mark a slave with
+static attributes (not to be confused with <code>--resources</code>, which are dynamic and accounted).</p>
+
+<p>Aurora makes these attributes available for matching with scheduling
+<a href="configuration-reference.md#specifying-scheduling-constraints">constraints</a>.  Most of these
+constraints are arbitrary and available for custom use.  There is one exception, though: the
+<code>dedicated</code> attribute.  Aurora treats this specially, and only allows matching jobs to run on these
+machines, and will only schedule matching jobs on these machines.</p>
+
+<h5 id="syntax">Syntax</h5>
+
+<p>The dedicated attribute has semantic meaning. The format is <code>$role(/.*)?</code>. When a job is created,
+the scheduler requires that the <code>$role</code> component matches the <code>role</code> field in the job
+configuration, and will reject the job creation otherwise.  The remainder of the attribute is
+free-form. We&rsquo;ve developed the idiom of formatting this attribute as <code>$role/$job</code>, but do not
+enforce this.</p>
+
+<h5 id="example">Example</h5>
+
+<p>Consider the following slave command line:</p>
+<pre class="highlight text">mesos-slave --attributes=&quot;host:$HOST;rack:$RACK;dedicated:db_team/redis&quot; ...
+</pre>
+<p>And this job configuration:</p>
+<pre class="highlight text">Service(
+  name = &#39;redis&#39;,
+  role = &#39;db_team&#39;,
+  constraints = {
+    &#39;dedicated&#39;: &#39;db_team/redis&#39;
+  }
+  ...
+)
+</pre>
+<p>The job configuration is indicating that it should only be scheduled on slaves with the attribute
+<code>dedicated:dba_team/redis</code>.  Additionally, Aurora will prevent any tasks that do <em>not</em> have that
+constraint from running on those slaves.</p>
+
+<h2 id="common-problems">Common problems</h2>
+
+<p>So you&rsquo;ve started your first cluster and are running into some issues? We&rsquo;ve collected some common
+stumbling blocks and solutions here to help get you moving.</p>
+
+<h3 id="replicated-log-not-initialized">Replicated log not initialized</h3>
+
+<h4 id="symptoms">Symptoms</h4>
+
+<ul>
+<li>Scheduler RPCs and web interface claim <code>Storage is not READY</code></li>
+<li>Scheduler log repeatedly prints messages like</li>
+</ul>
+<pre class="highlight text">  I1016 16:12:27.234133 26081 replica.cpp:638] Replica in EMPTY status
+  received a broadcasted recover request
+  I1016 16:12:27.234256 26084 recover.cpp:188] Received a recover response
+  from a replica in EMPTY status
+</pre>
+<h4 id="solution">Solution</h4>
+
+<p>When you create a new cluster, you need to inform a quorum of schedulers that they are safe to
+consider their database to be empty by <a href="#initializing-the-replicated-log">initializing</a> the
+replicated log. This is done to prevent the scheduler from modifying the cluster state in the event
+of multiple simultaneous disk failures or, more likely, misconfiguration of the replicated log path.</p>
+
+<h3 id="scheduler-not-registered">Scheduler not registered</h3>
+
+<h4 id="symptoms">Symptoms</h4>
+
+<p>Scheduler log contains</p>
+<pre class="highlight text">Framework has not been registered within the tolerated delay.
+</pre>
+<h4 id="solution">Solution</h4>
+
+<p>Double-check that the scheduler is configured correctly to reach the master. If you are registering
+the master in ZooKeeper, make sure command line argument to the master:</p>
+<pre class="highlight text">--zk=zk://$ZK_HOST:2181/mesos/master
+</pre>
+<p>is the same as the one on the scheduler:</p>
+<pre class="highlight text">-mesos_master_address=zk://$ZK_HOST:2181/mesos/master
+</pre>
+<h3 id="tasks-are-stuck-in-pending-forever">Tasks are stuck in <code>PENDING</code> forever</h3>
+
+<h4 id="symptoms">Symptoms</h4>
+
+<p>The scheduler is registered, and (receiving offers](docs/monitoring.md#scheduler<em>resource</em>offers),
+but tasks are perpetually shown as <code>PENDING - Constraint not satisfied: host</code>.</p>
+
+<h4 id="solution">Solution</h4>
+
+<p>Check that your slaves are configured with <code>host</code> and <code>rack</code> attributes.  Aurora requires that
+slaves are tagged with these two common failure domains to ensure that it can safely place tasks
+such that jobs are resilient to failure.</p>
+
+<p>See our <a href="examples/vagrant/upstart/mesos-slave.conf">vagrant example</a> for details.</p>
+
+  		</div>
+  	  </div>
+	  
+      	<div class="container-fluid section-footer buffer">
+      <div class="container">
+        <div class="row">
+		  <div class="col-md-2 col-md-offset-1"><h3>Quick Links</h3>
+		  <ul>
+		    <li><a href="/downloads/">Downloads</a></li>
+            <li><a href="/community/">Mailing Lists</a></li>
+			<li><a href="http://issues.apache.org/jira/browse/AURORA">Issue Tracking</a></li>
+			<li><a href="/documentation/latest/contributing/">How To Contribute</a></li>     
+		  </ul>
+	      </div>
+		  <div class="col-md-2"><h3>The ASF</h3>
+          <ul>
+            <li><a href="http://www.apache.org/licenses/">License</a></li>
+            <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>  
+            <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+            <li><a href="http://www.apache.org/security/">Security</a></li>
+          </ul>
+		  </div>
+		  <div class="col-md-6">
+		    <p class="disclaimer">Apache Aurora is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</p>
+			<p class="disclaimer">Copyright 2014 <a href="http://www.apache.org/">Apache Software Foundation</a>. Licensed under the <a href="http://www.apache.org/licenses/">Apache License v2.0</a>. The <a href="https://www.flickr.com/photos/trondk/12706051375/">Aurora Borealis IX photo</a> displayed on the homepage is available under a <a href="https://creativecommons.org/licenses/by-nc-nd/2.0/">Creative Commons BY-NC-ND 2.0 license</a>. Apache, Apache Aurora, and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
+        </div>
+      </div>
+    </div>
+	</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-aurora-website/blob/c43a3a2d/publish/documentation/latest/developing-aurora-client/index.html
----------------------------------------------------------------------
diff --git a/publish/documentation/latest/developing-aurora-client/index.html b/publish/documentation/latest/developing-aurora-client/index.html
new file mode 100644
index 0000000..bd5a053
--- /dev/null
+++ b/publish/documentation/latest/developing-aurora-client/index.html
@@ -0,0 +1,201 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+	<title>Apache Aurora</title>
+    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
+    <link href="/assets/css/main.css" rel="stylesheet">
+	<!-- Analytics -->
+	<script type="text/javascript">
+		  var _gaq = _gaq || [];
+		  _gaq.push(['_setAccount', 'UA-45879646-1']);
+		  _gaq.push(['_setDomainName', 'apache.org']);
+		  _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>
+  </head>
+  <body>
+	  
+        <div class="container-fluid section-header">
+  <div class="container">
+    <div class="nav nav-bar">
+    <a href="/"><img src="/assets/img/aurora_logo_white_bkg.svg" width="300" alt="Transparent Apache Aurora logo with dark background"/></a>
+	<ul class="nav navbar-nav navbar-right">
+      <li><a href="/documentation/latest/">Documentation</a></li>
+      <li><a href="/community/">Community</a></li>
+      <li><a href="/downloads/">Downloads</a></li>
+      <li><a href="/blog/">Blog</a></li>
+    </ul>
+    </div>
+  </div>
+</div>	
+  	  <div class="container-fluid">
+  	  	<div class="container content">
+          <h1 id="getting-started">Getting Started</h1>
+
+<p>Aurora consists of four main pieces: the scheduler (which finds resources in the cluster that can be used to run a job), the executor (which uses the resources assigned by the scheduler to run a job), the command-line client, and the web-ui. For information about working on the scheduler or the webUI, see the file &ldquo;developing-aurora-scheduler.md&rdquo; in this directory.</p>
+
+<p>If you want to work on the command-line client, this is the place for you!</p>
+
+<p>The client is written in Python, and unlike the server side of things, we build the client using the Pants build tool, instead of Gradle. Pants is a tool that was built by twitter for handling builds of large collaborative systems. You can see a detailed explanation of
+pants <a href="http://pantsbuild.github.io/python-readme.html">here</a>.</p>
+
+<p>To build the client executable, run the following in a command-shell:</p>
+<pre class="highlight text">$ ./pants src/main/python/apache/aurora/client/cli:aurora2
+</pre>
+<p>This will produce a python executable <em>pex</em> file in <code>dist/aurora2.pex</code>. Pex files
+are fully self-contained executables: just copy the pex file into your path, and you&rsquo;ll be able to run it. For example, for a typical installation:</p>
+<pre class="highlight text">$ cp dist/aurora2.pex /usr/local/bin/aurora
+</pre>
+<p>To run all of the client tests:</p>
+<pre class="highlight text">$ ./pasts src/test/python/apache/aurora/client/:all
+</pre>
+<h1 id="client-configuration">Client Configuration</h1>
+
+<p>The client uses a configuration file that specifies available clusters. More information about the
+contents of this file can be found in the
+<a href="/documentation/latest/client-cluster-configuration/">Client Cluster Configuration</a> documentation. Information about
+how the client locates this file can be found in the
+<a href="client-commands.md#cluster-configuration">Client Commands</a> documentation.</p>
+
+<h1 id="client-versions">Client Versions</h1>
+
+<p>There are currently two versions of the aurora client, imaginatively known as v1 and v2. All new development is done entirely in v2, but we continue to support and fix bugs in v1, until we get to the point where v2 is feature-complete and tested, and aurora users have had some time at adapt and switch their processes to use v2.</p>
+
+<p>Both versions are built on the same underlying API code.</p>
+
+<p>Client v1 was implemented using twitter.common.app. The command-line processing code for v1 can be found in <code>src/main/python/apache/aurora/client/commands</code> and
+<code>src/main/python/apache/aurora/client/bin</code>.</p>
+
+<p>Client v2 was implemented using its own noun/verb framework. The client v2 code can be found in <code>src/main/python/apache/aurora/client/cli</code>, and the noun/verb framework can be
+found in the <code>__init__.py</code> file in that directory.</p>
+
+<h1 id="building-and-testing-the-client">Building and Testing the Client</h1>
+
+<p>Building and testing the client code are both done using Pants. The relevant targets to know about are:</p>
+
+<ul>
+<li>Build a client v2 executable: <code>./pants src/main/python/apache/aurora/client/cli:aurora2</code></li>
+<li>Test client v2 code: <code>./pants ./pants src/test/python/apache/aurora/client/cli:all</code></li>
+<li>Build a client v1 executable: <code>./pants src/main/python/apache/aurora/client/bin:aurora_client</code></li>
+<li>Test client v1 code: <code>./pants src/main/python/apache/aurora/client/commands:all</code></li>
+<li>Test all client code: <code>./pants src/main/python/apache/aurora/client:all</code></li>
+</ul>
+
+<h1 id="overview-of-the-client-architecture">Overview of the Client Architecture</h1>
+
+<p>The client is built on a stacked architecture:</p>
+
+<ol>
+<li><p>At the lowest level, we have a thrift RPC API interface
+to the aurora scheduler. The interface is declared in thrift, in the file
+<code>src/main/thrift/org/apache/aurora/gen/api.thrift</code>.</p>
+
+<ol>
+<li>On top of the primitive API, we have a client API. The client API
+takes the primitive operations provided by the scheduler, and uses them
+to implement client-side behaviors. For example, when you update a job,
+on the scheduler, that&rsquo;s done by a sequence of operations.  The sequence is implemented
+by the client API <code>update</code> method, which does the following using the thrift API:
+
+<ul>
+<li>fetching the state of task instances in the mesos cluster, and figuring out which need
+to be updated;</li>
+<li>For each task to be updated:
+
+<ul>
+<li>killing the old version;</li>
+<li>starting the new version;</li>
+<li>monitoring the new version to ensure that the update succeeded.</li>
+</ul></li>
+</ul></li>
+<li>On top of the API, we have the command-line client itself. The core client, at this level,
+consists of the interface to the command-line which the user will use to interact with aurora.
+The client v2 code is found in <code>src/python/apache/aurora/client/cli</code>. In the <code>cli</code> directory,
+the rough structure is as follows:
+
+<ul>
+<li><code>__init__.py</code> contains the noun/verb command-line processing framework used by client v2.</li>
+<li><code>jobs.py</code> contains the implementation of the core <code>job</code> noun, and all of its operations.</li>
+<li><code>bridge.py</code> contains the implementation of a component that allows us to ship a
+combined client that runs both v1 and v2 client commands during the transition period.</li>
+<li><code>client.py</code> contains the code that binds the client v2 nouns and verbs into an executable.</li>
+</ul></li>
+</ol></li>
+</ol>
+
+<h1 id="running/debugging-the-client">Running/Debugging the Client</h1>
+
+<p>For manually testing client changes against a cluster, we use vagrant. To start a virtual cluster,
+you need to install a working vagrant environment, and then run &ldquo;vagrant up&rdquo; for the root of
+the aurora workspace. This will create a vagrant host named &ldquo;devcluster&rdquo;, with a mesos master,
+a set of mesos slaves, and an aurora scheduler.</p>
+
+<p>To use the devcluster, you need to bring it up by running <code>vagrant up</code>, and then connect to the vagrant host using <code>vagrant ssh</code>. This will open a bash session on the virtual machine hosting the devcluster. In the home directory, there are two key paths to know about:</p>
+
+<ul>
+<li><code>~/aurora</code>: this is a copy of the git workspace in which you launched the vagrant cluster.
+ To test client changes, you&rsquo;ll use this copy.</li>
+<li><code>/vagrant</code>: this is a mounted filesystem that&rsquo;s a direct image of your git workspace.
+ This isn&rsquo;t a copy - it is your git workspace. Editing files on your host machine will
+ be immediately visible here, because they are the same files.</li>
+</ul>
+
+<p>Whenever the scheduler is modified, to update your vagrant environment to use the new scheduler,
+you&rsquo;ll need to re-initialize your vagrant images. To do this, you need to run two commands:</p>
+
+<ul>
+<li><code>vagrant destroy</code>: this will delete the old devcluster image.</li>
+<li><code>vagrant up</code>: this creates a fresh devcluster image based on the current state of your workspace.</li>
+</ul>
+
+<p>You should try to minimize rebuilding vagrant images; it&rsquo;s not horribly slow, but it does take a while.</p>
+
+<p>To test client changes:</p>
+
+<ul>
+<li>Make a change in your local workspace, and commit it.</li>
+<li><code>vagrant ssh</code> into the devcluster.</li>
+<li><code>cd aurora</code></li>
+<li>Pull your changes into the vagrant copy: <code>git pull /vagrant *branchname*</code>.</li>
+<li>Build the modified client using pants.</li>
+<li>Run your command using <code>aurora2</code>. (You don&rsquo;t need to do any install; the aurora2 command
+ is a symbolic link to the executable generated by pants.)</li>
+</ul>
+
+  		</div>
+  	  </div>
+	  
+      	<div class="container-fluid section-footer buffer">
+      <div class="container">
+        <div class="row">
+		  <div class="col-md-2 col-md-offset-1"><h3>Quick Links</h3>
+		  <ul>
+		    <li><a href="/downloads/">Downloads</a></li>
+            <li><a href="/community/">Mailing Lists</a></li>
+			<li><a href="http://issues.apache.org/jira/browse/AURORA">Issue Tracking</a></li>
+			<li><a href="/documentation/latest/contributing/">How To Contribute</a></li>     
+		  </ul>
+	      </div>
+		  <div class="col-md-2"><h3>The ASF</h3>
+          <ul>
+            <li><a href="http://www.apache.org/licenses/">License</a></li>
+            <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>  
+            <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+            <li><a href="http://www.apache.org/security/">Security</a></li>
+          </ul>
+		  </div>
+		  <div class="col-md-6">
+		    <p class="disclaimer">Apache Aurora is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</p>
+			<p class="disclaimer">Copyright 2014 <a href="http://www.apache.org/">Apache Software Foundation</a>. Licensed under the <a href="http://www.apache.org/licenses/">Apache License v2.0</a>. The <a href="https://www.flickr.com/photos/trondk/12706051375/">Aurora Borealis IX photo</a> displayed on the homepage is available under a <a href="https://creativecommons.org/licenses/by-nc-nd/2.0/">Creative Commons BY-NC-ND 2.0 license</a>. Apache, Apache Aurora, and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
+        </div>
+      </div>
+    </div>
+	</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-aurora-website/blob/c43a3a2d/publish/documentation/latest/developing-aurora-scheduler/index.html
----------------------------------------------------------------------
diff --git a/publish/documentation/latest/developing-aurora-scheduler/index.html b/publish/documentation/latest/developing-aurora-scheduler/index.html
new file mode 100644
index 0000000..96b553d
--- /dev/null
+++ b/publish/documentation/latest/developing-aurora-scheduler/index.html
@@ -0,0 +1,163 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+	<title>Apache Aurora</title>
+    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
+    <link href="/assets/css/main.css" rel="stylesheet">
+	<!-- Analytics -->
+	<script type="text/javascript">
+		  var _gaq = _gaq || [];
+		  _gaq.push(['_setAccount', 'UA-45879646-1']);
+		  _gaq.push(['_setDomainName', 'apache.org']);
+		  _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>
+  </head>
+  <body>
+	  
+        <div class="container-fluid section-header">
+  <div class="container">
+    <div class="nav nav-bar">
+    <a href="/"><img src="/assets/img/aurora_logo_white_bkg.svg" width="300" alt="Transparent Apache Aurora logo with dark background"/></a>
+	<ul class="nav navbar-nav navbar-right">
+      <li><a href="/documentation/latest/">Documentation</a></li>
+      <li><a href="/community/">Community</a></li>
+      <li><a href="/downloads/">Downloads</a></li>
+      <li><a href="/blog/">Blog</a></li>
+    </ul>
+    </div>
+  </div>
+</div>	
+  	  <div class="container-fluid">
+  	  	<div class="container content">
+          <p>Java code in the aurora repo is built with <a href="http://gradle.org">Gradle</a>.</p>
+
+<h1 id="getting-started">Getting Started</h1>
+
+<p>You will need Java 7 installed and on your <code>PATH</code> or unzipped somewhere with <code>JAVA_HOME</code> set. Then</p>
+<pre class="highlight text">./gradlew tasks
+</pre>
+<p>will bootstrap the build system and show available tasks. This can take a while the first time you
+run it but subsequent runs will be much faster due to cached artifacts.</p>
+
+<h2 id="running-the-tests">Running the Tests</h2>
+
+<p>Aurora has a comprehensive unit test suite. To run the tests use</p>
+<pre class="highlight text">./gradlew build
+</pre>
+<p>Gradle will only re-run tests when dependencies of them have changed. To force a re-run of all
+tests use</p>
+<pre class="highlight text">./gradlew clean build
+</pre>
+<h2 id="running-the-build-with-code-quality-checks">Running the build with code quality checks</h2>
+
+<p>To speed up development iteration, the plain gradle commands will not run static analysis tools.
+However, you should run these before posting a review diff, and <strong>always</strong> run this before pushing a
+commit to origin/master.</p>
+<pre class="highlight text">./gradlew build -Pq
+</pre>
+<h2 id="creating-a-bundle-for-deployment">Creating a bundle for deployment</h2>
+
+<p>Gradle can create a zip file containing Aurora, all of its dependencies, and a launch script with</p>
+<pre class="highlight text">./gradlew distZip
+</pre>
+<p>or a tar file containing the same files with</p>
+<pre class="highlight text">./gradlew distTar
+</pre>
+<p>The output file will be written to <code>dist/distributions/aurora-scheduler.zip</code> or
+<code>dist/distributions/aurora-scheduler.tar</code>.</p>
+
+<h1 id="developing-aurora-java-code">Developing Aurora Java code</h1>
+
+<h2 id="setting-up-an-ide">Setting up an IDE</h2>
+
+<p>Gradle can generate project files for your IDE. To generate an IntelliJ IDEA project run</p>
+<pre class="highlight text">./gradlew idea
+</pre>
+<p>and import the generated <code>aurora.ipr</code> file.</p>
+
+<h2 id="adding-or-upgrading-a-dependency">Adding or Upgrading a Dependency</h2>
+
+<p>New dependencies can be added from Maven central by adding a <code>compile</code> dependency to <code>build.gradle</code>.
+For example, to add a dependency on <code>com.example</code>&rsquo;s <code>example-lib</code> 1.0 add this block:</p>
+<pre class="highlight text">compile &#39;com.example:example-lib:1.0&#39;
+</pre>
+<p>NOTE: Anyone thinking about adding a new dependency should first familiarize themself with the
+Apache Foundation&rsquo;s third-party licensing
+<a href="http://www.apache.org/legal/resolved.html#category-x">policy</a>.</p>
+
+<h1 id="developing-aurora-ui">Developing Aurora UI</h1>
+
+<h2 id="installing-bower-(optional)">Installing bower (optional)</h2>
+
+<p>Third party JS libraries used in Aurora (located at 3rdparty/javascript/bower_components) are
+managed by bower, a JS dependency manager. Bower is only required if you plan to add, remove or
+update JS libraries. Bower can be installed using the following command:</p>
+<pre class="highlight text">npm install -g bower
+</pre>
+<p>Bower depends on node.js and npm. The easiest way to install node on a mac is via brew:</p>
+<pre class="highlight text">brew install node
+</pre>
+<p>For more node.js installation options refer to <a href="https://github.com/joyent/node/wiki/Installation">https://github.com/joyent/node/wiki/Installation</a>.</p>
+
+<p>More info on installing and using bower can be found at: <a href="http://bower.io/">http://bower.io/</a>. Once installed, you can
+use the following commands to view and modify the bower repo at
+3rdparty/javascript/bower_components</p>
+<pre class="highlight text">bower list
+bower install &lt;library name&gt;
+bower remove &lt;library name&gt;
+bower update &lt;library name&gt;
+bower help
+</pre>
+<h1 id="developing-the-aurora-build-system">Developing the Aurora Build System</h1>
+
+<h2 id="bootstrapping-gradle">Bootstrapping Gradle</h2>
+
+<p>The following files were autogenerated by <code>gradle wrapper</code> using gradle 1.8&rsquo;s
+<a href="http://www.gradle.org/docs/1.8/dsl/org.gradle.api.tasks.wrapper.Wrapper.html">Wrapper</a> plugin and
+should not be modified directly:</p>
+<pre class="highlight text">./gradlew
+./gradlew.bat
+./gradle/wrapper/gradle-wrapper.jar
+./gradle/wrapper/gradle-wrapper.properties
+</pre>
+<p>To upgrade Gradle unpack the new version somewhere, run <code>/path/to/new/gradle wrapper</code> in the
+repository root and commit the changed files.</p>
+
+  		</div>
+  	  </div>
+	  
+      	<div class="container-fluid section-footer buffer">
+      <div class="container">
+        <div class="row">
+		  <div class="col-md-2 col-md-offset-1"><h3>Quick Links</h3>
+		  <ul>
+		    <li><a href="/downloads/">Downloads</a></li>
+            <li><a href="/community/">Mailing Lists</a></li>
+			<li><a href="http://issues.apache.org/jira/browse/AURORA">Issue Tracking</a></li>
+			<li><a href="/documentation/latest/contributing/">How To Contribute</a></li>     
+		  </ul>
+	      </div>
+		  <div class="col-md-2"><h3>The ASF</h3>
+          <ul>
+            <li><a href="http://www.apache.org/licenses/">License</a></li>
+            <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>  
+            <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+            <li><a href="http://www.apache.org/security/">Security</a></li>
+          </ul>
+		  </div>
+		  <div class="col-md-6">
+		    <p class="disclaimer">Apache Aurora is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</p>
+			<p class="disclaimer">Copyright 2014 <a href="http://www.apache.org/">Apache Software Foundation</a>. Licensed under the <a href="http://www.apache.org/licenses/">Apache License v2.0</a>. The <a href="https://www.flickr.com/photos/trondk/12706051375/">Aurora Borealis IX photo</a> displayed on the homepage is available under a <a href="https://creativecommons.org/licenses/by-nc-nd/2.0/">Creative Commons BY-NC-ND 2.0 license</a>. Apache, Apache Aurora, and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
+        </div>
+      </div>
+    </div>
+	</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-aurora-website/blob/c43a3a2d/publish/documentation/latest/hooks/index.html
----------------------------------------------------------------------
diff --git a/publish/documentation/latest/hooks/index.html b/publish/documentation/latest/hooks/index.html
new file mode 100644
index 0000000..c7f0a61
--- /dev/null
+++ b/publish/documentation/latest/hooks/index.html
@@ -0,0 +1,327 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+	<title>Apache Aurora</title>
+    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
+    <link href="/assets/css/main.css" rel="stylesheet">
+	<!-- Analytics -->
+	<script type="text/javascript">
+		  var _gaq = _gaq || [];
+		  _gaq.push(['_setAccount', 'UA-45879646-1']);
+		  _gaq.push(['_setDomainName', 'apache.org']);
+		  _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>
+  </head>
+  <body>
+	  
+        <div class="container-fluid section-header">
+  <div class="container">
+    <div class="nav nav-bar">
+    <a href="/"><img src="/assets/img/aurora_logo_white_bkg.svg" width="300" alt="Transparent Apache Aurora logo with dark background"/></a>
+	<ul class="nav navbar-nav navbar-right">
+      <li><a href="/documentation/latest/">Documentation</a></li>
+      <li><a href="/community/">Community</a></li>
+      <li><a href="/downloads/">Downloads</a></li>
+      <li><a href="/blog/">Blog</a></li>
+    </ul>
+    </div>
+  </div>
+</div>	
+  	  <div class="container-fluid">
+  	  	<div class="container content">
+          <h1 id="hooks-for-aurora-client-api">Hooks for Aurora Client API</h1>
+
+<ul>
+<li><a href="#introduction">Introduction</a></li>
+<li><a href="#hook-types">Hook Types</a></li>
+<li><a href="#execution-order">Execution Order</a></li>
+<li><a href="#hookable-methods">Hookable Methods</a></li>
+<li><a href="#activating-and-using-hooks">Activating and Using Hooks</a></li>
+<li><a href="#aurora-config-file-settings">.aurora Config File Settings</a></li>
+<li><a href="#command-line">Command Line</a></li>
+<li><a href="#hooks-protocol">Hooks Protocol</a>
+
+<ul>
+<li><a href="#pre_-methods">pre_ Methods</a></li>
+<li><a href="#err_-methods">err_ Methods</a></li>
+<li><a href="#post_-methods">post_ Methods</a></li>
+</ul></li>
+<li><a href="#generic-hooks">Generic Hooks</a></li>
+<li><a href="#hooks-process-checklist">Hooks Process Checklist</a></li>
+</ul>
+
+<h2 id="introduction">Introduction</h2>
+
+<p>You can execute hook methods around Aurora API Client methods when they are called by the Aurora Command Line commands.</p>
+
+<p>Explaining how hooks work is a bit tricky because of some indirection about what they apply to. Basically, a hook is code that executes when a particular Aurora Client API method runs, letting you extend the method&rsquo;s actions. The hook executes on the client side, specifically on the machine executing Aurora commands.</p>
+
+<p>The catch is that hooks are associated with Aurora Client API methods, which users don&rsquo;t directly call. Instead, users call Aurora Command Line commands, which call Client API methods during their execution. Since which hooks run depend on which Client API methods get called, you will need to know which Command Line commands call which API methods. Later on, there is a table showing the various associations.</p>
+
+<p><strong>Terminology Note</strong>: From now on, &ldquo;method(s)&rdquo; refer to Client API methods, and &ldquo;command(s)&rdquo; refer to Command Line commands.</p>
+
+<h2 id="hook-types">Hook Types</h2>
+
+<p>Hooks have three basic types, differing by when they run with respect to their associated method.</p>
+
+<p><code>pre_&lt;method_name&gt;</code>: When its associated method is called, the <code>pre_</code> hook executes first, then the called method. If the <code>pre_</code> hook fails, the method never runs. Later code that expected the method to succeed may be affected by this, and result in terminating the Aurora client.</p>
+
+<p>Note that a <code>pre_</code> hook can error-trap internally so it does not
+return <code>False</code>. Designers/contributors of new <code>pre_</code> hooks should
+consider whether or not to error-trap them. You can error trap at the
+highest level very generally and always pass the <code>pre_</code> hook by
+returning <code>True</code>. For example:</p>
+<pre class="highlight python"><span class="k">def</span> <span class="nf">pre_create</span><span class="p">(</span><span class="o">...</span><span class="p">):</span>
+  <span class="n">do_something</span><span class="p">()</span>  <span class="c"># if do_something fails with an exception, the create_job is not attempted!</span>
+  <span class="k">return</span> <span class="bp">True</span>
+
+<span class="c"># However...</span>
+<span class="k">def</span> <span class="nf">pre_create</span><span class="p">(</span><span class="o">...</span><span class="p">):</span>
+  <span class="k">try</span><span class="p">:</span>
+    <span class="n">do_something</span><span class="p">()</span>  <span class="c"># may cause exception</span>
+  <span class="k">except</span> <span class="n">Exception</span><span class="p">:</span>  <span class="c"># generic error trap will catch it</span>
+    <span class="k">pass</span>  <span class="c"># and ignore the exception</span>
+  <span class="k">return</span> <span class="bp">True</span>  <span class="c"># create_job will run in any case!</span>
+</pre>
+<p><code>post_&lt;method_name&gt;</code>: A <code>post_</code> hook executes after its associated method successfully finishes running. If it fails, the already executed method is unaffected. A <code>post_</code> hook&rsquo;s error is trapped, and any later operations are unaffected.</p>
+
+<p><code>err_&lt;method_name&gt;</code>: Executes only when its associated method returns a status other than OK or throws an exception. If an <code>err_</code> hook fails, the already executed method is unaffected. An <code>err_</code> hook&rsquo;s error is trapped, and any later operations are unaffected.</p>
+
+<h2 id="execution-order">Execution Order</h2>
+
+<p>A command with <code>pre_</code>, <code>post_</code>, and <code>err_</code> hooks defined and activated for its called method executes in the following order when the method successfully executes:</p>
+
+<ol>
+<li>Command called</li>
+<li>Command code executes</li>
+<li>Method Called</li>
+<li><code>pre_</code> method hook runs</li>
+<li>Method runs and successfully finishes</li>
+<li><code>post_</code> method hook runs</li>
+<li>Command code executes</li>
+<li>Command execution ends</li>
+</ol>
+
+<p>The following is what happens when, for the same command and hooks, the method associated with the command suffers an error and does not successfully finish executing:</p>
+
+<ol>
+<li>Command called</li>
+<li>Command code executes</li>
+<li>Method Called</li>
+<li><code>pre_</code> method hook runs</li>
+<li>Method runs and fails</li>
+<li><code>err_</code> method hook runs</li>
+<li>Command Code executes (if <code>err_</code> method does not end the command execution)</li>
+<li>Command execution ends</li>
+</ol>
+
+<p>Note that the <code>post_</code> and <code>err_</code> hooks for the same method can never both run for a single execution of that method.</p>
+
+<h2 id="hookable-methods">Hookable Methods</h2>
+
+<p>You can associate <code>pre_</code>, <code>post_</code>, and <code>err_</code> hooks with the following methods. Since you do not directly interact with the methods, but rather the Aurora Command Line commands that call them, for each method we also list the command(s) that can call the method. Note that a different method or methods may be called by a command depending on how the command&rsquo;s other code executes. Similarly, multiple commands can call the same method. We also list the methods&#39; argument signatures, which are used by their associated hooks. <a name="Chart"></a></p>
+
+<table><thead>
+<tr>
+<th>Aurora Client API Method</th>
+<th>Client API Method Argument Signature</th>
+<th>Aurora Command Line Command</th>
+</tr>
+</thead><tbody>
+<tr>
+<td><code>cancel_update</code></td>
+<td><code>self</code>, <code>job_key</code></td>
+<td><code>cancel_update</code></td>
+</tr>
+<tr>
+<td><code>create_job</code></td>
+<td><code>self</code>, <code>config</code></td>
+<td><code>create</code>, <code>runtask</td>
+</tr>
+<tr>
+<td><code>restart</code></td>
+<td><code>self</code>, <code>job_key</code>, <code>shards</code>, <code>update_config</code>, <code>health_check_interval_seconds</code></td>
+<td><code>restart</code></td>
+</tr>
+<tr>
+<td><code>update_job</code></td>
+<td><code>self</code>, <code>config</code>, <code>health_check_interval_seconds=3</code>, <code>shards=None</code></td>
+<td><code>update</code></td>
+</tr>
+<tr>
+<td><code>kill_job</code></td>
+<td><code>self</code>, <code>job_key</code>, <code>shards=None</code></td>
+<td><code>kill</code></td>
+</tr>
+</tbody></table>
+
+<p>Some specific examples:</p>
+
+<ul>
+<li><p><code>pre_create_job</code> executes when a <code>create_job</code> method is called, and before the <code>create_job</code> method itself executes.</p></li>
+<li><p><code>post_cancel_update</code> executes after a <code>cancel_update</code> method has successfully finished running.</p></li>
+<li><p><code>err_kill_job</code> executes when the <code>kill_job</code> method is called, but doesn&rsquo;t successfully finish running.</p></li>
+</ul>
+
+<h2 id="activating-and-using-hooks">Activating and Using Hooks</h2>
+
+<p>By default, hooks are inactive. If you do not want to use hooks, you do not need to make any changes to your code. If you do want to use hooks, you will need to alter your <code>.aurora</code> config file to activate them both for the configuration as a whole as well as for individual <code>Job</code>s. And, of course, you will need to define in your config file what happens when a particular hook executes.</p>
+
+<h2 id=".aurora-config-file-settings">.aurora Config File Settings</h2>
+
+<p>You can define a top-level <code>hooks</code> variable in any <code>.aurora</code> config file. <code>hooks</code> is a list of all objects that define hooks used by <code>Job</code>s defined in that config file. If you do not want to define any hooks for a configuration, <code>hooks</code> is optional.</p>
+<pre class="highlight text">hooks = [Object_with_defined_hooks1, Object_with_defined_hooks2]
+</pre>
+<p>Be careful when assembling a config file using <code>include</code> on multiple smaller config files. If there are multiple files that assign a value to <code>hooks</code>, only the last assignment made will stick. For example, if <code>x.aurora</code> has <code>hooks = [a, b, c]</code> and <code>y.aurora</code> has <code>hooks = [d, e, f]</code> and <code>z.aurora</code> has, in this order, <code>include x.aurora</code> and <code>include y.aurora</code>, the <code>hooks</code> value will be <code>[d, e, f]</code>.</p>
+
+<p>Also, for any <code>Job</code> that you want to use hooks with, its <code>Job</code> definition in the <code>.aurora</code> config file must set an <code>enable_hooks</code> flag to <code>True</code> (it defaults to <code>False</code>). By default, hooks are disabled and you must enable them for <code>Job</code>s of your choice.</p>
+
+<p>To summarize, to use hooks for a particular job, you must both activate hooks for your config file as a whole, and for that job. Activating hooks only for individual jobs won&rsquo;t work, nor will only activating hooks for your config file as a whole. You must also specify the hooks&#39; defining object in the <code>hooks</code> variable.</p>
+
+<p>Recall that <code>.aurora</code> config files are written in Pystachio. So the following turns on hooks for production jobs at cluster1 and cluster2, but leaves them off for similar jobs with a defined user role. Of course, you also need to list the objects that define the hooks in your config file&rsquo;s <code>hooks</code> variable.</p>
+<pre class="highlight python"><span class="n">jobs</span> <span class="o">=</span> <span class="p">[</span>
+        <span class="n">Job</span><span class="p">(</span><span class="n">enable_hooks</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span> <span class="n">cluster</span> <span class="o">=</span> <span class="n">c</span><span class="p">,</span> <span class="n">env</span> <span class="o">=</span> <span class="s">&#39;prod&#39;</span><span class="p">)</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;cluster1&#39;</span><span class="p">,</span> <span class="s">&#39;cluster2&#39;</span><span class="p">)</span>
+       <span class="p">]</span>
+<span class="n">jobs</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span>
+   <span class="n">Job</span><span class="p">(</span><span class="n">cluster</span> <span class="o">=</span> <span class="n">c</span><span class="p">,</span> <span class="n">env</span> <span class="o">=</span> <span class="s">&#39;prod&#39;</span><span class="p">,</span> <span class="n">role</span> <span class="o">=</span> <span class="n">getpass</span><span class="o">.</span><span class="n">getuser</span><span class="p">())</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;cluster1&#39;</span><span class="p">,</span> <span class="s">&#39;cluster2&#39;</span><span class="p">))</span>
+   <span class="c"># Hooks disabled for these jobs</span>
+</pre>
+<h2 id="command-line">Command Line</h2>
+
+<p>All Aurora Command Line commands now accept an <code>.aurora</code> config file as an optional parameter (some, of course, accept it as a required parameter). Whenever a command has a <code>.aurora</code> file parameter, any hooks specified and activated in the <code>.aurora</code> file can be used. For example:</p>
+<pre class="highlight text">aurora restart cluster1/role/env/app myapp.aurora
+</pre>
+<p>The command activates any hooks specified and activated in <code>myapp.aurora</code>. For the <code>restart</code> command, that is the only thing the <code>myapp.aurora</code> parameter does. So, if the command was the following, since there is no <code>.aurora</code> config file to specify any hooks, no hooks on the <code>restart</code> command can run.</p>
+<pre class="highlight text">aurora restart cluster1/role/env/app
+</pre>
+<h2 id="hooks-protocol">Hooks Protocol</h2>
+
+<p>Any object defined in the <code>.aurora</code> config file can define hook methods. You should define your hook methods within a class, and then use the class name as a value in the <code>hooks</code> list in your config file.</p>
+
+<p>Note that you can define other methods in the class that its hook methods can call; all the logic of a hook does not have to be in its definition.</p>
+
+<p>The following example defines a class containing a <code>pre_kill_job</code> hook definition that calls another method defined in the class.</p>
+<pre class="highlight python"><span class="c"># Defines a method pre_kill_job</span>
+<span class="k">class</span> <span class="nc">KillConfirmer</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+  <span class="k">def</span> <span class="nf">confirm</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">):</span>
+    <span class="k">return</span> <span class="nb">raw_input</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;yes&#39;</span>
+
+  <span class="k">def</span> <span class="nf">pre_kill_job</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">job_key</span><span class="p">,</span> <span class="n">shards</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+    <span class="n">shards</span> <span class="o">=</span> <span class="p">(</span><span class="s">&#39;shards </span><span class="si">%</span><span class="s">s&#39;</span> <span class="o">%</span> <span class="n">shards</span><span class="p">)</span> <span class="k">if</span> <span class="n">shards</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="k">else</span> <span class="s">&#39;all shards&#39;</span>
+    <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">confirm</span><span class="p">(</span><span class="s">&#39;Are you sure you want to kill </span><span class="si">%</span><span class="s">s (</span><span class="si">%</span><span class="s">s)? (yes/no): &#39;</span>
+                        <span class="o">%</span> <span class="p">(</span><span class="n">job_key</span><span class="p">,</span> <span class="n">shards</span><span class="p">))</span>
+</pre>
+<h3 id="pre_-methods">pre_ Methods</h3>
+
+<p><code>pre_</code> methods have the signature:</p>
+<pre class="highlight text">pre_&lt;API method name&gt;(self, &lt;associated method&#39;s signature&gt;)
+</pre>
+<p><code>pre_</code> methods have the same signature as their associated method, with the addition of <code>self</code> as the first parameter. See the <a href="#Chart">chart</a> above for the mapping of parameters to methods. When writing <code>pre_</code> methods, you can use the <code>*</code> and <code>**</code> syntax to designate that all unspecified parameters are passed in a list to the <code>*</code>ed variable and all named parameters with values are passed as name/value pairs to the <code>**</code>ed variable.</p>
+
+<p>If this method returns False, the API command call aborts.</p>
+
+<h3 id="err_-methods">err_ Methods</h3>
+
+<p><code>err_</code> methods have the signature:</p>
+<pre class="highlight text">err_&lt;API method name&gt;(self, exc, &lt;associated method&#39;s signature&gt;)
+</pre>
+<p><code>err_</code> methods have the same signature as their associated method, with the addition of a first parameter <code>self</code> and a second parameter <code>exc</code>. <code>exc</code> is either a result with responseCode other than <code>ResponseCode.OK</code> or an <code>Exception</code>. See the <a href="#Chart">chart</a> above for the mapping of parameters to methods. When writing <code>err</code>_ methods, you can use the <code>*</code> and <code>**</code> syntax to designate that all unspecified parameters are passed in a list to the <code>*</code>ed variable and all named parameters with values are passed as name/value pairs to the <code>**</code>ed variable.</p>
+
+<p><code>err_</code> method return codes are ignored.</p>
+
+<h3 id="post_-methods">post_ Methods</h3>
+
+<p><code>post_</code> methods have the signature:</p>
+<pre class="highlight text">post_&lt;API method name&gt;(self, result, &lt;associated method signature&gt;)
+</pre>
+<p><code>post_</code> method parameters are <code>self</code>, then <code>result</code>, followed by the same parameter signature as their associated method. <code>result</code> is the result of the associated method call. See the <a href="#chart">chart</a> above for the mapping of parameters to methods. When writing <code>post_</code> methods, you can use the <code>*</code> and <code>**</code> syntax to designate that all unspecified arguments are passed in a list to the <code>*</code>ed parameter and all unspecified named arguments with values are passed as name/value pairs to the <code>**</code>ed parameter.</p>
+
+<p><code>post_</code> method return codes are ignored.</p>
+
+<h2 id="generic-hooks">Generic Hooks</h2>
+
+<p>There are five Aurora API Methods which any of the three hook types can attach to. Thus, there are 15 possible hook/method combinations for a single <code>.aurora</code> config file. Say that you define <code>pre_</code> and <code>post_</code> hooks for the <code>restart</code> method. That leaves 13 undefined hook/method combinations; <code>err_restart</code> and the 3 <code>pre_</code>, <code>post_</code>, and <code>err_</code> hooks for each of the other 4 hookable methods. You can define what happens when any of these otherwise undefined 13 hooks execute via a generic hook, whose signature is:</p>
+<pre class="highlight python"><span class="n">generic_hook</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hook_config</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="n">method_name</span><span class="p">,</span> <span class="n">result_or_err</span><span class="p">,</span> <span class="n">args</span><span class="o">*</span><span class="p">,</span> <span class="n">kw</span><span class="o">**</span><span class="p">)</span>
+</pre>
+<p>where:</p>
+
+<ul>
+<li><p><code>hook_config</code> is a named tuple of <code>config</code> (the Pystashio <code>config</code> object) and <code>job_key</code>.</p></li>
+<li><p><code>event</code> is one of <code>pre</code>, <code>err</code>, or <code>post</code>, indicating which type of hook the genetic hook is standing in for. For example, assume no specific hooks were defined for the <code>restart</code> API command. If <code>generic_hook</code> is defined and activated, and <code>restart</code> is called, <code>generic_hook</code> will effectively run as <code>pre_restart</code>, <code>post_restart</code>, and <code>err_restart</code>. You can use a selection statement on this value so that <code>generic_hook</code> will act differently based on whether it is standing in for a <code>pre_</code>, <code>post_</code>, or <code>err_</code> hook.</p></li>
+<li><p><code>method_name</code> is the Client API method name whose execution is causing this execution of the <code>generic_hook</code>.</p></li>
+<li><p><code>args*</code>, <code>kw**</code> are the API method arguments and keyword arguments respectively.</p></li>
+<li><p><code>result_or_err</code> is a tri-state parameter taking one of these three values:</p>
+
+<ol>
+<li>None for <code>pre_</code>hooks</li>
+<li><code>result</code> for <code>post_</code> nooks</li>
+<li><code>exc</code> for <code>err_</code> hooks</li>
+</ol></li>
+</ul>
+
+<p>Example:</p>
+<pre class="highlight python"><span class="c"># Overrides the standard do-nothing generic_hook by adding a log writing operation.</span>
+<span class="kn">from</span> <span class="nn">twitter.common</span> <span class="kn">import</span> <span class="n">log</span>
+  <span class="k">class</span> <span class="nc">Logger</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="s">&#39;&#39;&#39;Adds to the log every time a hookable API method is called&#39;&#39;&#39;</span>
+    <span class="k">def</span> <span class="nf">generic_hook</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hook_config</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="n">method_name</span><span class="p">,</span> <span class="n">result_or_err</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">)</span>
+      <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&#39;</span><span class="si">%</span><span class="s">s: </span><span class="si">%</span><span class="s">s_</span><span class="si">%</span><span class="s">s of </span><span class="si">%</span><span class="s">s&#39;</span>
+               <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="n">method_name</span><span class="p">,</span> <span class="n">hook_config</span><span class="o">.</span><span class="n">job_key</span><span class="p">))</span>
+</pre>
+<h2 id="hooks-process-checklist">Hooks Process Checklist</h2>
+
+<ol>
+<li>In your <code>.aurora</code> config file, add a <code>hooks</code> variable. Note that you may want to define a <code>.aurora</code> file only for hook definitions and then include this file in multiple other config files that you want to use the same hooks.</li>
+</ol>
+<pre class="highlight python"><span class="n">hooks</span> <span class="o">=</span> <span class="p">[]</span>
+</pre>
+<ol>
+<li>In the <code>hooks</code> variable, list all objects that define hooks used by <code>Job</code>s defined in this config:</li>
+</ol>
+<pre class="highlight python"><span class="n">hooks</span> <span class="o">=</span> <span class="p">[</span><span class="n">Object_hook_definer1</span><span class="p">,</span> <span class="n">Object_hook_definer2</span><span class="p">]</span>
+</pre>
+<ol>
+<li><p>For each job that uses hooks in this config file, add <code>enable_hooks = True</code> to the <code>Job</code> definition. Note that this is necessary even if you only want to use the generic hook.</p></li>
+<li><p>Write your <code>pre_</code>, <code>post_</code>, and <code>err_</code> hook definitions as part of an object definition in your <code>.aurora</code> config file.</p></li>
+<li><p>If desired, write your <code>generic_hook</code> definition as part of an object definition in your <code>.aurora</code> config file. Remember, the object must be listed as a member of <code>hooks</code>.</p></li>
+<li><p>If your Aurora command line command does not otherwise take an <code>.aurora</code> config file argument, add the appropriate <code>.aurora</code> file as an argument in order to define and activate the configuration&rsquo;s hooks.</p></li>
+</ol>
+
+  		</div>
+  	  </div>
+	  
+      	<div class="container-fluid section-footer buffer">
+      <div class="container">
+        <div class="row">
+		  <div class="col-md-2 col-md-offset-1"><h3>Quick Links</h3>
+		  <ul>
+		    <li><a href="/downloads/">Downloads</a></li>
+            <li><a href="/community/">Mailing Lists</a></li>
+			<li><a href="http://issues.apache.org/jira/browse/AURORA">Issue Tracking</a></li>
+			<li><a href="/documentation/latest/contributing/">How To Contribute</a></li>     
+		  </ul>
+	      </div>
+		  <div class="col-md-2"><h3>The ASF</h3>
+          <ul>
+            <li><a href="http://www.apache.org/licenses/">License</a></li>
+            <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>  
+            <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+            <li><a href="http://www.apache.org/security/">Security</a></li>
+          </ul>
+		  </div>
+		  <div class="col-md-6">
+		    <p class="disclaimer">Apache Aurora is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</p>
+			<p class="disclaimer">Copyright 2014 <a href="http://www.apache.org/">Apache Software Foundation</a>. Licensed under the <a href="http://www.apache.org/licenses/">Apache License v2.0</a>. The <a href="https://www.flickr.com/photos/trondk/12706051375/">Aurora Borealis IX photo</a> displayed on the homepage is available under a <a href="https://creativecommons.org/licenses/by-nc-nd/2.0/">Creative Commons BY-NC-ND 2.0 license</a>. Apache, Apache Aurora, and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
+        </div>
+      </div>
+    </div>
+	</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-aurora-website/blob/c43a3a2d/publish/documentation/latest/images/CPUavailability.png
----------------------------------------------------------------------
diff --git a/publish/documentation/latest/images/CPUavailability.png b/publish/documentation/latest/images/CPUavailability.png
new file mode 100644
index 0000000..eb4f5c1
Binary files /dev/null and b/publish/documentation/latest/images/CPUavailability.png differ

http://git-wip-us.apache.org/repos/asf/incubator-aurora-website/blob/c43a3a2d/publish/documentation/latest/images/HelloWorldJob.png
----------------------------------------------------------------------
diff --git a/publish/documentation/latest/images/HelloWorldJob.png b/publish/documentation/latest/images/HelloWorldJob.png
new file mode 100644
index 0000000..7a89575
Binary files /dev/null and b/publish/documentation/latest/images/HelloWorldJob.png differ

http://git-wip-us.apache.org/repos/asf/incubator-aurora-website/blob/c43a3a2d/publish/documentation/latest/images/RoleJobs.png
----------------------------------------------------------------------
diff --git a/publish/documentation/latest/images/RoleJobs.png b/publish/documentation/latest/images/RoleJobs.png
new file mode 100644
index 0000000..d41ee0b
Binary files /dev/null and b/publish/documentation/latest/images/RoleJobs.png differ

http://git-wip-us.apache.org/repos/asf/incubator-aurora-website/blob/c43a3a2d/publish/documentation/latest/images/ScheduledJobs.png
----------------------------------------------------------------------
diff --git a/publish/documentation/latest/images/ScheduledJobs.png b/publish/documentation/latest/images/ScheduledJobs.png
new file mode 100644
index 0000000..21bfcae
Binary files /dev/null and b/publish/documentation/latest/images/ScheduledJobs.png differ

http://git-wip-us.apache.org/repos/asf/incubator-aurora-website/blob/c43a3a2d/publish/documentation/latest/images/TaskBreakdown.png
----------------------------------------------------------------------
diff --git a/publish/documentation/latest/images/TaskBreakdown.png b/publish/documentation/latest/images/TaskBreakdown.png
new file mode 100644
index 0000000..125a4e9
Binary files /dev/null and b/publish/documentation/latest/images/TaskBreakdown.png differ

http://git-wip-us.apache.org/repos/asf/incubator-aurora-website/blob/c43a3a2d/publish/documentation/latest/images/aurora_hierarchy.png
----------------------------------------------------------------------
diff --git a/publish/documentation/latest/images/aurora_hierarchy.png b/publish/documentation/latest/images/aurora_hierarchy.png
new file mode 100644
index 0000000..03d596d
Binary files /dev/null and b/publish/documentation/latest/images/aurora_hierarchy.png differ

http://git-wip-us.apache.org/repos/asf/incubator-aurora-website/blob/c43a3a2d/publish/documentation/latest/images/killedtask.png
----------------------------------------------------------------------
diff --git a/publish/documentation/latest/images/killedtask.png b/publish/documentation/latest/images/killedtask.png
new file mode 100644
index 0000000..b173698
Binary files /dev/null and b/publish/documentation/latest/images/killedtask.png differ

http://git-wip-us.apache.org/repos/asf/incubator-aurora-website/blob/c43a3a2d/publish/documentation/latest/images/lifeofatask.png
----------------------------------------------------------------------
diff --git a/publish/documentation/latest/images/lifeofatask.png b/publish/documentation/latest/images/lifeofatask.png
new file mode 100644
index 0000000..e94d160
Binary files /dev/null and b/publish/documentation/latest/images/lifeofatask.png differ

http://git-wip-us.apache.org/repos/asf/incubator-aurora-website/blob/c43a3a2d/publish/documentation/latest/images/runningtask.png
----------------------------------------------------------------------
diff --git a/publish/documentation/latest/images/runningtask.png b/publish/documentation/latest/images/runningtask.png
new file mode 100644
index 0000000..7f7553c
Binary files /dev/null and b/publish/documentation/latest/images/runningtask.png differ

http://git-wip-us.apache.org/repos/asf/incubator-aurora-website/blob/c43a3a2d/publish/documentation/latest/images/stderr.png
----------------------------------------------------------------------
diff --git a/publish/documentation/latest/images/stderr.png b/publish/documentation/latest/images/stderr.png
new file mode 100644
index 0000000..b83ccfa
Binary files /dev/null and b/publish/documentation/latest/images/stderr.png differ

http://git-wip-us.apache.org/repos/asf/incubator-aurora-website/blob/c43a3a2d/publish/documentation/latest/images/stdout.png
----------------------------------------------------------------------
diff --git a/publish/documentation/latest/images/stdout.png b/publish/documentation/latest/images/stdout.png
new file mode 100644
index 0000000..fb4e0b7
Binary files /dev/null and b/publish/documentation/latest/images/stdout.png differ

http://git-wip-us.apache.org/repos/asf/incubator-aurora-website/blob/c43a3a2d/publish/documentation/latest/images/storage_hierarchy.png
----------------------------------------------------------------------
diff --git a/publish/documentation/latest/images/storage_hierarchy.png b/publish/documentation/latest/images/storage_hierarchy.png
new file mode 100644
index 0000000..621d2d0
Binary files /dev/null and b/publish/documentation/latest/images/storage_hierarchy.png differ

http://git-wip-us.apache.org/repos/asf/incubator-aurora-website/blob/c43a3a2d/publish/documentation/latest/index.html
----------------------------------------------------------------------
diff --git a/publish/documentation/latest/index.html b/publish/documentation/latest/index.html
new file mode 100644
index 0000000..74ea210
--- /dev/null
+++ b/publish/documentation/latest/index.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+	<title>Apache Aurora</title>
+    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
+    <link href="/assets/css/main.css" rel="stylesheet">
+	<!-- Analytics -->
+	<script type="text/javascript">
+		  var _gaq = _gaq || [];
+		  _gaq.push(['_setAccount', 'UA-45879646-1']);
+		  _gaq.push(['_setDomainName', 'apache.org']);
+		  _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>
+  </head>
+  <body>
+	  
+        <div class="container-fluid section-header">
+  <div class="container">
+    <div class="nav nav-bar">
+    <a href="/"><img src="/assets/img/aurora_logo_white_bkg.svg" width="300" alt="Transparent Apache Aurora logo with dark background"/></a>
+	<ul class="nav navbar-nav navbar-right">
+      <li><a href="/documentation/latest/">Documentation</a></li>
+      <li><a href="/community/">Community</a></li>
+      <li><a href="/downloads/">Downloads</a></li>
+      <li><a href="/blog/">Blog</a></li>
+    </ul>
+    </div>
+  </div>
+</div>	
+  	  <div class="container-fluid">
+  	  	<div class="container content">
+          <h1 id="documentation">Documentation</h1>
+
+<h2 id="introduction">Introduction</h2>
+
+<p>Apache Aurora is a service scheduler that runs on top of Apache Mesos, enabling you to run long-running services that take advantage of Apache Mesos&#39; scalability, fault-tolerance, and resource isolation. This documentation has been organized into sections with three audiences in mind:</p>
+
+<ul>
+<li>Users: General information about the project and to learn how to run an Aurora job.</li>
+<li>Operators: For those that wish to manage and fine-tune an Aurora cluster.</li>
+<li>Developers: All the information you need to start modifying Aurora and contributing back to the project.</li>
+</ul>
+
+<p>This documentation is a work in progress, and we encourage you to ask questions on the <a href="http://aurora.incubator.apache.org/community/">Aurora developer list</a> or the <code>#aurora</code> IRC channel on <code>irc.freenode.net</code>.</p>
+
+<h2 id="users">Users</h2>
+
+<ul>
+<li><a href="/documentation/latest/vagrant/">Install Aurora on virtual machines on your private machine</a></li>
+<li><a href="/documentation/latest/tutorial/">Hello World Tutorial</a></li>
+<li><a href="/documentation/latest/user-guide/">User Guide</a></li>
+<li><a href="/documentation/latest/configuration-tutorial/">Configuration Tutorial</a></li>
+<li><a href="/documentation/latest/configuration-reference/">Aurora + Thermos Reference</a></li>
+<li><a href="/documentation/latest/client-commands/">Command Line Client</a></li>
+<li><a href="/documentation/latest/clientv2/">Aurora Client v2</a></li>
+<li><a href="/documentation/latest/cron-jobs/">Cron Jobs</a></li>
+</ul>
+
+<h2 id="operators">Operators</h2>
+
+<ul>
+<li><a href="/documentation/latest/deploying-aurora-scheduler/">Deploy Aurora</a></li>
+<li><a href="/documentation/latest/monitoring/">Monitoring</a></li>
+<li><a href="/documentation/latest/hooks/">Hooks for Aurora Client API</a></li>
+<li><a href="/documentation/latest/storage/">Scheduler Storage</a></li>
+<li><a href="/documentation/latest/storage-config/">Scheduler Storage and Maintenance</a></li>
+<li><a href="/documentation/latest/sla/">SLA Measurement</a></li>
+<li><a href="/documentation/latest/resource-isolation/">Resource Isolation and Sizing</a></li>
+<li><a href="/documentation/latest/test-resource-generation/">Generating test resources</a></li>
+</ul>
+
+<h2 id="developers">Developers</h2>
+
+<ul>
+<li><a href="/documentation/latest/contributing/">Contributing to the project</a></li>
+<li><a href="/documentation/latest/developing-aurora-scheduler/">Developing the Aurora Scheduler</a></li>
+<li><a href="/documentation/latest/developing-aurora-client/">Developing the Aurora Client</a></li>
+<li><a href="/documentation/latest/committers/">Committers Guide</a></li>
+</ul>
+
+  		</div>
+  	  </div>
+	  
+      	<div class="container-fluid section-footer buffer">
+      <div class="container">
+        <div class="row">
+		  <div class="col-md-2 col-md-offset-1"><h3>Quick Links</h3>
+		  <ul>
+		    <li><a href="/downloads/">Downloads</a></li>
+            <li><a href="/community/">Mailing Lists</a></li>
+			<li><a href="http://issues.apache.org/jira/browse/AURORA">Issue Tracking</a></li>
+			<li><a href="/documentation/latest/contributing/">How To Contribute</a></li>     
+		  </ul>
+	      </div>
+		  <div class="col-md-2"><h3>The ASF</h3>
+          <ul>
+            <li><a href="http://www.apache.org/licenses/">License</a></li>
+            <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>  
+            <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+            <li><a href="http://www.apache.org/security/">Security</a></li>
+          </ul>
+		  </div>
+		  <div class="col-md-6">
+		    <p class="disclaimer">Apache Aurora is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</p>
+			<p class="disclaimer">Copyright 2014 <a href="http://www.apache.org/">Apache Software Foundation</a>. Licensed under the <a href="http://www.apache.org/licenses/">Apache License v2.0</a>. The <a href="https://www.flickr.com/photos/trondk/12706051375/">Aurora Borealis IX photo</a> displayed on the homepage is available under a <a href="https://creativecommons.org/licenses/by-nc-nd/2.0/">Creative Commons BY-NC-ND 2.0 license</a>. Apache, Apache Aurora, and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
+        </div>
+      </div>
+    </div>
+	</body>
+</html>
\ No newline at end of file