410 Include variables from conf.d

Use case

Create list of variables from files in the directory conf.d. Use the role vbotka.freebsd.lib tasks al_include_confd_vars_list.yml

- name: Create list of vars from files in directory conf.d
  vars:
    al_include_confd_dir: "{{ playbook_dir }}/conf.d"
  ansible.builtin.import_role:
    name: vbotka.freebsd.lib
    tasks_from: al_include_confd_vars_list

Tree

shell > tree .
.
├── ansible.cfg
├── conf.d
│   ├── devel.yml
│   ├── production.yml
│   └── qa.yml
├── hosts
└── pb.yml

Synopsis

  • At the managed node:

    • Create a list of variables’ values from files in the controller’s directory conf.d

    • Display the created list.

Requirements

Notes

The variables’ names are not collected. The resulting list comprises the variables’ values only.

Note

vbotka.freebsd.lib is the role lib in the collection vbotka.freebsd
vbotka.ansible_lib is the role ansible_lib in the namespace vbotka
Please make sure the versions are the same before you switch between them.

ansible.cfg

[defaults]
inventory = $PWD/hosts
gathering = explicit
callback_result_format = yaml
display_skipped_hosts = false

[connection]
pipelining = true

Inventory hosts

iocage_04 ansible_host=10.1.0.29

[iocage]
iocage_04

[iocage:vars]
ansible_user=admin
ansible_become=true
ansible_python_interpreter=auto_silent

conf.d

conf.d/devel.yml
obj:
  team: devel
  users: [charlie, david]
conf.d/production.yml
obj:
  team: production
  users: [alice, bob]
conf.d/qa.yml
obj1:
  team: qa1
  users: [mallory, ted]
obj2:
  team: qa2
  users: [darth, wendy]

Expected results

al_include_confd_vars_list_type: plain
al_include_confd_vars_list:
  - team: production
    users: [alice, bob]
  - team: qa1
    users: [mallory, ted]
  - team: qa2
    users: [darth, wendy]
  - team: devel
    users: [charlie, david]
al_include_confd_vars_list_type: fname
al_include_confd_vars_list:
  - fname: production
    vars:
      - team: production
        users: [alice, bob]
  - fname: qa
    vars:
      - team: qa1
        users: [mallory, ted]
      - team: qa2
        users: [darth, wendy]
  - fname: devel
    vars:
      - team: devel
        users: [charlie, david]

Playbook pb.yml

- name: Test vbotka.freebsd.lib al_include_confd_vars_list
  hosts: all

  tasks:

    - name: List type | plain
      vars:
        al_include_confd_dir: "{{ playbook_dir }}/conf.d"
        al_include_confd_vars_list_type: plain
      run_once: true
      block:

        - name: Create list of vars from files in directory conf.d
          ansible.builtin.import_role:
            name: vbotka.freebsd.lib
            tasks_from: al_include_confd_vars_list

        - debug:
            msg: |
              al_include_confd_vars_list_type: {{ al_include_confd_vars_list_type }}
              al_include_confd_vars_list:
                {{ al_include_confd_vars_list | to_yaml(indent=2) | indent(2) }}

    - name: List type | fname
      vars:
        al_include_confd_dir: "{{ playbook_dir }}/conf.d"
        al_include_confd_vars_list_type: fname
      run_once: true
      block:

        - name: Create list of vars from files in directory conf.d
          ansible.builtin.import_role:
            name: vbotka.freebsd.lib
            tasks_from: al_include_confd_vars_list

        - debug:
            msg: |
              al_include_confd_vars_list_type: {{ al_include_confd_vars_list_type }}
              al_include_confd_vars_list:
                {{ al_include_confd_vars_list | to_yaml(indent=2) | indent(2) }}

Playbook output - Display variables

(env) > ansible-playbook pb.yml
PLAY [Test vbotka.freebsd.lib al_include_confd_vars_list] **********************

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list: Find configuration files.] ***
ok: [iocage_04 -> localhost]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list: Create list of configuration files.] ***
ok: [iocage_04]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list: Find configuration links.] ***
ok: [iocage_04 -> localhost]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list: Add list of configuration links.] ***
ok: [iocage_04]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list: Create empty al_include_confd_vars_list.] ***
ok: [iocage_04]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list: Create plain list of vars.] ***
included: /scratch/collections/ansible_collections/vbotka/freebsd/roles/lib/tasks/fn/al_include_confd_vars_list_plain.yml for iocage_04 => (item=/export/scratch/collections/ansible_collections/vbotka/freebsd/docs/source/examples/410/conf.d/production.yml)
included: /scratch/collections/ansible_collections/vbotka/freebsd/roles/lib/tasks/fn/al_include_confd_vars_list_plain.yml for iocage_04 => (item=/export/scratch/collections/ansible_collections/vbotka/freebsd/docs/source/examples/410/conf.d/qa.yml)
included: /scratch/collections/ansible_collections/vbotka/freebsd/roles/lib/tasks/fn/al_include_confd_vars_list_plain.yml for iocage_04 => (item=/export/scratch/collections/ansible_collections/vbotka/freebsd/docs/source/examples/410/conf.d/devel.yml)

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list_plain: Include production.yml] ***
ok: [iocage_04]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list_plain: Add vars to list.] ***
ok: [iocage_04]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list_plain: Include qa.yml] ***
ok: [iocage_04]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list_plain: Add vars to list.] ***
ok: [iocage_04]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list_plain: Include devel.yml] ***
ok: [iocage_04]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list_plain: Add vars to list.] ***
ok: [iocage_04]

TASK [debug] *******************************************************************
ok: [iocage_04] => 
    msg: |-
        al_include_confd_vars_list_type: plain
        al_include_confd_vars_list:
          - team: production
            users: [alice, bob]
          - team: qa1
            users: [mallory, ted]
          - team: qa2
            users: [darth, wendy]
          - team: devel
            users: [charlie, david]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list: Find configuration files.] ***
ok: [iocage_04 -> localhost]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list: Create list of configuration files.] ***
ok: [iocage_04]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list: Find configuration links.] ***
ok: [iocage_04 -> localhost]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list: Add list of configuration links.] ***
ok: [iocage_04]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list: Create empty al_include_confd_vars_list.] ***
ok: [iocage_04]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list: Create list of vars incl. fname] ***
included: /scratch/collections/ansible_collections/vbotka/freebsd/roles/lib/tasks/fn/al_include_confd_vars_list_fname.yml for iocage_04 => (item=/export/scratch/collections/ansible_collections/vbotka/freebsd/docs/source/examples/410/conf.d/production.yml)
included: /scratch/collections/ansible_collections/vbotka/freebsd/roles/lib/tasks/fn/al_include_confd_vars_list_fname.yml for iocage_04 => (item=/export/scratch/collections/ansible_collections/vbotka/freebsd/docs/source/examples/410/conf.d/qa.yml)
included: /scratch/collections/ansible_collections/vbotka/freebsd/roles/lib/tasks/fn/al_include_confd_vars_list_fname.yml for iocage_04 => (item=/export/scratch/collections/ansible_collections/vbotka/freebsd/docs/source/examples/410/conf.d/devel.yml)

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list_fname: Create al_local_fname] ***
ok: [iocage_04]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list_fname: Include production.yml] ***
ok: [iocage_04]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list_fname: Add fname and vars to list.] ***
ok: [iocage_04]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list_fname: Create al_local_fname] ***
ok: [iocage_04]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list_fname: Include qa.yml] ***
ok: [iocage_04]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list_fname: Add fname and vars to list.] ***
ok: [iocage_04]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list_fname: Create al_local_fname] ***
ok: [iocage_04]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list_fname: Include devel.yml] ***
ok: [iocage_04]

TASK [vbotka.freebsd.lib : Al_include_confd_vars_list_fname: Add fname and vars to list.] ***
ok: [iocage_04]

TASK [debug] *******************************************************************
ok: [iocage_04] => 
    msg: |-
        al_include_confd_vars_list_type: fname
        al_include_confd_vars_list:
          - fname: production
            vars:
            - team: production
              users: [alice, bob]
          - fname: qa
            vars:
            - team: qa1
              users: [mallory, ted]
            - team: qa2
              users: [darth, wendy]
          - fname: devel
            vars:
            - team: devel
              users: [charlie, david]

PLAY RECAP *********************************************************************
iocage_04                  : ok=33   changed=0    unreachable=0    failed=0    skipped=22   rescued=0    ignored=0