Guia Prático para Certificação RHCE: Automação com Ansible

0. Informações Críticas de Configuração

Dados do Sistema

Durante o exame, múltiplos sistemas virtuais serão utilizados. Não haverá acesso root ao sistema do desktop, mas acesso root completo será concedido aos sistemas virtuais.

Sistema Endereço IP Papel no Ansible
control (nó de controle) 172.25.250.254 Nó de controle Ansible
node1 (nó gerenciado) 172.25.250.9 Nó gerenciado Ansible
node2 (nó gerenciado) 172.25.250.10 Nó gerenciado Ansible
node3 (nó gerenciado) 172.25.250.11 Nó gerenciado Ansible
node4 (nó gerenciado) 172.25.250.12 Nó gerenciado Ansible
node5 (nó gerenciado) 172.25.250.13 Nó gerenciado Ansible

Esses endereços IP estão configurados estaticamente. Não os altere. A resolução de nomes de host está configurada para resolver tanto os nomes totalmente qualificados listados acima quanto os nomes curtos dos hosts (é possível pingar tanto pelo nome curto quanto pelo IP).

Nota: O control é o nó de controle; node1 a node5 são nós gerenciados. Todas as operações devem ser realizadas a partir do nó de controle. Durante o exame, os endereços IP podem ser substituídos por nomes de host – adapte-se à situação.

Informações de Conta

A senha root para todos os sistemas é flectrag. Não a modifique. Para conveniência, chaves SSH pré-instaladas permitem o acesso root via SSH sem senha. Não altere as configurações SSH do root.

A conta de usuário greg foi criada no nó de controle Ansible. Esta conta possui chaves SSH pré-instaladas, permitindo o login SSH entre o nó de controle e os nós gerenciados. Não altere as configurações SSH do usuário greg. Você pode acessar esta conta a partir do root usando o comando su.

Informação Importante: A menos que indicado de outra forma, todo o trabalho (incluindo playbooks, arquivos de configuração e inventários do Ansible) deve ser mantido no diretório /home/greg/ansible no nó de controle e pertencer ao usuário greg. Todos os comandos relacionados ao Ansible devem ser executados por este usuário a partir deste diretório.

Outras Informações

Alguns itens do exame podem exigir a modificação do inventário de hosts do Ansible. Você é responsável por garantir que todos os grupos e itens de inventário anteriores sejam preservados e coexistam com quaisquer outras alterações. O firewall nos sistemas do exame está desativado por padrão, enquanto o SELinux está em modo enforcing.

A documentação do produto está localizada em: http://materials/docs

Informação Importante: Antes da avaliação, seus nós gerenciados (node1 - node5) serão redefinidos para o estado inicial do exame. Seus playbooks serão executados a partir do diretório /home/greg/ansible no nó de controle como o usuário greg. Após a execução do playbook, seus nós gerenciados serão avaliados para verificar se foram configurados conforme o especificado.

1. Instalação e Configuração do Ansible

Instale e configure o Ansible no nó de controle control conforme descrito abaixo:

  • Instale os pacotes necessários.
  • Crie um arquivo de inventário estático chamado /home/greg/ansible/inventory que atenda aos seguintes requisitos:
    • node1 é membro do grupo dev.
    • node2 é membro do grupo test.
    • node3 e node4 são membros do grupo prod.
    • node5 é membro do grupo balancers.
    • O grupo prod é membro do grupo webservers.
  • Crie um arquivo de configuração chamado /home/greg/ansible/ansible.cfg que atenda aos seguintes requisitos:
    • O arquivo de inventário é /home/greg/ansible/inventory.
    • A localização dos papéis usados nos playbooks inclui /home/greg/ansible/roles.
# Instale o pacote ansible
sudo yum -y install ansible

# Crie o diretório de papéis
mkdir -p /home/greg/ansible/roles

# Edite o arquivo de inventário
cat > /home/greg/ansible/inventory << EOF
[dev]
node1

[test]
node2

[prod]
node3
node4

[balancers]
node5

[webservers:children]
prod
EOF

# Crie o arquivo de configuração ansible.cfg
cp -f /etc/ansible/ansible.cfg /home/greg/ansible/ansible.cfg

cat >> /home/greg/ansible/ansible.cfg << EOF
[defaults]
inventory = /home/greg/ansible/inventory
roles_path = /home/greg/ansible/roles:/usr/share/ansible/roles
host_key_checking = False
remote_user = greg

[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false
EOF

2. Criação e Execução de Comandos Ad-hoc do Ansible

Crie um script de shell chamado /home/greg/ansible/adhoc.sh que utilize comandos ad-hoc do Ansible para configurar repositórios yum em cada nó gerenciado:

Repositório 1:

  • Nome: EX294_BASE
  • Descrição: EX294 base software
  • Base URL: http://content/rhel8.0/x86_64/dvd/BaseOS
  • Verificação GPG: Habilitada
  • Chave GPG: http://content/rhel8.0/x86_64/dvd/RPM-GPG-KEY-redhat-release
  • Estado: Habilitado

Repositório 2:

  • Nome: EX294_STREAM
  • Descrição: EX294 stream software
  • Base URL: http://content/rhel8.0/x86_64/dvd/AppStream
  • Verificação GPG: Habilitada
  • Chave GPG: http://content/rhel8.0/x86_64/dvd/RPM-GPG-KEY-redhat-release
  • Estado: Habilitado
#!/bin/bash
ansible all -m yum_repository -a "name='EX294_BASE' \
        description='EX294 base software' \
        baseurl='http://content/rhel8.0/x86_64/dvd/BaseOS' \
        gpgcheck=yes \
        gpgkey='http://content/rhel8.0/x86_64/dvd/RPM-GPG-KEY-redhat-release' \
        enabled=yes"

ansible all -m yum_repository -a "name='EX294_STREAM' \
        description='EX294 stream software' \
        baseurl='http://content/rhel8.0/x86_64/dvd/AppStream' \
        gpgcheck=yes \
        gpgkey='http://content/rhel8.0/x86_64/dvd/RPM-GPG-KEY-redhat-release' \
        enabled=yes"

Torne o script executável: chmod +x /home/greg/ansible/adhoc.sh e execute-o.

3. Instalação de Pacotes com Playbooks

Crie um playbook chamado /home/greg/ansible/packages.yml:

  • Instale os pacotes php e mariadb nos hosts dos grupos dev, test e prod.
  • Instale o grupo de pacotes RPM Development Tools nos hosts do grupo dev.
  • Atualize todos os pacotes para a versão mais recente nos hosts do grupo dev.
---
- name: Instalar pacotes em dev, test e prod
  hosts: dev,test,prod
  tasks:
    - name: Garantir que php e mariadb estão instalados
      yum:
        name:
          - php
          - mariadb
        state: present

- name: Configurar ambiente de desenvolvimento em dev
  hosts: dev
  tasks:
    - name: Instalar grupo de ferramentas de desenvolvimento
      yum:
        name: "@RPM Development Tools"
        state: present

    - name: Atualizar todos os pacotes
      yum:
        name: "*"
        state: latest

4. Uso de Papéis de Sistema RHEL

Instale o pacote de papéis de sistema RHEL e crie um playbook chamado /home/greg/ansible/timesync.yml:

  • Execute em todos os nós gerenciados.
  • Utilize o papel timesync.
  • Configure o papel para usar o provedor NTP atualmente válido.
  • Configure o servidor de tempo como 172.25.254.254.
  • Habilite o parâmetro iburst.
# Instale os papéis de sistema
sudo yum -y install rhel-system-roles.noarch

# Edite o ansible.cfg para incluir o caminho dos papéis do sistema, se necessário.
# roles_path = /home/greg/ansible/roles:/usr/share/ansible/roles

# Crie o playbook
cat > /home/greg/ansible/timesync.yml << 'EOF'
---
- hosts: all
  vars:
    timesync_ntp_servers:
      - hostname: 172.25.254.254
        iburst: yes
  roles:
    - rhel-system-roles.timesync
EOF

Exercício Relacionado: Configuração do SELinux

Crie um playbook /home/greg/ansible/selinux.yml que use o papel selinux para garantir que o SELinux esteja no modo enforcing em todos os nós gerenciados.

cat > /home/greg/ansible/selinux.yml << 'EOF'
---
- hosts: all
  vars:
    selinux_state: enforcing
  roles:
    - rhel-system-roles.selinux
EOF

5. Instalação de Papéis com Ansible Galaxy

Utilize o Ansible Galaxy e um arquivo de requisitos /home/greg/ansible/roles/requirements.yml para baixar e instalar os seguintes papéis de URLs específicos no diretório /home/greg/ansible/roles:

  • http://materials/haproxy.tar, nomeando o papel como balancer.
  • http://materials/phpinfo.tar, nomeando o papel como phpinfo.
cat > /home/greg/ansible/roles/requirements.yml << EOF
---
- src: http://materials/haproxy.tar
  name: balancer

- src: http://materials/phpinfo.tar
  name: phpinfo
EOF

ansible-galaxy install -r /home/greg/ansible/roles/requirements.yml -p /home/greg/ansible/roles

6. Criação e Uso de Papéis Personalizados

Crie um papel chamado apache em /home/greg/ansible/roles com os seguintes requisitos:

  • O pacote httpd deve estar instalado, habilitado e em execução.
  • O firewall deve estar habilitado e em execução, com uma regra que permita o acesso ao servidor web.
  • Um arquivo de modelo index.html.j2 deve ser usado para criar o arquivo /var/www/html/index.html com a saída: Welcome to HOSTNAME on IPADDRESS.

Crie um playbook /home/greg/ansible/apache.yml que execute uma tarefa nos hosts do grupo webservers e utilize o papel apache.

# Inicialize a estrutura do papel
cd /home/greg/ansible/roles
ansible-galaxy init apache

# Edite as tarefas do papel: apache/tasks/main.yml
cat > apache/tasks/main.yml << 'EOF'
---
- name: Instalar httpd
  yum:
    name: httpd
    state: latest

- name: Iniciar e habilitar httpd
  service:
    name: httpd
    state: started
    enabled: yes

- name: Garantir que o firewalld está ativo
  service:
    name: firewalld
    state: started
    enabled: yes

- name: Permitir tráfego HTTP no firewall
  firewalld:
    service: http
    permanent: yes
    immediate: yes
    state: enabled

- name: Implantar página inicial a partir do modelo
  template:
    src: index.html.j2
    dest: /var/www/html/index.html
    setype: httpd_sys_content_t
EOF

# Crie o modelo: apache/templates/index.html.j2
echo 'Welcome to {{ ansible_fqdn }} on {{ ansible_default_ipv4.address }}' > apache/templates/index.html.j2

# Crie o playbook que utiliza o papel
cat > /home/greg/ansible/apache.yml << 'EOF'
---
- name: Configurar servidores web com papel apache
  hosts: webservers
  roles:
    - apache
EOF

7. Utilizando Papéis do Ansible Galaxy

Crie um playbook /home/greg/ansible/roles.yml que execute duas tarefas principais:

1. Equilíbrio de Carga: No grupo balancers, utilize o papel balancer para configurar um equilibrador de carga que distribua solicitações web entre os hosts do grupo webservers. Acessando http://IP_DO_BALANCER deve alternar a saída entre os diferentes servidores web.

2. Informações PHP: No grupo webservers, utilize o papel phpinfo. Acessando http://IP_DO_WEB/hello.php deve exibir uma mensagem como Hello PHP World from FQDN seguida das informações de configuração do PHP.

cat > /home/greg/ansible/roles.yml << 'EOF'
---
- name: Configurar equilibradores de carga
  hosts: balancers
  roles:
    - balancer

- name: Configurar servidores web com phpinfo
  hosts: webservers
  roles:
    - apache
    - phpinfo
EOF

8. Criação e Gerenciamento de Volumes Lógicos e Partições

8.1. Volumes Lógicos: Crie um playbook /home/greg/ansible/lv.yml que execute em todos os nós gerenciados para:

  • Criar um volume lógico de 1500 MiB chamado data no grupo de volumes research.
  • Formatar com o sistema de arquivos ext4.
  • Tratar erros: exibir mensagem se o tamanho não puder ser alocado (usar 800 MiB como alternativa) ou se o grupo de volumes não existir.
  • Não montar o volume lógico.
cat > /home/greg/ansible/lv.yml << 'EOF'
---
- name: Gerenciar volumes lógicos
  hosts: all
  tasks:
    - block:
        - name: Tentar criar volume lógico de 1500M
          lvol:
            vg: research
            lv: data
            size: 1500
        - name: Formatar volume
          filesystem:
            dev: /dev/research/data
            fstype: ext4
      rescue:
        - name: Falha por tamanho inválido
          debug:
            msg: "Não foi possível criar volume lógico com esse tamanho"
          when: ansible_lvm.vgs.research is defined
        - name: Tentar com tamanho menor
          lvol:
            vg: research
            lv: data
            size: 800
          when: ansible_lvm.vgs.research is defined
        - name: Formatar volume alternativo
          filesystem:
            dev: /dev/research/data
            fstype: ext4
          when: ansible_lvm.vgs.research is defined
        - name: Falha por grupo inexistente
          debug:
            msg: "Grupo de volumes não existe"
          when: ansible_lvm.vgs.research is not defined
EOF

8.2. Partições: Crie um playbook /home/greg/ansible/partition.yml que execute em todos os nós gerenciados para criar partições (exemplo com /dev/vdb), formatá-las e montá-las, tratando erros de tamanho ou disco inexistente.

9. Geração de Arquivos de Host e Outros Playbooks

9.1. Arquivo de Hosts: Baixe o modelo de http://materials/hosts.j2, complete-o para gerar um arquivo /etc/myhosts no formato de /etc/hosts contendo informações de todos os hosts gerenciados, e crie um playbook para aplicá-lo apenas ao grupo dev.

9.2. Modificação de Conteúdo: Crie um playbook /home/greg/ansible/issue.yml que modifique o arquivo /etc/issue em todos os hosts para exibir "Development", "Test" ou "Production", dependendo do grupo ao qual pertencem.

9.3. Diretório de Conteúdo Web: Crie um playbook /home/greg/ansible/webcontent.yml que, apenas no grupo dev, crie o diretório /webdev com permissões e proprietários específicos, crie um link simbólico de /var/www/html/webdev para ele, e crie um arquivo index.html com o conteúdo "Development".

9.4. Relatório de Hardware: Crie um playbook /home/greg/ansible/hwreport.yml que gere um arquivo /root/hwreport.txt em cada host com informações de hardware (nome do host, memória, BIOS, tamanho dos discos) usando variáveis de fatos do Ansible.

10. Gerenciamento de Segredos com Ansible Vault

10.1. Criação de Cofre: Crie um cofre Ansible /home/greg/ansible/locker.yml contendo as variáveis pw_developer e pw_manager. Defina uma senha de criptografia e armazene-a no arquivo /home/greg/ansible/secret.txt. Atualize ansible.cfg para apontar para este arquivo de senha.

10.2. Criação de Usuários: Baixe a lista de usuários de http://materials/user_list.yml. Crie um playbook /home/greg/ansible/users.yml que crie contas de usuário com base em sua função (desenvolvedor ou gerente), em seus respectivos hosts, usando as senhas do cofre criptografado e adicionando-os a grupos suplementares específicos.

10.3. Atualização de Chaves do Cofre: Baixe um cofre de exemplo de http://materials/salaries.yml. Use o comando ansible-vault rekey para alterar sua senha de criptografia de uma senha antiga para uma nova, mantendo-o criptografado.

Tags: Ansible RHEL Automação de Sistemas RHCE Playbooks

Publicado em 6-4 01:22 por Thomas