Conceptos básicos de los playbooks de Ansible

AnsibleAnsibleBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás los conceptos básicos de los playbooks de Ansible. Los playbooks de Ansible son archivos YAML que describen un conjunto de tareas a ejecutar en hosts remotos. Son los componentes básicos para flujos de trabajo de automatización IT complejos. Crearás tu primer playbook, entenderás su estructura y aprenderás cómo ejecutarlo. Al final de este laboratorio, tendrás experiencia práctica en escribir y ejecutar playbooks de Ansible, lo cual servirá como base para un uso más avanzado de Ansible.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) ansible(("Ansible")) -.-> ansible/InventoryManagementGroup(["Inventory Management"]) ansible(("Ansible")) -.-> ansible/PlaybookEssentialsGroup(["Playbook Essentials"]) linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") linux/FileandDirectoryManagementGroup -.-> linux/mkdir("Directory Creating") ansible/InventoryManagementGroup -.-> ansible/host_variables("Set Host Variables") ansible/PlaybookEssentialsGroup -.-> ansible/playbook("Execute Playbook") subgraph Lab Skills linux/touch -.-> lab-390426{{"Conceptos básicos de los playbooks de Ansible"}} linux/mkdir -.-> lab-390426{{"Conceptos básicos de los playbooks de Ansible"}} ansible/host_variables -.-> lab-390426{{"Conceptos básicos de los playbooks de Ansible"}} ansible/playbook -.-> lab-390426{{"Conceptos básicos de los playbooks de Ansible"}} end

Creando tu primer playbook

Comencemos creando un simple playbook de Ansible que creará un directorio y un archivo en la máquina local. Esto te ayudará a entender la estructura básica de un playbook y cómo ejecutarlo.

Primero, creemos un nuevo archivo llamado first_playbook.yml en el directorio /home/labex/project:

nano /home/labex/project/first_playbook.yml

Este comando abre el editor de texto nano. Si no estás familiarizado con nano, no te preocupes; es un editor de texto sencillo. Puedes escribir directamente en él.

Ahora, agrega el siguiente contenido al archivo:

---
- name: My First Playbook
  hosts: localhost
  connection: local
  tasks:
    - name: Create a directory
      file:
        path: /home/labex/project/test_directory
        state: directory
        mode: "0755"

    - name: Create a file
      copy:
        content: "Hello from Ansible!"
        dest: /home/labex/project/test_directory/hello.txt

Desglosemos este playbook para entender cada parte:

  • El --- en la parte superior marca el inicio de un archivo YAML. YAML es el formato utilizado para los playbooks de Ansible.
  • name: My First Playbook es un nombre descriptivo para esta ejecución (play). Te ayuda a identificar lo que hace este playbook.
  • hosts: localhost especifica que este playbook se ejecutará en la máquina local. En un escenario del mundo real, podrías especificar hosts remotos aquí.
  • connection: local le dice a Ansible que ejecute el playbook localmente en lugar de usar SSH. Esto es útil para pruebas y para tareas que deben realizarse en el nodo de control de Ansible mismo.
  • tasks: va seguido de una lista de tareas a ejecutar. Cada tarea es una acción que quieres que Ansible realice.
  • Cada tarea tiene un name para su descripción. Esto te ayuda a entender lo que hace cada tarea y facilita la resolución de problemas.
  • Las tareas utilizan módulos de Ansible:
    • El módulo file se utiliza para crear el directorio.
    • El módulo copy se utiliza para crear un archivo con contenido específico.

No te preocupes si aún no entiendes todos los módulos. A medida que avances, aprenderás sobre muchos más módulos y sus usos.

Guarda y sale del editor. En nano, puedes hacer esto presionando Ctrl+X, luego Y, luego Enter.

Ahora, ejecutemos este playbook. En tu terminal, escribe:

ansible-playbook /home/labex/project/first_playbook.yml

Este comando le dice a Ansible que ejecute el playbook que acabamos de crear. Deberías ver una salida similar a esta:

PLAY [My First Playbook] ******************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Create a directory] ******************************************************
changed: [localhost]

TASK [Create a file] ***********************************************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost                  : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Esta salida muestra que Ansible ejecutó nuestras tareas con éxito. El estado "changed" indica que Ansible hizo cambios en el sistema (creó un directorio y un archivo).

Si quieres verificar los resultados manualmente, puedes usar estos comandos:

ls -l /home/labex/project/test_directory
cat /home/labex/project/test_directory/hello.txt

El primer comando debe mostrar el directorio que creamos, y el segundo debe mostrar el contenido del archivo que creamos.

Entendiendo la estructura de un playbook

Ahora que has creado y ejecutado tu primer playbook, profundicemos en su estructura. Comprender la estructura de un playbook es fundamental para escribir tareas de automatización más complejas en el futuro.

Los playbooks de Ansible se componen de una o más ejecuciones (plays), y cada ejecución consta de varios elementos clave. Editemos nuestro archivo first_playbook.yml para agregar comentarios que expliquen cada parte:

nano /home/labex/project/first_playbook.yml

Actualiza el contenido como se muestra a continuación:

---
## Playbook starts with three dashes
- name: My First Playbook ## Nombre de la ejecución (play)
  hosts: localhost ## Host(s) objetivo para esta ejecución
  connection: local ## Tipo de conexión (local en este caso)

  tasks: ## Lista de tareas a ejecutar
    - name: Create a directory ## Nombre de la primera tarea
      file: ## El módulo 'file' se utiliza para esta tarea
        path: /home/labex/project/test_directory ## Ruta del directorio a crear
        state: directory ## Estado deseado (crear el directorio)
        mode: "0755" ## Permisos para el directorio

    - name: Create a file ## Nombre de la segunda tarea
      copy: ## El módulo 'copy' se utiliza para esta tarea
        content: "Hello from Ansible!" ## Contenido a escribir en el archivo
        dest: /home/labex/project/test_directory/hello.txt ## Ruta de destino para el archivo

Guarda y sale del editor.

Esta versión comentada del playbook ayuda a entender la estructura y el propósito de cada elemento. Aquí hay algunos puntos clave a recordar:

  1. Un playbook puede contener múltiples ejecuciones (plays), cada una comenzando con un guión (-). En este caso, solo tenemos una ejecución.
  2. Cada ejecución tiene como objetivo hosts específicos y define una lista de tareas. El campo hosts especifica en qué máquinas se debe ejecutar la ejecución.
  3. Las tareas utilizan módulos de Ansible (como file y copy) para realizar acciones. Ansible tiene muchos módulos integrados para diversos fines.
  4. Cada tarea debe tener un nombre descriptivo. Esto ayuda a entender lo que hace la tarea y a solucionar problemas.
  5. La indentación es crucial en los archivos YAML. Asegúrate de que tu playbook esté correctamente indentado. Una indentación incorrecta puede causar errores al ejecutar el playbook.

El módulo file es versátil y se puede utilizar para crear, modificar o eliminar archivos y directorios. En nuestro caso, lo estamos utilizando para crear un directorio.

El módulo copy se utiliza para copiar archivos a ubicaciones remotas o, como en nuestro caso, para crear un nuevo archivo con contenido específico.

Comprender estas estructuras básicas te ayudará a medida que avances hacia la creación de playbooks más complejos en el futuro.

Agregando variables a los playbooks

Las variables hacen que tus playbooks sean más flexibles y reutilizables. Te permiten escribir playbooks que pueden adaptarse a diferentes escenarios sin necesidad de cambiar el playbook en sí. Modifiquemos nuestro playbook para utilizar variables.

Edita el archivo first_playbook.yml:

nano /home/labex/project/first_playbook.yml

Actualiza el contenido como se muestra a continuación:

---
- name: My First Playbook
  hosts: localhost
  connection: local
  vars:
    dir_path: /home/labex/project/test_directory
    file_content: "Hello from Ansible! The time is {{ ansible_date_time.iso8601 }}"

  tasks:
    - name: Create a directory
      file:
        path: "{{ dir_path }}"
        state: directory
        mode: "0755"

    - name: Create a file
      copy:
        content: "{{ file_content }}"
        dest: "{{ dir_path }}/hello.txt"

    - name: Display file content
      debug:
        msg: "The content of the file is: {{ file_content }}"

Desglosemos los cambios y los nuevos elementos en este playbook actualizado:

  1. Hemos agregado una sección vars para definir variables. Aquí es donde puedes establecer valores que utilizarás varias veces en tu playbook.

  2. dir_path y file_content ahora son variables. Podemos cambiar fácilmente estos valores en un solo lugar para afectar múltiples tareas.

  3. Estamos utilizando la sintaxis {{ }} para hacer referencia a variables. Esto le dice a Ansible que reemplace la variable con su valor.

  4. Hemos utilizado la variable integrada ansible_date_time.iso8601 de Ansible para incluir la marca de tiempo actual. Ansible proporciona muchas variables de este tipo que puedes utilizar en tus playbooks.

  5. Se ha agregado una nueva tarea que utiliza el módulo debug. El módulo debug es muy útil para mostrar información durante la ejecución del playbook, lo que puede ayudar a solucionar problemas.

El uso de variables hace que este playbook sea más flexible. Por ejemplo, si quisieras cambiar la ruta del directorio, solo necesitarías cambiarla en la sección vars, no en cada tarea.

Guarda y sale del editor.

Ahora, ejecutemos el playbook actualizado:

ansible-playbook /home/labex/project/first_playbook.yml

Deberías ver una salida que muestre las tareas en ejecución, incluyendo el mensaje de depuración que muestra el contenido del archivo con la marca de tiempo actual. La salida se verá algo así:

PLAY [My First Playbook] ******************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Create a directory] ******************************************************
ok: [localhost]

TASK [Create a file] ***********************************************************
changed: [localhost]

TASK [Display file content] ****************************************************
ok: [localhost] => {
    "msg": "The content of the file is: Hello from Ansible! The time is 2023-06-09T12:34:56Z"
}

PLAY RECAP *********************************************************************
localhost                  : ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

La marca de tiempo real será diferente cuando ejecutes el playbook.

Esto demuestra cómo las variables pueden hacer que tus playbooks sean más dinámicos. El contenido del archivo ahora incluye una marca de tiempo que será diferente cada vez que ejecutes el playbook.

Resumen

En este laboratorio, has aprendido los conceptos básicos de los playbooks de Ansible. Has pasado de crear tu primer playbook sencillo a entender su estructura y a utilizar variables para hacer que tus playbooks sean más dinámicos y reutilizables.

Principales aprendizajes de este laboratorio:

  1. Los playbooks de Ansible se escriben en formato YAML y describen un conjunto de tareas a ejecutar en hosts especificados.
  2. Un playbook se compone de una o más ejecuciones (plays), cada una de las cuales contiene una lista de tareas.
  3. Las tareas utilizan módulos de Ansible para realizar acciones en los hosts objetivo. En este laboratorio, utilizamos los módulos file, copy y debug.
  4. Las variables se pueden definir y utilizar en los playbooks para aumentar la flexibilidad y la reutilización. Se hacen referencia a ellas utilizando la sintaxis {{ }}.
  5. El módulo debug es útil para mostrar información durante la ejecución del playbook, lo que puede ayudar a solucionar problemas.
  6. La indentación adecuada es crucial en los archivos YAML y los playbooks de Ansible.

A medida que continúes tu viaje con Ansible, descubrirás que los playbooks son una herramienta poderosa para automatizar tareas IT complejas. Practica escribiendo playbooks para diversos escenarios para sentirte más cómodo con su estructura y capacidades. Intenta modificar los playbooks que creamos hoy: cambia la ruta del directorio, agrega más tareas o utiliza diferentes módulos.

En futuros laboratorios, aprenderás sobre características más avanzadas de los playbooks, como condicionales, bucles y roles, que te permitirán crear flujos de trabajo de automatización aún más poderosos y flexibles.

Recuerda, la clave para dominar Ansible es la práctica y la exploración. No temas experimentar con diferentes módulos y estructuras en tus playbooks. La documentación de Ansible es un recurso excelente mientras continúas aprendiendo y desarrollando tus habilidades.