multiple entries for a variable

In our playbook, we are making changes to the chronyd.service file. On several different Debian devices, that file is in two different locations:

/lib/systemd/system/chronyd.service
/etc/systemd/system/chronyd.service

We call the location using:

chronyd_systemd[system_distro]

System_distro is something we’ve defined with the major and minor OS versions smashed together (Debian10, CentOS7, etc.)

In the vars/main.yml file we have:

chronyd_systemd:
Debian10: /etc/systemd/system/chronyd.service

Debian11: /lib/systemd/system/chronyd.service

Ideally we’d like something like this:

chronyd-systemd:
Debian11: /lib/systemd/system/chronyd.service OR /etc/systemd/system/chronyd.service

How would we go about doing this?

In our playbook, we are making changes to the chronyd.service file. On several different Debian devices, that file is in two different locations:

/lib/systemd/system/chronyd.service
/etc/systemd/system/chronyd.service

We call the location using:

chronyd_systemd[system_distro]

System_distro is something we’ve defined with the major and minor OS versions smashed together (Debian10, CentOS7, etc.)

In the vars/main.yml file we have:

chronyd_systemd:
Debian10: /etc/systemd/system/chronyd.service

Debian11: /lib/systemd/system/chronyd.service

Ideally we’d like something like this:

chronyd-systemd:
Debian11: /lib/systemd/system/chronyd.service OR /etc/systemd/system/chronyd.service

How would we go about doing this?

This should expand to what you want (untested):

“{{ chronyd_systemd[ansible_distribution ~ ansible_distribution_major_version] }}”

Actually, that is how we define system_distro already.

I’m really interesting in how to do something like the following:

chronyd-systemd:
Debian11: /lib/systemd/system/chronyd.service OR /etc/systemd/system/chronyd.service

In other words, for Debian 11, define two different locations to look at.

file lookups work on the controller, not the target hosts. So you’d be stuck doing a ansible.builtin.stat on those paths first, then some magic jinja expressions on the results. It gets messy, much messier than what you’re already doing.

But, unless you’re the creating a service yourself - and I mean the whole service, not just the systemd unit file - this is not the way to go. Systemd provides a mechanism for the sysadmin to override and/or add to the settings in a vendor- or distro-provided service unit. You should consider putting your overrides in /etc/systemd/system/chronyd.service.d/ and leaving the upstream service unit file(s) alone. This also preserves your mods and avoids conflicts across chronyd updates.