Leia isto em outros idiomas:
Inglês, Japonês, Português do Brasil, Francês, Espanhol.
Este exercício se baseia nos exercícios anteriores e avança suas habilidades no Ansible ao guiá-lo através da criação de um papel que configura o Apache (httpd). Você usará o conhecimento adquirido para agora integrar variáveis, manipuladores e um modelo para um index.html personalizado. Este papel demonstra como encapsular tarefas, variáveis, modelos e manipuladores em uma estrutura reutilizável para automação eficiente.
Papéis no Ansible organizam tarefas de automação relacionadas e recursos, como variáveis, modelos e manipuladores, em um diretório estruturado. Este exercício foca na criação de um papel de configuração do Apache, enfatizando a reutilização e modularidade.
Com base em nosso trabalho anterior com a configuração do Apache, vamos criar um playbook do Ansible dedicado a limpar nosso ambiente. Esta etapa prepara o caminho para introduzirmos um novo papel do Apache, fornecendo uma visão clara dos ajustes realizados. Por meio desse processo, ganharemos uma compreensão mais profunda da versatilidade e reutilização oferecidas pelos Papéis do Ansible.
Execute o seguinte playbook do Ansible para limpar o ambiente:
---
- name: Cleanup Environment
hosts: all
become: true
vars:
package_name: httpd
tasks:
- name: Remove Apache from web servers
ansible.builtin.dnf:
name: ""
state: absent
when: inventory_hostname in groups['web']
- name: Remove firewalld
ansible.builtin.dnf:
name: firewalld
state: absent
- name: Delete created users
ansible.builtin.user:
name: ""
state: absent
remove: true # Use 'remove: true’ to delete home directories
loop:
- alice
- bob
- carol
- Roger
- name: Reset MOTD to an empty message
ansible.builtin.copy:
dest: /etc/motd
content: ''
Desenvolveremos um papel chamado apache
para instalar, configurar e gerenciar o Apache.
Crie o papel usando o ansible-galaxy, especificando o diretório de papéis para saída.
[student@ansible-1 lab_inventory]$ mkdir roles
[student@ansible-1 lab_inventory]$ ansible-galaxy init --offline roles/apache
Preencha /home/student/lab_inventory/roles/apache/vars/main.yml
com variáveis específicas do Apache:
---
# vars file for roles/apache
apache_package_name: httpd
apache_service_name: httpd
Ajuste /home/student/lab_inventory/roles/apache/tasks/main.yml
para incluir tarefas para instalação e gerenciamento de serviço do Apache:
---
# tasks file for ansible-files/roles/apache
- name: Install Apache web server
ansible.builtin.package:
name: ""
state: present
- name: Ensure Apache is running and enabled
ansible.builtin.service:
name: ""
state: started
enabled: true
- name: Install firewalld
ansible.builtin.dnf:
name: firewalld
state: present
- name: Ensure firewalld is running
ansible.builtin.service:
name: firewalld
state: started
enabled: true
- name: Allow HTTPS traffic on web servers
ansible.posix.firewalld:
service: https
permanent: true
state: enabled
when: inventory_hostname in groups['web']
notify: Reload Firewall
Em /home/student/lab_inventory/roles/apache/handlers/main.yml
, crie um manipulador para reiniciar o firewalld se sua configuração mudar:
---
# handlers file for ansible-files/roles/apache
- name: Reload Firewall
ansible.builtin.service:
name: firewalld
state: reloaded
Use um modelo Jinja2 para um index.html
personalizado. Armazene o modelo em templates/index.html.j2
:
<html>
<head>
<title>Welcome to </title>
</head>
<body>
<h1>Hello from </h1>
</body>
</html>
tasks/main.yml
para implementar este modelo index.html
:- name: Deploy custom index.html
ansible.builtin.template:
src: index.html.j2
dest: /var/www/html/index.html
Incorpore o papel apache
em um playbook chamado deploy_apache.yml
dentro de /home/student/lab_inventory
para aplicá-lo aos seus hosts do grupo ‘web’ (node1, node2, node3).
- name: Setup Apache Web Servers
hosts: web
become: true
roles:
- apache
Execute seu playbook para configurar o Apache nos servidores web designados:
ansible-navigator run deploy_apache.yml -m stdout
PLAY [Setup Apache Web Servers] ************************************************
TASK [Gathering Facts] *********************************************************
ok: [node2]
ok: [node1]
ok: [node3]
TASK [apache : Install Apache web server] **************************************
changed: [node1]
changed: [node2]
changed: [node3]
TASK [apache : Ensure Apache is running and enabled] ***************************
changed: [node2]
changed: [node1]
changed: [node3]
TASK [apache : Deploy custom index.html] ***************************************
changed: [node1]
changed: [node2]
changed: [node3]
RUNNING HANDLER [apache : Reload Firewall] *************************************
ok: [node2]
ok: [node1]
ok: [node3]
PLAY RECAP *********************************************************************
node1 : ok=5 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node2 : ok=5 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node3 : ok=5 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Após a conclusão do playbook, verifique se o httpd
está realmente em execução em todos os nós web.
[rhel@control ~]$ ssh node1 "systemctl status httpd"
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2024-01-29 16:49:13 UTC; 3min 46s ago
[rhel@control ~]$ ssh node2 "systemctl status httpd"
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2024-01-29 16:49:13 UTC; 3min 58s ago
Uma vez verificado que o httpd
está em execução, verifique se o servidor web Apache está servindo o arquivo index.html
apropriado:
[student@ansible-1 lab_inventory]$ curl http://node1
<html>
<head>
<title>Welcome to node1</title>
</head>
<body>
<h1>Hello from node1</h1>
</body>
</html>
Navegação
Exercício anterior - Próximo exercício
Clique aqui para retornar ao workshop de Ansible para Red Hat Enterprise Linux