Introdução
A automação real no RHEL geralmente combina a instalação de pacotes, o gerenciamento de serviços e as regras de firewall em um único playbook convergente.
Neste laboratório, você instalará o httpd, garantirá que ele esteja habilitado e em execução, permitirá o tráfego HTTP através do firewalld e comprovará que o playbook é idempotente.
Criar um Projeto de Automação de Serviços RHEL
Nesta etapa, você criará um projeto de host único para automatizar o estado de pacotes, serviços e firewall na VM RHEL 10.
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'
[web]
host ansible_connection=local
EOF
O playbook fará alterações reais no sistema RHEL local, portanto, este laboratório utiliza um alias de host local. Isso ainda permite que você pratique os módulos de pacote, serviço e firewall do Ansible por meio do direcionamento de inventário padrão.
Definir o Estado Desejado do Serviço Web
Nesta etapa, você armazenará o estado desejado em variáveis. Manter os nomes de pacotes, serviços e firewalls em variáveis torna o playbook mais fácil de ajustar. 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/web.yml <<'EOF'
web_package: httpd
web_service: httpd
firewall_service: http
EOF
Manter esses nomes em variáveis faz com que o playbook seja lido como uma política: instale este pacote, gerencie este serviço e permita este serviço do firewalld. Se você automatizar um serviço diferente mais tarde, a estrutura da tarefa poderá permanecer a mesma.
cat inventory/group_vars/web.yml
Escrever o Playbook de Pacotes, Serviços e Firewall
Nesta etapa, você escreverá um playbook com escalonamento de privilégios. Ele utiliza package, service e ansible.posix.firewalld para convergir a pilha web.
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/web-stack.yml <<'EOF'
---
- name: Configure a basic web stack
hosts: web
become: true
gather_facts: false
tasks:
- name: Install web package
ansible.builtin.package:
name: "{{ web_package }}"
state: present
- name: Ensure web service is enabled and running
ansible.builtin.service:
name: "{{ web_service }}"
state: started
enabled: true
- name: Allow web traffic through the firewall
ansible.posix.firewalld:
service: "{{ firewall_service }}"
permanent: true
immediate: true
state: enabled
EOF
As três tarefas convergem o estado relacionado do RHEL. O package garante que o RPM esteja instalado, o service garante que a unidade do systemd esteja em execução e habilitada, e o ansible.posix.firewalld abre o serviço HTTP de forma imediata e persistente.
ansible-playbook playbooks/web-stack.yml --syntax-check
Executar o Playbook da Pilha Web
Nesta etapa, você executará o playbook. A instalação de pacotes pode levar mais tempo do que laboratórios baseados apenas em arquivos, pois utiliza o gerenciador de pacotes do RHEL.
cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/web-stack.yml | tee reports/web-stack-first.txt
A primeira execução pode levar mais tempo enquanto o dnf instala o httpd. Leia o resumo após a conclusão e, em seguida, use as ferramentas do RHEL abaixo para confirmar o estado do sistema ativo, não apenas a saída do playbook.
rpm -q httpd
O comando rpm -q deve exibir o nome e a versão do pacote httpd instalado.
systemctl is-active httpd
O serviço deve informar active, o que confirma que o serviço web está em execução no momento.
sudo firewall-cmd --list-services | tr " " "
" | grep -Fx http
Isso verifica os serviços ativos do firewalld e procura exatamente por http. Abrir o firewall é um estado separado da instalação e inicialização do serviço.
Executar Novamente para Confirmar a Idempotência
Nesta etapa, você executará o mesmo playbook novamente. Uma vez que o pacote, o serviço e o firewall já estejam corretos, o resumo deve informar que não houve alterações.
cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/web-stack.yml | tee reports/web-stack-second.txt
A segunda execução deve ser mais rápida e não deve precisar reparar nada. Esta é a verificação de idempotência para o fluxo de trabalho combinado de pacote, serviço e firewall.
grep -E 'host.*changed=0' reports/web-stack-second.txt
Resumo
Você instalou um pacote, gerenciou um serviço, abriu o firewall, verificou o estado do sistema RHEL e comprovou que o playbook converge em uma segunda execução.


