Ansible: set debconf variables
Sometimes I need to automate some install on Ubuntu using Ansible. To do that, I need to get a list of questions/variables from the app/package. Welcome to debconf-get-selections
In this example, we'll use slapd
package.
$ apt-get install -y debconf-utils
# As an example, install slapd
$ apt-get install -y slapd
# Displays all parameters of "slapd"
$ debconf-get-selections | grep "slapd"
slapd slapd/internal/adminpw password
slapd slapd/password1 password
slapd slapd/internal/generated_adminpw password
slapd slapd/password2 password
slapd slapd/move_old_database boolean true
slapd slapd/dump_database_destdir string /var/backups/slapd-VERSION
slapd shared/organization string nodomain
slapd slapd/no_configuration boolean false
slapd slapd/password_mismatch note
# Potentially unsafe slapd access control configuration
slapd slapd/unsafe_selfwrite_acl note
slapd slapd/dump_database select when needed
slapd slapd/upgrade_slapcat_failure error
slapd slapd/ppolicy_schema_needs_update select abort installation
# Do you want the database to be removed when slapd is purged?
slapd slapd/purge_database boolean false
slapd slapd/backend select MDB
slapd slapd/invalid_config boolean true
slapd slapd/domain string nodomain
With Ansible, you can automate it. In your playbook, add something like:
- hosts: localhost
vars:
ldap_admin_pw: 'Wf^rp&429GrtRkslc83lsj'
hostname: openldap
domain_sec: example
domain_tld: com
org: example
ldap_backend: HDB
tasks:
- name: install pre-req packages
package:
state: latest
name:
- debconf-utils
- name: Check debconf for slapd entries
shell: (debconf-get-selections | grep -q -s slapd); echo $?
register: debconf
ignore_errors: yes
changed_when: False
# check them with `debconf-get-selections | grep slapd`
- name: "Set OpenLDAP unattended installation parameters"
debconf:
name: "slapd"
question: "{{ item.key }}"
vtype: "{{ item.type }}"
value: "{{ item.value }}"
with_items:
- key: slapd/password1
type: password
value: "{{ ldap_admin_pw }}"
- key: slapd/password2
type: password
value: "{{ ldap_admin_pw }}"
- key: slapd/move_old_database
type: boolean
value: true
- key: slapd/domain
type: string
value: "{{ domain_sec }}.{{ domain_tld }}"
- key: shared/organization
type: string
value: "{{ org }}"
- key: slapd/no_configuration
type: boolean
value: false
- key: slapd/purge_database
type: boolean
value: false
- key: slapd/allow_ldap_v2
type: boolean
value: false
- key: slapd/backend
type: select
value: "{{ ldap_backend|upper }}"
when: debconf.stdout == "1"
no_log: true
- name: install packages
package:
state: latest
name:
- slapd
- ldap-utils