AnsibleHackathon

Taller de Ansible - Teórico

¿Qué es Ansible?

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

Instalar Ansible

Necesito instalar en el nodo de control:

Instalar usando:

¿Qué Incluye?

YAML YAML Ain’t Markup Language - El lenguaje de Ansible

Explicación de los tipos de datos

Escalares

Colecciones

# lista de objetos
- nombre: desayuno
  alimentos:
    - huevos
    - pan
    - jugo
  comi_en_casa: true
- nombre: almuerzo
  alimentos:
    - carne
    - arroz
    - plátano
  comi_en_casa: false

Referencias

YAML Parser online https://yaml-online-parser.appspot.com/ YAML Standard 1.2 https://yaml.org/spec/1.2.2/

Playbooks - Estructura de un playbook

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
      # ...

Módulos - la inteligencia de Ansible

Los módulos están escritos en Python e implementan la complejidad y la inteligencia de Ansible.

###

=================

Tareas

Estructura

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'

Variables

Las variables pueden venir de muchos lados:

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: ""

Registrar valores de tareas y usarlos luego

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: ""

Loops y filtros

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.

Playbooks - Tour de la colección builtin y módulos notables