Автоматизация пользователей, файлов и запланированных задач

AnsibleBeginner
Практиковаться сейчас

Введение

Автоматизация управления пользователями и запланированными задачами — стандартная практика в операционных плейбуках. 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-задачи, после чего подтвердили идемпотентность плейбука.