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.