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.


