Tweaking module docs as a result of integrating the new module docs generator

pull/1256/head
Michael DeHaan 12 years ago
parent 3035394159
commit dff7b0fdbc

@ -26,5 +26,5 @@ clean:
.PHONEY: docs clean .PHONEY: docs clean
modules: $(FORMATTER) ../ansible/hacking/templates/rst.j2 modules: $(FORMATTER) ../ansible/hacking/templates/rst.j2
$(FORMATTER) -t rst --template-dir=../ansible/hacking/templates --module-dir=../ansible/library -o rst/modules/ $(FORMATTER) -t rst --module-dir=../ansible/library -o rst/modules/

@ -10,6 +10,10 @@ do a docs build and push the static files.
If you do not want to learn RST format (ReStructured Text), you can also file issues If you do not want to learn RST format (ReStructured Text), you can also file issues
on the documentation project. on the documentation project.
Note that module documentation can actually be generated from a DOCUMENTATION docstring
in the modules directory, so corrections to modules written as much need to be made
in the main project in the module source, rather than in the documentation for the module.
Author Author
====== ======

@ -7,7 +7,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>YAML Syntax &mdash; Ansible - SSH-Based Configuration Management &amp; Deployment</title> <title>YAML Syntax &mdash; Ansible Documentation</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" />
@ -29,7 +29,7 @@
<script type="text/javascript" src="_static/bootstrap-dropdown.js"></script> <script type="text/javascript" src="_static/bootstrap-dropdown.js"></script>
<script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script> <script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script>
<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 Documentation" href="index.html" />
<link rel="next" title="Playbooks" href="playbooks.html" /> <link rel="next" title="Playbooks" href="playbooks.html" />
<link rel="prev" title="Ansible Modules" href="modules.html" /> <link rel="prev" title="Ansible Modules" href="modules.html" />
<script type="text/javascript"> <script type="text/javascript">
@ -125,7 +125,7 @@ s.parentNode.insertBefore(ga, s);
<div class="topbar" data-scrollspy="scrollspy" > <div class="topbar" data-scrollspy="scrollspy" >
<div class="topbar-inner"> <div class="topbar-inner">
<div class="container"> <div class="container">
<!-- <a class="brand" href="index.html">Ansible</a> --> <a class="brand" href="index.html">Ansible Documentation</a>
<ul class="nav"> <ul class="nav">
<li><a href="/">Home</A> <li><a href="/">Home</A>
@ -143,7 +143,6 @@ s.parentNode.insertBefore(ga, s);
<li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li> <li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li>
<li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li> <li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li>
<li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li> <li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li>
<li class="toctree-l1"><a class="reference internal" href="who_uses_ansible.html">Who Uses Ansible</a></li>
</ul> </ul>
</span> </span>
</li> </li>
@ -173,12 +172,9 @@ s.parentNode.insertBefore(ga, s);
</div> </div>
</div> </div>
</div> </div>
<a href="http://github.com/ansible/ansible"><img style="position: absolute; right: 0; border: 0;" src="http://ansible.github.com/github.png" alt="Fork me on GitHub"></a>
<div class="container"> <div class="container">
<a href="http://ansible.github.com"><img src="http://ansible.github.com/ansible-logo.png" alt="Ansible"/></a><br/>
<br/>
<div class="section" id="yaml-syntax"> <div class="section" id="yaml-syntax">
<h1>YAML Syntax<a class="headerlink" href="#yaml-syntax" title="Permalink to this headline"></a></h1> <h1>YAML Syntax<a class="headerlink" href="#yaml-syntax" title="Permalink to this headline"></a></h1>
@ -268,33 +264,13 @@ languages:
<br/> <br/>
</div> </div>
<footer class="footer"> <footer class="footer">
<div class="container">
<div class="container">
<div id="fb-root"></div>
<p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_donations">
<input type="hidden" name="business" value="michael.dehaan@gmail.com">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="item_name" value="Ansible">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHostedGuest">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
</p>
<p> <p>
<a href="https://twitter.com/share" class="twitter-share-button" data-text="ansible.github.com">Share On Twitter</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<g:plusone annotation="inline"></g:plusone>
<div class="fb-like" data-href="http://ansible.github.com" data-send="true" data-width="450" data-show-faces="false"></div>
</p>
<p> <p>
&copy; Copyright 2012 Michael DeHaan.<br/> &copy; Copyright 2012 Michael DeHaan.<br/>
Last updated on Sep 23, 2012.<br/> Last updated on Sep 27, 2012.<br/>
</p> </p>
</div> </div>
</footer> </footer>
</body> </body>
</html> </html>

@ -7,7 +7,7 @@
<div class="topbar" data-scrollspy="scrollspy" > <div class="topbar" data-scrollspy="scrollspy" >
<div class="topbar-inner"> <div class="topbar-inner">
<div class="container"> <div class="container">
<!-- <a class="brand" href="{{ pathto(master_doc) }}">{{ shorttitle|e }}</a> --> <a class="brand" href="{{ pathto(master_doc) }}">{{ shorttitle|e }}</a>
<ul class="nav"> <ul class="nav">
{% block sidebartoc %} {% block sidebartoc %}
<li><a href="/">Home</A> <li><a href="/">Home</A>
@ -23,7 +23,6 @@
</div> </div>
</div> </div>
</div> </div>
<a href="http://github.com/ansible/ansible"><img style="position: absolute; right: 0; border: 0;" src="http://ansible.github.com/github.png" alt="Fork me on GitHub"></a>
{% endmacro %} {% endmacro %}
<p></p> <p></p>
@ -128,8 +127,6 @@ s.parentNode.insertBefore(ga, s);
{%- block content %} {%- block content %}
<div class="container"> <div class="container">
<a href="http://ansible.github.com"><img src="http://ansible.github.com/ansible-logo.png" alt="Ansible"/></a><br/>
<br/>
{% block body %} {% endblock %} {% block body %} {% endblock %}
<br/> <br/>
</div> </div>
@ -137,28 +134,8 @@ s.parentNode.insertBefore(ga, s);
{%- block footer %} {%- block footer %}
<footer class="footer"> <footer class="footer">
<div class="container">
<div class="container">
<div id="fb-root"></div>
<p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_donations">
<input type="hidden" name="business" value="michael.dehaan@gmail.com">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="item_name" value="Ansible">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHostedGuest">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
</p>
<p> <p>
<a href="https://twitter.com/share" class="twitter-share-button" data-text="ansible.github.com">Share On Twitter</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<g:plusone annotation="inline"></g:plusone>
<div class="fb-like" data-href="http://ansible.github.com" data-send="true" data-width="450" data-show-faces="false"></div>
</p>
<p> <p>
{%- if show_copyright %} {%- if show_copyright %}
{%- if hasdoc('copyright') %} {%- if hasdoc('copyright') %}
@ -171,7 +148,7 @@ s.parentNode.insertBefore(ga, s);
{% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}<br/> {% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}<br/>
{%- endif %} {%- endif %}
</p> </p>
</div> </div>
</footer> </footer>
{%- endblock %} {%- endblock %}

@ -7,7 +7,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>API &amp; Integrations &mdash; Ansible - SSH-Based Configuration Management &amp; Deployment</title> <title>API &amp; Integrations &mdash; Ansible Documentation</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" />
@ -29,7 +29,7 @@
<script type="text/javascript" src="_static/bootstrap-dropdown.js"></script> <script type="text/javascript" src="_static/bootstrap-dropdown.js"></script>
<script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script> <script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script>
<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 Documentation" href="index.html" />
<link rel="next" title="Module Development" href="moduledev.html" /> <link rel="next" title="Module Development" href="moduledev.html" />
<link rel="prev" title="Best Practices" href="bestpractices.html" /> <link rel="prev" title="Best Practices" href="bestpractices.html" />
<script type="text/javascript"> <script type="text/javascript">
@ -125,7 +125,7 @@ s.parentNode.insertBefore(ga, s);
<div class="topbar" data-scrollspy="scrollspy" > <div class="topbar" data-scrollspy="scrollspy" >
<div class="topbar-inner"> <div class="topbar-inner">
<div class="container"> <div class="container">
<!-- <a class="brand" href="index.html">Ansible</a> --> <a class="brand" href="index.html">Ansible Documentation</a>
<ul class="nav"> <ul class="nav">
<li><a href="/">Home</A> <li><a href="/">Home</A>
@ -143,7 +143,6 @@ s.parentNode.insertBefore(ga, s);
<li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li> <li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="">API &amp; Integrations</a></li> <li class="toctree-l1 current"><a class="current reference internal" href="">API &amp; Integrations</a></li>
<li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li> <li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li>
<li class="toctree-l1"><a class="reference internal" href="who_uses_ansible.html">Who Uses Ansible</a></li>
</ul> </ul>
</span> </span>
</li> </li>
@ -186,12 +185,9 @@ s.parentNode.insertBefore(ga, s);
</div> </div>
</div> </div>
</div> </div>
<a href="http://github.com/ansible/ansible"><img style="position: absolute; right: 0; border: 0;" src="http://ansible.github.com/github.png" alt="Fork me on GitHub"></a>
<div class="container"> <div class="container">
<a href="http://ansible.github.com"><img src="http://ansible.github.com/ansible-logo.png" alt="Ansible"/></a><br/>
<br/>
<div class="section" id="api-integrations"> <div class="section" id="api-integrations">
<h1><a class="toc-backref" href="#table-of-contents">API &amp; Integrations</a><a class="headerlink" href="#api-integrations" title="Permalink to this headline"></a></h1> <h1><a class="toc-backref" href="#table-of-contents">API &amp; Integrations</a><a class="headerlink" href="#api-integrations" title="Permalink to this headline"></a></h1>
@ -483,33 +479,13 @@ directory.</p>
<br/> <br/>
</div> </div>
<footer class="footer"> <footer class="footer">
<div class="container">
<div class="container">
<div id="fb-root"></div>
<p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_donations">
<input type="hidden" name="business" value="michael.dehaan@gmail.com">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="item_name" value="Ansible">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHostedGuest">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
</p>
<p> <p>
<a href="https://twitter.com/share" class="twitter-share-button" data-text="ansible.github.com">Share On Twitter</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<g:plusone annotation="inline"></g:plusone>
<div class="fb-like" data-href="http://ansible.github.com" data-send="true" data-width="450" data-show-faces="false"></div>
</p>
<p> <p>
&copy; Copyright 2012 Michael DeHaan.<br/> &copy; Copyright 2012 Michael DeHaan.<br/>
Last updated on Sep 23, 2012.<br/> Last updated on Sep 27, 2012.<br/>
</p> </p>
</div> </div>
</footer> </footer>
</body> </body>
</html> </html>

@ -7,7 +7,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>Best Practices &mdash; Ansible - SSH-Based Configuration Management &amp; Deployment</title> <title>Best Practices &mdash; Ansible Documentation</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" />
@ -29,7 +29,7 @@
<script type="text/javascript" src="_static/bootstrap-dropdown.js"></script> <script type="text/javascript" src="_static/bootstrap-dropdown.js"></script>
<script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script> <script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script>
<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 Documentation" href="index.html" />
<link rel="next" title="API &amp; Integrations" href="api.html" /> <link rel="next" title="API &amp; Integrations" href="api.html" />
<link rel="prev" title="Advanced Playbooks" href="playbooks2.html" /> <link rel="prev" title="Advanced Playbooks" href="playbooks2.html" />
<script type="text/javascript"> <script type="text/javascript">
@ -125,7 +125,7 @@ s.parentNode.insertBefore(ga, s);
<div class="topbar" data-scrollspy="scrollspy" > <div class="topbar" data-scrollspy="scrollspy" >
<div class="topbar-inner"> <div class="topbar-inner">
<div class="container"> <div class="container">
<!-- <a class="brand" href="index.html">Ansible</a> --> <a class="brand" href="index.html">Ansible Documentation</a>
<ul class="nav"> <ul class="nav">
<li><a href="/">Home</A> <li><a href="/">Home</A>
@ -143,7 +143,6 @@ s.parentNode.insertBefore(ga, s);
<li class="toctree-l1 current"><a class="current reference internal" href="">Best Practices</a></li> <li class="toctree-l1 current"><a class="current reference internal" href="">Best Practices</a></li>
<li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li> <li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li>
<li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li> <li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li>
<li class="toctree-l1"><a class="reference internal" href="who_uses_ansible.html">Who Uses Ansible</a></li>
</ul> </ul>
</span> </span>
</li> </li>
@ -177,12 +176,9 @@ s.parentNode.insertBefore(ga, s);
</div> </div>
</div> </div>
</div> </div>
<a href="http://github.com/ansible/ansible"><img style="position: absolute; right: 0; border: 0;" src="http://ansible.github.com/github.png" alt="Fork me on GitHub"></a>
<div class="container"> <div class="container">
<a href="http://ansible.github.com"><img src="http://ansible.github.com/ansible-logo.png" alt="Ansible"/></a><br/>
<br/>
<div class="section" id="best-practices"> <div class="section" id="best-practices">
<h1><a class="toc-backref" href="#contents">Best Practices</a><a class="headerlink" href="#best-practices" title="Permalink to this headline"></a></h1> <h1><a class="toc-backref" href="#contents">Best Practices</a><a class="headerlink" href="#best-practices" title="Permalink to this headline"></a></h1>
@ -327,33 +323,13 @@ different variables to different geographies.</p>
<br/> <br/>
</div> </div>
<footer class="footer"> <footer class="footer">
<div class="container">
<div class="container">
<div id="fb-root"></div>
<p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_donations">
<input type="hidden" name="business" value="michael.dehaan@gmail.com">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="item_name" value="Ansible">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHostedGuest">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
</p>
<p> <p>
<a href="https://twitter.com/share" class="twitter-share-button" data-text="ansible.github.com">Share On Twitter</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<g:plusone annotation="inline"></g:plusone>
<div class="fb-like" data-href="http://ansible.github.com" data-send="true" data-width="450" data-show-faces="false"></div>
</p>
<p> <p>
&copy; Copyright 2012 Michael DeHaan.<br/> &copy; Copyright 2012 Michael DeHaan.<br/>
Last updated on Sep 23, 2012.<br/> Last updated on Sep 27, 2012.<br/>
</p> </p>
</div> </div>
</footer> </footer>
</body> </body>
</html> </html>

@ -50,7 +50,7 @@ source_suffix = '.rst'
master_doc = 'index' master_doc = 'index'
# General substitutions. # General substitutions.
project = 'Ansible' project = 'Ansible Documentation'
copyright = "2012 Michael DeHaan" copyright = "2012 Michael DeHaan"
# The default replacements for |version| and |release|, also used in various # The default replacements for |version| and |release|, also used in various
@ -102,7 +102,7 @@ pygments_style = 'sphinx'
html_theme_path = ['_themes'] html_theme_path = ['_themes']
html_theme = 'bootstrap' html_theme = 'bootstrap'
html_short_title = 'Ansible' html_short_title = 'Ansible Documentation'
# The style sheet to use for HTML and HTML Help pages. A file of that name # The style sheet to use for HTML and HTML Help pages. A file of that name
# must exist either in Sphinx' static/ path, or in one of the custom paths # must exist either in Sphinx' static/ path, or in one of the custom paths
@ -111,7 +111,7 @@ html_style = 'default.css'
# The name for this set of Sphinx documents. If None, it defaults to # The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation". # "<project> v<release> documentation".
html_title = 'Ansible - SSH-Based Configuration Management & Deployment' html_title = 'Ansible Documentation'
# A shorter title for the navigation bar. Default is the same as html_title. # A shorter title for the navigation bar. Default is the same as html_title.
#html_short_title = None #html_short_title = None

@ -7,7 +7,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>Command Line Examples And Next Steps &mdash; Ansible - SSH-Based Configuration Management &amp; Deployment</title> <title>Command Line Examples And Next Steps &mdash; Ansible Documentation</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" />
@ -29,7 +29,7 @@
<script type="text/javascript" src="_static/bootstrap-dropdown.js"></script> <script type="text/javascript" src="_static/bootstrap-dropdown.js"></script>
<script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script> <script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script>
<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 Documentation" href="index.html" />
<link rel="next" title="Ansible Modules" href="modules.html" /> <link rel="next" title="Ansible Modules" href="modules.html" />
<link rel="prev" title="Inventory &amp; Patterns" href="patterns.html" /> <link rel="prev" title="Inventory &amp; Patterns" href="patterns.html" />
<script type="text/javascript"> <script type="text/javascript">
@ -125,7 +125,7 @@ s.parentNode.insertBefore(ga, s);
<div class="topbar" data-scrollspy="scrollspy" > <div class="topbar" data-scrollspy="scrollspy" >
<div class="topbar-inner"> <div class="topbar-inner">
<div class="container"> <div class="container">
<!-- <a class="brand" href="index.html">Ansible</a> --> <a class="brand" href="index.html">Ansible Documentation</a>
<ul class="nav"> <ul class="nav">
<li><a href="/">Home</A> <li><a href="/">Home</A>
@ -143,7 +143,6 @@ s.parentNode.insertBefore(ga, s);
<li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li> <li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li>
<li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li> <li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li>
<li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li> <li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li>
<li class="toctree-l1"><a class="reference internal" href="who_uses_ansible.html">Who Uses Ansible</a></li>
</ul> </ul>
</span> </span>
</li> </li>
@ -181,12 +180,9 @@ s.parentNode.insertBefore(ga, s);
</div> </div>
</div> </div>
</div> </div>
<a href="http://github.com/ansible/ansible"><img style="position: absolute; right: 0; border: 0;" src="http://ansible.github.com/github.png" alt="Fork me on GitHub"></a>
<div class="container"> <div class="container">
<a href="http://ansible.github.com"><img src="http://ansible.github.com/ansible-logo.png" alt="Ansible"/></a><br/>
<br/>
<div class="section" id="command-line-examples-and-next-steps"> <div class="section" id="command-line-examples-and-next-steps">
<h1><a class="toc-backref" href="#contents">Command Line Examples And Next Steps</a><a class="headerlink" href="#command-line-examples-and-next-steps" title="Permalink to this headline"></a></h1> <h1><a class="toc-backref" href="#contents">Command Line Examples And Next Steps</a><a class="headerlink" href="#command-line-examples-and-next-steps" title="Permalink to this headline"></a></h1>
@ -446,33 +442,13 @@ the first config file it finds present:</p>
<br/> <br/>
</div> </div>
<footer class="footer"> <footer class="footer">
<div class="container">
<div class="container">
<div id="fb-root"></div>
<p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_donations">
<input type="hidden" name="business" value="michael.dehaan@gmail.com">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="item_name" value="Ansible">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHostedGuest">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
</p>
<p> <p>
<a href="https://twitter.com/share" class="twitter-share-button" data-text="ansible.github.com">Share On Twitter</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<g:plusone annotation="inline"></g:plusone>
<div class="fb-like" data-href="http://ansible.github.com" data-send="true" data-width="450" data-show-faces="false"></div>
</p>
<p> <p>
&copy; Copyright 2012 Michael DeHaan.<br/> &copy; Copyright 2012 Michael DeHaan.<br/>
Last updated on Sep 23, 2012.<br/> Last updated on Sep 27, 2012.<br/>
</p> </p>
</div> </div>
</footer> </footer>
</body> </body>
</html> </html>

@ -9,7 +9,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>Index &mdash; Ansible - SSH-Based Configuration Management &amp; Deployment</title> <title>Index &mdash; Ansible Documentation</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" />
@ -31,7 +31,7 @@
<script type="text/javascript" src="_static/bootstrap-dropdown.js"></script> <script type="text/javascript" src="_static/bootstrap-dropdown.js"></script>
<script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script> <script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script>
<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 Documentation" href="index.html" />
<script type="text/javascript"> <script type="text/javascript">
(function () { (function () {
/** /**
@ -125,7 +125,7 @@ s.parentNode.insertBefore(ga, s);
<div class="topbar" data-scrollspy="scrollspy" > <div class="topbar" data-scrollspy="scrollspy" >
<div class="topbar-inner"> <div class="topbar-inner">
<div class="container"> <div class="container">
<!-- <a class="brand" href="index.html">Ansible</a> --> <a class="brand" href="index.html">Ansible Documentation</a>
<ul class="nav"> <ul class="nav">
<li><a href="/">Home</A> <li><a href="/">Home</A>
@ -143,7 +143,6 @@ s.parentNode.insertBefore(ga, s);
<li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li> <li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li>
<li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li> <li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li>
<li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li> <li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li>
<li class="toctree-l1"><a class="reference internal" href="who_uses_ansible.html">Who Uses Ansible</a></li>
</ul> </ul>
</span> </span>
</li> </li>
@ -167,12 +166,9 @@ s.parentNode.insertBefore(ga, s);
</div> </div>
</div> </div>
</div> </div>
<a href="http://github.com/ansible/ansible"><img style="position: absolute; right: 0; border: 0;" src="http://ansible.github.com/github.png" alt="Fork me on GitHub"></a>
<div class="container"> <div class="container">
<a href="http://ansible.github.com"><img src="http://ansible.github.com/ansible-logo.png" alt="Ansible"/></a><br/>
<br/>
<h1 id="index">Index</h1> <h1 id="index">Index</h1>
@ -185,33 +181,13 @@ s.parentNode.insertBefore(ga, s);
<br/> <br/>
</div> </div>
<footer class="footer"> <footer class="footer">
<div class="container">
<div class="container">
<div id="fb-root"></div>
<p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_donations">
<input type="hidden" name="business" value="michael.dehaan@gmail.com">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="item_name" value="Ansible">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHostedGuest">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
</p>
<p> <p>
<a href="https://twitter.com/share" class="twitter-share-button" data-text="ansible.github.com">Share On Twitter</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<g:plusone annotation="inline"></g:plusone>
<div class="fb-like" data-href="http://ansible.github.com" data-send="true" data-width="450" data-show-faces="false"></div>
</p>
<p> <p>
&copy; Copyright 2012 Michael DeHaan.<br/> &copy; Copyright 2012 Michael DeHaan.<br/>
Last updated on Sep 23, 2012.<br/> Last updated on Sep 27, 2012.<br/>
</p> </p>
</div> </div>
</footer> </footer>
</body> </body>
</html> </html>

@ -7,7 +7,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>Getting Started &mdash; Ansible - SSH-Based Configuration Management &amp; Deployment</title> <title>Getting Started &mdash; Ansible Documentation</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" />
@ -29,9 +29,9 @@
<script type="text/javascript" src="_static/bootstrap-dropdown.js"></script> <script type="text/javascript" src="_static/bootstrap-dropdown.js"></script>
<script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script> <script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script>
<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 Documentation" 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="Introducing Ansible" href="index.html" /> <link rel="prev" title="Contents" href="index.html" />
<script type="text/javascript"> <script type="text/javascript">
(function () { (function () {
/** /**
@ -125,7 +125,7 @@ s.parentNode.insertBefore(ga, s);
<div class="topbar" data-scrollspy="scrollspy" > <div class="topbar" data-scrollspy="scrollspy" >
<div class="topbar-inner"> <div class="topbar-inner">
<div class="container"> <div class="container">
<!-- <a class="brand" href="index.html">Ansible</a> --> <a class="brand" href="index.html">Ansible Documentation</a>
<ul class="nav"> <ul class="nav">
<li><a href="/">Home</A> <li><a href="/">Home</A>
@ -143,7 +143,6 @@ s.parentNode.insertBefore(ga, s);
<li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li> <li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li>
<li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li> <li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li>
<li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li> <li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li>
<li class="toctree-l1"><a class="reference internal" href="who_uses_ansible.html">Who Uses Ansible</a></li>
</ul> </ul>
</span> </span>
</li> </li>
@ -184,12 +183,9 @@ s.parentNode.insertBefore(ga, s);
</div> </div>
</div> </div>
</div> </div>
<a href="http://github.com/ansible/ansible"><img style="position: absolute; right: 0; border: 0;" src="http://ansible.github.com/github.png" alt="Fork me on GitHub"></a>
<div class="container"> <div class="container">
<a href="http://ansible.github.com"><img src="http://ansible.github.com/ansible-logo.png" alt="Ansible"/></a><br/>
<br/>
<div class="section" id="getting-started"> <div class="section" id="getting-started">
<h1><a class="toc-backref" href="#contents">Getting Started</a><a class="headerlink" href="#getting-started" title="Permalink to this headline"></a></h1> <h1><a class="toc-backref" href="#contents">Getting Started</a><a class="headerlink" href="#getting-started" title="Permalink to this headline"></a></h1>
@ -403,33 +399,13 @@ explore, but you already have a fully working infrastructure!</p>
<br/> <br/>
</div> </div>
<footer class="footer"> <footer class="footer">
<div class="container">
<div class="container">
<div id="fb-root"></div>
<p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_donations">
<input type="hidden" name="business" value="michael.dehaan@gmail.com">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="item_name" value="Ansible">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHostedGuest">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
</p>
<p> <p>
<a href="https://twitter.com/share" class="twitter-share-button" data-text="ansible.github.com">Share On Twitter</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<g:plusone annotation="inline"></g:plusone>
<div class="fb-like" data-href="http://ansible.github.com" data-send="true" data-width="450" data-show-faces="false"></div>
</p>
<p> <p>
&copy; Copyright 2012 Michael DeHaan.<br/> &copy; Copyright 2012 Michael DeHaan.<br/>
Last updated on Sep 23, 2012.<br/> Last updated on Sep 27, 2012.<br/>
</p> </p>
</div> </div>
</footer> </footer>
</body> </body>
</html> </html>

@ -7,7 +7,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>Introducing Ansible &mdash; Ansible - SSH-Based Configuration Management &amp; Deployment</title> <title>Contents &mdash; Ansible Documentation</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" />
@ -29,7 +29,7 @@
<script type="text/javascript" src="_static/bootstrap-dropdown.js"></script> <script type="text/javascript" src="_static/bootstrap-dropdown.js"></script>
<script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script> <script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script>
<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="#" /> <link rel="top" title="Ansible Documentation" href="#" />
<link rel="next" title="Getting Started" href="gettingstarted.html" /> <link rel="next" title="Getting Started" href="gettingstarted.html" />
<script type="text/javascript"> <script type="text/javascript">
(function () { (function () {
@ -124,7 +124,7 @@ s.parentNode.insertBefore(ga, s);
<div class="topbar" data-scrollspy="scrollspy" > <div class="topbar" data-scrollspy="scrollspy" >
<div class="topbar-inner"> <div class="topbar-inner">
<div class="container"> <div class="container">
<!-- <a class="brand" href="#">Ansible</a> --> <a class="brand" href="#">Ansible Documentation</a>
<ul class="nav"> <ul class="nav">
<li><a href="/">Home</A> <li><a href="/">Home</A>
@ -142,7 +142,6 @@ s.parentNode.insertBefore(ga, s);
<li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li> <li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li>
<li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li> <li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li>
<li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li> <li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li>
<li class="toctree-l1"><a class="reference internal" href="who_uses_ansible.html">Who Uses Ansible</a></li>
</ul> </ul>
</span> </span>
</li> </li>
@ -150,9 +149,7 @@ 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="#">Introducing Ansible</a></li> <li><a class="reference internal" href="#">Contents</a><ul>
<li><a class="reference internal" href="#architecture">Architecture</a></li>
<li><a class="reference internal" href="#documentation">Documentation</a><ul>
</ul> </ul>
</li> </li>
</ul> </ul>
@ -173,211 +170,12 @@ s.parentNode.insertBefore(ga, s);
</div> </div>
</div> </div>
</div> </div>
<a href="http://github.com/ansible/ansible"><img style="position: absolute; right: 0; border: 0;" src="http://ansible.github.com/github.png" alt="Fork me on GitHub"></a>
<div class="container"> <div class="container">
<a href="http://ansible.github.com"><img src="http://ansible.github.com/ansible-logo.png" alt="Ansible"/></a><br/>
<br/>
<div class="section" id="introducing-ansible"> <div class="section" id="contents">
<h1>Introducing Ansible<a class="headerlink" href="#introducing-ansible" title="Permalink to this headline"></a></h1> <h1>Contents<a class="headerlink" href="#contents" title="Permalink to this headline"></a></h1>
<p>Ansible is a radically simple model-driven configuration management, deployment,
and command execution framework. Other tools in this space have been too complicated for too long,
require too much bootstrapping, and have too much learning curve. By comparison, Ansible is dead simple
and painless to extend. Puppet and Chef have about 60k lines of code. Ansible&#8217;s core is a little over 2000 lines.</p>
<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-tier deployment tasks, being designed for that purpose from day one.</p>
<p>Systems management doesn&#8217;t have to be complicated. We&#8217;ve learned well from the &#8220;Infrastructure is Code&#8221; movement.
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>
<table border="1" class="docutils">
<colgroup>
<col width="100%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">Key Features</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td>Dead simple setup</td>
</tr>
<tr class="row-odd"><td>Can be easily run from a checkout, no installation required</td>
</tr>
<tr class="row-even"><td>No agents or software to install on managed machines</td>
</tr>
<tr class="row-odd"><td>Ultra-secure; uses existing SSHd out of the box</td>
</tr>
<tr class="row-even"><td>Connect as any user, not just root, and sudo as needed</td>
</tr>
<tr class="row-odd"><td>Super fast &amp; parallel by default</td>
</tr>
<tr class="row-even"><td>Supports Kerberized SSH, jump hosts, forwarding, etc</td>
</tr>
<tr class="row-odd"><td>Modules are idempotent, but you can also easily use shell commands</td>
</tr>
<tr class="row-even"><td>Modules can be written in ANY language</td>
</tr>
<tr class="row-odd"><td>Orchestrates load balancer rotations and outage windows</td>
</tr>
<tr class="row-even"><td>Awesome API for creating very powerful distributed applications</td>
</tr>
<tr class="row-odd"><td>Pluggable transports (SSH is just the default)</td>
</tr>
<tr class="row-even"><td>Can draw inventory data from external sources like EC2 and Cobbler</td>
</tr>
<tr class="row-odd"><td>The easiest config management system to use, ever.</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="architecture">
<h1>Architecture<a class="headerlink" href="#architecture" title="Permalink to this headline"></a></h1>
<img alt="&quot;Architecture Diagram&quot;" class="align-center" src="http://ansible.github.com/ansible_arch2.jpg" style="width: 800px;" />
<table border="1" class="docutils">
<colgroup>
<col width="35%" />
<col width="65%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head" colspan="2">Tell Me More</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td>Multi-node control &amp; orchestration</td>
<td>Ansible is especially strong at expressing complex multi-node
deployment processes, executing ordered sequences on
different sets of nodes through <a class="reference internal" href="playbooks.html"><em>Playbooks</em></a>. Performing
steps on all your webservers, then some steps on your database
servers, and then some steps on monitoring servers &#8211; all the
while sharing variables between them is trivial.</td>
</tr>
<tr class="row-odd"><td>Doesn&#8217;t choose sides in the
language war</td>
<td>Modules can be written in Bash, Perl, Python, Ruby, whatever.
Playbooks are not a programming language, but a data format.</td>
</tr>
<tr class="row-even"><td>Infrastructure Is Not Code,
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 class="row-odd"><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 class="row-even"><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 is compromised, 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>
<table border="1" class="docutils">
<colgroup>
<col width="23%" />
<col width="77%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head" colspan="2">Community</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td colspan="2">Your ideas and contributions are welcome. We&#8217;re also happy to help
you with questions about Ansible.</td>
</tr>
<tr class="row-odd"><td>Get the source</td>
<td>Visit the <a class="reference external" href="https://github.com/ansible/ansible">project page</a> on Github</td>
</tr>
<tr class="row-even"><td>File a bug</td>
<td>View the <a class="reference external" href="https://github.com/ansible/ansible/issues">issue tracker</a></td>
</tr>
<tr class="row-odd"><td>Spread the word</td>
<td>Watch slides on <a class="reference external" href="http://speakerdeck.com/u/mpdehaan/p/ansible">Speakerdeck</a></td>
</tr>
<tr class="row-even"><td>Join the mailing list</td>
<td>Visit the <a class="reference external" href="http://groups.google.com/group/ansible-project">Google Group</a></td>
</tr>
<tr class="row-odd"><td>Chat</td>
<td>Visit the channel on <a class="reference external" href="http://webchat.freenode.net/?channels=ansible">FreeNode</a></td>
</tr>
<tr class="row-even"><td>Share &amp; Learn</td>
<td>Share <a class="reference external" href="http://bit.ly/NNwUgY">playbooks, modules, articles, and scripts</a></td>
</tr>
</tbody>
</table>
<table border="1" class="docutils">
<colgroup>
<col width="100%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">What (Real) People Are Saying</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td>&#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;</td>
</tr>
<tr class="row-odd"><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 class="row-even"><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 class="row-odd"><td>&#8220;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.&#8221;</td>
</tr>
<tr class="row-even"><td>&#8220;Simple as hell&#8221;</td>
</tr>
<tr class="row-odd"><td>&#8220;I swear, I have gotten more done with Ansible in three days than I did in not getting chef installed
in three weeks.&#8221;</td>
</tr>
<tr class="row-even"><td>&#8220;Puppet was hell... gave up on Chef... found ansible and couldn&#8217;t be happier.&#8221;</td>
</tr>
<tr class="row-odd"><td>&#8220;Really impressed with Ansible. Up and running in ¼ of the time it took to get going with Puppet.&#8221;</td>
</tr>
<tr class="row-even"><td>&#8220;Automation even a manager can understand.&#8221; &#8211; A Manager</td>
</tr>
</tbody>
</table>
<table border="1" class="docutils">
<colgroup>
<col width="100%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">Presented By...</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><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 open-source
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
planet, in industries ranging from massively multiplayer gaming, core
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 orchestrate systems in lots of diverse places. He&#8217;s worked on systems
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>.</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></li> <li class="toctree-l1"><a class="reference internal" href="gettingstarted.html">Getting Started</a></li>
@ -390,7 +188,6 @@ Puppet Labs, and is now with <a class="reference external" href="http://rpath.co
<li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li> <li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li>
<li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li> <li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li>
<li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li> <li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</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> </div>
@ -399,33 +196,13 @@ Puppet Labs, and is now with <a class="reference external" href="http://rpath.co
<br/> <br/>
</div> </div>
<footer class="footer"> <footer class="footer">
<div class="container">
<div class="container">
<div id="fb-root"></div>
<p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_donations">
<input type="hidden" name="business" value="michael.dehaan@gmail.com">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="item_name" value="Ansible">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHostedGuest">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
</p>
<p> <p>
<a href="https://twitter.com/share" class="twitter-share-button" data-text="ansible.github.com">Share On Twitter</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<g:plusone annotation="inline"></g:plusone>
<div class="fb-like" data-href="http://ansible.github.com" data-send="true" data-width="450" data-show-faces="false"></div>
</p>
<p> <p>
&copy; Copyright 2012 Michael DeHaan.<br/> &copy; Copyright 2012 Michael DeHaan.<br/>
Last updated on Sep 23, 2012.<br/> Last updated on Sep 27, 2012.<br/>
</p> </p>
</div> </div>
</footer> </footer>
</body> </body>
</html> </html>

@ -7,7 +7,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>Module Development &mdash; Ansible - SSH-Based Configuration Management &amp; Deployment</title> <title>Module Development &mdash; Ansible Documentation</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" />
@ -29,8 +29,7 @@
<script type="text/javascript" src="_static/bootstrap-dropdown.js"></script> <script type="text/javascript" src="_static/bootstrap-dropdown.js"></script>
<script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script> <script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script>
<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 Documentation" href="index.html" />
<link rel="next" title="Who Uses Ansible" href="who_uses_ansible.html" />
<link rel="prev" title="API &amp; Integrations" href="api.html" /> <link rel="prev" title="API &amp; Integrations" href="api.html" />
<script type="text/javascript"> <script type="text/javascript">
(function () { (function () {
@ -125,7 +124,7 @@ s.parentNode.insertBefore(ga, s);
<div class="topbar" data-scrollspy="scrollspy" > <div class="topbar" data-scrollspy="scrollspy" >
<div class="topbar-inner"> <div class="topbar-inner">
<div class="container"> <div class="container">
<!-- <a class="brand" href="index.html">Ansible</a> --> <a class="brand" href="index.html">Ansible Documentation</a>
<ul class="nav"> <ul class="nav">
<li><a href="/">Home</A> <li><a href="/">Home</A>
@ -143,7 +142,6 @@ s.parentNode.insertBefore(ga, s);
<li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li> <li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li>
<li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li> <li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="">Module Development</a></li> <li class="toctree-l1 current"><a class="current reference internal" href="">Module Development</a></li>
<li class="toctree-l1"><a class="reference internal" href="who_uses_ansible.html">Who Uses Ansible</a></li>
</ul> </ul>
</span> </span>
</li> </li>
@ -182,12 +180,9 @@ s.parentNode.insertBefore(ga, s);
</div> </div>
</div> </div>
</div> </div>
<a href="http://github.com/ansible/ansible"><img style="position: absolute; right: 0; border: 0;" src="http://ansible.github.com/github.png" alt="Fork me on GitHub"></a>
<div class="container"> <div class="container">
<a href="http://ansible.github.com"><img src="http://ansible.github.com/ansible-logo.png" alt="Ansible"/></a><br/>
<br/>
<div class="section" id="module-development"> <div class="section" id="module-development">
<h1><a class="toc-backref" href="#contents">Module Development</a><a class="headerlink" href="#module-development" title="Permalink to this headline"></a></h1> <h1><a class="toc-backref" href="#contents">Module Development</a><a class="headerlink" href="#module-development" title="Permalink to this headline"></a></h1>
@ -508,33 +503,13 @@ the program. Stop by the mailing list to inquire about requirements.</p>
<br/> <br/>
</div> </div>
<footer class="footer"> <footer class="footer">
<div class="container">
<div class="container">
<div id="fb-root"></div>
<p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_donations">
<input type="hidden" name="business" value="michael.dehaan@gmail.com">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="item_name" value="Ansible">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHostedGuest">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
</p>
<p> <p>
<a href="https://twitter.com/share" class="twitter-share-button" data-text="ansible.github.com">Share On Twitter</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<g:plusone annotation="inline"></g:plusone>
<div class="fb-like" data-href="http://ansible.github.com" data-send="true" data-width="450" data-show-faces="false"></div>
</p>
<p> <p>
&copy; Copyright 2012 Michael DeHaan.<br/> &copy; Copyright 2012 Michael DeHaan.<br/>
Last updated on Sep 23, 2012.<br/> Last updated on Sep 27, 2012.<br/>
</p> </p>
</div> </div>
</footer> </footer>
</body> </body>
</html> </html>

@ -7,7 +7,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>Ansible Modules &mdash; Ansible - SSH-Based Configuration Management &amp; Deployment</title> <title>Ansible Modules &mdash; Ansible Documentation</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" />
@ -29,7 +29,7 @@
<script type="text/javascript" src="_static/bootstrap-dropdown.js"></script> <script type="text/javascript" src="_static/bootstrap-dropdown.js"></script>
<script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script> <script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script>
<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 Documentation" href="index.html" />
<link rel="next" title="YAML Syntax" href="YAMLSyntax.html" /> <link rel="next" title="YAML Syntax" href="YAMLSyntax.html" />
<link rel="prev" title="Command Line Examples And Next Steps" href="examples.html" /> <link rel="prev" title="Command Line Examples And Next Steps" href="examples.html" />
<script type="text/javascript"> <script type="text/javascript">
@ -125,7 +125,7 @@ s.parentNode.insertBefore(ga, s);
<div class="topbar" data-scrollspy="scrollspy" > <div class="topbar" data-scrollspy="scrollspy" >
<div class="topbar-inner"> <div class="topbar-inner">
<div class="container"> <div class="container">
<!-- <a class="brand" href="index.html">Ansible</a> --> <a class="brand" href="index.html">Ansible Documentation</a>
<ul class="nav"> <ul class="nav">
<li><a href="/">Home</A> <li><a href="/">Home</A>
@ -143,7 +143,6 @@ s.parentNode.insertBefore(ga, s);
<li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li> <li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li>
<li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li> <li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li>
<li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li> <li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li>
<li class="toctree-l1"><a class="reference internal" href="who_uses_ansible.html">Who Uses Ansible</a></li>
</ul> </ul>
</span> </span>
</li> </li>
@ -166,6 +165,7 @@ s.parentNode.insertBefore(ga, s);
<li><a class="reference internal" href="#get-url">get_url</a></li> <li><a class="reference internal" href="#get-url">get_url</a></li>
<li><a class="reference internal" href="#git">git</a></li> <li><a class="reference internal" href="#git">git</a></li>
<li><a class="reference internal" href="#group">group</a></li> <li><a class="reference internal" href="#group">group</a></li>
<li><a class="reference internal" href="#ini-file">ini_file</a></li>
<li><a class="reference internal" href="#lineinfile">lineinfile</a></li> <li><a class="reference internal" href="#lineinfile">lineinfile</a></li>
<li><a class="reference internal" href="#mount">mount</a></li> <li><a class="reference internal" href="#mount">mount</a></li>
<li><a class="reference internal" href="#mysql-db">mysql_db</a></li> <li><a class="reference internal" href="#mysql-db">mysql_db</a></li>
@ -211,58 +211,56 @@ s.parentNode.insertBefore(ga, s);
</div> </div>
</div> </div>
</div> </div>
<a href="http://github.com/ansible/ansible"><img style="position: absolute; right: 0; border: 0;" src="http://ansible.github.com/github.png" alt="Fork me on GitHub"></a>
<div class="container"> <div class="container">
<a href="http://ansible.github.com"><img src="http://ansible.github.com/ansible-logo.png" alt="Ansible"/></a><br/>
<br/>
<div class="section" id="ansible-modules"> <div class="section" id="ansible-modules">
<h1><a class="toc-backref" href="#contents">Ansible Modules</a><a class="headerlink" href="#ansible-modules" title="Permalink to this headline"></a></h1> <h1><a class="toc-backref" href="#contents">Ansible Modules</a><a class="headerlink" href="#ansible-modules" title="Permalink to this headline"></a></h1>
<div class="contents topic" id="contents"> <div class="contents topic" id="contents">
<p class="topic-title first">Contents</p> <p class="topic-title first">Contents</p>
<ul class="simple"> <ul class="simple">
<li><a class="reference internal" href="#ansible-modules" id="id38">Ansible Modules</a><ul> <li><a class="reference internal" href="#ansible-modules" id="id39">Ansible Modules</a><ul>
<li><a class="reference internal" href="#introduction" id="id39">Introduction</a></li> <li><a class="reference internal" href="#introduction" id="id40">Introduction</a></li>
<li><a class="reference internal" href="#apt-repository" id="id40">apt_repository</a></li> <li><a class="reference internal" href="#apt-repository" id="id41">apt_repository</a></li>
<li><a class="reference internal" href="#apt" id="id41">apt</a></li> <li><a class="reference internal" href="#apt" id="id42">apt</a></li>
<li><a class="reference internal" href="#assemble" id="id42">assemble</a></li> <li><a class="reference internal" href="#assemble" id="id43">assemble</a></li>
<li><a class="reference internal" href="#authorized-key" id="id43">authorized_key</a></li> <li><a class="reference internal" href="#authorized-key" id="id44">authorized_key</a></li>
<li><a class="reference internal" href="#command" id="id44">command</a></li> <li><a class="reference internal" href="#command" id="id45">command</a></li>
<li><a class="reference internal" href="#copy" id="id45">copy</a></li> <li><a class="reference internal" href="#copy" id="id46">copy</a></li>
<li><a class="reference internal" href="#easy-install" id="id46">easy_install</a></li> <li><a class="reference internal" href="#easy-install" id="id47">easy_install</a></li>
<li><a class="reference internal" href="#facter" id="id47">facter</a></li> <li><a class="reference internal" href="#facter" id="id48">facter</a></li>
<li><a class="reference internal" href="#fetch" id="id48">fetch</a></li> <li><a class="reference internal" href="#fetch" id="id49">fetch</a></li>
<li><a class="reference internal" href="#file" id="id49">file</a></li> <li><a class="reference internal" href="#file" id="id50">file</a></li>
<li><a class="reference internal" href="#get-url" id="id50">get_url</a></li> <li><a class="reference internal" href="#get-url" id="id51">get_url</a></li>
<li><a class="reference internal" href="#git" id="id51">git</a></li> <li><a class="reference internal" href="#git" id="id52">git</a></li>
<li><a class="reference internal" href="#group" id="id52">group</a></li> <li><a class="reference internal" href="#group" id="id53">group</a></li>
<li><a class="reference internal" href="#lineinfile" id="id53">lineinfile</a></li> <li><a class="reference internal" href="#ini-file" id="id54">ini_file</a></li>
<li><a class="reference internal" href="#mount" id="id54">mount</a></li> <li><a class="reference internal" href="#lineinfile" id="id55">lineinfile</a></li>
<li><a class="reference internal" href="#mysql-db" id="id55">mysql_db</a></li> <li><a class="reference internal" href="#mount" id="id56">mount</a></li>
<li><a class="reference internal" href="#mysql-user" id="id56">mysql_user</a></li> <li><a class="reference internal" href="#mysql-db" id="id57">mysql_db</a></li>
<li><a class="reference internal" href="#nagios" id="id57">nagios</a></li> <li><a class="reference internal" href="#mysql-user" id="id58">mysql_user</a></li>
<li><a class="reference internal" href="#ohai" id="id58">ohai</a></li> <li><a class="reference internal" href="#nagios" id="id59">nagios</a></li>
<li><a class="reference internal" href="#ping" id="id59">ping</a></li> <li><a class="reference internal" href="#ohai" id="id60">ohai</a></li>
<li><a class="reference internal" href="#pip" id="id60">pip</a></li> <li><a class="reference internal" href="#ping" id="id61">ping</a></li>
<li><a class="reference internal" href="#postgresql-db" id="id61">postgresql_db</a></li> <li><a class="reference internal" href="#pip" id="id62">pip</a></li>
<li><a class="reference internal" href="#postgresql-user" id="id62">postgresql_user</a></li> <li><a class="reference internal" href="#postgresql-db" id="id63">postgresql_db</a></li>
<li><a class="reference internal" href="#raw" id="id63">raw</a></li> <li><a class="reference internal" href="#postgresql-user" id="id64">postgresql_user</a></li>
<li><a class="reference internal" href="#service" id="id64">service</a></li> <li><a class="reference internal" href="#raw" id="id65">raw</a></li>
<li><a class="reference internal" href="#seboolean" id="id65">seboolean</a></li> <li><a class="reference internal" href="#service" id="id66">service</a></li>
<li><a class="reference internal" href="#selinux" id="id66">selinux</a></li> <li><a class="reference internal" href="#seboolean" id="id67">seboolean</a></li>
<li><a class="reference internal" href="#setup" id="id67">setup</a></li> <li><a class="reference internal" href="#selinux" id="id68">selinux</a></li>
<li><a class="reference internal" href="#shell" id="id68">shell</a></li> <li><a class="reference internal" href="#setup" id="id69">setup</a></li>
<li><a class="reference internal" href="#subversion" id="id69">subversion</a></li> <li><a class="reference internal" href="#shell" id="id70">shell</a></li>
<li><a class="reference internal" href="#supervisorctl" id="id70">supervisorctl</a></li> <li><a class="reference internal" href="#subversion" id="id71">subversion</a></li>
<li><a class="reference internal" href="#template" id="id71">template</a></li> <li><a class="reference internal" href="#supervisorctl" id="id72">supervisorctl</a></li>
<li><a class="reference internal" href="#user" id="id72">user</a></li> <li><a class="reference internal" href="#template" id="id73">template</a></li>
<li><a class="reference internal" href="#wait-for" id="id73">wait_for</a></li> <li><a class="reference internal" href="#user" id="id74">user</a></li>
<li><a class="reference internal" href="#virt" id="id74">virt</a></li> <li><a class="reference internal" href="#wait-for" id="id75">wait_for</a></li>
<li><a class="reference internal" href="#yum" id="id75">yum</a></li> <li><a class="reference internal" href="#virt" id="id76">virt</a></li>
<li><a class="reference internal" href="#additional-contrib-modules" id="id76">Additional Contrib Modules</a></li> <li><a class="reference internal" href="#yum" id="id77">yum</a></li>
<li><a class="reference internal" href="#writing-your-own-modules" id="id77">Writing your own modules</a></li> <li><a class="reference internal" href="#additional-contrib-modules" id="id78">Additional Contrib Modules</a></li>
<li><a class="reference internal" href="#writing-your-own-modules" id="id79">Writing your own modules</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@ -694,152 +692,98 @@ be saved into &#8216;/foo/host.example.com/tmp/bar&#8217;</td>
</div> </div>
<div class="section" id="file"> <div class="section" id="file">
<span id="id10"></span><h2><a class="toc-backref" href="#contents">file</a><a class="headerlink" href="#file" title="Permalink to this headline"></a></h2> <span id="id10"></span><h2><a class="toc-backref" href="#contents">file</a><a class="headerlink" href="#file" title="Permalink to this headline"></a></h2>
<p>Sets attributes of files, symlinks, and directories, or removes files/symlinks/directories. Many other modules <p class="versionadded">
support the same options as the file module &#8211; including &#8216;copy&#8217;, &#8216;template&#8217;, and &#8216;assmeble&#8217;.</p> <span class="versionmodified">New in version 0.1.</span></p>
<table border="1" class="docutils"> <p>Sets attributes of files, symlinks, and directories, or removes files/symlinks/directories. Many other modules support the same options as the file module - including <tt class="docutils literal"><span class="pre">copy</span></tt>, <tt class="docutils literal"><span class="pre">template</span></tt>, and <tt class="docutils literal"><span class="pre">assmeble</span></tt>.</p>
<colgroup> <table>
<col width="17%" /> <tr>
<col width="9%" /> <td>parameter</td>
<col width="8%" /> <td>required</td>
<col width="66%" /> <td>default</td>
</colgroup> <td>choices</td>
<thead valign="bottom"> <td>comments</td>
<tr class="row-odd"><th class="head">parameter</th>
<th class="head">required</th>
<th class="head">default</th>
<th class="head">comments</th>
</tr> </tr>
</thead>
<tbody valign="top"> <tr>
<tr class="row-even"><td>dest</td> <td>dest</td>
<td>yes</td> <td>True</td>
<td>&nbsp;</td> <td>[]</td>
<td>defines the file being managed, unless when used with state=link, and <td><ul></ul></td>
then sets the destination to create a symbolic link to using &#8216;src&#8217;</td> <td>defines the file being managed, unless when used with <em>state=link</em>, and then sets the destination to create a symbolic link to using <em>src</em></td>
</tr> </tr>
<tr class="row-odd"><td>state</td>
<td>&nbsp;</td> <tr>
<td>state</td>
<td>False</td>
<td>file</td> <td>file</td>
<td>values are &#8216;file&#8217;, &#8216;link&#8217;, &#8216;directory&#8217;, or &#8216;absent&#8217;. If directory, <td><ul><li>file</li><li>link</li><li>directory</li><li>absent</li></ul></td>
all immediate subdirectories will be created if they do not exist. If <td>If directory, all immediate subdirectories will be created if they do not exist. If <em>file</em>, the file will NOT be created if it does not exist, see the <span class='module'>copy</span> or <span class='module'>template</span> module if you want that behavior. If <em>link</em>, the symbolic link will be created or changed. If absent, directories will be recursively deleted, and files or symlinks will be unlinked.</td>
&#8216;file&#8217;, the file will NOT be created if it does not exist, see the &#8216;copy&#8217;
or &#8216;template&#8217; module if you want that behavior. If &#8216;link&#8217;, the symbolic
link will be created or changed. If absent, directories will be
recursively deleted, and files or symlinks will be unlinked.</td>
</tr>
<tr class="row-even"><td>mode</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>mode the file or directory shoudl be, such as 0644 as would be fed to
chmod. English modes like &#8216;g+x&#8217; are not yet supported</td>
</tr>
<tr class="row-odd"><td>owner</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>name of the user that should own the file/directory, as would be fed to
chown</td>
</tr>
<tr class="row-even"><td>group</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>name of the group that should own the file/directory, as would be fed to
group</td>
</tr>
<tr class="row-odd"><td>src</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>path of the file to link to (applies only to state=link)</td>
</tr>
<tr class="row-even"><td>seuser</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>user part of SELinux file context. Will default to system policy, if
applicable. If set to &#8216;_default&#8217;, it will use the &#8216;user&#8217; portion of the
the policy if available</td>
</tr>
<tr class="row-odd"><td>serole</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>role part of SELinux file context, &#8216;_default&#8217; feature works as above.</td>
</tr> </tr>
<tr class="row-even"><td>setype</td>
<td>&nbsp;</td> <tr>
<td>&nbsp;</td> <td>mode</td>
<td>type part of SELinux file context, &#8216;_default&#8217; feature works as above</td> <td>False</td>
</tr> <td></td>
<tr class="row-odd"><td>selevel</td> <td><ul></ul></td>
<td>&nbsp;</td> <td>mode the file or directory should be, such as 0644 as would be fed to <em>chmod</em>. English modes like <b>g+x</b> are not yet supported</td>
<td>s0</td>
<td>level part of the SELinux file context. This is the MLS/MCS attribute,
sometimes known as the &#8216;range&#8217;. &#8216;_default&#8217; feature works as above</td>
</tr>
<tr class="row-even"><td>context</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>accepts only &#8216;default&#8217; as a value. This will restore a file&#8217;s selinux
context in the policy. Does nothing if no default is available.</td>
</tr> </tr>
</tbody>
</table> </table><p>Example from Ansible Playbooks</p>
<p>Example action from Ansible <a class="reference internal" href="playbooks.html"><em>Playbooks</em></a>:</p> <p><pre>
<div class="highlight-python"><pre>file path=/etc/foo.conf owner=foo group=foo mode=0644 file path=/etc/foo.conf owner=foo group=foo mode=0644</pre></p>
file path=/some/path owner=foo group=foo state=directory
file path=/path/to/delete state=absent <br/></div>
file src=/file/to/link/to dest=/path/to/symlink owner=foo group=foo state=link
file path=/some/path state=directory setype=httpd_sys_content_t
file path=/some/path state=directory context=default</pre>
</div>
</div>
<div class="section" id="get-url"> <div class="section" id="get-url">
<span id="id11"></span><h2><a class="toc-backref" href="#contents">get_url</a><a class="headerlink" href="#get-url" title="Permalink to this headline"></a></h2> <span id="id11"></span><h2><a class="toc-backref" href="#contents">get_url</a><a class="headerlink" href="#get-url" title="Permalink to this headline"></a></h2>
<p>Downloads files from http, https, or ftp to the remote server. The remote server must have direct <p class="versionadded">
access to the remote resource.</p> <span class="versionmodified">New in version 0.6.</span></p>
<table border="1" class="docutils"> <p>Downloads files from HTTP, HTTPS, or FTP to the remote server. The remote server must have direct access to the remote resource.</p>
<colgroup> <table>
<col width="17%" /> <tr>
<col width="9%" /> <td>parameter</td>
<col width="8%" /> <td>required</td>
<col width="66%" /> <td>default</td>
</colgroup> <td>choices</td>
<thead valign="bottom"> <td>comments</td>
<tr class="row-odd"><th class="head">parameter</th>
<th class="head">required</th>
<th class="head">default</th>
<th class="head">comments</th>
</tr> </tr>
</thead>
<tbody valign="top"> <tr>
<tr class="row-even"><td>url</td> <td>url</td>
<td>yes</td> <td>True</td>
<td>&nbsp;</td> <td>None</td>
<td>http, https, or ftp URL</td> <td><ul></ul></td>
<td>HTTP, HTTPS, or FTP URL</td>
</tr> </tr>
<tr class="row-odd"><td>dest</td>
<td>yes</td> <tr>
<td>&nbsp;</td> <td>dest</td>
<td>absolute path of where to download the file to. If dest is a directory, <td>True</td>
the basename of the file on the remote server will be used. If a <td>None</td>
directory, thirsty=yes must also be set.</td> <td><ul></ul></td>
<td>absolute path of where to download the file to.If <em>dest</em> is a directory, the basename of the file on the remote server will be used. If a directory, <em>thirsty=yes</em> must also be set.</td>
</tr> </tr>
<tr class="row-even"><td>thirsty</td>
<tr>
<td>thirsty</td>
<td>False</td>
<td>no</td> <td>no</td>
<td>&#8216;no&#8217;</td> <td><ul><li>yes</li><li>no</li></ul></td>
<td>(new in 0.7) if yes, will download the file every time and replace the <td>if <code>yes</code>, will download the file every time and replace the file if the contents change. if <code>no</code>, the file will only be downloaded if the destination does not exist. Generally should be <code>yes</code> only for small local files. prior to 0.6, acts if <code>yes</code> by default.</td>
file if the contents change. if no, the file will only be downloaded
if the destination does not exist. Generally should be &#8216;yes&#8217; only for
small local files. prior to 0.6, acts if &#8216;yes&#8217; by default.</td>
</tr> </tr>
<tr class="row-odd"><td>OTHERS</td>
<td>no</td> <tr>
<td>&nbsp;</td> <td>others</td>
<td>all arguments accepted by the file module also work here</td> <td>False</td>
<td></td>
<td><ul></ul></td>
<td>all arguments accepted by the <span class='module'>file</span> module also work here</td>
</tr> </tr>
</tbody>
</table> </table><p>Example from Ansible Playbooks</p>
<p>Example action from Ansible <a class="reference internal" href="playbooks.html"><em>Playbooks</em></a>:</p> <p><pre>
<div class="highlight-python"><pre>- action: get_url url=http://example.com/path/file.conf dest=/etc/foo.conf mode=0444</pre> get_url url=http://example.com/path/file.conf dest=/etc/foo.conf mode=0440</pre></p>
</div>
</div> <br/></div>
<div class="section" id="git"> <div class="section" id="git">
<span id="id12"></span><h2><a class="toc-backref" href="#contents">git</a><a class="headerlink" href="#git" title="Permalink to this headline"></a></h2> <span id="id12"></span><h2><a class="toc-backref" href="#contents">git</a><a class="headerlink" href="#git" title="Permalink to this headline"></a></h2>
<p>Deploys software (or files) from git checkouts.</p> <p>Deploys software (or files) from git checkouts.</p>
@ -936,77 +880,143 @@ discarded. Prior to 0.7, this was always &#8216;yes&#8217; and could not be dis
<div class="highlight-python"><pre>group name=somegroup state=present</pre> <div class="highlight-python"><pre>group name=somegroup state=present</pre>
</div> </div>
</div> </div>
<div class="section" id="ini-file">
<span id="id14"></span><h2><a class="toc-backref" href="#contents">ini_file</a><a class="headerlink" href="#ini-file" title="Permalink to this headline"></a></h2>
<p class="versionadded">
<span class="versionmodified">New in version 0.9.</span></p>
<p>Manage (add, remove, change) individual settings in an INI-style file without having to manage the file as a whole with, say, <tt class="docutils literal"><span class="pre">template</span></tt> or <tt class="docutils literal"><span class="pre">assemble</span></tt>. Adds missing sections if they don&#8217;t exist.</p>
<table>
<tr>
<td>parameter</td>
<td>required</td>
<td>default</td>
<td>choices</td>
<td>comments</td>
</tr>
<tr>
<td>option</td>
<td>False</td>
<td>None</td>
<td><ul></ul></td>
<td>if set (required for changing a <em>value</em>), this is the name of the option.May be omitted if adding/removing a whole <em>section</em>.</td>
</tr>
<tr>
<td>others</td>
<td>False</td>
<td></td>
<td><ul></ul></td>
<td>all arguments accepted by the <span class='module'>file</span> module also work here</td>
</tr>
<tr>
<td>dest</td>
<td>True</td>
<td>None</td>
<td><ul></ul></td>
<td>Path to the INI-style file; this file is created if required</td>
</tr>
<tr>
<td>section</td>
<td>True</td>
<td>None</td>
<td><ul></ul></td>
<td>Section name in INI file. This is added if <code>state=present</code> automatically when a single value is being set.</td>
</tr>
<tr>
<td>backup</td>
<td>False</td>
<td>False</td>
<td><ul><li>yes</li><li>no</li></ul></td>
<td>Create a backup file including the timestamp information so you can get the original file back if you somehow clobbered it incorrectly.</td>
</tr>
<tr>
<td>value</td>
<td>False</td>
<td>None</td>
<td><ul></ul></td>
<td>the string value to be associated with an <em>option</em>. May be omitted when removing an <em>option</em>.</td>
</tr>
</table><br/></div>
<div class="section" id="lineinfile"> <div class="section" id="lineinfile">
<span id="id14"></span><h2><a class="toc-backref" href="#contents">lineinfile</a><a class="headerlink" href="#lineinfile" title="Permalink to this headline"></a></h2> <span id="id15"></span><h2><a class="toc-backref" href="#contents">lineinfile</a><a class="headerlink" href="#lineinfile" title="Permalink to this headline"></a></h2>
<p class="versionadded"> <p class="versionadded">
<span class="versionmodified">New in version 0.7.</span></p> <span class="versionmodified">New in version 0.7.</span></p>
<p>This module will search a file for a line, and ensure that it is present or <p>This module will search a file for a line, and ensure that it is present or absent.
absent.</p> This is primarily useful when you want to change a single line in a file only. For other cases, see the <tt class="docutils literal"><span class="pre">copy</span></tt> or <tt class="docutils literal"><span class="pre">template</span></tt> modules.</p>
<p>This is primarily useful when you only want to change a single line in a file. <table>
For other cases, see the copy or template modules.</p> <tr>
<table border="1" class="docutils"> <td>parameter</td>
<colgroup> <td>required</td>
<col width="17%" /> <td>default</td>
<col width="9%" /> <td>choices</td>
<col width="8%" /> <td>comments</td>
<col width="66%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">parameter</th>
<th class="head">required</th>
<th class="head">default</th>
<th class="head">comments</th>
</tr> </tr>
</thead>
<tbody valign="top"> <tr>
<tr class="row-even"><td>state</td> <td>state</td>
<td>no</td> <td>False</td>
<td>present</td> <td>present</td>
<td>&#8216;absent&#8217; or &#8216;present&#8217;</td> <td><ul><li>present</li><li>absent</li></ul></td>
<td>Whether the line should be there or not.</td>
</tr> </tr>
<tr class="row-odd"><td>name</td>
<td>yes</td> <tr>
<td>&nbsp;</td> <td>name</td>
<td>The file to modify.</td> <td>True</td>
<td></td>
<td><ul></ul></td>
<td>The file to modify</td>
</tr> </tr>
<tr class="row-even"><td>regexp</td>
<td>yes</td> <tr>
<td>&nbsp;</td> <td>insertafter</td>
<td>The regular expression to look for in the file. For state=present, the <td>False</td>
pattern to replace. For state=absent, the pattern of the line to <td>EOF</td>
remove.</td> <td><ul><li>BOF</li><li>EOF</li></ul></td>
<td>Used with <em>state=present</em>. If specified, the line will be inserted after the specified regular expression. Two special values are available; <code>BOF</code> for inserting the line at the beginning of the file, and <code>EOF</code> for inserting the line at the end of the file.</td>
</tr> </tr>
<tr class="row-odd"><td>line</td>
<td>maybe</td> <tr>
<td>&nbsp;</td> <td>regexp</td>
<td>Required for state=present. The line to insert/replace into the file. Must <td>True</td>
match the value given to &#8216;regexp&#8217;.</td> <td></td>
<td><ul></ul></td>
<td>The regular expression to look for in the file. For <em>state=present</em>, the pattern to replace. For <em>state=absent</em>, the pattern of the line to remove.</td>
</tr> </tr>
<tr class="row-even"><td>insertafter</td>
<td>no</td> <tr>
<td>EOF</td> <td>line</td>
<td>Used with state=present. If specified, the line will be inserted after the <td>False</td>
specified regular expression. Two special values are available: BOF for <td></td>
inserting the line at the beginning of the file, and EOF for inserting the <td><ul></ul></td>
line at the end of the file.</td> <td>Required for <em>state=present</em>. The line to insert/replace into the file. Must match the value given to <code>regexp</code>.</td>
</tr> </tr>
<tr class="row-odd"><td>backup</td>
<td>no</td> <tr>
<td>no</td> <td>backup</td>
<td>Create a backup file including the timestamp information so you can <td>False</td>
get the original file back if you somehow clobbered it incorrectly.</td> <td>False</td>
<td><ul></ul></td>
<td>Create a backup file including the timestamp information so you can get the original file back if you somehow clobbered it incorrectly.</td>
</tr> </tr>
</tbody>
</table> </table><p></p>
<p>Example action from Ansible <a class="reference internal" href="playbooks.html"><em>Playbooks</em></a>:</p> <p><pre>
<div class="highlight-python"><pre>lineinfile name=/etc/selinux/config regexp=^SELINUX= line=SELINUX=disabled lineinfile name=/etc/selinux/config regexp=^SELINUX= line=SELINUX=disabled</pre></p>
lineinfile name=/etc/sudoers regexp="^#includedir" line="#includedir /etc/sudoers.d"
lineinfile name=/etc/httpd/conf/httpd.conf regexp="^ServerName " insertafter="^#ServerName " line="ServerName ansible.example.com" <p></p>
lineinfile name=/etc/sudoers state=absent regexp="^%wheel"</pre> <p><pre>
</div> lineinfile name=/etc/sudoers state=absent regexp="^%wheel"</pre></p>
</div>
<br/></div>
<div class="section" id="mount"> <div class="section" id="mount">
<span id="id15"></span><h2><a class="toc-backref" href="#contents">mount</a><a class="headerlink" href="#mount" title="Permalink to this headline"></a></h2> <span id="id16"></span><h2><a class="toc-backref" href="#contents">mount</a><a class="headerlink" href="#mount" title="Permalink to this headline"></a></h2>
<p class="versionadded"> <p class="versionadded">
<span class="versionmodified">New in version 0.6.</span></p> <span class="versionmodified">New in version 0.6.</span></p>
<p>The mount module controls active and configured mount points (fstab).</p> <p>The mount module controls active and configured mount points (fstab).</p>
@ -1066,7 +1076,7 @@ configured in fstab. &#8216;absent&#8217;, and &#8216;present&#8217; only deal
</table> </table>
</div> </div>
<div class="section" id="mysql-db"> <div class="section" id="mysql-db">
<span id="id16"></span><h2><a class="toc-backref" href="#contents">mysql_db</a><a class="headerlink" href="#mysql-db" title="Permalink to this headline"></a></h2> <span id="id17"></span><h2><a class="toc-backref" href="#contents">mysql_db</a><a class="headerlink" href="#mysql-db" title="Permalink to this headline"></a></h2>
<p class="versionadded"> <p class="versionadded">
<span class="versionmodified">New in version 0.6.</span></p> <span class="versionmodified">New in version 0.6.</span></p>
<p>Add or remove MySQL databases from a remote host.</p> <p>Add or remove MySQL databases from a remote host.</p>
@ -1133,7 +1143,7 @@ finally fall back to using the MySQL default login of &#8216;root&#8217; with no
</div> </div>
</div> </div>
<div class="section" id="mysql-user"> <div class="section" id="mysql-user">
<span id="id17"></span><h2><a class="toc-backref" href="#contents">mysql_user</a><a class="headerlink" href="#mysql-user" title="Permalink to this headline"></a></h2> <span id="id18"></span><h2><a class="toc-backref" href="#contents">mysql_user</a><a class="headerlink" href="#mysql-user" title="Permalink to this headline"></a></h2>
<p class="versionadded"> <p class="versionadded">
<span class="versionmodified">New in version 0.6.</span></p> <span class="versionmodified">New in version 0.6.</span></p>
<p>Adds or removes a user from a MySQL database.</p> <p>Adds or removes a user from a MySQL database.</p>
@ -1211,7 +1221,7 @@ finally fall back to using the MySQL default login of &#8216;root&#8217; with no
</div> </div>
</div> </div>
<div class="section" id="nagios"> <div class="section" id="nagios">
<span id="id18"></span><h2><a class="toc-backref" href="#contents">nagios</a><a class="headerlink" href="#nagios" title="Permalink to this headline"></a></h2> <span id="id19"></span><h2><a class="toc-backref" href="#contents">nagios</a><a class="headerlink" href="#nagios" title="Permalink to this headline"></a></h2>
<p class="versionadded"> <p class="versionadded">
<span class="versionmodified">New in version 0.7.</span></p> <span class="versionmodified">New in version 0.7.</span></p>
<p>Perform common tasks in Nagios related to downtime and notifications.</p> <p>Perform common tasks in Nagios related to downtime and notifications.</p>
@ -1383,7 +1393,7 @@ receive this error if that is the case:</p>
</ol> </ol>
</div> </div>
<div class="section" id="ohai"> <div class="section" id="ohai">
<span id="id19"></span><h2><a class="toc-backref" href="#contents">ohai</a><a class="headerlink" href="#ohai" title="Permalink to this headline"></a></h2> <span id="id20"></span><h2><a class="toc-backref" href="#contents">ohai</a><a class="headerlink" href="#ohai" title="Permalink to this headline"></a></h2>
<p>Similar to the <a class="reference internal" href="#facter"><em>facter</em></a> module, this returns JSON inventory data. <p>Similar to the <a class="reference internal" href="#facter"><em>facter</em></a> module, this returns JSON inventory data.
Ohai data is a bit more verbose and nested than facter.</p> Ohai data is a bit more verbose and nested than facter.</p>
<p>Requires that &#8216;ohai&#8217; be installed on the remote end.</p> <p>Requires that &#8216;ohai&#8217; be installed on the remote end.</p>
@ -1394,7 +1404,7 @@ Ohai data is a bit more verbose and nested than facter.</p>
</div> </div>
</div> </div>
<div class="section" id="ping"> <div class="section" id="ping">
<span id="id20"></span><h2><a class="toc-backref" href="#contents">ping</a><a class="headerlink" href="#ping" title="Permalink to this headline"></a></h2> <span id="id21"></span><h2><a class="toc-backref" href="#contents">ping</a><a class="headerlink" href="#ping" title="Permalink to this headline"></a></h2>
<p>A trivial test module, this module always returns &#8216;pong&#8217; on <p>A trivial test module, this module always returns &#8216;pong&#8217; on
successful contact. It does not make sense in playbooks, but is useful successful contact. It does not make sense in playbooks, but is useful
from /usr/bin/ansible:</p> from /usr/bin/ansible:</p>
@ -1402,7 +1412,7 @@ from /usr/bin/ansible:</p>
</div> </div>
</div> </div>
<div class="section" id="pip"> <div class="section" id="pip">
<span id="id21"></span><h2><a class="toc-backref" href="#contents">pip</a><a class="headerlink" href="#pip" title="Permalink to this headline"></a></h2> <span id="id22"></span><h2><a class="toc-backref" href="#contents">pip</a><a class="headerlink" href="#pip" title="Permalink to this headline"></a></h2>
<p class="versionadded"> <p class="versionadded">
<span class="versionmodified">New in version 0.7.</span></p> <span class="versionmodified">New in version 0.7.</span></p>
<p>Manages Python library dependencies.</p> <p>Manages Python library dependencies.</p>
@ -1460,7 +1470,7 @@ pip requirements=/srv/webapps/my_app/src/requirements.txt virtualenv=/srv/webapp
</div> </div>
</div> </div>
<div class="section" id="postgresql-db"> <div class="section" id="postgresql-db">
<span id="id23"></span><h2><a class="toc-backref" href="#contents">postgresql_db</a><a class="headerlink" href="#postgresql-db" title="Permalink to this headline"></a></h2> <span id="id24"></span><h2><a class="toc-backref" href="#contents">postgresql_db</a><a class="headerlink" href="#postgresql-db" title="Permalink to this headline"></a></h2>
<p class="versionadded"> <p class="versionadded">
<span class="versionmodified">New in version 0.6.</span></p> <span class="versionmodified">New in version 0.6.</span></p>
<p>Add or remove PostgreSQL databases from a remote host.</p> <p>Add or remove PostgreSQL databases from a remote host.</p>
@ -1524,7 +1534,7 @@ host before using this module.</p>
</div> </div>
</div> </div>
<div class="section" id="postgresql-user"> <div class="section" id="postgresql-user">
<span id="id24"></span><h2><a class="toc-backref" href="#contents">postgresql_user</a><a class="headerlink" href="#postgresql-user" title="Permalink to this headline"></a></h2> <span id="id25"></span><h2><a class="toc-backref" href="#contents">postgresql_user</a><a class="headerlink" href="#postgresql-user" title="Permalink to this headline"></a></h2>
<p class="versionadded"> <p class="versionadded">
<span class="versionmodified">New in version 0.6.</span></p> <span class="versionmodified">New in version 0.6.</span></p>
<p>Add or remove PostgreSQL users (roles) from a remote host and, optionally, grant the users <p>Add or remove PostgreSQL users (roles) from a remote host and, optionally, grant the users
@ -1621,22 +1631,15 @@ happened and separately if the user was removed or not.</p>
</div> </div>
</div> </div>
<div class="section" id="raw"> <div class="section" id="raw">
<span id="id25"></span><h2><a class="toc-backref" href="#contents">raw</a><a class="headerlink" href="#raw" title="Permalink to this headline"></a></h2> <span id="id26"></span><h2><a class="toc-backref" href="#contents">raw</a><a class="headerlink" href="#raw" title="Permalink to this headline"></a></h2>
<p>Executes a low-down and dirty SSH command, not going through the module subsystem.</p> <p>Executes a low-down and dirty SSH command, not going through the module subsystem. This is useful and should only be done in two cases. The first case is installing python-simplejson on older (Python 2.4 and before) hosts that need it as a dependency to run modules, since nearly all core modules require it. Another is speaking to any devices such as routers that do not have any Python installed. In any other case, using the <tt class="docutils literal"><span class="pre">shell</span></tt> or <tt class="docutils literal"><span class="pre">command</span></tt> module is much more appropriate. Arguments given to <tt class="docutils literal"><span class="pre">raw</span></tt> are run directly through the configured remote shell and only output is returned. There is no error detection or change handler support for this module</p>
<p>This is useful and should only be done in two cases. The first case is installing <p>Example from /usr/bin/ansible to bootstrap a legacy python 2.4 host</p>
python-simplejson on older (python 2.4 and before) hosts that need it as a dependency <p><pre>
to run modules, since nearly all core modules require it. Another is speaking to any ansible newhost.example.com -m raw -a "yum -y install python-simplejson"</pre></p>
devices such as routers that do not have any Python installed. In any other case,
using the &#8216;shell&#8217; or &#8216;command&#8217; module is much more appropriate.</p> <br/></div>
<p>Arguments given to &#8216;raw&#8217; are run directly through the configured remote shell and
only output is returned. There is no error detection or change handler support
for this module.</p>
<p>Example from <cite>/usr/bin/ansible</cite> to bootstrap a legacy python 2.4 host:</p>
<div class="highlight-python"><pre>ansible newhost.example.com -m raw -a "yum -y install python-simplejson"</pre>
</div>
</div>
<div class="section" id="service"> <div class="section" id="service">
<span id="id26"></span><h2><a class="toc-backref" href="#contents">service</a><a class="headerlink" href="#service" title="Permalink to this headline"></a></h2> <span id="id27"></span><h2><a class="toc-backref" href="#contents">service</a><a class="headerlink" href="#service" title="Permalink to this headline"></a></h2>
<p>Controls services on remote machines.</p> <p>Controls services on remote machines.</p>
<table border="1" class="docutils"> <table border="1" class="docutils">
<colgroup> <colgroup>
@ -1689,7 +1692,7 @@ service name=foo pattern=/usr/bin/foo state=started</pre>
</div> </div>
</div> </div>
<div class="section" id="seboolean"> <div class="section" id="seboolean">
<span id="id27"></span><h2><a class="toc-backref" href="#contents">seboolean</a><a class="headerlink" href="#seboolean" title="Permalink to this headline"></a></h2> <span id="id28"></span><h2><a class="toc-backref" href="#contents">seboolean</a><a class="headerlink" href="#seboolean" title="Permalink to this headline"></a></h2>
<p class="versionadded"> <p class="versionadded">
<span class="versionmodified">New in version 0.7.</span></p> <span class="versionmodified">New in version 0.7.</span></p>
<p>Toggles SELinux booleans.</p> <p>Toggles SELinux booleans.</p>
@ -1730,7 +1733,7 @@ service name=foo pattern=/usr/bin/foo state=started</pre>
</div> </div>
</div> </div>
<div class="section" id="selinux"> <div class="section" id="selinux">
<span id="id28"></span><h2><a class="toc-backref" href="#contents">selinux</a><a class="headerlink" href="#selinux" title="Permalink to this headline"></a></h2> <span id="id29"></span><h2><a class="toc-backref" href="#contents">selinux</a><a class="headerlink" href="#selinux" title="Permalink to this headline"></a></h2>
<p class="versionadded"> <p class="versionadded">
<span class="versionmodified">New in version 0.7.</span></p> <span class="versionmodified">New in version 0.7.</span></p>
<p>Configures the SELinux mode and policy. A reboot may be required after usage. Ansible will not issue this reboot but <p>Configures the SELinux mode and policy. A reboot may be required after usage. Ansible will not issue this reboot but
@ -1773,138 +1776,15 @@ selinux policy=targeted state=disabled</pre>
</div> </div>
</div> </div>
<div class="section" id="setup"> <div class="section" id="setup">
<span id="id29"></span><h2><a class="toc-backref" href="#contents">setup</a><a class="headerlink" href="#setup" title="Permalink to this headline"></a></h2> <span id="id30"></span><h2><a class="toc-backref" href="#contents">setup</a><a class="headerlink" href="#setup" title="Permalink to this headline"></a></h2>
<p>This module is automatically called by playbooks to gather useful variables about remote hosts that can be used <p>This module is automatically called by playbooks to gather useful variables about remote hosts that can be used in playbooks. It can also be executed directly by <tt class="docutils literal"><span class="pre">/usr/bin/ansible</span></tt> to check what variables are available to a host. Ansible provides many <em>facts</em> about the system, automatically.</p>
in playbooks. It can also be executed directly by /usr/bin/ansible to check what variables are available <p>Obtain facts from all hosts and store them indexed by hostname at /tmp/facts.</p>
to a host.</p> <p><pre>
<p>Ansible provides many &#8216;facts&#8217; about the system, automatically.</p> ansible all -m setup -tree /tmp/facts</pre></p>
<p>Some of the variables that are supplied are listed below. These in particular
are from a VMWare Fusion 4 VM running CentOS 6.2:</p> <br/></div>
<div class="highlight-python"><pre>"ansible_facts": {
"ansible_all_ipv4_addresses": [
"192.168.144.180",
"192.168.122.1"
],
"ansible_all_ipv6_addresses": [
"ffff::fff:ffff:ffff:ffff"
],
"ansible_architecture": "x86_64",
"ansible_bios_date": "06/02/2011",
"ansible_bios_version": "6.00",
"ansible_default_ipv4": {
"address": "192.168.144.180",
"alias": "eth0",
"gateway": "192.168.144.2",
"interface": "eth0",
"macaddress": "AA:BB:CC:DD:EE:FF",
"mtu": "1500",
"netmask": "255.255.255.0",
"network": "192.168.144.0",
"type": "ether"
},
"ansible_default_ipv6": {},
"ansible_distribution": "CentOS",
"ansible_distribution_release": "Final",
"ansible_distribution_version": "6.2",
"ansible_eth0": {
"device": "eth0",
"ipv4": {
"address": "192.168.144.180",
"netmask": "255.255.255.0",
"network": "192.16.144.0"
},
"ipv6": [
{
"address": "ffff::fff:ffff:ffff:ffff",
"prefix": "64",
"scope": "link"
}
],
"macaddress": "00:0c:29:b6:a2:62",
"mtu": "1500",
"type": "ether"
},
"ansible_form_factor": "Other",
"ansible_fqdn": "localhost.localdomain",
"ansible_hostname": "localhost",
"ansible_interfaces": [
"lo",
"virbr0",
"eth0"
],
"ansible_kernel": "2.6.32-220.2.1.el6.x86_64",
"ansible_lo": {
"device": "lo",
"ipv4": {
"address": "127.0.0.1",
"netmask": "255.0.0.0",
"network": "127.0.0.0"
},
"ipv6": [
{
"address": "::1",
"prefix": "128",
"scope": "host"
}
],
"macaddress": "00:00:00:00:00:00",
"mtu": "16436",
"type": "loopback"
},
"ansible_machine": "x86_64",
"ansible_memfree_mb": 166,
"ansible_memtotal_mb": 993,
"ansible_processor": [
"Intel(R) Core(TM) i7-2677M CPU @ 1.80GHz"
],
"ansible_processor_cores": "NA",
"ansible_processor_count": 1,
"ansible_product_name": "VMware Virtual Platform",
"ansible_product_serial": "REDACTED",
"ansible_product_uuid": "REDACTED",
"ansible_product_version": "None",
"ansible_python_version": "2.6.6",
"ansible_selinux": {
"config_mode": "enforcing",
"mode": "permissive",
"policyvers": 24,
"status": "enabled",
"type": "targeted"
},
"ansible_ssh_host_key_dsa_public": "REDACTED",
"ansible_ssh_host_key_rsa_public": "REDACTED",
"ansible_swapfree_mb": 1933,
"ansible_swaptotal_mb": 2015,
"ansible_system": "Linux",
"ansible_system_vendor": "VMware, Inc.",
"ansible_virbr0": {
"device": "virbr0",
"ipv4": {
"address": "192.168.122.1",
"netmask": "255.255.255.0",
"network": "192.168.122.0"
},
"macaddress": "AA:BB:CC:DD:EE:FF",
"mtu": "1500",
"type": "ether"
},
"ansible_virtualization_role": "guest",
"ansible_virtualization_type": "VMware",</pre>
</div>
<p>More ansible facts will be added with successive releases.</p>
<p>If facter or ohai are installed, variables from these programs will
also be snapshotted into the JSON file for usage in templating. These
variables are prefixed with <tt class="docutils literal"><span class="pre">facter_</span></tt> and <tt class="docutils literal"><span class="pre">ohai_</span></tt> so it&#8217;s easy to
tell their source.</p>
<p>All variables are bubbled up to the caller. Using the ansible facts and choosing
to not install facter and ohai means you can avoid ruby-dependencies
on your remote systems.</p>
<p>Example action from <cite>/usr/bin/ansible</cite>:</p>
<div class="highlight-python"><pre>ansible testserver -m setup</pre>
</div>
</div>
<div class="section" id="shell"> <div class="section" id="shell">
<span id="id30"></span><h2><a class="toc-backref" href="#contents">shell</a><a class="headerlink" href="#shell" title="Permalink to this headline"></a></h2> <span id="id31"></span><h2><a class="toc-backref" href="#contents">shell</a><a class="headerlink" href="#shell" title="Permalink to this headline"></a></h2>
<p>The shell module takes the command name followed by a list of <p>The shell module takes the command name followed by a list of
arguments, space delimited. It is almost exactly like the command module arguments, space delimited. It is almost exactly like the command module
but runs the command through the user&#8217;s configured shell on the remote node.</p> but runs the command through the user&#8217;s configured shell on the remote node.</p>
@ -1954,7 +1834,7 @@ your best judgement.</p>
</div> </div>
</div> </div>
<div class="section" id="subversion"> <div class="section" id="subversion">
<span id="id31"></span><h2><a class="toc-backref" href="#contents">subversion</a><a class="headerlink" href="#subversion" title="Permalink to this headline"></a></h2> <span id="id32"></span><h2><a class="toc-backref" href="#contents">subversion</a><a class="headerlink" href="#subversion" title="Permalink to this headline"></a></h2>
<p class="versionadded"> <p class="versionadded">
<span class="versionmodified">New in version 0.7.</span></p> <span class="versionmodified">New in version 0.7.</span></p>
<p>Deploys a subversion repository.</p> <p>Deploys a subversion repository.</p>
@ -1996,7 +1876,7 @@ discarded. If no, this module will fail if it encounters modified files.</td>
</div> </div>
</div> </div>
<div class="section" id="supervisorctl"> <div class="section" id="supervisorctl">
<span id="id32"></span><h2><a class="toc-backref" href="#contents">supervisorctl</a><a class="headerlink" href="#supervisorctl" title="Permalink to this headline"></a></h2> <span id="id33"></span><h2><a class="toc-backref" href="#contents">supervisorctl</a><a class="headerlink" href="#supervisorctl" title="Permalink to this headline"></a></h2>
<p class="versionadded"> <p class="versionadded">
<span class="versionmodified">New in version 0.7.</span></p> <span class="versionmodified">New in version 0.7.</span></p>
<p>Manage the state of a program or group of programs running via Supervisord</p> <p>Manage the state of a program or group of programs running via Supervisord</p>
@ -2032,7 +1912,7 @@ discarded. If no, this module will fail if it encounters modified files.</td>
</div> </div>
</div> </div>
<div class="section" id="template"> <div class="section" id="template">
<span id="id33"></span><h2><a class="toc-backref" href="#contents">template</a><a class="headerlink" href="#template" title="Permalink to this headline"></a></h2> <span id="id34"></span><h2><a class="toc-backref" href="#contents">template</a><a class="headerlink" href="#template" title="Permalink to this headline"></a></h2>
<p>Templates a file out to a remote server.</p> <p>Templates a file out to a remote server.</p>
<p>Templates are processed by the <p>Templates are processed by the
<a class="reference external" href="http://jinja.pocoo.org/docs/">Jinja2 templating language</a> - <a class="reference external" href="http://jinja.pocoo.org/docs/">Jinja2 templating language</a> -
@ -2082,7 +1962,7 @@ get the original file back if you somehow clobbered it incorrectly.</td>
</div> </div>
</div> </div>
<div class="section" id="user"> <div class="section" id="user">
<span id="id34"></span><h2><a class="toc-backref" href="#contents">user</a><a class="headerlink" href="#user" title="Permalink to this headline"></a></h2> <span id="id35"></span><h2><a class="toc-backref" href="#contents">user</a><a class="headerlink" href="#user" title="Permalink to this headline"></a></h2>
<p>Creates user accounts, manipulates existing user accounts, and removes user accounts.</p> <p>Creates user accounts, manipulates existing user accounts, and removes user accounts.</p>
<table border="1" class="docutils"> <table border="1" class="docutils">
<colgroup> <colgroup>
@ -2181,7 +2061,7 @@ user name=mdehaan state=absent force=yes</pre>
</div> </div>
</div> </div>
<div class="section" id="wait-for"> <div class="section" id="wait-for">
<span id="id35"></span><h2><a class="toc-backref" href="#contents">wait_for</a><a class="headerlink" href="#wait-for" title="Permalink to this headline"></a></h2> <span id="id36"></span><h2><a class="toc-backref" href="#contents">wait_for</a><a class="headerlink" href="#wait-for" title="Permalink to this headline"></a></h2>
<p class="versionadded"> <p class="versionadded">
<span class="versionmodified">New in version 0.7.</span></p> <span class="versionmodified">New in version 0.7.</span></p>
<p>Waits for a given port to become accessible (or inaccessible) on a local or remote server.</p> <p>Waits for a given port to become accessible (or inaccessible) on a local or remote server.</p>
@ -2236,7 +2116,7 @@ for the port being open or closed.</td>
</div> </div>
</div> </div>
<div class="section" id="virt"> <div class="section" id="virt">
<span id="id36"></span><h2><a class="toc-backref" href="#contents">virt</a><a class="headerlink" href="#virt" title="Permalink to this headline"></a></h2> <span id="id37"></span><h2><a class="toc-backref" href="#contents">virt</a><a class="headerlink" href="#virt" title="Permalink to this headline"></a></h2>
<p>Manages virtual machines supported by libvirt. Requires that libvirt be installed <p>Manages virtual machines supported by libvirt. Requires that libvirt be installed
on the managed machine.</p> on the managed machine.</p>
<table border="1" class="docutils"> <table border="1" class="docutils">
@ -2296,7 +2176,7 @@ ansible host -m virt -a "command=virttype"</pre>
</div> </div>
</div> </div>
<div class="section" id="yum"> <div class="section" id="yum">
<span id="id37"></span><h2><a class="toc-backref" href="#contents">yum</a><a class="headerlink" href="#yum" title="Permalink to this headline"></a></h2> <span id="id38"></span><h2><a class="toc-backref" href="#contents">yum</a><a class="headerlink" href="#yum" title="Permalink to this headline"></a></h2>
<p>Will install, upgrade, remove, and list packages with the yum package manager.</p> <p>Will install, upgrade, remove, and list packages with the yum package manager.</p>
<table border="1" class="docutils"> <table border="1" class="docutils">
<colgroup> <colgroup>
@ -2370,33 +2250,13 @@ yum name=httpd state=installed</pre>
<br/> <br/>
</div> </div>
<footer class="footer"> <footer class="footer">
<div class="container">
<div class="container">
<div id="fb-root"></div>
<p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_donations">
<input type="hidden" name="business" value="michael.dehaan@gmail.com">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="item_name" value="Ansible">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHostedGuest">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
</p>
<p> <p>
<a href="https://twitter.com/share" class="twitter-share-button" data-text="ansible.github.com">Share On Twitter</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<g:plusone annotation="inline"></g:plusone>
<div class="fb-like" data-href="http://ansible.github.com" data-send="true" data-width="450" data-show-faces="false"></div>
</p>
<p> <p>
&copy; Copyright 2012 Michael DeHaan.<br/> &copy; Copyright 2012 Michael DeHaan.<br/>
Last updated on Sep 23, 2012.<br/> Last updated on Sep 27, 2012.<br/>
</p> </p>
</div> </div>
</footer> </footer>
</body> </body>
</html> </html>

@ -7,7 +7,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>Inventory &amp; Patterns &mdash; Ansible - SSH-Based Configuration Management &amp; Deployment</title> <title>Inventory &amp; Patterns &mdash; Ansible Documentation</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" />
@ -29,7 +29,7 @@
<script type="text/javascript" src="_static/bootstrap-dropdown.js"></script> <script type="text/javascript" src="_static/bootstrap-dropdown.js"></script>
<script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script> <script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script>
<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 Documentation" href="index.html" />
<link rel="next" title="Command Line Examples And Next Steps" href="examples.html" /> <link rel="next" title="Command Line Examples And Next Steps" href="examples.html" />
<link rel="prev" title="Getting Started" href="gettingstarted.html" /> <link rel="prev" title="Getting Started" href="gettingstarted.html" />
<script type="text/javascript"> <script type="text/javascript">
@ -125,7 +125,7 @@ s.parentNode.insertBefore(ga, s);
<div class="topbar" data-scrollspy="scrollspy" > <div class="topbar" data-scrollspy="scrollspy" >
<div class="topbar-inner"> <div class="topbar-inner">
<div class="container"> <div class="container">
<!-- <a class="brand" href="index.html">Ansible</a> --> <a class="brand" href="index.html">Ansible Documentation</a>
<ul class="nav"> <ul class="nav">
<li><a href="/">Home</A> <li><a href="/">Home</A>
@ -143,7 +143,6 @@ s.parentNode.insertBefore(ga, s);
<li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li> <li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li>
<li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li> <li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li>
<li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li> <li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li>
<li class="toctree-l1"><a class="reference internal" href="who_uses_ansible.html">Who Uses Ansible</a></li>
</ul> </ul>
</span> </span>
</li> </li>
@ -179,12 +178,9 @@ s.parentNode.insertBefore(ga, s);
</div> </div>
</div> </div>
</div> </div>
<a href="http://github.com/ansible/ansible"><img style="position: absolute; right: 0; border: 0;" src="http://ansible.github.com/github.png" alt="Fork me on GitHub"></a>
<div class="container"> <div class="container">
<a href="http://ansible.github.com"><img src="http://ansible.github.com/ansible-logo.png" alt="Ansible"/></a><br/>
<br/>
<div class="section" id="inventory-patterns"> <div class="section" id="inventory-patterns">
<span id="patterns"></span><h1><a class="toc-backref" href="#table-of-contents">Inventory &amp; Patterns</a><a class="headerlink" href="#inventory-patterns" title="Permalink to this headline"></a></h1> <span id="patterns"></span><h1><a class="toc-backref" href="#table-of-contents">Inventory &amp; Patterns</a><a class="headerlink" href="#inventory-patterns" title="Permalink to this headline"></a></h1>
@ -386,33 +382,13 @@ Ansible 0.7. Ansible 0.6 includes a <a class="reference external" href="https:/
<br/> <br/>
</div> </div>
<footer class="footer"> <footer class="footer">
<div class="container">
<div class="container">
<div id="fb-root"></div>
<p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_donations">
<input type="hidden" name="business" value="michael.dehaan@gmail.com">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="item_name" value="Ansible">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHostedGuest">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
</p>
<p> <p>
<a href="https://twitter.com/share" class="twitter-share-button" data-text="ansible.github.com">Share On Twitter</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<g:plusone annotation="inline"></g:plusone>
<div class="fb-like" data-href="http://ansible.github.com" data-send="true" data-width="450" data-show-faces="false"></div>
</p>
<p> <p>
&copy; Copyright 2012 Michael DeHaan.<br/> &copy; Copyright 2012 Michael DeHaan.<br/>
Last updated on Sep 23, 2012.<br/> Last updated on Sep 27, 2012.<br/>
</p> </p>
</div> </div>
</footer> </footer>
</body> </body>
</html> </html>

@ -7,7 +7,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>Playbooks &mdash; Ansible - SSH-Based Configuration Management &amp; Deployment</title> <title>Playbooks &mdash; Ansible Documentation</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" />
@ -29,7 +29,7 @@
<script type="text/javascript" src="_static/bootstrap-dropdown.js"></script> <script type="text/javascript" src="_static/bootstrap-dropdown.js"></script>
<script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script> <script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script>
<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 Documentation" href="index.html" />
<link rel="next" title="Advanced Playbooks" href="playbooks2.html" /> <link rel="next" title="Advanced Playbooks" href="playbooks2.html" />
<link rel="prev" title="YAML Syntax" href="YAMLSyntax.html" /> <link rel="prev" title="YAML Syntax" href="YAMLSyntax.html" />
<script type="text/javascript"> <script type="text/javascript">
@ -125,7 +125,7 @@ s.parentNode.insertBefore(ga, s);
<div class="topbar" data-scrollspy="scrollspy" > <div class="topbar" data-scrollspy="scrollspy" >
<div class="topbar-inner"> <div class="topbar-inner">
<div class="container"> <div class="container">
<!-- <a class="brand" href="index.html">Ansible</a> --> <a class="brand" href="index.html">Ansible Documentation</a>
<ul class="nav"> <ul class="nav">
<li><a href="/">Home</A> <li><a href="/">Home</A>
@ -143,7 +143,6 @@ s.parentNode.insertBefore(ga, s);
<li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li> <li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li>
<li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li> <li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li>
<li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li> <li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li>
<li class="toctree-l1"><a class="reference internal" href="who_uses_ansible.html">Who Uses Ansible</a></li>
</ul> </ul>
</span> </span>
</li> </li>
@ -184,12 +183,9 @@ s.parentNode.insertBefore(ga, s);
</div> </div>
</div> </div>
</div> </div>
<a href="http://github.com/ansible/ansible"><img style="position: absolute; right: 0; border: 0;" src="http://ansible.github.com/github.png" alt="Fork me on GitHub"></a>
<div class="container"> <div class="container">
<a href="http://ansible.github.com"><img src="http://ansible.github.com/ansible-logo.png" alt="Ansible"/></a><br/>
<br/>
<div class="section" id="playbooks"> <div class="section" id="playbooks">
<h1><a class="toc-backref" href="#contents">Playbooks</a><a class="headerlink" href="#playbooks" title="Permalink to this headline"></a></h1> <h1><a class="toc-backref" href="#contents">Playbooks</a><a class="headerlink" href="#playbooks" title="Permalink to this headline"></a></h1>
@ -559,33 +555,13 @@ can do this:</p>
<br/> <br/>
</div> </div>
<footer class="footer"> <footer class="footer">
<div class="container">
<div class="container">
<div id="fb-root"></div>
<p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_donations">
<input type="hidden" name="business" value="michael.dehaan@gmail.com">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="item_name" value="Ansible">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHostedGuest">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
</p>
<p> <p>
<a href="https://twitter.com/share" class="twitter-share-button" data-text="ansible.github.com">Share On Twitter</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<g:plusone annotation="inline"></g:plusone>
<div class="fb-like" data-href="http://ansible.github.com" data-send="true" data-width="450" data-show-faces="false"></div>
</p>
<p> <p>
&copy; Copyright 2012 Michael DeHaan.<br/> &copy; Copyright 2012 Michael DeHaan.<br/>
Last updated on Sep 23, 2012.<br/> Last updated on Sep 27, 2012.<br/>
</p> </p>
</div> </div>
</footer> </footer>
</body> </body>
</html> </html>

@ -7,7 +7,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>Advanced Playbooks &mdash; Ansible - SSH-Based Configuration Management &amp; Deployment</title> <title>Advanced Playbooks &mdash; Ansible Documentation</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" />
@ -29,7 +29,7 @@
<script type="text/javascript" src="_static/bootstrap-dropdown.js"></script> <script type="text/javascript" src="_static/bootstrap-dropdown.js"></script>
<script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script> <script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script>
<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 Documentation" href="index.html" />
<link rel="next" title="Best Practices" href="bestpractices.html" /> <link rel="next" title="Best Practices" href="bestpractices.html" />
<link rel="prev" title="Playbooks" href="playbooks.html" /> <link rel="prev" title="Playbooks" href="playbooks.html" />
<script type="text/javascript"> <script type="text/javascript">
@ -125,7 +125,7 @@ s.parentNode.insertBefore(ga, s);
<div class="topbar" data-scrollspy="scrollspy" > <div class="topbar" data-scrollspy="scrollspy" >
<div class="topbar-inner"> <div class="topbar-inner">
<div class="container"> <div class="container">
<!-- <a class="brand" href="index.html">Ansible</a> --> <a class="brand" href="index.html">Ansible Documentation</a>
<ul class="nav"> <ul class="nav">
<li><a href="/">Home</A> <li><a href="/">Home</A>
@ -143,7 +143,6 @@ s.parentNode.insertBefore(ga, s);
<li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li> <li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li>
<li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li> <li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li>
<li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li> <li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li>
<li class="toctree-l1"><a class="reference internal" href="who_uses_ansible.html">Who Uses Ansible</a></li>
</ul> </ul>
</span> </span>
</li> </li>
@ -193,12 +192,9 @@ s.parentNode.insertBefore(ga, s);
</div> </div>
</div> </div>
</div> </div>
<a href="http://github.com/ansible/ansible"><img style="position: absolute; right: 0; border: 0;" src="http://ansible.github.com/github.png" alt="Fork me on GitHub"></a>
<div class="container"> <div class="container">
<a href="http://ansible.github.com"><img src="http://ansible.github.com/ansible-logo.png" alt="Ansible"/></a><br/>
<br/>
<div class="section" id="advanced-playbooks"> <div class="section" id="advanced-playbooks">
<h1><a class="toc-backref" href="#contents">Advanced Playbooks</a><a class="headerlink" href="#advanced-playbooks" title="Permalink to this headline"></a></h1> <h1><a class="toc-backref" href="#contents">Advanced Playbooks</a><a class="headerlink" href="#advanced-playbooks" title="Permalink to this headline"></a></h1>
@ -733,33 +729,13 @@ place to set such a default is in a group variable.</p>
<br/> <br/>
</div> </div>
<footer class="footer"> <footer class="footer">
<div class="container">
<div class="container">
<div id="fb-root"></div>
<p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_donations">
<input type="hidden" name="business" value="michael.dehaan@gmail.com">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="item_name" value="Ansible">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHostedGuest">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
</p>
<p> <p>
<a href="https://twitter.com/share" class="twitter-share-button" data-text="ansible.github.com">Share On Twitter</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<g:plusone annotation="inline"></g:plusone>
<div class="fb-like" data-href="http://ansible.github.com" data-send="true" data-width="450" data-show-faces="false"></div>
</p>
<p> <p>
&copy; Copyright 2012 Michael DeHaan.<br/> &copy; Copyright 2012 Michael DeHaan.<br/>
Last updated on Sep 23, 2012.<br/> Last updated on Sep 27, 2012.<br/>
</p> </p>
</div> </div>
</footer> </footer>
</body> </body>
</html> </html>

@ -1,159 +1,6 @@
Introducing Ansible Contents
``````````````````` ````````
Ansible is a radically simple model-driven configuration management, deployment,
and command execution framework. Other tools in this space have been too complicated for too long,
require too much bootstrapping, and have too much learning curve. By comparison, Ansible is dead simple
and painless to extend. 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-tier deployment tasks, being designed for that purpose from day one.
Systems management doesn't have to be complicated. We've learned well from the "Infrastructure is Code" movement.
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.
+---------------------------------------------------------------------+
| Key Features |
+=====================================================================+
| Dead simple setup |
+---------------------------------------------------------------------+
| Can be easily run from a checkout, no installation required |
+---------------------------------------------------------------------+
| No agents or software to install on managed machines |
+---------------------------------------------------------------------+
| Ultra-secure; uses existing SSHd out of the box |
+---------------------------------------------------------------------+
| Connect as any user, not just root, and sudo as needed |
+---------------------------------------------------------------------+
| Super fast & parallel by default |
+---------------------------------------------------------------------+
| Supports Kerberized SSH, jump hosts, forwarding, etc |
+---------------------------------------------------------------------+
| Modules are idempotent, but you can also easily use shell commands |
+---------------------------------------------------------------------+
| Modules can be written in ANY language |
+---------------------------------------------------------------------+
| Orchestrates load balancer rotations and outage windows |
+---------------------------------------------------------------------+
| Awesome API for creating very powerful distributed applications |
+---------------------------------------------------------------------+
| Pluggable transports (SSH is just the default) |
+---------------------------------------------------------------------+
| Can draw inventory data from external sources like EC2 and Cobbler |
+---------------------------------------------------------------------+
| The easiest config management system to use, ever. |
+---------------------------------------------------------------------+
Architecture
````````````
.. image:: http://ansible.github.com/ansible_arch2.jpg
:alt: "Architecture Diagram"
:width: 800
:align: center
+--------------------------------------------------------------------------------------------------------+
| Tell Me More |
+====================================+===================================================================+
| Multi-node control & orchestration | Ansible is especially strong at expressing complex multi-node |
| | deployment processes, executing ordered sequences on |
| | different sets of nodes through :doc:`playbooks`. Performing |
| | steps on all your webservers, then some steps on your database |
| | servers, and then some steps on monitoring servers -- all the |
| | while sharing variables between them is trivial. |
+------------------------------------+-------------------------------------------------------------------+
| Doesn't choose sides in the | Modules can be written in Bash, Perl, Python, Ruby, whatever. |
| language war | Playbooks are not a programming language, but a data format. |
+------------------------------------+-------------------------------------------------------------------+
| Infrastructure Is Not Code, | Playbooks are not a programming language, they are designed to be |
| Infrastructure Is Data | 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. |
+------------------------------------+-------------------------------------------------------------------+
| Three In One | Ansible handles multiple command and control |
| | problems in one tool. You don't need to use a config tool, a |
| | deployment tool, and yet another ad-hoc parallel task execution |
| | tool -- Ansible will do all three. |
+------------------------------------+-------------------------------------------------------------------+
| Lower Attack Surface, No Agents | 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 is compromised, 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. |
+------------------------------------+-------------------------------------------------------------------+
+-----------------------------------------------------------------------------------------------------------+
| Community |
+===========================================================================================================+
| Your ideas and contributions are welcome. We're also happy to help |
| you with questions about Ansible. |
+------------------------+----------------------------------------------------------------------------------+
| Get the source | Visit the `project page <https://github.com/ansible/ansible>`_ on Github |
+------------------------+----------------------------------------------------------------------------------+
| File a bug | View the `issue tracker <https://github.com/ansible/ansible/issues>`_ |
+------------------------+----------------------------------------------------------------------------------+
| Spread the word | Watch slides on `Speakerdeck <http://speakerdeck.com/u/mpdehaan/p/ansible>`_ |
+------------------------+----------------------------------------------------------------------------------+
| Join the mailing list | Visit the `Google Group <http://groups.google.com/group/ansible-project>`_ |
+------------------------+----------------------------------------------------------------------------------+
| Chat | Visit the channel on `FreeNode <http://webchat.freenode.net/?channels=ansible>`_ |
+------------------------+----------------------------------------------------------------------------------+
| Share & Learn | Share `playbooks, modules, articles, and scripts <http://bit.ly/NNwUgY>`_ |
+------------------------+----------------------------------------------------------------------------------+
+-----------------------------------------------------------------------------------------------------------+
| What (Real) People Are Saying |
+===========================================================================================================+
| "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!" |
+-----------------------------------------------------------------------------------------------------------+
| "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." |
+-----------------------------------------------------------------------------------------------------------+
| "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." |
+-----------------------------------------------------------------------------------------------------------+
| "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." |
+-----------------------------------------------------------------------------------------------------------+
| "Simple as hell" |
+-----------------------------------------------------------------------------------------------------------+
| "I swear, I have gotten more done with Ansible in three days than I did in not getting chef installed |
| in three weeks." |
+-----------------------------------------------------------------------------------------------------------+
| "Puppet was hell... gave up on Chef... found ansible and couldn't be happier." |
+-----------------------------------------------------------------------------------------------------------+
| "Really impressed with Ansible. Up and running in ¼ of the time it took to get going with Puppet." |
+-----------------------------------------------------------------------------------------------------------+
| "Automation even a manager can understand." -- A Manager |
+-----------------------------------------------------------------------------------------------------------+
+--------------------------------------------------------------------------------------------------+
| Presented By... |
+==================================================================================================+
| Ansible was created and is run by `Michael DeHaan <http://michaeldehaan.net>`_ |
| (`@laserllama <http://twitter.com/#!/laserllama>`_), a Raleigh, NC |
| based software developer and architect, who also created the popular open-source |
| DevOps install server `Cobbler <http://cobbler.github.com/>`_. |
| Cobbler is used to deploy mission critical systems all over the |
| planet, in industries ranging from massively multiplayer gaming, core |
| internet infrastructure, finance, chip design, and more. Michael also |
| helped co-author `Func <http://fedorahosted.org/func/>`_, a precursor to Ansible, which is used |
| to orchestrate systems in lots of diverse places. He's worked on systems |
| 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>`_. |
+--------------------------------------------------------------------------------------------------+
Documentation
`````````````
.. toctree:: .. toctree::
:maxdepth: 1 :maxdepth: 1
@ -168,8 +15,4 @@ Documentation
bestpractices bestpractices
api api
moduledev moduledev
faq
who_uses_ansible

@ -1,55 +1,58 @@
.. _file: .. _file:
file file
```` ````````
Sets attributes of files, symlinks, and directories, or removes files/symlinks/directories. Many other modules .. versionadded:: 0.1
support the same options as the file module -- including 'copy', 'template', and 'assmeble'.
+--------------------+----------+---------+----------------------------------------------------------------------------+ Sets attributes of files, symlinks, and directories, or removes files/symlinks/directories. Many other modules support the same options as the file module - including ``copy``, ``template``, and ``assmeble``.
| parameter | required | default | comments |
+====================+==========+=========+============================================================================+
| dest | yes | | defines the file being managed, unless when used with state=link, and | .. raw:: html
| | | | then sets the destination to create a symbolic link to using 'src' |
+--------------------+----------+---------+----------------------------------------------------------------------------+ <table>
| state | | file | values are 'file', 'link', 'directory', or 'absent'. If directory, | <tr>
| | | | all immediate subdirectories will be created if they do not exist. If | <td>parameter</td>
| | | | 'file', the file will NOT be created if it does not exist, see the 'copy' | <td>required</td>
| | | | or 'template' module if you want that behavior. If 'link', the symbolic | <td>default</td>
| | | | link will be created or changed. If absent, directories will be | <td>choices</td>
| | | | recursively deleted, and files or symlinks will be unlinked. | <td>comments</td>
+--------------------+----------+---------+----------------------------------------------------------------------------+ </tr>
| mode | | | mode the file or directory shoudl be, such as 0644 as would be fed to |
| | | | chmod. English modes like 'g+x' are not yet supported | <tr>
+--------------------+----------+---------+----------------------------------------------------------------------------+ <td>dest</td>
| owner | | | name of the user that should own the file/directory, as would be fed to | <td>True</td>
| | | | chown | <td>[]</td>
+--------------------+----------+---------+----------------------------------------------------------------------------+ <td><ul></ul></td>
| group | | | name of the group that should own the file/directory, as would be fed to | <td>defines the file being managed, unless when used with <em>state=link</em>, and then sets the destination to create a symbolic link to using <em>src</em></td>
| | | | group | </tr>
+--------------------+----------+---------+----------------------------------------------------------------------------+
| src | | | path of the file to link to (applies only to state=link) | <tr>
+--------------------+----------+---------+----------------------------------------------------------------------------+ <td>state</td>
| seuser | | | user part of SELinux file context. Will default to system policy, if | <td>False</td>
| | | | applicable. If set to '_default', it will use the 'user' portion of the | <td>file</td>
| | | | the policy if available | <td><ul><li>file</li><li>link</li><li>directory</li><li>absent</li></ul></td>
+--------------------+----------+---------+----------------------------------------------------------------------------+ <td>If directory, all immediate subdirectories will be created if they do not exist. If <em>file</em>, the file will NOT be created if it does not exist, see the <span class='module'>copy</span> or <span class='module'>template</span> module if you want that behavior. If <em>link</em>, the symbolic link will be created or changed. If absent, directories will be recursively deleted, and files or symlinks will be unlinked.</td>
| serole | | | role part of SELinux file context, '_default' feature works as above. | </tr>
+--------------------+----------+---------+----------------------------------------------------------------------------+
| setype | | | type part of SELinux file context, '_default' feature works as above | <tr>
+--------------------+----------+---------+----------------------------------------------------------------------------+ <td>mode</td>
| selevel | | s0 | level part of the SELinux file context. This is the MLS/MCS attribute, | <td>False</td>
| | | | sometimes known as the 'range'. '_default' feature works as above | <td></td>
+--------------------+----------+---------+----------------------------------------------------------------------------+ <td><ul></ul></td>
| context | | | accepts only 'default' as a value. This will restore a file's selinux | <td>mode the file or directory should be, such as 0644 as would be fed to <em>chmod</em>. English modes like <b>g+x</b> are not yet supported</td>
| | | | context in the policy. Does nothing if no default is available. | </tr>
+--------------------+----------+---------+----------------------------------------------------------------------------+
</table>
Example action from Ansible :doc:`playbooks`::
file path=/etc/foo.conf owner=foo group=foo mode=0644 .. raw:: html
file path=/some/path owner=foo group=foo state=directory
file path=/path/to/delete state=absent
file src=/file/to/link/to dest=/path/to/symlink owner=foo group=foo state=link <p>Example from Ansible Playbooks</p>
file path=/some/path state=directory setype=httpd_sys_content_t <p><pre>
file path=/some/path state=directory context=default file path=/etc/foo.conf owner=foo group=foo mode=0644</pre></p>
<br/>

@ -1,7 +1,7 @@
.. _get_url: .. _get_url:
get_url get_url
```````````````````````` ````````
.. versionadded:: 0.6 .. versionadded:: 0.6
@ -9,32 +9,58 @@ get_url
Downloads files from HTTP, HTTPS, or FTP to the remote server. The remote server must have direct access to the remote resource. Downloads files from HTTP, HTTPS, or FTP to the remote server. The remote server must have direct access to the remote resource.
============== ========== ========== ============================================================ .. raw:: html
parameter required default comments
============== ========== ========== ============================================================ <table>
url yes None HTTP, HTTPS, or FTP URL <tr>
dest yes None absolute path of where to download the file to.If *dest* is a directory, the basename of the file on the remote server will be used. If a directory, *thirsty=yes* must also be set. <td>parameter</td>
thirsty no if ``yes``, will download the file every time and replace the file if the contents change. if ``no``, the file will only be downloaded if the destination does not exist. Generally should be ``yes`` only for small local files. prior to 0.6, acts if ``yes`` by default. <td>required</td>
others all arguments accepted by the ``file`` module also work here <td>default</td>
============== ========== ========== ============================================================ <td>choices</td>
<td>comments</td>
</tr>
<tr>
FIXME: examples! <td>url</td>
<td>True</td>
<td>None</td>
<td><ul></ul></td>
.. note:: <td>HTTP, HTTPS, or FTP URL</td>
</tr>
This module doesn't support proxies or passwords. <tr>
<td>dest</td>
Also see the ``template`` module. <td>True</td>
<td>None</td>
<td><ul></ul></td>
Example action from Ansible :doc:`playbooks`:: <td>absolute path of where to download the file to.If <em>dest</em> is a directory, the basename of the file on the remote server will be used. If a directory, <em>thirsty=yes</em> must also be set.</td>
</tr>
get_url url=http://example.com/path/file.conf dest=/etc/foo.conf mode=0440 <tr>
<td>thirsty</td>
<td>False</td>
<td>no</td>
<td><ul><li>yes</li><li>no</li></ul></td>
<td>if <code>yes</code>, will download the file every time and replace the file if the contents change. if <code>no</code>, the file will only be downloaded if the destination does not exist. Generally should be <code>yes</code> only for small local files. prior to 0.6, acts if <code>yes</code> by default.</td>
</tr>
<tr>
<td>others</td>
<td>False</td>
<td></td>
<td><ul></ul></td>
<td>all arguments accepted by the <span class='module'>file</span> module also work here</td>
</tr>
</table>
.. raw:: html
<p>Example from Ansible Playbooks</p>
<p><pre>
get_url url=http://example.com/path/file.conf dest=/etc/foo.conf mode=0440</pre></p>
<br/>

@ -1,43 +1,87 @@
.. _lineinfile: .. _lineinfile:
lineinfile lineinfile
`````````` ````````
.. versionadded:: 0.7 .. versionadded:: 0.7
This module will search a file for a line, and ensure that it is present or
absent. This module will search a file for a line, and ensure that it is present or absent.
This is primarily useful when you want to change a single line in a file only. For other cases, see the ``copy`` or ``template`` modules.
This is primarily useful when you only want to change a single line in a file.
For other cases, see the copy or template modules.
.. raw:: html
+--------------------+----------+---------+----------------------------------------------------------------------------+
| parameter | required | default | comments | <table>
+====================+==========+=========+============================================================================+ <tr>
| state | no | present | 'absent' or 'present' | <td>parameter</td>
+--------------------+----------+---------+----------------------------------------------------------------------------+ <td>required</td>
| name | yes | | The file to modify. | <td>default</td>
+--------------------+----------+---------+----------------------------------------------------------------------------+ <td>choices</td>
| regexp | yes | | The regular expression to look for in the file. For state=present, the | <td>comments</td>
| | | | pattern to replace. For state=absent, the pattern of the line to | </tr>
| | | | remove. |
+--------------------+----------+---------+----------------------------------------------------------------------------+ <tr>
| line | maybe | | Required for state=present. The line to insert/replace into the file. Must | <td>state</td>
| | | | match the value given to 'regexp'. | <td>False</td>
+--------------------+----------+---------+----------------------------------------------------------------------------+ <td>present</td>
| insertafter | no | EOF | Used with state=present. If specified, the line will be inserted after the | <td><ul><li>present</li><li>absent</li></ul></td>
| | | | specified regular expression. Two special values are available: BOF for | <td>Whether the line should be there or not.</td>
| | | | inserting the line at the beginning of the file, and EOF for inserting the | </tr>
| | | | line at the end of the file. |
+--------------------+----------+---------+----------------------------------------------------------------------------+ <tr>
| backup | no | no | Create a backup file including the timestamp information so you can | <td>name</td>
| | | | get the original file back if you somehow clobbered it incorrectly. | <td>True</td>
+--------------------+----------+---------+----------------------------------------------------------------------------+ <td></td>
<td><ul></ul></td>
Example action from Ansible :doc:`playbooks`:: <td>The file to modify</td>
</tr>
lineinfile name=/etc/selinux/config regexp=^SELINUX= line=SELINUX=disabled
lineinfile name=/etc/sudoers regexp="^#includedir" line="#includedir /etc/sudoers.d" <tr>
lineinfile name=/etc/httpd/conf/httpd.conf regexp="^ServerName " insertafter="^#ServerName " line="ServerName ansible.example.com" <td>insertafter</td>
lineinfile name=/etc/sudoers state=absent regexp="^%wheel" <td>False</td>
<td>EOF</td>
<td><ul><li>BOF</li><li>EOF</li></ul></td>
<td>Used with <em>state=present</em>. If specified, the line will be inserted after the specified regular expression. Two special values are available; <code>BOF</code> for inserting the line at the beginning of the file, and <code>EOF</code> for inserting the line at the end of the file.</td>
</tr>
<tr>
<td>regexp</td>
<td>True</td>
<td></td>
<td><ul></ul></td>
<td>The regular expression to look for in the file. For <em>state=present</em>, the pattern to replace. For <em>state=absent</em>, the pattern of the line to remove.</td>
</tr>
<tr>
<td>line</td>
<td>False</td>
<td></td>
<td><ul></ul></td>
<td>Required for <em>state=present</em>. The line to insert/replace into the file. Must match the value given to <code>regexp</code>.</td>
</tr>
<tr>
<td>backup</td>
<td>False</td>
<td>False</td>
<td><ul></ul></td>
<td>Create a backup file including the timestamp information so you can get the original file back if you somehow clobbered it incorrectly.</td>
</tr>
</table>
.. raw:: html
<p></p>
<p><pre>
lineinfile name=/etc/selinux/config regexp=^SELINUX= line=SELINUX=disabled</pre></p>
<p></p>
<p><pre>
lineinfile name=/etc/sudoers state=absent regexp="^%wheel"</pre></p>
<br/>

@ -1,20 +1,21 @@
.. _raw: .. _raw:
raw raw
``` ````````
Executes a low-down and dirty SSH command, not going through the module subsystem.
This is useful and should only be done in two cases. The first case is installing
python-simplejson on older (python 2.4 and before) hosts that need it as a dependency
to run modules, since nearly all core modules require it. Another is speaking to any
devices such as routers that do not have any Python installed. In any other case,
using the 'shell' or 'command' module is much more appropriate.
Arguments given to 'raw' are run directly through the configured remote shell and Executes a low-down and dirty SSH command, not going through the module subsystem. This is useful and should only be done in two cases. The first case is installing python-simplejson on older (Python 2.4 and before) hosts that need it as a dependency to run modules, since nearly all core modules require it. Another is speaking to any devices such as routers that do not have any Python installed. In any other case, using the ``shell`` or ``command`` module is much more appropriate. Arguments given to ``raw`` are run directly through the configured remote shell and only output is returned. There is no error detection or change handler support for this module
only output is returned. There is no error detection or change handler support
for this module.
Example from `/usr/bin/ansible` to bootstrap a legacy python 2.4 host::
ansible newhost.example.com -m raw -a "yum -y install python-simplejson"
.. raw:: html
<p>Example from /usr/bin/ansible to bootstrap a legacy python 2.4 host</p>
<p><pre>
ansible newhost.example.com -m raw -a "yum -y install python-simplejson"</pre></p>
<br/>

@ -1,139 +1,21 @@
.. _setup: .. _setup:
setup setup
````` ````````
This module is automatically called by playbooks to gather useful variables about remote hosts that can be used
in playbooks. It can also be executed directly by /usr/bin/ansible to check what variables are available
to a host.
Ansible provides many 'facts' about the system, automatically.
Some of the variables that are supplied are listed below. These in particular This module is automatically called by playbooks to gather useful variables about remote hosts that can be used in playbooks. It can also be executed directly by ``/usr/bin/ansible`` to check what variables are available to a host. Ansible provides many *facts* about the system, automatically.
are from a VMWare Fusion 4 VM running CentOS 6.2::
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"192.168.144.180",
"192.168.122.1"
],
"ansible_all_ipv6_addresses": [
"ffff::fff:ffff:ffff:ffff"
],
"ansible_architecture": "x86_64",
"ansible_bios_date": "06/02/2011",
"ansible_bios_version": "6.00",
"ansible_default_ipv4": {
"address": "192.168.144.180",
"alias": "eth0",
"gateway": "192.168.144.2",
"interface": "eth0",
"macaddress": "AA:BB:CC:DD:EE:FF",
"mtu": "1500",
"netmask": "255.255.255.0",
"network": "192.168.144.0",
"type": "ether"
},
"ansible_default_ipv6": {},
"ansible_distribution": "CentOS",
"ansible_distribution_release": "Final",
"ansible_distribution_version": "6.2",
"ansible_eth0": {
"device": "eth0",
"ipv4": {
"address": "192.168.144.180",
"netmask": "255.255.255.0",
"network": "192.16.144.0"
},
"ipv6": [
{
"address": "ffff::fff:ffff:ffff:ffff",
"prefix": "64",
"scope": "link"
}
],
"macaddress": "00:0c:29:b6:a2:62",
"mtu": "1500",
"type": "ether"
},
"ansible_form_factor": "Other",
"ansible_fqdn": "localhost.localdomain",
"ansible_hostname": "localhost",
"ansible_interfaces": [
"lo",
"virbr0",
"eth0"
],
"ansible_kernel": "2.6.32-220.2.1.el6.x86_64",
"ansible_lo": {
"device": "lo",
"ipv4": {
"address": "127.0.0.1",
"netmask": "255.0.0.0",
"network": "127.0.0.0"
},
"ipv6": [
{
"address": "::1",
"prefix": "128",
"scope": "host"
}
],
"macaddress": "00:00:00:00:00:00",
"mtu": "16436",
"type": "loopback"
},
"ansible_machine": "x86_64",
"ansible_memfree_mb": 166,
"ansible_memtotal_mb": 993,
"ansible_processor": [
"Intel(R) Core(TM) i7-2677M CPU @ 1.80GHz"
],
"ansible_processor_cores": "NA",
"ansible_processor_count": 1,
"ansible_product_name": "VMware Virtual Platform",
"ansible_product_serial": "REDACTED",
"ansible_product_uuid": "REDACTED",
"ansible_product_version": "None",
"ansible_python_version": "2.6.6",
"ansible_selinux": {
"config_mode": "enforcing",
"mode": "permissive",
"policyvers": 24,
"status": "enabled",
"type": "targeted"
},
"ansible_ssh_host_key_dsa_public": "REDACTED",
"ansible_ssh_host_key_rsa_public": "REDACTED",
"ansible_swapfree_mb": 1933,
"ansible_swaptotal_mb": 2015,
"ansible_system": "Linux",
"ansible_system_vendor": "VMware, Inc.",
"ansible_virbr0": {
"device": "virbr0",
"ipv4": {
"address": "192.168.122.1",
"netmask": "255.255.255.0",
"network": "192.168.122.0"
},
"macaddress": "AA:BB:CC:DD:EE:FF",
"mtu": "1500",
"type": "ether"
},
"ansible_virtualization_role": "guest",
"ansible_virtualization_type": "VMware",
More ansible facts will be added with successive releases.
If facter or ohai are installed, variables from these programs will
also be snapshotted into the JSON file for usage in templating. These
variables are prefixed with ``facter_`` and ``ohai_`` so it's easy to
tell their source.
All variables are bubbled up to the caller. Using the ansible facts and choosing .. raw:: html
to not install facter and ohai means you can avoid ruby-dependencies
on your remote systems.
Example action from `/usr/bin/ansible`::
ansible testserver -m setup <p>Obtain facts from all hosts and store them indexed by hostname at /tmp/facts.</p>
<p><pre>
ansible all -m setup -tree /tmp/facts</pre></p>
<br/>

@ -1,38 +0,0 @@
Who Uses Ansible
================
Ansible is used by all sorts of organizations from hosted web applications, media companies, universities, consultancies, and ISVs -- all over the world. Some of these users include:
============================================================================================= =====================================================
Who They Are What They Do
============================================================================================= =====================================================
`Alta Language Services <http://www.altalang.com>`_ Language testing, solutions, and translation services
`Basho <http://basho.com>`_ Makers of NoSQL key-value store Riak
`CatN Hosting <http://catn.com>`_ Scalable Cloud Hosting
`Cygate AB <http://cygate.se>`_ IT solutions from Malmö, Sweden
`Dag IT Solutions <http://dagit.net>`_ "Enterprise Linux and Beyond"
`Duke University Economics <http://duke.edu>`_ Research and Education
`The Fedora Project <http://fedoraproject.org>`_ Produces the popular Linux distribution
`Four Kitchens <http://fourkitchens.com>`_ "The Drupal Experts"
`Lizenzfrei <http://lizenzfrei.at/>`_ Open source consulting and development, Austria
`Schmooze Com <http://www.schmoozecom.com/>`_ Creators of Industry-Leading PBX Platforms
`Scientific Computing Center, Aristotle Univ. of Thessaloniki <http://www.grid.auth.gr/en/>`_ Grid/Cloud-Based Scientific Computing
`Skyline.es <http://skylin.es>`_ Realtime Photo Search Engine
`Steelhouse <http://steelhouse.com>`_ Behavioral Commerce
`Tomorrow Focus Technologies GmbH <http://www.t-f-t.net/>`_ Running some of the biggest web sites in Europe
`123i.com.br <http://123i.com.br>`_ Find real estate in Brazil
============================================================================================= =====================================================
and lots of other people (you should see our Google Analytics data). Tweet at `Michael DeHaan <http://twitter.com/laserllama>`_ or `email him <mailto:michael.dehaan@gmail.com>`_ to get your company or project listed here. (It's free!)
.. seealso::
`Mailing List <http://groups.google.com/group/ansible-project>`_
Several hundred of our closest friends, great for Q&A
`irc.freenode.net <http://irc.freenode.net>`_
#ansible IRC chat channel
`List of Github Contributors <https://github.com/ansible/ansible/graphs/contributors>`_
all the awesome folks who have contributed improvements to Ansible
`Github Impact Graphs <https://github.com/ansible/ansible/graphs/impact>`_
week-to-week source code activity, by contributor

@ -7,7 +7,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>Search &mdash; Ansible - SSH-Based Configuration Management &amp; Deployment</title> <title>Search &mdash; Ansible Documentation</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" />
@ -30,7 +30,7 @@
<script type="text/javascript" src="_static/bootstrap-dropdown.js"></script> <script type="text/javascript" src="_static/bootstrap-dropdown.js"></script>
<script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script> <script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script>
<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 Documentation" href="index.html" />
<script type="text/javascript"> <script type="text/javascript">
jQuery(function() { Search.loadIndex("searchindex.js"); }); jQuery(function() { Search.loadIndex("searchindex.js"); });
</script> </script>
@ -129,7 +129,7 @@ s.parentNode.insertBefore(ga, s);
<div class="topbar" data-scrollspy="scrollspy" > <div class="topbar" data-scrollspy="scrollspy" >
<div class="topbar-inner"> <div class="topbar-inner">
<div class="container"> <div class="container">
<!-- <a class="brand" href="index.html">Ansible</a> --> <a class="brand" href="index.html">Ansible Documentation</a>
<ul class="nav"> <ul class="nav">
<li><a href="/">Home</A> <li><a href="/">Home</A>
@ -147,7 +147,6 @@ s.parentNode.insertBefore(ga, s);
<li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li> <li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li>
<li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li> <li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li>
<li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li> <li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li>
<li class="toctree-l1"><a class="reference internal" href="who_uses_ansible.html">Who Uses Ansible</a></li>
</ul> </ul>
</span> </span>
</li> </li>
@ -166,12 +165,9 @@ s.parentNode.insertBefore(ga, s);
</div> </div>
</div> </div>
</div> </div>
<a href="http://github.com/ansible/ansible"><img style="position: absolute; right: 0; border: 0;" src="http://ansible.github.com/github.png" alt="Fork me on GitHub"></a>
<div class="container"> <div class="container">
<a href="http://ansible.github.com"><img src="http://ansible.github.com/ansible-logo.png" alt="Ansible"/></a><br/>
<br/>
<h1 id="search-documentation">Search</h1> <h1 id="search-documentation">Search</h1>
<div id="fallback" class="admonition warning"> <div id="fallback" class="admonition warning">
@ -200,33 +196,13 @@ s.parentNode.insertBefore(ga, s);
<br/> <br/>
</div> </div>
<footer class="footer"> <footer class="footer">
<div class="container">
<div class="container">
<div id="fb-root"></div>
<p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_donations">
<input type="hidden" name="business" value="michael.dehaan@gmail.com">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="item_name" value="Ansible">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHostedGuest">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
</p>
<p> <p>
<a href="https://twitter.com/share" class="twitter-share-button" data-text="ansible.github.com">Share On Twitter</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<g:plusone annotation="inline"></g:plusone>
<div class="fb-like" data-href="http://ansible.github.com" data-send="true" data-width="450" data-show-faces="false"></div>
</p>
<p> <p>
&copy; Copyright 2012 Michael DeHaan.<br/> &copy; Copyright 2012 Michael DeHaan.<br/>
Last updated on Sep 23, 2012.<br/> Last updated on Sep 27, 2012.<br/>
</p> </p>
</div> </div>
</footer> </footer>
</body> </body>
</html> </html>

File diff suppressed because one or more lines are too long

@ -30,7 +30,6 @@
<script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script> <script type="text/javascript" src="_static/bootstrap-scrollspy.js"></script>
<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="prev" title="Module Development" href="moduledev.html" />
<script type="text/javascript"> <script type="text/javascript">
(function () { (function () {
/** /**
@ -131,7 +130,7 @@ s.parentNode.insertBefore(ga, s);
<li class="dropdown" data-dropdown="dropdown"> <li class="dropdown" data-dropdown="dropdown">
<a href="index.html" <a href="index.html"
class="dropdown-toggle">Chapter</a> class="dropdown-toggle">Chapter</a>
<span class="globaltoc"><ul class="current"> <span class="globaltoc"><ul>
<li class="toctree-l1"><a class="reference internal" href="gettingstarted.html">Getting Started</a></li> <li class="toctree-l1"><a class="reference internal" href="gettingstarted.html">Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="patterns.html">Inventory &amp; Patterns</a></li> <li class="toctree-l1"><a class="reference internal" href="patterns.html">Inventory &amp; Patterns</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Command Line Examples And Next Steps</a></li> <li class="toctree-l1"><a class="reference internal" href="examples.html">Command Line Examples And Next Steps</a></li>
@ -142,7 +141,6 @@ s.parentNode.insertBefore(ga, s);
<li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li> <li class="toctree-l1"><a class="reference internal" href="bestpractices.html">Best Practices</a></li>
<li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li> <li class="toctree-l1"><a class="reference internal" href="api.html">API &amp; Integrations</a></li>
<li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li> <li class="toctree-l1"><a class="reference internal" href="moduledev.html">Module Development</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="">Who Uses Ansible</a></li>
</ul> </ul>
</span> </span>
</li> </li>
@ -169,7 +167,7 @@ s.parentNode.insertBefore(ga, s);
</div> </div>
</div> </div>
</div> </div>
<a href="http://github.com/ansible/ansible"><img style="position: absolute; right: 0; border: 0;" src="http://ansible.github.com/github.png" alt="Fork me on GitHub"></a> <h1>Ansible Documentation</h1>
<div class="container"> <div class="container">
@ -257,33 +255,13 @@ s.parentNode.insertBefore(ga, s);
<br/> <br/>
</div> </div>
<footer class="footer"> <footer class="footer">
<div class="container">
<div class="container">
<div id="fb-root"></div>
<p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_donations">
<input type="hidden" name="business" value="michael.dehaan@gmail.com">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="item_name" value="Ansible">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHostedGuest">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
</p>
<p> <p>
<a href="https://twitter.com/share" class="twitter-share-button" data-text="ansible.github.com">Share On Twitter</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<g:plusone annotation="inline"></g:plusone>
<div class="fb-like" data-href="http://ansible.github.com" data-send="true" data-width="450" data-show-faces="false"></div>
</p>
<p> <p>
&copy; Copyright 2012 Michael DeHaan.<br/> &copy; Copyright 2012 Michael DeHaan.<br/>
Last updated on Sep 23, 2012.<br/> Last updated on Sep 23, 2012.<br/>
</p> </p>
</div> </div>
</footer> </footer>
</body> </body>
</html> </html>
Loading…
Cancel
Save