Automatización de usuarios, archivos y tareas programadas

AnsibleBeginner
Practicar Ahora

Introducción

La automatización de usuarios y tareas programadas es una práctica común en los playbooks operativos. Ansible permite crear cuentas, gestionar la propiedad de archivos e instalar entradas de cron de forma segura.

En este laboratorio, creará un usuario de servicio temporal, gestionará un directorio y un archivo de informes, e instalará una tarea cron para dicho usuario.

Crear un proyecto de automatización de usuarios

En este paso, creará un proyecto para gestionar un usuario de servicio desechable llamado 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

La configuración eliminó cualquier cuenta rhce_ops previa, por lo que la primera ejecución del playbook mostrará el proceso completo de creación. La cuenta es desechable y está separada del usuario labex de LabEx.

Definir variables de cuenta y programación

En este paso, definirá variables para la cuenta de servicio, el directorio de informes y la programación del cron. Antes de ejecutar los comandos en este paso, regrese al directorio del proyecto de Ansible. Esto mantiene la estabilidad de los comandos incluso cuando LabEx ejecuta cada paso por separado.

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

Estas variables describen la política de cuenta y programación. El uso de comillas en */15 es intencional, ya que YAML puede tratar el carácter * de forma especial; las comillas aseguran que se mantenga como una cadena de cron.

cat inventory/group_vars/managed.yml

Escribir el playbook de usuarios y archivos

En este paso, escribirá un playbook que crea el usuario, genera un directorio con propiedad asignada, escribe un archivo gestionado e instala una entrada de cron. Antes de ejecutar los comandos en este paso, regrese al directorio del proyecto de 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

Las tareas se construyen de forma secuencial: el usuario debe existir antes de asignar la propiedad, el directorio de informes debe existir antes de escribir el archivo de estado, y la tarea cron se ejecuta como ese mismo usuario.

ansible-playbook playbooks/users-files-cron.yml --syntax-check

Ejecutar el playbook de automatización de usuarios

En este paso, ejecutará el playbook e inspeccionará la cuenta, la propiedad de los archivos y la entrada de cron.

cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/users-files-cron.yml | tee reports/users-files-cron-run.txt

La primera ejecución debería crear el usuario, el directorio, el archivo de estado y la entrada de cron. Guardar la salida le ayuda a distinguir los cambios en la cuenta de los cambios en los archivos y el cron.

id rhce_ops

id confirma que la cuenta existe y tiene los IDs de usuario y grupo numéricos correspondientes.

sudo ls -ld /home/rhce_ops/reports && sudo ls -l /home/rhce_ops/reports/status.txt

El directorio y el archivo deben ser propiedad de rhce_ops. El archivo de estado debe tener el modo 0640, lo que otorga al propietario acceso de lectura/escritura y al grupo acceso de lectura.

sudo crontab -u rhce_ops -l

El crontab debe incluir la entrada con nombre "RHCE heartbeat" y el comando que añade fechas al archivo heartbeat.log.

Confirmar la convergencia del playbook

En este paso, volverá a ejecutar el playbook. La cuenta, los archivos y la entrada de cron ya coinciden con el estado deseado, por lo que no debería ser necesario realizar cambios.

cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/users-files-cron.yml | tee reports/users-files-cron-second.txt

La segunda ejecución debería informar changed=0 porque la cuenta, el estado del archivo y el crontab ya coinciden con las variables y las tareas definidas.

grep -E 'host.*changed=0' reports/users-files-cron-second.txt

Resumen

Ha automatizado la creación de un usuario desechable, la gestión de archivos, los permisos y una tarea cron, confirmando además que el playbook es idempotente.