ansible basic operating theory explained
April 11, 2012
Talking on irc tonight pointed out a lacking in the docs of ansible. Specifically, explaining the dirt-simple nature of how it works.
0. ansible has modules – modules are just executable code/scripts in any language you want – there are only 2 requirements:
a. that whatever language you want to write them in is available on the remote system(s)
b. that the modules return json as their results.
1. ansible connects to a host(or many hosts) using ssh
2. ansible shoves across the module(s) you want to run
3. ansible shoves across the arguments you want to pass to the module(s)
4. ansible runs the modules with the arguments
5. ansible gets back json from the modules and sends it to the calling script/program to be handled and/or displayed.
Now – for a lot of people the only module they really care about it is the ‘command’ or ‘shell’ module – which just lets you run a command directly on the system and it returns the results to the calling program. Pretty handy for any number of things. However, you can write a custom module – which is really nothing more than a script that ansible runs remotely. Ansible just handles the communication/execution part to multiple systems at the same time and return the results back to you, sensibly.
So that’s the dead-simple version of what ansible can do.
How do you as an admin wanting to test it out get started?
git clone https://github.com/ansible/ansible.git
echo “somehost-i-have-root-on” > ~/ansible-hosts
If you have a root ssh key setup then you can run:
bin/ansible all -i ~/ansible-hosts “uptime”
if you don’t have a root ssh key setup then run:
bin/ansible all -k -i ~/ansible-hosts “uptime”
it will prompt you for the root password
Add more hosts to ~/ansible-hosts to talk to more at the same time.