Ansible
wp:Ansible_(software) is an open-source software platform for configuring and managing computers. It combines multi-node software deployment, ad hoc task execution, and configuration management. Written in Python, it is packaged by RedHat. As of July 2016, we're using Ansible 2.2.0
Ansible "Playbooks" use an easy and descriptive language based on YAML.
Ansible can deploy to virtualization environments and public and private cloud environments including VMWare, OpenStack, AWS, Eucalyptus Cloud, KVM, and CloudStack
The preferred way to install is to just git clone
the source. Having the source makes it easy to upgrade, and it's self-contained, plus best of all you get all the examples and contribs. However, when I ran my first ansible-playbook digitalocean.yml
, I got an error message
Traceback (most recent call last): File "/usr/local/bin/ansible-playbook", line 44, in <module> import ansible.constants as C ImportError: No module named ansible.constants
Clearly ansible is falling back to the OS installed version. After I ran source ~/bin/ansible/hacking/env-setup
, then I was able to run my ansible playbook
Contents
Ansible with MediaWiki
https://github.com/Orain I've cloned the 'ansible-playbook'
Ansible with Drupal
- Jeff Geerling (geerlingguy) has his code on github https://github.com/geerlingguy/drupal-vm, and also a website http://www.drupalvm.com/. He's the author of Ansible for DevOps. The only problem I see with his code is that it installs everything from his own 'roles' (individual components) via the sharing site/mechanism called Ansible Galaxy. So, for example, phpMyAdmin comes from https://github.com/geerlingguy/ansible-role-phpmyadmin This is good in that he can make his system work, but it's bad in that you're getting all your bits from him and can't tweak any of it without manually checking each role for the code and instructions behind it so you know what you can set via variables and such. I'd rather see each of these roles contained in the project, community sourced, installed via git.
geerlingguy.firewall geerlingguy.git geerlingguy.apache geerlingguy.memcached geerlingguy.mysql geerlingguy.php geerlingguy.php-pecl geerlingguy.php-memcached geerlingguy.php-mysql geerlingguy.php-xdebug geerlingguy.php-xhprof geerlingguy.phpmyadmin geerlingguy.composer geerlingguy.drush geerlingguy.daemonize geerlingguy.mailhog geerlingguy.java geerlingguy.solr
Ansible in the cloud
Ansible has several core modules for working with various cloud providers. These include
- Amazon
- Digital Ocean http://docs.ansible.com/digital_ocean_module.html
- Linode http://docs.ansible.com/linode_module.html
- LXC
- OpenStack
Ansible on Fedora
The Fedora Project uses Ansible in it's Infrastructure team, and they publish their whole setup https://infrastructure.fedoraproject.org/cgit/ansible.git/tree/README
Ansible Docs
Some of the docs pages I've visited
- https://docs.ansible.com/ansible/playbooks_intro.html
- https://docs.ansible.com/ansible/intro_inventory.html
- http://docs.ansible.com/playbooks_best_practices.html
- http://docs.ansible.com/playbooks_loops.html
- https://docs.ansible.com/ansible/playbooks_startnstep.html
- https://docs.ansible.com/ansible/playbooks_roles.html#task-include-files-and-encouraging-reuse
- http://docs.ansible.com/YAMLSyntax.html
- https://docs.ansible.com/ansible/become.html
- https://docs.ansible.com/ansible/debug_module.html
- https://docs.ansible.com/ansible/playbooks_debugger.html (
strategy:debug
) - https://docs.ansible.com/ansible/playbooks_conditionals.html#sts=The When Statement%C2%B6
Ansible References
- http://tjelvarolsson.com/blog/taking-the-effort-out-of-server-configuration-using-ansible/
- http://tjelvarolsson.com/blog/how-to-create-automated-and-reproducible-work-flows-for-installing-scientific-software/ < with Vagrant
- http://jpmens.net/2012/06/06/configuration-management-with-ansible/
- Jinja - the template engine for Ansible
Examples
# use the setup module to view defined variables; add filter action to see specific variables
ansible all -m setup -a "filter=ansible_distribution*"
# Run multiple playbooks
ansible-playbook play1.yml play2.yml
Variables
- You have 3 plays in one playbook. Will play 3 be able to reference facts registered in play 1?
- facts, yes, play vars, no
- vars associated to the host, persist, vars defined in the play, do not, set_facts, registered vars and gathered facts associate to the host so those do persist for the run