Вот как можно создать образ диска ext4 объемом 12 ГБ, который затем можно будет монтировать автоматически при загрузке:
fallocate -l 12G /path/to/image.img
mkfs.ext4 /path/to/image.img
echo "/path/to/image.img /srv/data ext4 defaults,auto,loop 0 0" >>/etc/fstab
Я бы использовал "сырой" модуль и просто использовал что-то вроде:
- name: fetch PASS_MAX_DAYS
raw: awk '/^PASS_MAX_DAYS/ {print $2}' /etc/login.defs
register: PASS_MAX_DAYS_output
- name: check PASS_MAX_DAYS ok
assert:
that:
- "PASS_MAX_DAYS_output.stdout != 90"
msg: "PASS_MAX_DAYS is not 90"
Это достаточно гибко, чтобы легко адаптироваться к другим проверкам.
Q: "Check the file if PASS_MAX_DAYS is set to 90 days, and if so, report back as (Green OK) or Skip without issues. If the value deviates from the 90 day value proceed to flag it as an issue (Red or Orange)"
A :Идемпотентность модулей Ansible является основной парадигмой. В этом отношении код Ansible следует рассматривать скорее как определение состояния, чем как процедуру. В результате просто запустите код Ansible, чтобы убедиться, что заданное состояние системы установлено. Например, playbook
$ cat test.yml
- hosts: localhost
gather_facts: false
tasks:
- lineinfile:
path: /scratch/tmp/login.defs
regex: '^PASS_MAX_DAYS\s+'
line: 'PASS_MAX_DAYS 90'
сообщил, что одна задача была изменена (на любой цвет, который вы можете настроить в ANSIBLE _COLOR _CHANGED)
$ ansible-playbook test.yml
PLAY [localhost]
TASK [lineinfile]
changed: [localhost]
PLAY RECAP
localhost: ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
$ cat /scratch/tmp/login.defs
PASS_MAX_DAYS 90
Повторный запуск плейбука сообщил, что 1 задача выполнена успешно (в любом цвете, который вы можете настроить в ANSIBLE _COLOR _OK)
PLAY RECAP
localhost: ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Аудит
Если вы не хотите вносить какие-либо изменения в систему, а вместо этого хотите выяснить только возможные различия, запустите плейбук в режиме проверки
-C, --check
don't make any changes; instead, try to predict some of the changes that may occur
Например, плейбук
$ cat login.defs
PASS_MAX_DAYS 80
$ ansible-playbook test.yml --check
сообщит, что 1 задача будет изменена. Другими словами, аудит не прошел.
PLAY [localhost]
TASK [lineinfile]
changed: [localhost]
PLAY RECAP
localhost: ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Отчетность
Доступно довольно много подключаемых модулей обратного вызова . Если ни один из них не подходит для вашей цели, можно написать собственный плагин или использовать ansible -runner и проанализировать артефакты . Доступен модуль Python .
Q: "The /etc/login.defs file has tabbed values within the file. If you run the exact same test against a unix platform you'll see that the run status of your ansible playbook will always come back as changed."
A :Сделайте свой выбор. Либо вы хотите заменить интервал, либо оставить его как есть. И пробелы, и табуляции являются допустимыми разделителями в файле login.defs. Можно использовать обратные ссылки , изменить regex
и оставить пробелы в line
как есть. Например, задача ниже
- lineinfile:
path: /scratch/tmp/login.defs
regex: '^PASS_MAX_DAYS(\s+)(\S*)$'
line: 'PASS_MAX_DAYS\g<1>90'
backrefs: true
не будет "всегда возвращаться измененным" .