Using doas in Ansible
I’m moving from sudo to doas in pretty much all my installations.
The reason is that doas is simpler to configure and manage, and I trust the OpenBSD team with regard to producing clean and functional pieces of code.
But how to automate tasks thru
ansible using doas instead of the well established sudo?
Well, Ansible allows the definition of an
ansible_become_method variable, that can be specified to isntrument ansible on how to gain privileges when executing a task.
Here I present a few available options to use doas while running ansible.
Specifying become-method on the command line
One way to quickly test your playbook and your configuration for using doas is to run the playbook with a different command line option:
% ansible-playbook -l ghostbusters --become-method=doas FreeBSD.yml
In the above, I’m running the
FreeBSD.yml playbook against the ghostbustes group of hosts, and I’m specifying the become-method variable as to use doas.
Another option, from the command line, is to override the internal variable
ansible_become_method, such as:
% ansible-playbook -l venkman FreeBSD.yml --extra-vars "ansible_become_method=doas"
Specifying the ansible_become_method in the playbook
A simple but not very scalable, according to me, approach, is to specify the particular variable ansible_become_method in the playbook. The variable can be specified on a single task basis, or as a general variable, so for example in your playbook you can place it into the vars section:
- hosts: freebsd
vars:
ansible_become_method: doas
...
This means you don’t have to specify anymore any particular flag on the command line.
Specifying ansible_become_method on a per-host basis
A more beautiful approach, according to me, is to specify the ansible_become_method on a per-host basis.
In my inventory file hosts, I do have something like:
[freebsd]
miguel ingress_ipv4=192.168.222.123
venkman ingress_ipv4=192.168.222.13 ansible_become_method=doas
So my group
freebsd has two hosts, where only venkman will use doas as a pribvilege escalation method.