Automatiser les utilisateurs, les fichiers et les tâches planifiées

AnsibleBeginner
Pratiquer maintenant

Introduction

L'automatisation des utilisateurs et des tâches planifiées est une pratique courante dans les playbooks opérationnels. Ansible permet de créer des comptes, de gérer les droits sur les fichiers et d'installer des entrées cron en toute sécurité.

Dans ce laboratoire, vous allez créer un utilisateur de service temporaire, gérer un répertoire et un fichier de rapport, et installer une tâche cron pour cet utilisateur.

Créer un projet d'automatisation utilisateur

Dans cette étape, vous allez créer un projet pour gérer un utilisateur de service jetable nommé 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 configuration a supprimé tout compte rhce_ops précédent, donc la première exécution du playbook montrera le processus complet de création. Le compte est temporaire et distinct de l'utilisateur labex de LabEx.

Définir les variables de compte et de planification

Dans cette étape, vous allez définir des variables pour le compte de service, le répertoire de rapport et la planification cron. Avant d'exécuter les commandes de cette étape, retournez dans le répertoire du projet Ansible. Cela garantit la stabilité des commandes, même si LabEx exécute chaque étape séparément.

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

Ces variables décrivent la politique du compte et de la planification. L'utilisation de guillemets pour */15 est intentionnelle, car YAML peut traiter le caractère * de manière particulière ; les guillemets permettent de le conserver en tant que chaîne cron.

cat inventory/group_vars/managed.yml

Rédiger le playbook pour les utilisateurs et les fichiers

Dans cette étape, vous allez rédiger un playbook qui crée l'utilisateur, crée un répertoire dont il est propriétaire, écrit un fichier géré et installe une entrée cron. Avant d'exécuter les commandes de cette étape, retournez dans le répertoire du projet 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

Les tâches s'appuient les unes sur les autres : l'utilisateur doit exister avant que la propriété puisse être attribuée, le répertoire de rapport doit exister avant que le fichier de statut ne soit écrit, et la tâche cron s'exécute en tant que cet utilisateur.

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

Exécuter le playbook d'automatisation utilisateur

Dans cette étape, vous allez exécuter le playbook et inspecter le compte, la propriété des fichiers et l'entrée cron.

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

La première exécution doit créer l'utilisateur, le répertoire, le fichier de statut et l'entrée cron. Enregistrer la sortie vous aide à distinguer les modifications apportées au compte de celles apportées aux fichiers et au cron.

id rhce_ops

La commande id confirme que le compte existe et possède des identifiants utilisateur et groupe numériques.

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

Le répertoire et le fichier doivent appartenir à rhce_ops. Le fichier de statut doit utiliser le mode 0640, ce qui donne au propriétaire un accès en lecture/écriture et au groupe un accès en lecture.

sudo crontab -u rhce_ops -l

La crontab doit inclure l'entrée nommée "RHCE heartbeat" et la commande qui ajoute les dates au fichier heartbeat.log.

Confirmer la convergence du playbook

Dans cette étape, vous allez relancer le playbook. Le compte, les fichiers et l'entrée cron correspondent déjà à l'état souhaité, donc aucune modification ne devrait être nécessaire.

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

La deuxième exécution doit indiquer changed=0 car le compte, l'état du fichier et la crontab correspondent déjà aux variables et aux tâches.

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

Résumé

Vous avez automatisé la création d'un utilisateur jetable, la gestion des fichiers et des permissions, ainsi qu'une tâche cron, puis vous avez confirmé que le playbook est idempotent.