test: check generated files for ansible_managed, fingerprint

Add the following files: tests/tasks/check_header.yml and
tests/templates/get_ansible_managed.j2.
Use check_header.yml to check generated files for the ansible_managed
and fingerprint headers.
check_header.yml takes these parameters.  `fingerprint` is required,
and one of `__file` or `__file_content`:

* `__file` - the full path of the file to check e.g. `/etc/realmd.conf`
* `__file_content` - the output of `slurp` of the file
* `__fingerprint` - required - the fingerprint string `system_role:$ROLENAME` e.g.
  `__fingerprint: "system_role:postfix"`
* `__comment_type` - optional, default `plain` - the type of comments used

e.g. `__comment_type: c` for C/C++-style comments.  `plain` uses `#`.
See https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_filters.html#adding-comments-to-files
for the different types of comment styles supported.

Example:
```
- name: Check generated files for ansible_managed, fingerprint
  include_tasks: tasks/check_header.yml
  vars:
    __file: /etc/myfile.conf
    __fingerprint: "system_role:my_role"
```

Signed-off-by: Rich Megginson <rmeggins@redhat.com>
This commit is contained in:
Rich Megginson 2023-04-25 12:30:06 -06:00
parent 2e3e4a29b5
commit c5c519f73b
4 changed files with 25 additions and 0 deletions

View file

@ -1,2 +1,3 @@
exclude_paths:
- tests/roles/
- .tox/

View file

@ -0,0 +1,16 @@
# SPDX-License-Identifier: MIT
---
- name: Get file
ansible.builtin.slurp:
path: "{{ __file }}"
register: __content
when: not __file_content is defined
- name: Check for presence of ansible managed header, fingerprint
ansible.builtin.assert:
that:
- ansible_managed in content
- __fingerprint in content
vars:
content: "{{ (__file_content | d(__content)).content | b64decode }}"
ansible_managed: "{{ lookup('template', 'get_ansible_managed.j2') }}"

View file

@ -0,0 +1 @@
{{ ansible_managed | comment(__comment_type | d("plain")) }}

View file

@ -118,5 +118,12 @@
"{{ sshd_options.stdout_lines }}"
when: not sshd_skip_test
- name: Check generated files for ansible_managed, fingerprint
ansible.builtin.include_tasks: tasks/check_header.yml
vars:
__file_content: "{{ config }}"
__fingerprint: "willshersystems:ansible-sshd"
when: not sshd_skip_test
- name: Restore configuration files
ansible.builtin.include_tasks: tasks/restore.yml