Dominar Ansible: un tutorial paso a paso

Nos sumergiremos directamente en los conceptos y componentes básicos que le ayudarán a dominar Ansible. Este tutorial asume que ya ha instalado Ansible en su sistema y tiene un conocimiento básico de qué es Ansible.

Configuración del entorno#

Generación de claves SSH#

Si aún no lo ha hecho, genere un par de claves SSH en su nodo de control de Ansible.

ssh-keygen -t rsa

Distribución de claves SSH#

Copie la clave pública SSH en todos sus nodos de destino.

ssh-copy-id username@target_host

Reemplace username con el usuario apropiado y target_host con la dirección IP o el nombre de host del nodo de destino.

Archivos de inventario#

Inventario simple#

Cree un archivo de inventario simple con la extensión .ini.

# my_inventory.ini
[web]
192.168.1.2

[db]
192.168.1.3

Inventario dinámico#

También puede utilizar secuencias de comandos de inventario dinámico. Ansible admite scripts que generan JSON.

#!/usr/bin/python
import json
inventory = {
  "web": ["192.168.1.2"],
  "db": ["192.168.1.3"]
}
print(json.dumps(inventory))

Comandos ad hoc#

Ejecute comandos directamente en sus nodos.

ansible web -i my_inventory.ini -m ping

Esto ejecutará el módulo ping en todos los nodos del grupo [web] en my_inventory.ini.

Escribir manuales de estrategias#

Tu primer libro de jugadas#

Cree un archivo YAML llamado my_first_playbook.yml.

---
- name: My First Playbook
  hosts: web
  tasks:
    - name: Install Nginx
      apt:
        name: nginx
        state: present

Ejecute el libro de jugadas con el comando ansible-playbook.

ansible-playbook -i my_inventory.ini my_first_playbook.yml

Manual de estrategias multitarea#

Puedes tener varias tareas en un libro de jugadas.

---
- name: Web Server Setup
  hosts: web
  tasks:
    - name: Install Nginx
      apt:
        name: nginx
        state: present
    - name: Start Nginx Service
      service:
        name: nginx
        state: started

Roles y guías basadas en roles#

Los roles le permiten organizar sus manuales en componentes reutilizables.

ansible-galaxy init web-server

Esto generará un directorio de funciones web-server con varios subdirectorios (tasks, vars, templates, etc.).

Uso de roles en Playbook#

---
- name: Web Server Role-based Playbook
  hosts: web
  roles:
    - web-server

Variables de rol#

En web-server/vars/main.yml, defina algunas variables.

http_port: 80
https_port: 443

En web-server/tasks/main.yml, use esas variables.

---
- name: Configure Nginx
  template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
  vars:
    http_port: "{{ http_port }}"
    https_port: "{{ https_port }}"

Variables y hechos#

Variables del libro de jugadas#

Defina variables en sus libros de jugadas.

---
- name: Variable Example
  hosts: web
  vars:
    my_variable: "Hello, World!"

Recopilación de hechos#

Ansible puede recopilar datos (información del sistema) sobre los nodos de destino.

---
- name: Gather Facts
  hosts: all
  tasks:
    - setup:

Condicionales y bucles#

Condicionales#

Ejecutar tareas de forma condicional.

---
- name: Conditional Playbook
  hosts: all
  tasks:
    - name: Install Apache if system is Ubuntu
      apt:
        name: apache2
        state: present
      when: ansible_facts[''os_family''] == "Debian"

Bucles#

Ejecutar tareas en un bucle.

---
- name: Loop Example
  hosts: all
  tasks:
    - name: Install multiple packages
      apt:
        name: "{{ item }}"
        state: present
      loop:
        - git
        - vim
        - curl

Plantillas y archivos#

Conceptos básicos de la plantilla#

Ansible usa Jinja2 para crear plantillas. Cree un archivo de plantilla con la extensión .j2.

# my_template.j2
Hello, {{ my_variable }}!

Uso de plantillas en tareas#

---
- name: Template Example
  hosts: web
  tasks:
    - name: Deploy template
      template:
        src: my_template.j2
        dest: /tmp/my_template.txt
  vars:
    my_variable: "World"

Conceptos avanzados#

Etiquetas#

Utilice etiquetas para ejecutar tareas específicas de forma selectiva.

---
- name: Tag Example
  hosts: all
  tasks:
    - name: Install Nginx
      apt:
        name: nginx
        state: present
      tags: ["web"]

Ejecute solo las tareas etiquetadas.

ansible-playbook -i my_inventory.ini my_playbook.yml --tags "web'

Manejo de errores#

Agregue manejo de errores a sus manuales.

---
- name: Error Handling Example
  hosts: all
  tasks:
    - name: Attempt to install package
      apt:
        name: some-nonexistent-package
        state: present
      ignore_errors: true

Solución de problemas y depuración#

Salida detallada#

Ejecute comandos de Ansible con -vvv para obtener resultados detallados.

ansible-playbook -i my_inventory.ini my_playbook.yml -vvv

Módulo de depuración#

Utilice el módulo debug para imprimir variables.

---
- name: Debug Example
  hosts: all
  tasks:
    - debug:
        var: my_variable

Y eso concluye nuestro tutorial en profundidad sobre cómo dominar Ansible. Esperamos que esta guía le haya ayudado a navegar por los diversos componentes y complejidades de Ansible, permitiéndole administrar y automatizar su infraestructura con facilidad.