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/inventoryque atenda aos seguintes requisitos:node1é membro do grupodev.node2é membro do grupotest.node3enode4são membros do grupoprod.node5é membro do grupobalancers.- O grupo
prodé membro do grupowebservers.
- Crie um arquivo de configuração chamado
/home/greg/ansible/ansible.cfgque 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.
- O arquivo de inventário é
# 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
phpemariadbnos hosts dos gruposdev,testeprod. - Instale o grupo de pacotes
RPM Development Toolsnos hosts do grupodev. - 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 comobalancer.http://materials/phpinfo.tar, nomeando o papel comophpinfo.
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
httpddeve 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.j2deve ser usado para criar o arquivo/var/www/html/index.htmlcom 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
datano grupo de volumesresearch. - 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.