Automatizar Pacotes, Serviços e Firewalls

AnsibleBeginner
Pratique Agora

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.