|
5 | 5 | state: directory |
6 | 6 | mode: "0750" |
7 | 7 |
|
8 | | -- name: "Add {{ sudo_config.entity_name }} to sudoers." |
| 8 | +- name: Create temporary directory for sudoers validation. |
| 9 | + ansible.builtin.tempfile: |
| 10 | + state: directory |
| 11 | + suffix: sudoers |
| 12 | + register: temp_sudoers_dir |
| 13 | + when: sudo_config | default([]) | length > 0 |
| 14 | + |
| 15 | +- name: Create sudoers file for validation. |
9 | 16 | ansible.builtin.template: |
10 | 17 | src: "sudoer.j2" |
11 | | - dest: "/etc/sudoers.d/{{ sudo_config.filename }}" |
| 18 | + dest: "{{ temp_sudoers_dir.path }}/{{ item.filename }}" |
12 | 19 | owner: root |
13 | 20 | group: root |
14 | 21 | mode: "0440" |
15 | | - when: sudo_config.entity_name | length > 0 |
| 22 | + when: item.entity_name | default('') | length > 0 |
| 23 | + with_items: "{{ sudo_config if sudo_config is iterable and sudo_config is not mapping else [sudo_config] }}" |
| 24 | + register: sudo_templates |
| 25 | + |
| 26 | +- name: Validate sudoers file on remote. |
| 27 | + ansible.builtin.command: "visudo -cf {{ temp_sudoers_dir.path }}/{{ item.filename }}" |
| 28 | + register: visudo_check |
| 29 | + failed_when: visudo_check.rc != 0 |
| 30 | + changed_when: false |
| 31 | + with_items: "{{ sudo_config if sudo_config is iterable and sudo_config is not mapping else [sudo_config] }}" |
| 32 | + when: item.entity_name | default('') | length > 0 |
| 33 | + loop_control: |
| 34 | + label: "{{ item.filename }}" |
| 35 | + delegate_to: "{{ inventory_hostname }}" |
| 36 | + |
| 37 | +- name: Install validated sudoers file. |
| 38 | + ansible.builtin.copy: |
| 39 | + src: "{{ temp_sudoers_dir.path }}/{{ item.filename }}" |
| 40 | + dest: "/etc/sudoers.d/{{ item.filename }}" |
| 41 | + owner: root |
| 42 | + group: root |
| 43 | + mode: "0440" |
| 44 | + remote_src: true |
| 45 | + when: item.entity_name | default('') | length > 0 |
| 46 | + with_items: "{{ sudo_config if sudo_config is iterable and sudo_config is not mapping else [sudo_config] }}" |
| 47 | + |
| 48 | +- name: Clean up temporary files. |
| 49 | + ansible.builtin.file: |
| 50 | + path: "{{ temp_sudoers_dir.path }}" |
| 51 | + state: absent |
| 52 | + when: temp_sudoers_dir.path is defined |
0 commit comments