mirror of https://github.com/ansible/ansible.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.2 KiB
ReStructuredText
105 lines
3.2 KiB
ReStructuredText
11 years ago
|
Python API
|
||
|
==========
|
||
13 years ago
|
|
||
12 years ago
|
There are several interesting ways to use Ansible from an API perspective. You can use
|
||
11 years ago
|
the Ansible python API to control nodes, you can extend Ansible to respond to various python events, you can
|
||
|
write various plugins, and you can plug in inventory data from external data sources. This document
|
||
|
covers the Runner and Playbook API at a basic level.
|
||
|
|
||
11 years ago
|
If you are looking to use Ansible programmatically from something other than Python, trigger events asynchronously,
|
||
11 years ago
|
or have access control and logging demands, take a look at `AnsibleWorks AWX <http://ansibleworks.com/ansibleworks-awx>`_
|
||
|
as it has a very nice REST API that provides all of these things at a higher level.
|
||
|
|
||
|
Ansible is written in its own API so you have a considerable amount of power across the board.
|
||
|
This chapter discusses the Python API.
|
||
13 years ago
|
|
||
11 years ago
|
.. _python_api:
|
||
|
|
||
13 years ago
|
Python API
|
||
|
----------
|
||
13 years ago
|
|
||
|
The Python API is very powerful, and is how the ansible CLI and ansible-playbook
|
||
12 years ago
|
are implemented.
|
||
13 years ago
|
|
||
|
It's pretty simple::
|
||
|
|
||
|
import ansible.runner
|
||
|
|
||
|
runner = ansible.runner.Runner(
|
||
|
module_name='ping',
|
||
|
module_args='',
|
||
|
pattern='web*',
|
||
|
forks=10
|
||
|
)
|
||
|
datastructure = runner.run()
|
||
|
|
||
|
The run method returns results per host, grouped by whether they
|
||
|
could be contacted or not. Return types are module specific, as
|
||
|
expressed in the 'ansible-modules' documentation.::
|
||
|
|
||
|
{
|
||
|
"dark" : {
|
||
|
"web1.example.com" : "failure message"
|
||
12 years ago
|
},
|
||
13 years ago
|
"contacted" : {
|
||
|
"web2.example.com" : 1
|
||
|
}
|
||
|
}
|
||
|
|
||
|
A module can return any type of JSON data it wants, so Ansible can
|
||
|
be used as a framework to rapidly build powerful applications and scripts.
|
||
|
|
||
11 years ago
|
.. _detailed_api_example:
|
||
|
|
||
13 years ago
|
Detailed API Example
|
||
|
````````````````````
|
||
|
|
||
|
The following script prints out the uptime information for all hosts::
|
||
|
|
||
|
#!/usr/bin/python
|
||
|
|
||
|
import ansible.runner
|
||
|
import sys
|
||
|
|
||
|
# construct the ansible runner and execute on all hosts
|
||
|
results = ansible.runner.Runner(
|
||
|
pattern='*', forks=10,
|
||
12 years ago
|
module_name='command', module_args='/usr/bin/uptime',
|
||
13 years ago
|
).run()
|
||
|
|
||
|
if results is None:
|
||
|
print "No hosts found"
|
||
|
sys.exit(1)
|
||
|
|
||
|
print "UP ***********"
|
||
|
for (hostname, result) in results['contacted'].items():
|
||
|
if not 'failed' in result:
|
||
|
print "%s >>> %s" % (hostname, result['stdout'])
|
||
|
|
||
|
print "FAILED *******"
|
||
|
for (hostname, result) in results['contacted'].items():
|
||
|
if 'failed' in result:
|
||
|
print "%s >>> %s" % (hostname, result['msg'])
|
||
|
|
||
|
print "DOWN *********"
|
||
|
for (hostname, result) in results['dark'].items():
|
||
|
print "%s >>> %s" % (hostname, result)
|
||
|
|
||
|
Advanced programmers may also wish to read the source to ansible itself, for
|
||
|
it uses the Runner() API (with all available options) to implement the
|
||
|
command line tools ``ansible`` and ``ansible-playbook``.
|
||
|
|
||
11 years ago
|
.. seealso::
|
||
|
|
||
|
:doc:`developing_inventory`
|
||
|
Developing dynamic inventory integrations
|
||
|
:doc:`developing_modules`
|
||
|
How to develop modules
|
||
|
:doc:`developing_plugins`
|
||
|
How to develop plugins
|
||
|
`Development Mailing List <http://groups.google.com/group/ansible-devel>`_
|
||
|
Mailing list for development topics
|
||
|
`irc.freenode.net <http://irc.freenode.net>`_
|
||
|
#ansible IRC chat channel
|
||
|
|