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.