Hemos mencionado variables en esta serie de Ansible y solo para refrescar tu mente un poco. Una variable, al igual que en muchos lenguajes de programación, es esencialmente una clave que representa un valor.
¿Qué constituye un Nombre de Variable Válido?
Un nombre de variable incluye letras, números, guiones bajos o una combinación de 2 o todos ellos. Sin embargo, tenga en cuenta que un nombre de variable siempre debe comenzar con una letra y no debe contener espacios.
Echemos un vistazo a algunos ejemplos de nombres de variables válidos e inaceptables:
Ejemplos de nombres de variables válidos:
football foot_ballfootball20 foot_ball20
Ejemplos de Nombres de Variable No válidos:
foot ball20 foot-ball
Vamos a discutir los tipos de variables:
Variables del libro de jugadas
Las variables del libro de jugadas son bastante fáciles y directas. Para definir una variable en un libro de jugadas, simplemente use la palabra clave vars antes de escribir sus variables con sangría.
Para acceder al valor de la variable, colóquela entre las llaves dobles encerradas entre comillas.
Este es un ejemplo de manual sencillo:
- hosts: all vars: greeting: Hello world! tasks: - name: Ansible Basic Variable Example debug: msg: "{{ greeting }}"
En el libro de jugadas anterior, la variable de saludo se sustituye por el valor Hello world! cuando se ejecute el libro de jugadas. El libro de jugadas simplemente imprime el mensaje Hello world! cuando sea ejecutado.
Además, puede tener una lista o una matriz de variables como se muestra:
El libro de jugadas a continuación muestra una variable llamada continentes. La variable contiene 5 valores diferentes: nombres de continentes. Se puede acceder fácilmente a cada uno de estos valores utilizando el índice 0 como primera variable.
El ejemplo del libro de jugadas a continuación recupera y muestra Asia (Índice 1).
La lista de variables puede estructurarse de manera similar como se muestra:
vars: Continents:
Para enumerar todos los elementos de la lista, utilice el módulo with_items. Esto recorrerá todos los valores de la matriz.
Otro tipo de variable Ansible es la variable diccionario.
Las variables de diccionario se admiten adicionalmente en el libro de jugadas. Para definir la variable de diccionario, simplemente identifique el par clave-valor justo debajo del nombre de la variable de diccionario.
hosts: switch_f01vars: http_port: 8080 default_gateway: 10.200.50.1 vlans: id: 10 port: 2
En el ejemplo anterior, las vlan son la variable de diccionario, mientras que id y port son los pares clave-valor.
Para port_id, dado que estamos comenzando el valor con texto y no con la variable, no es necesario que las comillas rodeen las llaves.
Variables especiales
Ansible proporciona una lista de variables predefinidas a las que se puede hacer referencia en plantillas y libros de jugadas de Jinja2, pero que el usuario no puede modificar ni definir.
Colectivamente, la lista de variables predefinidas de Ansible se conoce como datos Ansible y se recopilan cuando se ejecuta un libro de jugadas.
Para obtener una lista de todas las variables de Ansible, utilice el módulo de configuración del comando ad-hoc de Ansible como se muestra a continuación:
# ansible -m setup hostname
Esto muestra la salida en formato JSON como se muestra:
# ansible -m setup localhost
De la salida, podemos ver que algunos de los ejemplos de variables especiales de Ansible incluyen:
Hay muchas otras variables especiales de Ansible, estos son solo algunos ejemplos.
Estas variables se pueden usar en una plantilla Jinja2 como se muestra:
Variables de inventario
Por último, en la lista, tenemos variables de inventario Ansible. Un inventario es un archivo en formato INI que contiene todos los hosts a gestionar por Ansible.
En inventarios, puede asignar una variable a un sistema host y luego usarla en un libro de jugadas.
web_server_1 ansible_user=centos http_port=80web_server_2 ansible_user=ubuntu http_port=8080
Lo anterior se puede representar en un archivo YAML de playbook como se muestra:
--- web_servers: web_server_1: ansible_user=centos http_port=80web_server_2: ansible_user=ubuntu http_port=8080
Si los sistemas host comparten las mismas variables, puede definir otro grupo en el archivo de inventario para que sea menos engorroso y evitar repeticiones innecesarias.
Por ejemplo:
web_server_1 ansible_user=centos http_port=80web_server_2 ansible_user=centos http_port=80
Lo anterior se puede estructurar como:
web_server_1web_server_2ansible_user=centoshttp_port=80
Y en el archivo YAML del libro de jugadas, esto se definirá como se muestra:
--- web_servers: hosts: web_server_1: web_server_2: vars: ansible_user=centos http_port=80
Ansible Facts
Al ejecutar libros de jugadas, la primera tarea que realiza Ansible es la ejecución de la tarea de configuración. Estoy bastante seguro de que debe haber encontrado la salida:
TASK: *********
Ansible facts no son más que propiedades del sistema o información sobre nodos remotos a los que se ha conectado. Esta información incluye la arquitectura del sistema, la versión del sistema operativo, la información del BIOS, la fecha y hora del sistema, el tiempo de actividad del sistema, la dirección IP y la información de hardware, por mencionar solo algunas.
Para obtener información sobre cualquier sistema, simplemente use el módulo de configuración como se muestra en el comando a continuación:
# ansible -m setup hostname
Por ejemplo:
# ansible -m setup database_server
Esto imprime un gran conjunto de datos en formato JSON como se muestra:
Ansible facts es útil para ayudar a los administradores del sistema a realizar las operaciones, por ejemplo, dependiendo del sistema operativo, pueden saber qué paquetes de software deben instalarse y cómo deben configurarse, etc.
Hechos personalizados
¿También sabía que puede crear sus propios hechos personalizados que Ansible puede recopilar? Sí, puedes. Entonces, ¿cómo lo haces? Cambiemos de marcha y veamos cómo.
El primer paso es crear un/etc/ansible / facts.d directorio en el nodo administrado o remoto.
Dentro de este directorio, cree un archivo(s) con una extensión .fact
. Este(s) archivo (s) devolverá datos JSON cuando se ejecute el libro de jugadas en el nodo de control de Ansible, que incluye los otros datos que Ansible recupera después de ejecutar un libro de jugadas.
Aquí hay un ejemplo de un archivo de datos personalizado llamado date_time.hecho que recupera fecha y hora.
# mkdir -p /etc/ansible/facts.d# vim /etc/ansible/facts.d/date_time.fact
Agregue las siguientes líneas en él.
#!/bin/bashDATE=`date`echo "{\"date\" : \"${DATE}\"}"
Guarde y salga del archivo.
Ahora asigne los permisos de ejecución:
# chmod +x /etc/ansible/facts.d/date_time.fact
Ahora, creé un libro de jugadas en el nodo de control de Ansible llamado check_date.yml.
---- hosts: webservers tasks: - name: Get custom facts debug: msg: The custom fact is {{ansible_local.date_time}}
Añada el archivo fact a la variable ansible_local. ansible_local almacena todos los datos personalizados.
Ahora ejecute el libro de jugadas y observe cómo Ansible recupera la información guardada en el archivo de datos:
# ansible_playbook check_date.yml
Conclusión
Esto nos lleva al final de este tutorial sobre cómo trabajar con variables y hechos de Ansible.