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.


