ZillaYT
(ZillaYT)
1
I’m writing a role to configure syslog, and of course the service is different between Linux instances. How do I do this in var/main.yml?
`
pseudo-code in vars/main.yml
if Redhat7.x
syslog_service: rsyslog
else if RedHat6.x
syslog_service: syslog
end
`
So then I can just do this in tasks/main.yml
`
- name: Ensure syslog is running
service: name=“{{ syslog_service }}” state=running enabled=yes
`
Thanks!
I'm writing a role to configure syslog, and of course the service is
different between Linux instances. How do I do this in var/main.yml?
The directory must be vars not var.
# pseudo-code in vars/main.yml
if Redhat7.x
syslog_service: rsyslog
else if RedHat6.x
syslog_service: syslog
end
It's not possible, vars/main.yml can only contain variable definitions, not logic.
So then I can just do this in tasks/main.yml
- name: Ensure syslog is running
service: name="{{ syslog_service }}" state=running enabled=yes
You must split it in two tasks.
ansible_os_family and ansible_lsb.major_release values is probably wrong so you need to find the correct ones.
- name: Ensure syslog is running on Redhat 6.x
service: name=syslog state=running enabled=yes
when: ansible_os_family == "RedHat" and ansible_lsb.major_release == "6"
- name: Ensure syslog is running on Redhat 7.x
service: name=rsyslog state=running enabled=yes
when: ansible_os_family == "RedHat" and ansible_lsb.major_release == "7"
ZillaYT
(ZillaYT)
3
Having a lot of -name/when task blocks is just ugly infrastructure. I have to think of a better way. There’s GOT to be a better way.
include_vars is your friend.
For instance in tasks you can say…
- include_vars: RedHat6.yml
when: ansible_os_family == "RedHat" and ansible_lsb.major_release == "6"
- include_vars: RedHat7.yml
when: ansible_os_family == "RedHat" and ansible_lsb.major_release == "7"
include_vars is your friend.
For instance in tasks/main.yml you can say…
`
- include_vars: RedHat6.yml
when: ansible_os_family == “RedHat” and ansible_lsb.major_release == “6”
- include_vars: RedHat7.yml
when: ansible_os_family == “RedHat” and ansible_lsb.major_release == “7”
`
sivel
(sivel)
6
Additionally you can make syslog_service a dictionary value with keys for the different versions:
vars/main.yml
syslog_service:
“6”: syslog
“7”: rsyslog
Then just do:
- name: Ensure syslog is running
service: name=“{{ syslog_service[ansible_distribution_major_version] }}” state=running enabled=yes
ZillaYT
(ZillaYT)
7
Much better solution. Thanks!
I ended up doing this
`
- include_vars: “roles/syslog/vars/{{ ansible_os_family }}-{{ ansible_distribution_major_version }}.yml”
`