Isso é o que acabei usando. Talvez seja útil para outra pessoa. O manual aplicará uma ACL base a cada host e, em seguida, procurará uma ACL adicional no diretório {{ acl_dir }}
com o nome do host atual que está sendo provisionado. Se isso existir, será aplicado. Por fim, a regra de negação padrão é anexada por último.
Eu pensei que um comentário no início do arquivo seria bom ter anotado quando o arquivo foi atualizado pela última vez. gather_facts
adiciona muito tempo de execução, então optou pelo comando shell:
para obter a data.
---
- hosts: all
vars:
dest_file: /etc/security/access.conf
base_acl : base
acl_dir : ../group_vars/pam_access
gather_facts: false
tasks:
- name: "Empty existing ACL and replace with base ACL"
copy:
content: ""
dest : "{{ dest_file }}"
owner : root
group : root
mode : 0644
- name: "Get current date from shell rather than wait for gather_facts"
shell: date '+%Y-%m-%d'
register: date_now
- name: "Add ansible header with modified date to beginning of file"
copy:
content: "# updated via ansible on {{ date_now.stdout }} by {{ lookup ('env', 'LOGNAME') }}"
dest: "{{ dest_file }}"
owner : root
group : root
mode : 0644
- name: "Add base ACL {{ acl_dir }}/base to {{ inventory_hostname }}"
lineinfile:
dest: "{{ dest_file }}"
line: "{{ lookup ('file', '{{ acl_dir }}/{{ base_acl }}') }}"
- name: "Check for additional ACL {{ acl_dir }}/{{ inventory_hostname }}..."
stat:
path : "{{ acl_dir }}/{{ inventory_hostname }}"
register: host_acl
- name: "Add host specific ACL from {{ acl_dir }}/{{ inventory_hostname }}"
when: host_acl.stat.exists
lineinfile:
dest: "{{ dest_file }}"
line: "{{ lookup ('file', '{{ acl_dir }}/{{ inventory_hostname }}') }}"
- name: "Add default DENY as last ACL as a security precaution"
lineinfile:
dest: "{{ dest_file }}"
line: "- : ALL : ALL"
base ACL:
+ : root : cron crond :0 ttyS0 tty1 tty2 tty3 tty4 tty5 tty6
+ : root : 10.137.198.176
+ : inventory: 10.137.198.25
+ : sysadmin : 10.137.198.202
host ACL adicional chamado websrv01.mydom.com
:
+ : webdev : 10.137.198.0/24
+ : passenger: 10.137.197.0/24