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 rsaDistribución de claves SSH#
Copie la clave pública SSH en todos sus nodos de destino.
ssh-copy-id username@target_hostReemplace 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.3Inventario 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 pingEsto 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: presentEjecute el libro de jugadas con el comando ansible-playbook.
ansible-playbook -i my_inventory.ini my_first_playbook.ymlManual 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: startedRoles y guías basadas en roles#
Los roles le permiten organizar sus manuales en componentes reutilizables.
ansible-galaxy init web-serverEsto 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-serverVariables de rol#
En web-server/vars/main.yml, defina algunas variables.
http_port: 80
https_port: 443En 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
- curlPlantillas 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: trueSolució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 -vvvMódulo de depuración#
Utilice el módulo debug para imprimir variables.
---
- name: Debug Example
hosts: all
tasks:
- debug:
var: my_variableY 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.