En este paso, escribirá su primer Ansible Playbook. Un playbook es un archivo escrito en formato YAML que describe un conjunto de tareas a ejecutar en sus hosts administrados. Creará un playbook que instala el servidor web Apache (httpd) y levanta su servicio en la máquina localhost definida en su inventario.
-
Primero, utilice el editor de texto nano para crear un nuevo archivo llamado apache.yml. Este archivo contendrá su playbook.
nano apache.yml
-
Dentro del editor nano, definirá un "play". Un play es la unidad central de un playbook y mapea un grupo de hosts a un conjunto de tareas. Agregue el siguiente contenido a apache.yml.
---: Este es un marcador estándar de YAML que indica el inicio de un documento.
- name: ...: Este es el comienzo de su play. Darle un nombre descriptivo es una buena práctica.
hosts: webservers: Esto le dice a Ansible que ejecute este play en todos los hosts del grupo webservers de su archivo de inventario.
become: true: Esto instruye a Ansible a usar la escalada de privilegios (como sudo) para ejecutar las tareas. Esto es necesario para acciones como instalar software o administrar servicios.
tasks:: Esta palabra clave inicia la lista de tareas a realizar.
---
- name: Install and start Apache web server
hosts: webservers
become: true
tasks:
-
Ahora, agregue las tareas a su playbook. Cada tarea es una acción única que llama a un módulo de Ansible. La indentación es crítica en YAML, así que asegúrese de que las tareas estén correctamente indentadas debajo de la sección tasks:.
- Tarea 1: Instalar httpd. Esta tarea utiliza el módulo
ansible.builtin.dnf para asegurar que el paquete httpd esté instalado. El parámetro state: present significa que Ansible instalará el paquete si falta, y no hará nada si ya está instalado.
- Tarea 2: Levantar el servicio httpd. Esta tarea utiliza el módulo
ansible.builtin.service. state: started asegura que el servicio esté en ejecución, y enabled: true asegura que se iniciará automáticamente al arrancar el sistema.
Agregue las siguientes tareas a su archivo apache.yml, directamente debajo de la línea tasks::
- name: Install httpd package
ansible.builtin.dnf:
name: httpd
state: present
- name: Start and enable httpd service
ansible.builtin.service:
name: httpd
state: started
enabled: true
-
Su playbook apache.yml completo debería verse ahora así. Verifique cuidadosamente la indentación.
---
- name: Install and start Apache web server
hosts: webservers
become: true
tasks:
- name: Install httpd package
ansible.builtin.dnf:
name: httpd
state: present
- name: Start and enable httpd service
ansible.builtin.service:
name: httpd
state: started
enabled: true
Guarde el archivo y salga de nano (Ctrl+O, Enter, Ctrl+X).
-
Antes de ejecutar su playbook, es una buena práctica verificar su sintaxis usando el comando ansible-playbook con la bandera --syntax-check.
ansible-playbook --syntax-check apache.yml
Si la sintaxis es correcta, el comando imprimirá el nombre del archivo del playbook sin errores.
playbook: apache.yml
-
Ahora, ejecute el playbook.
ansible-playbook apache.yml
Ansible ejecutará las tareas. Dado que esta es la primera ejecución, verá el estado changed para ambas tareas, lo que indica que el estado del sistema fue modificado.
PLAY [Install and start Apache web server] *************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Install httpd package] ***************************************************
changed: [localhost]
TASK [Start and enable httpd service] ******************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
-
Finalmente, verifique que el servidor web Apache esté en ejecución usando curl para solicitar la página web predeterminada desde localhost.
curl http://localhost
Debería ver la Página de Prueba Predeterminada de Apache, lo que confirma que su playbook funcionó correctamente.
<html>
<head>
<title>Test Page</title>
</head>
<body>
<h1>Test Page</h1>
<p>This is the default test page for the Apache HTTP server.</p>
</body>
</html>