Automatizar Usuários, Arquivos e Tarefas Agendadas

AnsibleBeginner
Pratique Agora

Introdução

A automação de usuários e tarefas agendadas é uma prática comum em playbooks operacionais. O Ansible pode criar contas, gerenciar a propriedade de arquivos e instalar entradas de cron de forma segura.

Neste laboratório, você criará um usuário de serviço temporário, gerenciará um diretório e um arquivo de relatório e instalará um cron job para esse usuário.

Criar um Projeto de Automação de Usuário

Nesta etapa, você criará um projeto para gerenciar um usuário de serviço descartável chamado 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

A configuração removeu qualquer conta rhce_ops anterior, portanto, a primeira execução do playbook mostrará o caminho completo de criação. A conta é descartável e separada do usuário labex do LabEx.

Definir Variáveis de Conta e Agendamento

Nesta etapa, você definirá variáveis para a conta de serviço, o diretório de relatórios e o agendamento do cron. Antes de executar os comandos nesta etapa, retorne ao diretório do projeto Ansible. Isso mantém os comandos estáveis, mesmo quando o LabEx executa cada etapa separadamente.

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

Essas variáveis descrevem a política de conta e agendamento. O uso de aspas em */15 é intencional, pois o YAML pode tratar o * de forma especial; as aspas garantem que ele seja mantido como uma string de cron.

cat inventory/group_vars/managed.yml

Escrever o Playbook de Usuário e Arquivo

Nesta etapa, você escreverá um playbook que cria o usuário, cria um diretório com propriedade definida, escreve um arquivo gerenciado e instala uma entrada de cron. Antes de executar os comandos nesta etapa, retorne ao diretório do projeto Ansible. Isso mantém os comandos estáveis, mesmo quando o LabEx executa cada etapa separadamente.

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

As tarefas dependem umas das outras: o usuário deve existir antes que a propriedade possa ser atribuída, o diretório de relatórios deve existir antes que o arquivo de status seja gravado, e o cron job é executado como esse mesmo usuário.

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

Executar o Playbook de Automação de Usuário

Nesta etapa, você executará o playbook e inspecionará a conta, a propriedade do arquivo e a entrada de cron.

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

A primeira execução deve criar o usuário, o diretório, o arquivo de status e a entrada de cron. Salvar a saída ajuda a distinguir as alterações na conta das alterações nos arquivos e no cron.

id rhce_ops

O comando id confirma que a conta existe e possui IDs numéricos de usuário e grupo.

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

O diretório e o arquivo devem pertencer a rhce_ops. O arquivo de status deve usar o modo 0640, que concede ao proprietário permissão de leitura/gravação e ao grupo permissão de leitura.

sudo crontab -u rhce_ops -l

O crontab deve incluir a entrada nomeada de heartbeat e o comando que anexa datas ao arquivo heartbeat.log.

Confirmar a Convergência do Playbook

Nesta etapa, você executará o playbook novamente. A conta, os arquivos e a entrada de cron já correspondem ao estado desejado, portanto, nenhuma alteração deve ser necessária.

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

A segunda execução deve relatar changed=0, pois a conta, o estado do arquivo e o crontab já correspondem às variáveis e tarefas.

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

Resumo

Você automatizou um usuário descartável, arquivos de propriedade, permissões e um cron job, e confirmou que o playbook é idempotente.