2012-03-09 13:42:53 +01:00
|
|
|
Using the Python API
|
|
|
|
====================
|
2012-03-08 19:36:47 +01:00
|
|
|
|
|
|
|
The Python API is very powerful, and is how the ansible CLI and ansible-playbook
|
|
|
|
are implemented.
|
|
|
|
|
|
|
|
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"
|
|
|
|
}
|
|
|
|
"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.
|
|
|
|
|
2012-03-09 13:42:53 +01:00
|
|
|
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,
|
|
|
|
module_name='command', module_args=['/usr/bin/uptime'],
|
|
|
|
).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``.
|
|
|
|
|
2012-03-08 19:36:47 +01:00
|
|
|
|