Ansible es un motor de automatización de TI de código abierto que automatiza el aprovisionamiento, la gestión de la configuración, la implementación de aplicaciones, la orquestación y muchos otros procesos de TI. Es de uso gratuito y el proyecto se beneficia de la experiencia y la inteligencia de sus miles de contribuyentes.
Red Hat® Ansible Automation Platform combina más de una docena de proyectos upstream en una plataforma empresarial unificada y con seguridad reforzada para la automatización de misión crítica. Se basa en la base del proyecto de código abierto para crear una experiencia de automatización de un extremo a otro para equipos multifuncionales.
https://www.ansible.com/
En Ansible existe un nodo de control y uno o más nodos manejados
Necesito instalar en el nodo de control:
Instalar usando:
sudo apt install ansible
o sudo dnf install ansible-core
pip3 install ansible
ansible
ansible-playbook
ansible-inventory
ansible-galaxy
ansible.builtin.*
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/index.htmlExplicación de los tipos de datos
1, 10, 3.1416, 2.5E10
así
"así"
'así'
incluyendo espacios dentro de las palabras
true, false
polar bears: polo norte
penguins: polo sur
neo: 1
trinity: 3
1: one
2: two
# lista de objetos
- nombre: desayuno
alimentos:
- huevos
- pan
- jugo
comi_en_casa: true
- nombre: almuerzo
alimentos:
- carne
- arroz
- plátano
comi_en_casa: false
YAML Parser online https://yaml-online-parser.appspot.com/ YAML Standard 1.2 https://yaml.org/spec/1.2.2/
Los playbooks de Ansible son datos especiales en YAML/YML: una lista de plays. Un play es un dictionary/mapping/hash especial.
- name: El nombre del playbook
hosts: # una descripción de los nodos manejados
become: # true o false, para decidir si correr todo como root
vars: # variables que puedo agregar
tasks:
- name: Una tarea
# ...
- name: Segunda tarea
# ...
Los módulos están escritos en Python e implementan la complejidad y la inteligencia de Ansible.
###
=================
Las tareas tienen:
- name: Nombre de la tarea
# nombre del módulo
ansible.builtin.user:
# Parámetros
user: minombredeusuario
state: present
# Al nivel de la tarea, modificadores
delegate_to: localhost
loop:
- 1
- 2
- 3
when: ambiente == 'development'
Las variables pueden venir de muchos lados:
ansible_playbook
ansible localhost -m setup
https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_variables.html
Para usar su valor, usamos jinja con esta sintaxis:
- name: Usamos variables por primera vez
hosts: all
# Definimos algunas variables para el playbook
vars:
ambiente: development
un_numero: 100
tasks:
- name: Muestra las variables que definimos
ansible.builtin.debug:
msg: "Mi ambiente es y el numero definido es "
- name: Muestra la version de S.O.
ansible.builtin.debug:
msg: ""
- name: Puede ser un objeto complejo, como la info del tiempo
ansible.builtin.debug:
msg: ""
Ansible escribe lo mínimo necesario a pantalla, recuerda que podemos estar automatizando 20 o 100 equipos. Puedes grabar el resultado de una tarea y luego mostrarlo o tomar decisiones con esta información. https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_variables.html
- name: Registrar valores y usarlos
hosts: all
tasks:
- name: Averigua el tiempo que lleva corriendo el server
ansible.builtin.command:
cmd: uptime
register: salida_uptime
- name: Muestra el resultado de toda la tarea
ansible.builtin.debug:
msg: ""
Podemos correr las mismas tareas muchas veces, haciendo loops de distintas formas. https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_loops.html
- name: Podemos repetir la misma tarea para un conjunto de elementos
hosts: all
become: true
tasks:
- name: Crea un usuario
ansible.builtin.user:
name: ansible_user
state: present
- name: Crea varios usuarios
ansible.builtin.user:
name: ""
state: present
loop:
- jose
- maria
- jesus
- name: Usa un filtro para crear tu lista
ansible.builtin.user:
name: "user_"
state: present
loop: ""
| :exclamation: ¿Cómo le darían un password a cada usuario? | |————————————————————–|
Los filtros son parte de jinja y nos permiten transformar datos, generarlos, darles formato, etc.