Raspberry Pi playbooks
I started playing with Ansible a couple of years ago. Recently I've finally got around to porting most of my Raspberry Pi configuration to Ansible. This post is going to look at using those Raspberry Pi playbooks.
Installing Ansible
Ansible needs to be installed onto a control host, this can either be the
Raspberry Pi itself, or a remote host with network access. On
Raspbian Ansible can be installed with apt-get
:
sudo apt-get update
sudo apt-get install ansible
Unfortunately at the time of writing Raspbian ships with Ansible 2.2.1.0
.
This version of Ansible is missing a feature that was
introduced in 2.3
which my playbooks depend on. Thankfully a later version of
Ansible can be installed on CentOS via EPEL:
yum install ansible
For more installation info, either have a look at my post on getting started with Ansible, or refer to the Ansible docs which cover installation on other platforms.
Configuring Ansible
Once Ansible is installed the next step is to configure an inventory file. If you're running Ansible locally a line similar to the following should work:
somehost ansible_user=pi ansible_become=true ansible_host=localhost ansible_connection=local
Alternatively if you're planning to run Ansible over SSH, config similar to the following should work:
somehost ansible_user=pi ansible_become=true ansible_host=192.168.56.103 ansible_ssh_pass=raspberry
You can also set up SSH keys to avoid having to hard code your password:
somehost ansible_user=pi ansible_become=true ansible_host=192.168.56.103
Once everything is set up, you should be able to use the ping module to test Ansible:
$ ansible somehost -i inventory -m ping
ein | SUCCESS => {
"changed": false,
"ping": "pong"
}
Running playbooks
Once Ansible is working, clone a copy of the playbooks with git
:
git clone https://github.com/FloatingOctothorpe/pi-playbooks.git
The playbooks are split into separate Ansible roles. The
enabled_roles
variable is used to control which roles should be applied. This
can be set by creating a host specific variables file (e.g.
pi-playbooks/host_vars/somehost.yml
):
---
enabled_roles:
- 'apache'
- 'hostname'
- 'vim'
hostname: 'somehost.example.com'
In the example above, three roles will be applied. As well as specifying the
roles, other variables can be set; for example hostname
is used to specify
what the system's hostname should be set to. Info on available variables can be
found in the tasks/main.yml
file for each role.
Once you've created a file in host_vars/
you should be able to run the
site.yml
playbook. Initially this can be run with the --check
option to
preview the changes that Ansible will make:
ansible-playbook -i inventory pi-playbooks/site.yml -v --diff --check
Assuming the changes look OK, run Ansible again without the --check
option to
apply the changes:
ansible-playbook -i inventory pi-playbooks/site.yml -v --diff
It's also possible to selectively run a role by explicitly overriding the
enabled_roles
variable:
ansible-playbook -i inventory pi-playbooks/site.yml -v --diff \
--extra-vars="enabled_roles=['vim']"
Contributing
The playbooks are still a work in progress, and will likely be updated over time. Please feel free to fork the repo, or raise pull requests if you have suggested changes.