selecting file based on hostname

Hi Team,

I need a playbook to update the sudoer file based on os distribution. I have written below code but it is failing.

  • name: Copy sudoers files
    copy:
    src: files/{{ file_name }}
    dest: /etc/sudoers
    validate: /usr/sbin/visudo -csf %s
    {% if ansible_distribution == “amazon” %}
    file_name: ‘sudoers.aspera’
    {% elif ansible_distribution == “Debian” %}
    file_name: ‘sudoers.debian’
    {% else %}
    file_name: ‘sudoers.general’
    {% end %}

The offending line appears to be:

validate: /usr/sbin/visudo -csf %s
{% if ansible_distribution == “amazon” %}
^ here

Regards

Do as the following, which will make playbook readable

file_name: sudoers.general
tasks:

  • name: Set file name when Amazon
    set_fact:
    file_name: “sudoers.aspera”
    when: ansible_distribution == ‘amazon’

  • name: Set file name when Debian
    set_fact:
    file_name: “sudoers.debian”
    when: ansible_distribution == ‘Debian’

  • debug:
    msg: “{{ file_name }}”

This is also possible

vars:
file_name_mapping:
amazon: “sudoers.general”
debian: “sudoers.debian”
tasks:

  • debug:
    msg: “{{ file_name_mapping[ansible_distribution] | default(‘sudoers.general’)}}”