2012-03-08 19:36:47 +01:00
|
|
|
Ansible Modules
|
|
|
|
===============
|
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
Ansible ships with a number of modules that can be executed directly
|
|
|
|
on remote hosts or through ansible playbooks.
|
2012-03-08 19:53:48 +01:00
|
|
|
|
2012-03-08 19:36:47 +01:00
|
|
|
.. seealso::
|
|
|
|
|
|
|
|
:doc:`examples`
|
|
|
|
Examples of using modules in /usr/bin/ansible
|
|
|
|
:doc:`playbooks`
|
|
|
|
Examples of using modules with /usr/bin/ansible-playbook
|
|
|
|
:doc:`api`
|
|
|
|
Examples of using modules with the Python API
|
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
Nearly all modules take ``key=value`` parameters. Some modules take
|
|
|
|
no parameters, and the command module just takes arguments for the
|
|
|
|
command you want to run.
|
2012-03-09 04:50:00 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
All modules return JSON format data, though if you are using the
|
|
|
|
command line or playbooks, you don't really need to know much about
|
|
|
|
that.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
Most modules other than command are idempotent, meaning they will seek
|
|
|
|
to avoid changes unless a change needs to be made. When using ansible
|
|
|
|
playbooks, these modules can trigger change events. Unless otherwise
|
|
|
|
noted, all modules support change hooks.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 04:50:00 +01:00
|
|
|
Stock modules:
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
.. _command:
|
|
|
|
|
2012-03-08 19:36:47 +01:00
|
|
|
command
|
|
|
|
```````
|
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
The command module takes the command name followed by a list of
|
|
|
|
arguments, space delimited. This is the only module that does not use
|
|
|
|
``key=value`` style parameters.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
|
|
|
Example usage::
|
|
|
|
|
|
|
|
/sbin/shutdown -t now
|
|
|
|
|
2012-03-09 04:50:00 +01:00
|
|
|
The given shell command will be executed on all selected nodes.
|
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
This module does not support change hooks and returns the return code
|
|
|
|
from the program as well as timing information about how long the
|
|
|
|
command was running for.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
.. _copy:
|
2012-03-08 19:36:47 +01:00
|
|
|
|
|
|
|
copy
|
|
|
|
````
|
|
|
|
|
|
|
|
The copy module moves a file on the local box to remote locations.
|
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
*src*:
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
* Local path to a file to copy to the remote server. This can be an
|
|
|
|
absolute or relative path.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
*dest*:
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
* Remote absolute path where the file should end up.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
|
|
|
|
|
|
|
This module also returns md5sum information about the resultant file.
|
|
|
|
|
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
.. _facter:
|
|
|
|
|
2012-03-08 19:36:47 +01:00
|
|
|
facter
|
|
|
|
``````
|
|
|
|
|
|
|
|
Runs the discovery program 'facter' on the remote system, returning
|
2012-03-09 04:50:00 +01:00
|
|
|
JSON data that can be useful for inventory purposes.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
|
|
|
Requires that 'facter' and 'ruby-json' be installed on the remote end.
|
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
This module is informative only - it takes no parameters & does not
|
|
|
|
support change hooks, nor does it make any changes on the system.
|
|
|
|
Playbooks do not actually use this module, they use the :ref:`setup`
|
|
|
|
module behind the scenes.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
|
|
|
|
|
|
|
git
|
|
|
|
```
|
|
|
|
|
2012-03-09 04:50:00 +01:00
|
|
|
Deploys software (or files) from git checkouts.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
*repo*:
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
* git or http protocol address of the repo to checkout.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
*dest*:
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
* Where to check it out, an absolute directory path.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
*version*:
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
* What version to check out -- either the git SHA, the literal string
|
|
|
|
``HEAD``, or a tag name.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
|
|
|
|
|
|
|
ohai
|
|
|
|
````
|
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
Similar to the :ref:`facter` module, this returns JSON inventory data.
|
|
|
|
Ohai data is a bit more verbose and nested than facter.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
|
|
|
Requires that 'ohai' be installed on the remote end.
|
|
|
|
|
|
|
|
This module is information only - it takes no parameters & does not
|
|
|
|
support change hooks, nor does it make any changes on the system.
|
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
Playbooks should not call the ohai module, playbooks call the
|
|
|
|
:ref:`setup` module behind the scenes instead.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
|
|
|
ping
|
|
|
|
````
|
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
A trivial test module, this module always returns the integer ``1`` on
|
2012-03-08 19:36:47 +01:00
|
|
|
successful contact.
|
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
This module does not support change hooks and is informative only - it
|
|
|
|
takes no parameters & does not support change hooks, nor does it make
|
|
|
|
any changes on the system.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
|
|
|
|
|
|
|
service
|
|
|
|
```````
|
|
|
|
|
|
|
|
Controls services on remote machines.
|
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
*state*:
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
* Values are ``started``, ``stopped``, or ``restarted``.
|
|
|
|
Started/stopped are idempotent actions that will not run commands
|
|
|
|
unless necessary. ``restarted`` will always bounce the service.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
*name*:
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
* The name of the service.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
.. _setup:
|
|
|
|
|
2012-03-08 19:36:47 +01:00
|
|
|
setup
|
|
|
|
`````
|
|
|
|
|
|
|
|
Writes a JSON file containing key/value data, for use in templating.
|
2012-03-09 20:39:29 +01:00
|
|
|
Call this once before using the :ref:`template` module. Playbooks
|
|
|
|
will execute this module automatically as the first step in each play
|
|
|
|
using the variables section, so it is unnecessary to make explicit
|
|
|
|
calls to setup within a playbook.
|
|
|
|
|
|
|
|
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 then bubbled up to the caller.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
*anything*:
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
* Any other parameters can be named basically anything, and set a
|
|
|
|
``key=value`` pair in the JSON file for use in templating.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
.. _template:
|
2012-03-08 19:36:47 +01:00
|
|
|
|
|
|
|
template
|
|
|
|
````````
|
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
Templates a file out to a remote server. Call the :ref:`setup` module
|
2012-03-10 01:04:40 +01:00
|
|
|
prior to usage if you are not running from a playbook.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
*src*:
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
* Path of a Jinja2 formatted template on the local server. This can
|
|
|
|
be a relative or absolute path.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
*dest*:
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
* Location to render the template on the remote server.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
|
|
|
|
|
|
|
This module also returns md5sum information about the resultant file.
|
|
|
|
|
2012-03-10 01:04:40 +01:00
|
|
|
.. _yum:
|
|
|
|
|
|
|
|
yum
|
|
|
|
```
|
|
|
|
|
|
|
|
Will install, upgrade, remove, and list packages with the yum package manager.
|
|
|
|
|
|
|
|
*pkg*:
|
|
|
|
|
|
|
|
* A package name or package specifier with version, like name-1.0
|
|
|
|
|
|
|
|
*state*:
|
|
|
|
|
|
|
|
* Can be either 'installed' or 'removed'
|
|
|
|
|
|
|
|
*list*:
|
|
|
|
|
|
|
|
* When 'list' is supplied instead of 'state', the yum module can list
|
|
|
|
various configuration attributes. Values include 'installed', 'updates',
|
|
|
|
'available', 'repos', or any package specifier.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 04:50:00 +01:00
|
|
|
Writing your own modules
|
|
|
|
````````````````````````
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
To write your own modules, simply follow the convention of those
|
|
|
|
already available in /usr/share/ansible. Modules must return JSON but
|
|
|
|
can be written in any language. Modules should return hashes, but
|
|
|
|
hashes can be nested.
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
To support change hooks, modules should return hashes with a changed:
|
|
|
|
True/False element at the top level::
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 04:50:00 +01:00
|
|
|
{
|
|
|
|
'changed' : True,
|
|
|
|
'something' : 42
|
|
|
|
}
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
Modules can also choose to indicate a failure scenario by returning a
|
|
|
|
top level ``failure`` element with a True value, and a ``msg`` element
|
|
|
|
describing the nature of the failure. Other return values are up to
|
|
|
|
the module::
|
2012-03-08 19:36:47 +01:00
|
|
|
|
2012-03-09 04:50:00 +01:00
|
|
|
{
|
|
|
|
'failure' : True,
|
|
|
|
'msg' : "here is what happened..."
|
|
|
|
}
|
|
|
|
|
2012-03-09 20:39:29 +01:00
|
|
|
When shipping modules, drop them in /usr/share/ansible, or specify the
|
|
|
|
module path to the command line tool or API. It is easy to test
|
|
|
|
modules by running them directly on the command line, passing them
|
|
|
|
arguments just like they would be passed with ansible.
|