Attempt to make the home page less of a wall of text. Probably more to come.

pull/1256/head
Michael DeHaan 13 years ago
parent db19d83e40
commit 10fc56adf0

@ -28,7 +28,7 @@
<link rel="shortcut icon" href="_static/favicon.ico"/> <link rel="shortcut icon" href="_static/favicon.ico"/>
<link rel="top" title="Ansible - SSH-Based Configuration Management &amp; Deployment" href="index.html" /> <link rel="top" title="Ansible - SSH-Based Configuration Management &amp; Deployment" href="index.html" />
<link rel="next" title="Inventory &amp; Patterns" href="patterns.html" /> <link rel="next" title="Inventory &amp; Patterns" href="patterns.html" />
<link rel="prev" title="The Future Is Now" href="index.html" /> <link rel="prev" title="Introducing Ansible" href="index.html" />
<script type="text/javascript"> <script type="text/javascript">
(function () { (function () {
/** /**

@ -6,7 +6,7 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>The Future Is Now &mdash; Ansible - SSH-Based Configuration Management &amp; Deployment</title> <title>Introducing Ansible &mdash; Ansible - SSH-Based Configuration Management &amp; Deployment</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" /> <link rel="stylesheet" href="_static/default.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/bootstrap.css" type="text/css" /> <link rel="stylesheet" href="_static/bootstrap.css" type="text/css" />
@ -147,18 +147,12 @@ s.parentNode.insertBefore(ga, s);
<a href="#" <a href="#"
class="dropdown-toggle">Page</a> class="dropdown-toggle">Page</a>
<span class="localtoc"><ul> <span class="localtoc"><ul>
<li><a class="reference internal" href="#">The Future Is Now</a></li> <li><a class="reference internal" href="#">Introducing Ansible</a></li>
<li><a class="reference internal" href="#innovative-multi-node-control">Innovative Multi-node Control</a></li>
<li><a class="reference internal" href="#deployment-and-configuration-unified">Deployment and Configuration, Unified</a></li>
<li><a class="reference internal" href="#simple-secure-by-default">Simple &amp; Secure By Default</a></li>
<li><a class="reference internal" href="#architecture">Architecture</a></li> <li><a class="reference internal" href="#architecture">Architecture</a></li>
<li><a class="reference internal" href="#features">Features</a></li>
<li><a class="reference internal" href="#what-people-are-saying">What People Are Saying</a></li>
<li><a class="reference internal" href="#resources">Resources</a></li> <li><a class="reference internal" href="#resources">Resources</a></li>
<li><a class="reference internal" href="#contents">Contents</a><ul> <li><a class="reference internal" href="#documentation">Documentation</a><ul>
</ul> </ul>
</li> </li>
<li><a class="reference internal" href="#presented-by">Presented By...</a></li>
</ul> </ul>
</span> </span>
</li> </li>
@ -184,77 +178,104 @@ s.parentNode.insertBefore(ga, s);
<a href="http://ansible.github.com"><img src="http://ansible.github.com/ansible-logo.png" alt="Ansible"/></a><br/> <a href="http://ansible.github.com"><img src="http://ansible.github.com/ansible-logo.png" alt="Ansible"/></a><br/>
<br/> <br/>
<div class="section" id="the-future-is-now"> <div class="section" id="introducing-ansible">
<h1>The Future Is Now<a class="headerlink" href="#the-future-is-now" title="Permalink to this headline"></a></h1> <h1>Introducing Ansible<a class="headerlink" href="#introducing-ansible" title="Permalink to this headline"></a></h1>
<p>Ansible is a radically simple model-driven configuration management, deployment, <p>Ansible is a radically simple model-driven configuration management, deployment,
and command execution framework. Other tools in this space have been too and command execution framework. Other tools in this space have been too complicated for too long,
complicated for too long, require too much bootstrapping, and have too require too much bootstrapping, and have too much learning curve. By comparison, Ansible is dead simple
much learning curve. Ansible is dead simple and painless to extend. and painless to extend. Puppet and Chef have about 60k lines of code. Ansible&#8217;s core is a little over 2000 lines.</p>
For comparison, Puppet and Chef have about 60k lines of code. <p>Ansible isn&#8217;t just for configuration management &#8211; it&#8217;s also great for ad-hoc tasks, quickly firing off commands against nodes, and it excels at complex multi-node deployment tasks, being designed for that purpose from day one.</p>
Ansible&#8217;s core is a little over 2000 lines..</p> <p>Systems management doesn&#8217;t have to be complicated. We&#8217;ve learned well from the &#8220;Infrastructure is Code&#8221; movement.
<p>Ansible isn&#8217;t just for idempotent configuration &#8211; it&#8217;s also great for ad-hoc Infrastructure should be easy and powerful to command, but it should not look like code, lest it acquire the disadvantages of a software project &#8211; bugs, complexity, and overhead. Infrastructure configurations should be simple, easy to develop, and easy to audit. This is Ansible&#8217;s philosophy and the main reason it&#8217;s different. Read on, though, and we&#8217;ll tell you more.</p>
tasks, quickly firing off commands against nodes. See <a class="reference internal" href="examples.html"><em>Command Line</em></a>.</p> <table border="1" class="docutils">
</div> <colgroup>
<div class="section" id="innovative-multi-node-control"> <col width="100%" />
<h1>Innovative Multi-node Control<a class="headerlink" href="#innovative-multi-node-control" title="Permalink to this headline"></a></h1> </colgroup>
<p>Where Ansible excels though, is expressing complex multi-node <thead valign="bottom">
deployment processes, executing ordered sequences on <tr><th class="head">Key Features</th>
different sets of nodes through <a class="reference internal" href="playbooks.html"><em>Playbooks</em></a>. Playbooks contain one or </tr>
more plays, each executed against a different batch of nodes. Think about </thead>
webservers, database servers, and backend servers in a multi-node web environment. A play can address each set of machines in a cycle, ensuring the configurations of the machines were correct and also updating them to the specified <tbody valign="top">
version of software if required.</p> <tr><td>Dead simple setup</td>
<p>Multi-machine software deployment is poorly solved by most systems management tools &#8211; often due to architectural nature of being pull oriented and having complex ordering systems, they cover configuration but fail at deployment when updating tiers of machines in well defined steps. This results in using two (or more) logically distinct tools and having complex overlap between them.</p> </tr>
<p>If you actually do need pull oriented mode, though, Ansible 0.4 and later can run playbooks in pull mode as well. <tr><td>Super fast &amp; parallel by default</td>
This is useful in extreme scaling scenarios or when automatic system remediation is desired. Since Ansible remains </tr>
server and daemonless, scaling potential is unlimited, and no resources are wasted on running management daemons.</p> <tr><td>No server or client daemons; use existing SSHd out of the box</td>
</div> </tr>
<div class="section" id="deployment-and-configuration-unified"> <tr><td>Supports Kerberized SSH, jump hosts, forwarding, etc</td>
<h1>Deployment and Configuration, Unified<a class="headerlink" href="#deployment-and-configuration-unified" title="Permalink to this headline"></a></h1> </tr>
<p>Other deployment (compared to config) oriented frameworks similarly cover deployment well but lack a strongly defined resource model and devolve into glorified remote scripts. Ansible playbooks &#8211; having been designed with this problem in mind &#8211; are good at both deployment &amp; idempotent configuration, meaning you don&#8217;t have to spread your infrastructure management out between different tools (Puppet+Capistrano, Chef+Fabric, etc). Performing ordered steps between different classes of machines is no problem, yet our modules affect system state only when required &#8211; while avoiding the problem of fragile scripting that assumes certain starting or ending states.</p> <tr><td>No additional software required on client boxes</td>
<p>Ansible is also unique in other ways. Extending ansible does not require programming in any particular language &#8211; you can write <a class="reference internal" href="modules.html"><em>Ansible Modules</em></a> as idempotent scripts or programs that return simple JSON. Ansible is also pragmatic, so when you need to, it&#8217;s also trivially easy to just execute useful shell commands.</p> </tr>
<p>Why use Ansible versus other configuration management tools? (Puppet, Chef, etc?) Ansible will have far <tr><td>Can be easily run from a checkout, no installation required</td>
less code, it will be (by extension) more correct, and it will be the </tr>
easiest thing to hack on and use you&#8217;ll ever see &#8211; regardless of your <tr><td>Modules are idempotent, but you can also easily use shell commands</td>
favorite language of choice. Versus other deployment tools? (Capistrano, Fabric?). Ansible playbooks are easier </tr>
to use (not being code) and also allows intermixing of idempotent configuration management rules for a higher level <tr><td>Modules can be written in ANY language</td>
of control. Further, it was designed for deploying multi-node applications from the beginning.</p> </tr>
</div> <tr><td>Awesome API for creating very powerful distributed scripts</td>
<div class="section" id="simple-secure-by-default"> </tr>
<h1>Simple &amp; Secure By Default<a class="headerlink" href="#simple-secure-by-default" title="Permalink to this headline"></a></h1> <tr><td>Does not have to run remote steps as root</td>
<p>Compared with most configuration managememnt tools, Ansible is also much more secure. While most configuration management tools use a daemon, running as root with full access to the system, with its own in-house developed PKI infrastructure, Ansible just uses SSH (and supports sudo as neccesssary). There is no additional attack surface and OpenSSH is one of the most peer reviewed security components out there. </tr>
If a central server containing your playbooks are comprimised, your nodes are not &#8211; which is NOT the case <tr><td>Pluggable transports (SSH is just the default)</td>
of these other tools, which can, more or less, turn into a botnet. Our security approach is to avoid writing custom </tr>
crypto code altogether, and rely on the most secure part of the Linux/Unix subsystem that your machines are already using. There is no PKI subsystem to maintain, which can be a frequent source of problems, particularly when reinstalling or migrating <tr><td>Source host info &amp; variables from files or external software</td>
hosts.</p> </tr>
<p>Systems management doesn&#8217;t have to be complicated. Ansible&#8217;s docs will remain short &amp; simple, and the source will be blindingly obvious. We&#8217;ve learned well from &#8220;Infrastructure is Code&#8221;. Infrastructure should be easy and powerful to command, but it should not look like code, lest it acquire the disadvantages of a software project &#8211; bugs, complexity, and overhead. Infrastructure configurations should be simple, easy to develop, and easy to audit.</p> <tr><td>The easiest config management system to use, ever.</td>
</tr>
</tbody>
</table>
</div> </div>
<div class="section" id="architecture"> <div class="section" id="architecture">
<h1>Architecture<a class="headerlink" href="#architecture" title="Permalink to this headline"></a></h1> <h1>Architecture<a class="headerlink" href="#architecture" title="Permalink to this headline"></a></h1>
<div align="center" class="align-center"><img alt="&quot;Architecture Diagram&quot;" class="align-center" src="http://ansible.github.com/ansible_arch2.jpg" style="width: 800px;" /></div> <div align="center" class="align-center"><img alt="&quot;Architecture Diagram&quot;" class="align-center" src="http://ansible.github.com/ansible_arch2.jpg" style="width: 800px;" /></div>
</div> <table border="1" class="docutils">
<div class="section" id="features"> <colgroup>
<h1>Features<a class="headerlink" href="#features" title="Permalink to this headline"></a></h1> <col width="35%" />
<ul class="simple"> <col width="65%" />
<li>Dead simple setup</li> </colgroup>
<li>Super fast &amp; parallel by default</li> <thead valign="bottom">
<li>No server or client daemons; use existing SSHd out of the box</li> <tr><th class="head" colspan="2">Tell Me More</th>
<li>Supports Kerberized SSH, jump hosts, forwarding, etc</li> </tr>
<li>No additional software required on client boxes</li> </thead>
<li>Can be easily run from a checkout, no installation required</li> <tbody valign="top">
<li>Modules are idempotent, but you can also easily use shell commands</li> <tr><td>Multi-node control &amp; orchestration</td>
<li>Modules can be written in ANY language</li> <td>Ansible is especially strong at expressing complex multi-node
<li>Awesome API for creating very powerful distributed scripts</li> deployment processes, executing ordered sequences on
<li>Does not have to run remote steps as root</li> different sets of nodes through <a class="reference internal" href="playbooks.html"><em>Playbooks</em></a>. Performing
<li>Pluggable transports (SSH is just the default)</li> steps on all your webservers, then some steps on your database
<li>Source host info &amp; variables from files or external software</li> servers, and then some steps on monitoring servers &#8211; all the
<li>The easiest config management system to use, ever.</li> while sharing variables between them is trivial.</td>
</ul> </tr>
</div> <tr><td>Doesn&#8217;t choose sides</td>
<div class="section" id="what-people-are-saying"> <td>Modules can be written in Bash, Perl, Python, Ruby, whatever.
<h1>What People Are Saying<a class="headerlink" href="#what-people-are-saying" title="Permalink to this headline"></a></h1> Playbooks are not a programming language, but a data format.</td>
<p>&#8220;I&#8217;ve been trying to grok Chef these last weeks, and really, I don&#8217;t get it. I discovered ansible yesterday at noon, successfully ran it at 1pm, made my first playbook by 2pm, and pushed two small [contributions to the project] before the office closed... Do that with any other config management software!&#8221;</p> </tr>
<p>&#8220;Ansible is much more firewall-friendly. I have a number of hosts that are only accessible via reverse SSH tunnels, and let me tell you getting puppet or chef to play nice with that is a nightmare.&#8221;</p> <tr><td>Infrastructure Is Not Code,
<p>&#8220;This software has really changed my life as an network admin, the simplicity ansible comes with is really childs-play and I really adore its design. No more hassle with SSL keys, DNS based &#8216;server entries&#8217; (e.g. puppet and what not). Just plain (secure!) SSH keys and one is good to go.&#8221;</p> Infrastructure Is Data</td>
<td>Playbooks are not a programming language, they are designed to be
super-easy to write, and easy to audit by non-developers. You
will be able to skim and very quickly understand your entire
configuration policy.</td>
</tr>
<tr><td>Three In One</td>
<td>Ansible handles multiple command and control
problems in one tool. You don&#8217;t need to use a config tool, a
deployment tool, and yet another ad-hoc parallel task execution
tool &#8211; Ansible will do all three.</td>
</tr>
<tr><td>Lower Attack Surface, No Agents</td>
<td>Ansible is very secure. Ansible uses SSH as a transport,
resulting in a much lower attack surface, and requires no agents
to be running on managed machines. If a central server
containing your playbooks are comprimised, your nodes are not &#8211;
which is NOT the case of most other tools, which can, more or
less, turn into a botnet. Our security approach is to avoid
writing custom crypto code altogether, and rely on the most
secure part of the Linux/Unix subsystem that your machines are
already using &#8211; openssh.</td>
</tr>
</tbody>
</table>
</div> </div>
<div class="section" id="resources"> <div class="section" id="resources">
<h1>Resources<a class="headerlink" href="#resources" title="Permalink to this headline"></a></h1> <h1>Resources<a class="headerlink" href="#resources" title="Permalink to this headline"></a></h1>
@ -266,179 +287,77 @@ you with questions about Ansible.</p>
<li>See the presentation on <a class="reference external" href="http://speakerdeck.com/u/mpdehaan/p/ansible">Speakerdeck</a></li> <li>See the presentation on <a class="reference external" href="http://speakerdeck.com/u/mpdehaan/p/ansible">Speakerdeck</a></li>
<li>Visit the <a class="reference external" href="http://groups.google.com/group/ansible-project">Google Group</a></li> <li>Visit the <a class="reference external" href="http://groups.google.com/group/ansible-project">Google Group</a></li>
<li>Chat on <a class="reference external" href="http://webchat.freenode.net/?channels=ansible">FreeNode</a></li> <li>Chat on <a class="reference external" href="http://webchat.freenode.net/?channels=ansible">FreeNode</a></li>
<li>Join the <a class="reference external" href="http://groups.google.com/group/ansible-project">Mailing List</a></li>
</ul> </ul>
<img src="http://groups.google.com/intl/en/images/logos/groups_logo_sm.gif" height=30 width=140 alt="Google Groups"> <table border="1" class="docutils">
<br/> <colgroup>
<b>Subscribe to Ansible Project</b> <col width="100%" />
<br/> </colgroup>
<form action="http://groups.google.com/group/ansible-project/boxsubscribe"> <thead valign="bottom">
<br/> <tr><th class="head">What People Are Saying</th>
Email: <input type=text name=email>&nbsp;&nbsp;<input type=submit name="sub" value="Subscribe"> </tr>
<br/></br> </thead>
</form> <tbody valign="top">
<br/></div> <tr><td>&#8220;I&#8217;ve been trying to grok Chef these last weeks, and really, I don&#8217;t get it. I discovered ansible
<div class="section" id="contents"> yesterday at noon, successfully ran it at 1pm, made my first playbook by 2pm, and pushed two small
<h1>Contents<a class="headerlink" href="#contents" title="Permalink to this headline"></a></h1> [contributions to the project] before the office closed... Do that with any other config management
software!&#8221;</td>
</tr>
<tr><td>&#8220;Ansible is much more firewall-friendly. I have a number of hosts that are only accessible via reverse
SSH tunnels, and let me tell you getting puppet or chef to play nice with that is a nightmare.&#8221;</td>
</tr>
<tr><td>&#8220;This software has really changed my life as an network admin, the simplicity ansible comes with is
really childs-play and I really adore its design. No more hassle with SSL keys, DNS based &#8216;server
entries&#8217; (e.g. puppet and what not). Just plain (secure!) SSH keys and one is good to go.&#8221;</td>
</tr>
<tr><td>You may get a kick out of the fact that I&#8217;m using ansible to install puppetmaster(s). I&#8217;m starting to
migrate all my stuff to the much more sensical ansible. Nice work</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="documentation">
<h1>Documentation<a class="headerlink" href="#documentation" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound"> <div class="toctree-wrapper compound">
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="gettingstarted.html">Getting Started</a><ul> <li class="toctree-l1"><a class="reference internal" href="gettingstarted.html">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="gettingstarted.html#requirements">Requirements</a></li> <li class="toctree-l1"><a class="reference internal" href="patterns.html">Inventory &amp; Patterns</a></li>
<li class="toctree-l2"><a class="reference internal" href="gettingstarted.html#python-2-6-epel-instructions-for-rhel-and-centos-5">Python 2.6 EPEL instructions for RHEL and CentOS 5</a></li> <li class="toctree-l1"><a class="reference internal" href="examples.html">Command Line</a></li>
<li class="toctree-l2"><a class="reference internal" href="gettingstarted.html#getting-ansible">Getting Ansible</a><ul> <li class="toctree-l1"><a class="reference internal" href="modules.html">Ansible Modules</a></li>
<li class="toctree-l3"><a class="reference internal" href="gettingstarted.html#running-from-checkout">Running From Checkout</a></li> <li class="toctree-l1"><a class="reference internal" href="YAMLSyntax.html">YAML Syntax</a></li>
<li class="toctree-l3"><a class="reference internal" href="gettingstarted.html#make-install">Make Install</a></li> <li class="toctree-l1"><a class="reference internal" href="playbooks.html">Playbooks</a></li>
<li class="toctree-l3"><a class="reference internal" href="gettingstarted.html#via-rpm">Via RPM</a></li> <li class="toctree-l1"><a class="reference internal" href="playbooks2.html">Advanced Playbooks</a></li>
<li class="toctree-l3"><a class="reference internal" href="gettingstarted.html#debian-gentoo-arch-others">Debian, Gentoo, Arch, Others</a></li> <li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li>
<li class="toctree-l3"><a class="reference internal" href="gettingstarted.html#tagged-releases">Tagged Releases</a></li> <li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li>
</ul> <li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li>
</li> <li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
<li class="toctree-l2"><a class="reference internal" href="gettingstarted.html#choosing-between-paramiko-and-native-ssh">Choosing Between Paramiko and Native SSH</a></li>
<li class="toctree-l2"><a class="reference internal" href="gettingstarted.html#your-first-commands">Your first commands</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="patterns.html">Inventory &amp; Patterns</a><ul>
<li class="toctree-l2"><a class="reference internal" href="patterns.html#hosts-and-groups">Hosts and Groups</a></li>
<li class="toctree-l2"><a class="reference internal" href="patterns.html#selecting-targets">Selecting Targets</a></li>
<li class="toctree-l2"><a class="reference internal" href="patterns.html#host-variables">Host Variables</a></li>
<li class="toctree-l2"><a class="reference internal" href="patterns.html#group-variables">Group Variables</a></li>
<li class="toctree-l2"><a class="reference internal" href="patterns.html#groups-of-groups-and-group-variables">Groups of Groups, and Group Variables</a></li>
<li class="toctree-l2"><a class="reference internal" href="patterns.html#splitting-out-host-and-group-specific-data">Splitting Out Host and Group Specific Data</a></li>
<li class="toctree-l2"><a class="reference internal" href="patterns.html#yaml-inventory">YAML Inventory</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Command Line</a><ul>
<li class="toctree-l2"><a class="reference internal" href="examples.html#parallelism-and-shell-commands">Parallelism and Shell Commands</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#file-transfer-templating">File Transfer &amp; Templating</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#managing-packages">Managing Packages</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#users-and-groups">Users and Groups</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#deploying-from-source-control">Deploying From Source Control</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#managing-services">Managing Services</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#time-limited-background-operations">Time Limited Background Operations</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="modules.html">Ansible Modules</a><ul>
<li class="toctree-l2"><a class="reference internal" href="modules.html#apt">apt</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#assemble">assemble</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#authorized-key">authorized_key</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#command">command</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#copy">copy</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#facter">facter</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#fetch">fetch</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#file">file</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#git">git</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#group">group</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#ohai">ohai</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#ping">ping</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#raw">raw</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#id11">service</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#setup">setup</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#shell">shell</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#template">template</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#user">user</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#virt">virt</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#yum">yum</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules.html#writing-your-own-modules">Writing your own modules</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="YAMLSyntax.html">YAML Syntax</a><ul>
<li class="toctree-l2"><a class="reference internal" href="YAMLSyntax.html#yaml-basics">YAML Basics</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="playbooks.html">Playbooks</a><ul>
<li class="toctree-l2"><a class="reference internal" href="playbooks.html#playbook-example">Playbook Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="playbooks.html#basics">Basics</a><ul>
<li class="toctree-l3"><a class="reference internal" href="playbooks.html#hosts-and-users">Hosts and Users</a></li>
<li class="toctree-l3"><a class="reference internal" href="playbooks.html#vars-section">Vars section</a></li>
<li class="toctree-l3"><a class="reference internal" href="playbooks.html#tasks-list">Tasks list</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="playbooks.html#running-operations-on-change">Running Operations On Change</a></li>
<li class="toctree-l2"><a class="reference internal" href="playbooks.html#include-files-and-reuse">Include Files And Reuse</a></li>
<li class="toctree-l2"><a class="reference internal" href="playbooks.html#executing-a-playbook">Executing A Playbook</a></li>
<li class="toctree-l2"><a class="reference internal" href="playbooks.html#tips-and-tricks">Tips and Tricks</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="playbooks2.html">Advanced Playbooks</a><ul>
<li class="toctree-l2"><a class="reference internal" href="playbooks2.html#accessing-complex-variable-data">Accessing Complex Variable Data</a></li>
<li class="toctree-l2"><a class="reference internal" href="playbooks2.html#accessing-information-about-other-hosts">Accessing Information About Other Hosts</a></li>
<li class="toctree-l2"><a class="reference internal" href="playbooks2.html#magic-variables">Magic Variables</a></li>
<li class="toctree-l2"><a class="reference internal" href="playbooks2.html#variable-file-seperation">Variable File Seperation</a></li>
<li class="toctree-l2"><a class="reference internal" href="playbooks2.html#prompting-for-sensitive-data">Prompting For Sensitive Data</a></li>
<li class="toctree-l2"><a class="reference internal" href="playbooks2.html#passing-variables-on-the-command-line">Passing Variables On The Command Line</a></li>
<li class="toctree-l2"><a class="reference internal" href="playbooks2.html#conditional-execution">Conditional Execution</a></li>
<li class="toctree-l2"><a class="reference internal" href="playbooks2.html#conditional-imports">Conditional Imports</a></li>
<li class="toctree-l2"><a class="reference internal" href="playbooks2.html#loop-shorthand">Loop Shorthand</a></li>
<li class="toctree-l2"><a class="reference internal" href="playbooks2.html#selecting-files-and-templates-based-on-variables">Selecting Files And Templates Based On Variables</a></li>
<li class="toctree-l2"><a class="reference internal" href="playbooks2.html#asynchronous-actions-and-polling">Asynchronous Actions and Polling</a></li>
<li class="toctree-l2"><a class="reference internal" href="playbooks2.html#local-playbooks">Local Playbooks</a></li>
<li class="toctree-l2"><a class="reference internal" href="playbooks2.html#pull-mode-playbooks">Pull-Mode Playbooks</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a><ul>
<li class="toctree-l2"><a class="reference internal" href="bestpractices.html#group-by-roles">Group By Roles</a></li>
<li class="toctree-l2"><a class="reference internal" href="bestpractices.html#directory-organization">Directory Organization</a></li>
<li class="toctree-l2"><a class="reference internal" href="bestpractices.html#bundling-ansible-modules-with-playbooks">Bundling Ansible Modules With Playbooks</a></li>
<li class="toctree-l2"><a class="reference internal" href="bestpractices.html#miscellaneous-tips">Miscellaneous Tips</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a><ul>
<li class="toctree-l2"><a class="reference internal" href="api.html#python-api">Python API</a><ul>
<li class="toctree-l3"><a class="reference internal" href="api.html#detailed-api-example">Detailed API Example</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="api.html#external-inventory">External Inventory</a><ul>
<li class="toctree-l3"><a class="reference internal" href="api.html#script-conventions">Script Conventions</a></li>
<li class="toctree-l3"><a class="reference internal" href="api.html#example-the-cobbler-external-inventory-script">Example: The Cobbler External Inventory Script</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a><ul>
<li class="toctree-l2"><a class="reference internal" href="moduledev.html#tutorial">Tutorial</a></li>
<li class="toctree-l2"><a class="reference internal" href="moduledev.html#testing-modules">Testing Modules</a></li>
<li class="toctree-l2"><a class="reference internal" href="moduledev.html#reading-input">Reading Input</a></li>
<li class="toctree-l2"><a class="reference internal" href="moduledev.html#module-provided-facts">Module Provided &#8216;Facts&#8217;</a></li>
<li class="toctree-l2"><a class="reference internal" href="moduledev.html#common-pitfalls">Common Pitfalls</a></li>
<li class="toctree-l2"><a class="reference internal" href="moduledev.html#conventions">Conventions</a></li>
<li class="toctree-l2"><a class="reference internal" href="moduledev.html#shorthand-vs-json">Shorthand Vs JSON</a></li>
<li class="toctree-l2"><a class="reference internal" href="moduledev.html#sharing-your-module">Sharing Your Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="moduledev.html#getting-your-module-into-core">Getting Your Module Into Core</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a><ul>
<li class="toctree-l2"><a class="reference internal" href="faq.html#what-inspired-ansible">What inspired Ansible?</a></li>
<li class="toctree-l2"><a class="reference internal" href="faq.html#comparisons">Comparisons</a><ul>
<li class="toctree-l3"><a class="reference internal" href="faq.html#vs-func">vs Func?</a></li>
<li class="toctree-l3"><a class="reference internal" href="faq.html#vs-puppet">vs Puppet?</a></li>
<li class="toctree-l3"><a class="reference internal" href="faq.html#vs-chef">vs Chef?</a></li>
<li class="toctree-l3"><a class="reference internal" href="faq.html#vs-capistrano-fabric">vs Capistrano/Fabric?</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="faq.html#other-questions">Other Questions</a><ul>
<li class="toctree-l3"><a class="reference internal" href="faq.html#what-is-ansible-s-approach-to-security">What is Ansible&#8217;s approach to security?</a></li>
<li class="toctree-l3"><a class="reference internal" href="faq.html#how-does-ansible-scale">How does Ansible scale?</a></li>
<li class="toctree-l3"><a class="reference internal" href="faq.html#are-transports-other-than-ssh-supported">Are transports other than SSH supported?</a></li>
<li class="toctree-l3"><a class="reference internal" href="faq.html#what-are-some-ideal-uses-for-ansible">What are some ideal uses for Ansible?</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="who_uses_ansible.html">Who Uses Ansible</a></li> <li class="toctree-l1"><a class="reference internal" href="who_uses_ansible.html">Who Uses Ansible</a></li>
</ul> </ul>
</div> </div>
</div> <table border="1" class="docutils">
<div class="section" id="presented-by"> <colgroup>
<h1>Presented By...<a class="headerlink" href="#presented-by" title="Permalink to this headline"></a></h1> <col width="100%" />
<p>Ansible was created and is run by <a class="reference external" href="http://michaeldehaan.net">Michael DeHaan</a> (<a class="reference external" href="http://twitter.com/#!/laserllama">&#64;laserllama</a>), a Raleigh, NC </colgroup>
<thead valign="bottom">
<tr><th class="head">Presented By...</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>Ansible was created and is run by <a class="reference external" href="http://michaeldehaan.net">Michael DeHaan</a>
(<a class="reference external" href="http://twitter.com/#!/laserllama">&#64;laserllama</a>), a Raleigh, NC
based software developer and architect, who also created the popular based software developer and architect, who also created the popular
DevOps install server <a class="reference external" href="http://cobbler.github.com/">Cobbler</a>. DevOps install server <a class="reference external" href="http://cobbler.github.com/">Cobbler</a>.
Cobbler is used to deploy mission critical systems all over the Cobbler is used to deploy mission critical systems all over the
planet, in industries ranging from massively multiplayer gaming, core planet, in industries ranging from massively multiplayer gaming, core
internet infrastructure, finance, chip design, and more. Michael also internet infrastructure, finance, chip design, and more. Michael also
helped co-author <a class="reference external" href="http://fedorahosted.org/func/">Func</a>, a precursor to Ansible, which is used to helped co-author <a class="reference external" href="http://fedorahosted.org/func/">Func</a>, a precursor to Ansible, which is used
orchestrate systems in lots of diverse places. He&#8217;s worked on systems to orchestrate systems in lots of diverse places. He&#8217;s worked on systems
software for IBM, Motorola, Red Hat&#8217;s Emerging Technologies Group, software for IBM, Motorola, Red Hat&#8217;s Emerging Technologies Group,
Puppet Labs, and is now with <a class="reference external" href="http://rpath.com">rPath</a>. Reach Michael by email <a class="reference external" href="mailto:michael&#46;dehaan&#37;&#52;&#48;gmail&#46;com">here</a>.</p> Puppet Labs, and is now with <a class="reference external" href="http://rpath.com">rPath</a>. Reach Michael by email
<a class="reference external" href="mailto:michael&#46;dehaan&#37;&#52;&#48;gmail&#46;com">here</a>.</td>
</tr>
</tbody>
</table>
</div> </div>

@ -1,58 +1,46 @@
The Future Is Now Introducing Ansible
````````````````` ```````````````````
Ansible is a radically simple model-driven configuration management, deployment, Ansible is a radically simple model-driven configuration management, deployment,
and command execution framework. Other tools in this space have been too and command execution framework. Other tools in this space have been too complicated for too long,
complicated for too long, require too much bootstrapping, and have too require too much bootstrapping, and have too much learning curve. By comparison, Ansible is dead simple
much learning curve. Ansible is dead simple and painless to extend. and painless to extend. Puppet and Chef have about 60k lines of code. Ansible's core is a little over 2000 lines.
For comparison, Puppet and Chef have about 60k lines of code.
Ansible's core is a little over 2000 lines.. Ansible isn't just for configuration management -- it's also great for ad-hoc tasks, quickly firing off commands against nodes, and it excels at complex multi-node deployment tasks, being designed for that purpose from day one.
Ansible isn't just for idempotent configuration -- it's also great for ad-hoc Systems management doesn't have to be complicated. We've learned well from the "Infrastructure is Code" movement.
tasks, quickly firing off commands against nodes. See :doc:`examples`. Infrastructure should be easy and powerful to command, but it should not look like code, lest it acquire the disadvantages of a software project -- bugs, complexity, and overhead. Infrastructure configurations should be simple, easy to develop, and easy to audit. This is Ansible's philosophy and the main reason it's different. Read on, though, and we'll tell you more.
Innovative Multi-node Control +---------------------------------------------------------------------+
````````````````````````````` | Key Features |
+=====================================================================+
Where Ansible excels though, is expressing complex multi-node | Dead simple setup |
deployment processes, executing ordered sequences on +---------------------------------------------------------------------+
different sets of nodes through :doc:`playbooks`. Playbooks contain one or | Super fast & parallel by default |
more plays, each executed against a different batch of nodes. Think about +---------------------------------------------------------------------+
webservers, database servers, and backend servers in a multi-node web environment. A play can address each set of machines in a cycle, ensuring the configurations of the machines were correct and also updating them to the specified | No server or client daemons; use existing SSHd out of the box |
version of software if required. +---------------------------------------------------------------------+
| Supports Kerberized SSH, jump hosts, forwarding, etc |
Multi-machine software deployment is poorly solved by most systems management tools -- often due to architectural nature of being pull oriented and having complex ordering systems, they cover configuration but fail at deployment when updating tiers of machines in well defined steps. This results in using two (or more) logically distinct tools and having complex overlap between them. +---------------------------------------------------------------------+
| No additional software required on client boxes |
If you actually do need pull oriented mode, though, Ansible 0.4 and later can run playbooks in pull mode as well. +---------------------------------------------------------------------+
This is useful in extreme scaling scenarios or when automatic system remediation is desired. Since Ansible remains | Can be easily run from a checkout, no installation required |
server and daemonless, scaling potential is unlimited, and no resources are wasted on running management daemons. +---------------------------------------------------------------------+
| Modules are idempotent, but you can also easily use shell commands |
Deployment and Configuration, Unified +---------------------------------------------------------------------+
````````````````````````````````````` | Modules can be written in ANY language |
+---------------------------------------------------------------------+
Other deployment (compared to config) oriented frameworks similarly cover deployment well but lack a strongly defined resource model and devolve into glorified remote scripts. Ansible playbooks -- having been designed with this problem in mind -- are good at both deployment & idempotent configuration, meaning you don't have to spread your infrastructure management out between different tools (Puppet+Capistrano, Chef+Fabric, etc). Performing ordered steps between different classes of machines is no problem, yet our modules affect system state only when required -- while avoiding the problem of fragile scripting that assumes certain starting or ending states. | Awesome API for creating very powerful distributed scripts |
+---------------------------------------------------------------------+
Ansible is also unique in other ways. Extending ansible does not require programming in any particular language -- you can write :doc:`modules` as idempotent scripts or programs that return simple JSON. Ansible is also pragmatic, so when you need to, it's also trivially easy to just execute useful shell commands. | Does not have to run remote steps as root |
+---------------------------------------------------------------------+
Why use Ansible versus other configuration management tools? (Puppet, Chef, etc?) Ansible will have far | Pluggable transports (SSH is just the default) |
less code, it will be (by extension) more correct, and it will be the +---------------------------------------------------------------------+
easiest thing to hack on and use you'll ever see -- regardless of your | Source host info & variables from files or external software |
favorite language of choice. Versus other deployment tools? (Capistrano, Fabric?). Ansible playbooks are easier +---------------------------------------------------------------------+
to use (not being code) and also allows intermixing of idempotent configuration management rules for a higher level | The easiest config management system to use, ever. |
of control. Further, it was designed for deploying multi-node applications from the beginning. +---------------------------------------------------------------------+
Simple & Secure By Default
``````````````````````````
Compared with most configuration managememnt tools, Ansible is also much more secure. While most configuration management tools use a daemon, running as root with full access to the system, with its own in-house developed PKI infrastructure, Ansible just uses SSH (and supports sudo as neccesssary). There is no additional attack surface and OpenSSH is one of the most peer reviewed security components out there.
If a central server containing your playbooks are comprimised, your nodes are not -- which is NOT the case
of these other tools, which can, more or less, turn into a botnet. Our security approach is to avoid writing custom
crypto code altogether, and rely on the most secure part of the Linux/Unix subsystem that your machines are already using. There is no PKI subsystem to maintain, which can be a frequent source of problems, particularly when reinstalling or migrating
hosts.
Systems management doesn't have to be complicated. Ansible's docs will remain short & simple, and the source will be blindingly obvious. We've learned well from "Infrastructure is Code". Infrastructure should be easy and powerful to command, but it should not look like code, lest it acquire the disadvantages of a software project -- bugs, complexity, and overhead. Infrastructure configurations should be simple, easy to develop, and easy to audit.
Architecture Architecture
```````````` ````````````
@ -62,32 +50,39 @@ Architecture
:width: 800 :width: 800
:align: center :align: center
Features +--------------------------------------------------------------------------------------------------------+
```````` | Tell Me More |
+====================================+===================================================================+
* Dead simple setup | Multi-node control & orchestration | Ansible is especially strong at expressing complex multi-node |
* Super fast & parallel by default | | deployment processes, executing ordered sequences on |
* No server or client daemons; use existing SSHd out of the box | | different sets of nodes through :doc:`playbooks`. Performing |
* Supports Kerberized SSH, jump hosts, forwarding, etc | | steps on all your webservers, then some steps on your database |
* No additional software required on client boxes | | servers, and then some steps on monitoring servers -- all the |
* Can be easily run from a checkout, no installation required | | while sharing variables between them is trivial. |
* Modules are idempotent, but you can also easily use shell commands +------------------------------------+-------------------------------------------------------------------+
* Modules can be written in ANY language | Doesn't choose sides | Modules can be written in Bash, Perl, Python, Ruby, whatever. |
* Awesome API for creating very powerful distributed scripts | | Playbooks are not a programming language, but a data format. |
* Does not have to run remote steps as root +------------------------------------+-------------------------------------------------------------------+
* Pluggable transports (SSH is just the default) | Infrastructure Is Not Code, | Playbooks are not a programming language, they are designed to be |
* Source host info & variables from files or external software | Infrastructure Is Data | super-easy to write, and easy to audit by non-developers. You |
* The easiest config management system to use, ever. | | will be able to skim and very quickly understand your entire |
| | configuration policy. |
What People Are Saying +------------------------------------+-------------------------------------------------------------------+
`````````````````````` | Three In One | Ansible handles multiple command and control |
| | problems in one tool. You don't need to use a config tool, a |
"I've been trying to grok Chef these last weeks, and really, I don't get it. I discovered ansible yesterday at noon, successfully ran it at 1pm, made my first playbook by 2pm, and pushed two small [contributions to the project] before the office closed... Do that with any other config management software!" | | deployment tool, and yet another ad-hoc parallel task execution |
| | tool -- Ansible will do all three. |
"Ansible is much more firewall-friendly. I have a number of hosts that are only accessible via reverse SSH tunnels, and let me tell you getting puppet or chef to play nice with that is a nightmare." +------------------------------------+-------------------------------------------------------------------+
| Lower Attack Surface, No Agents | Ansible is very secure. Ansible uses SSH as a transport, |
"This software has really changed my life as an network admin, the simplicity ansible comes with is really childs-play and I really adore its design. No more hassle with SSL keys, DNS based 'server entries' (e.g. puppet and what not). Just plain (secure!) SSH keys and one is good to go." | | resulting in a much lower attack surface, and requires no agents |
| | to be running on managed machines. If a central server |
| | containing your playbooks are comprimised, your nodes are not -- |
| | which is NOT the case of most other tools, which can, more or |
| | less, turn into a botnet. Our security approach is to avoid |
| | writing custom crypto code altogether, and rely on the most |
| | secure part of the Linux/Unix subsystem that your machines are |
| | already using -- openssh. |
+------------------------------------+-------------------------------------------------------------------+
Resources Resources
````````` `````````
@ -100,26 +95,34 @@ you with questions about Ansible.
* See the presentation on `Speakerdeck <http://speakerdeck.com/u/mpdehaan/p/ansible>`_ * See the presentation on `Speakerdeck <http://speakerdeck.com/u/mpdehaan/p/ansible>`_
* Visit the `Google Group <http://groups.google.com/group/ansible-project>`_ * Visit the `Google Group <http://groups.google.com/group/ansible-project>`_
* Chat on `FreeNode <http://webchat.freenode.net/?channels=ansible>`_ * Chat on `FreeNode <http://webchat.freenode.net/?channels=ansible>`_
* Join the `Mailing List <http://groups.google.com/group/ansible-project>`_
.. raw:: html
+-----------------------------------------------------------------------------------------------------------+
<img src="http://groups.google.com/intl/en/images/logos/groups_logo_sm.gif" height=30 width=140 alt="Google Groups"> | What People Are Saying |
<br/> +===========================================================================================================+
<b>Subscribe to Ansible Project</b> | "I've been trying to grok Chef these last weeks, and really, I don't get it. I discovered ansible |
<br/> | yesterday at noon, successfully ran it at 1pm, made my first playbook by 2pm, and pushed two small |
<form action="http://groups.google.com/group/ansible-project/boxsubscribe"> | [contributions to the project] before the office closed... Do that with any other config management |
<br/> | software!" |
Email: <input type=text name=email>&nbsp;&nbsp;<input type=submit name="sub" value="Subscribe"> +-----------------------------------------------------------------------------------------------------------+
<br/></br> | "Ansible is much more firewall-friendly. I have a number of hosts that are only accessible via reverse |
</form> | SSH tunnels, and let me tell you getting puppet or chef to play nice with that is a nightmare." |
<br/> +-----------------------------------------------------------------------------------------------------------+
| "This software has really changed my life as an network admin, the simplicity ansible comes with is |
| really childs-play and I really adore its design. No more hassle with SSL keys, DNS based 'server |
Contents | entries' (e.g. puppet and what not). Just plain (secure!) SSH keys and one is good to go." |
```````` +-----------------------------------------------------------------------------------------------------------+
| You may get a kick out of the fact that I'm using ansible to install puppetmaster(s). I'm starting to |
| migrate all my stuff to the much more sensical ansible. Nice work |
+-----------------------------------------------------------------------------------------------------------+
Documentation
`````````````
.. toctree:: .. toctree::
:maxdepth: 3 :maxdepth: 1
gettingstarted gettingstarted
patterns patterns
@ -134,18 +137,19 @@ Contents
faq faq
who_uses_ansible who_uses_ansible
Presented By... +--------------------------------------------------------------------------------------------------+
``````````````` | Presented By... |
+==================================================================================================+
Ansible was created and is run by `Michael DeHaan <http://michaeldehaan.net>`_ (`@laserllama <http://twitter.com/#!/laserllama>`_), a Raleigh, NC | Ansible was created and is run by `Michael DeHaan <http://michaeldehaan.net>`_ |
based software developer and architect, who also created the popular | (`@laserllama <http://twitter.com/#!/laserllama>`_), a Raleigh, NC |
DevOps install server `Cobbler <http://cobbler.github.com/>`_. | based software developer and architect, who also created the popular |
Cobbler is used to deploy mission critical systems all over the | DevOps install server `Cobbler <http://cobbler.github.com/>`_. |
planet, in industries ranging from massively multiplayer gaming, core | Cobbler is used to deploy mission critical systems all over the |
internet infrastructure, finance, chip design, and more. Michael also | planet, in industries ranging from massively multiplayer gaming, core |
helped co-author `Func <http://fedorahosted.org/func/>`_, a precursor to Ansible, which is used to | internet infrastructure, finance, chip design, and more. Michael also |
orchestrate systems in lots of diverse places. He's worked on systems | helped co-author `Func <http://fedorahosted.org/func/>`_, a precursor to Ansible, which is used |
software for IBM, Motorola, Red Hat's Emerging Technologies Group, | to orchestrate systems in lots of diverse places. He's worked on systems |
Puppet Labs, and is now with `rPath <http://rpath.com>`_. Reach Michael by email `here <mailto:michael.dehaan@gmail.com>`_. | software for IBM, Motorola, Red Hat's Emerging Technologies Group, |
| Puppet Labs, and is now with `rPath <http://rpath.com>`_. Reach Michael by email |
| `here <mailto:michael.dehaan@gmail.com>`_. |
+--------------------------------------------------------------------------------------------------+

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save