Введение
Автоматизация управления пользователями и запланированными задачами — стандартная практика в операционных плейбуках. Ansible позволяет безопасно создавать учетные записи, управлять правами владения файлами и настраивать записи в cron.
В этой лабораторной работе вы создадите временного служебного пользователя, настроите каталог для отчетов и файл в нем, а также добавите cron-задачу для этого пользователя.
Создание проекта автоматизации пользователей
На этом этапе вы создадите проект для управления временным служебным пользователем с именем rhce_ops.
cd /home/labex/project
mkdir -p rhce-ansible/{inventory,playbooks,reports}
cd rhce-ansible
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
host_key_checking = False
retry_files_enabled = False
EOF
cat > inventory/hosts <<'EOF'
[managed]
host ansible_connection=local
EOF
Настройка удалила все предыдущие учетные записи rhce_ops, поэтому первый запуск плейбука покажет полный процесс создания. Эта учетная запись является временной и отделена от пользователя labex в среде LabEx.
Определение переменных учетной записи и расписания
На этом этапе вы определите переменные для служебной учетной записи, каталога отчетов и расписания cron. Перед выполнением команд на этом этапе вернитесь в каталог проекта Ansible. Это обеспечит стабильность команд, даже если LabEx запускает каждый этап отдельно.
cd /home/labex/project/rhce-ansible
mkdir -p inventory/group_vars
cat > inventory/group_vars/managed.yml <<'EOF'
ops_user: rhce_ops
ops_comment: RHCE automation operator
ops_report_dir: /home/rhce_ops/reports
cron_minute: '*/15'
EOF
Эти переменные описывают учетную запись и политику расписания. Использование кавычек для */15 является обязательным, так как YAML может интерпретировать * особым образом; кавычки позволяют сохранить значение как строку для cron.
cat inventory/group_vars/managed.yml
Написание плейбука для пользователей и файлов
На этом этапе вы напишете плейбук, который создает пользователя, создает каталог с заданными правами владения, записывает управляемый файл и устанавливает запись в cron. Перед выполнением команд на этом этапе вернитесь в каталог проекта Ansible.
cd /home/labex/project/rhce-ansible
cat > playbooks/users-files-cron.yml <<'EOF'
---
- name: Manage user files and scheduled task
hosts: managed
become: true
gather_facts: false
tasks:
- name: Ensure operations user exists
ansible.builtin.user:
name: "{{ ops_user }}"
comment: "{{ ops_comment }}"
shell: /bin/bash
state: present
- name: Ensure report directory exists
ansible.builtin.file:
path: "{{ ops_report_dir }}"
state: directory
owner: "{{ ops_user }}"
group: "{{ ops_user }}"
mode: '0750'
- name: Install managed report file
ansible.builtin.copy:
dest: "{{ ops_report_dir }}/status.txt"
content: |
managed_by=ansible
owner: "{{ ops_user }}"
group: "{{ ops_user }}"
mode: '0640'
- name: Install heartbeat cron job
ansible.builtin.cron:
name: RHCE heartbeat
user: "{{ ops_user }}"
minute: "{{ cron_minute }}"
job: "/usr/bin/date >> {{ ops_report_dir }}/heartbeat.log"
EOF
Задачи логически связаны: пользователь должен существовать до назначения прав владения, каталог отчетов должен быть создан до записи файла состояния, а cron-задача выполняется от имени этого же пользователя.
ansible-playbook playbooks/users-files-cron.yml --syntax-check
Запуск плейбука автоматизации пользователей
На этом этапе вы запустите плейбук и проверите учетную запись, права доступа к файлам и запись в cron.
cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/users-files-cron.yml | tee reports/users-files-cron-run.txt
Первый запуск должен создать пользователя, каталог, файл состояния и запись в cron. Сохранение вывода поможет вам отличить изменения учетной записи от изменений файлов и cron.
id rhce_ops
Команда id подтверждает, что учетная запись существует и имеет числовые идентификаторы пользователя и группы.
sudo ls -ld /home/rhce_ops/reports && sudo ls -l /home/rhce_ops/reports/status.txt
Каталог и файл должны принадлежать пользователю rhce_ops. Файл состояния должен иметь права 0640, что дает владельцу права на чтение/запись, а группе — только на чтение.
sudo crontab -u rhce_ops -l
Crontab должен содержать именованную задачу RHCE heartbeat и команду, которая добавляет дату в heartbeat.log.
Подтверждение идемпотентности плейбука
На этом этапе вы повторно запустите плейбук. Учетная запись, файлы и запись в cron уже соответствуют желаемому состоянию, поэтому никаких изменений не должно потребоваться.
cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/users-files-cron.yml | tee reports/users-files-cron-second.txt
Второй запуск должен показать changed=0, так как учетная запись, состояние файлов и crontab уже соответствуют переменным и задачам.
grep -E 'host.*changed=0' reports/users-files-cron-second.txt
Резюме
Вы автоматизировали создание временного пользователя, управление файлами и правами доступа, а также настройку cron-задачи, после чего подтвердили идемпотентность плейбука.


