Difference between revisions of "Ansible"
(→Examples) |
|||
Line 45: | Line 45: | ||
[remote] $ tailf /var/log/syslog | [remote] $ tailf /var/log/syslog | ||
Jun 10 18:52:36 vagrant ansible-command: Invoked with executable=None shell=True args=apt-get update removes=None creates=None chdir=None | Jun 10 18:52:36 vagrant ansible-command: Invoked with executable=None shell=True args=apt-get update removes=None creates=None chdir=None | ||
+ | |||
+ | * Get a list of "facts" about the vagrant VM: | ||
+ | Note: Ansible by default gathers "facts" about the machines under management, and these facts can be accessed in Playbooks and in templates. To see a list of all of the facts that are available about a machine, you can run the "setup" module as an ''ad-hoc'' action: | ||
+ | |||
+ | $ ansible dev -i hosts -m setup | ||
+ | |||
+ | This will print out a dictionary of all of the facts that are available for that particular host. | ||
+ | |||
+ | ==Miscellaneous== | ||
+ | * Disable <code>`[[cowsay]]`</code> (I _hate_ that this is not the [http://michaelheap.com/cowsay-and-ansible/ default setting]!): | ||
+ | $ sed -i 's/#\?nocows.*/nocows = 1/' /etc/ansible/ansible.cfg | ||
+ | #~OR~ | ||
+ | $ ANSIBLE_NOCOWS=1 ansible-playbook -i hosts -s foo.yml | ||
==See also== | ==See also== |
Revision as of 22:06, 10 June 2015
Ansible is an open-source software platform for configuring and managing computers. It combines multi-node software deployment, ad hoc task execution, and configuration management. It manages nodes over SSH and requires Python (2.4 or later) to be installed on them. Modules work over JSON and standard output and can be written in any programming language. The system uses YAML to express reusable descriptions of systems.
Ansible is a DevOps tool for configuring, deploying, monitoring, and automating servers (among other things). This article will only discuss the Linux aspects. Most of the examples will use Vagrant. However, some of the examples/demos will include Rackspace, DigitalOcean, and Amazon's AWS as well.
Examples
Note: This article assumes you already have Vagrant and Ansible installed.
In the following examples, lines starting with "$
" indicate a command to be run on the Ansible controlling machine (my laptop/local machine in most cases) and "[remote] $
" indicates a command to be run on one of the nodes.
- Setup your local Ansible environment:
$ mkdir -p $HOME/dev/ansible $ cd $HOME/dev/ansible $ git init
- Create your inventory file and add it to your git repo (we will call our development group of hosts "
dev
"):
$ cat << EOF > hosts [dev] # Development host using a Ubuntu 14.04 vagrant box 192.168.1.10 ansible_ssh_user=vagrant $ git add hosts
Note: The default inventory file lives at /etc/ansible/hosts
. However, since I will be storing this file in my git repo, I like to keep it with the rest of my Ansible files.
- Ansible command syntax:
$ ansible <host-pattern> [-f forks] [-m module_name] [-a args]
- Test that you can communicate with your vagrant VM (I like to sometimes add "
-vvvv
" for extra verbosity whilst debugging/developing):
$ ansible dev -i hosts -u vagrant -vvvv -m command -a "cat /etc/issue" 10.11.1.103 | success | rc=0 >> Ubuntu 14.04.2 LTS \n \l $ ansible dev -i hosts -u vagrant -vvvv -m command -a "uptime"
Note: Since we defined our vagrant user in the inventory file ("hosts
"), we no longer need to specify this user in the following examples. Also note that my vagrant box already has my SSH public key copied over (if not, make sure to add "-k
" so Ansible prompts you for the password).
$ ansible dev -i hosts -m ping 10.11.1.103 | success >> { "changed": false, "ping": "pong" }
- Update your remote (vagrant VM, in this case) machine ("
-s
or "--sudo
" to run operation with`sudo`
):
$ ansible dev -i hosts -s -m command -a "apt-get update"
[remote] $ tailf /var/log/syslog Jun 10 18:52:36 vagrant ansible-command: Invoked with executable=None shell=True args=apt-get update removes=None creates=None chdir=None
- Get a list of "facts" about the vagrant VM:
Note: Ansible by default gathers "facts" about the machines under management, and these facts can be accessed in Playbooks and in templates. To see a list of all of the facts that are available about a machine, you can run the "setup" module as an ad-hoc action:
$ ansible dev -i hosts -m setup
This will print out a dictionary of all of the facts that are available for that particular host.
Miscellaneous
- Disable
`cowsay`
(I _hate_ that this is not the default setting!):
$ sed -i 's/#\?nocows.*/nocows = 1/' /etc/ansible/ansible.cfg #~OR~ $ ANSIBLE_NOCOWS=1 ansible-playbook -i hosts -s foo.yml