![Cómo encontrar la clave de acceso de AWS](https://trspos.com/wp-content/uploads/encuentre-id-de-clave-de-acceso-en-aws-400x267.jpg)
Ansible When Conditional
![Ansible When Conditional](https://trspos.com/wp-content/uploads/condicionales-ansible-playbooks.jpg)
En la automatización de tareas, Ansible se ha convertido en una herramienta invaluable para los administradores de sistemas. Una de las funciones más útiles es cuando la condición "when" se utiliza en una tarea específica. Esta permite que se tomen decisiones en tiempo de ejecución en base a ciertos valores en las variables, lo que ofrece más flexibilidad y capacidad de personalización en la automatización.
¿Qué es la condición "when" en Ansible?
La condición "when" en Ansible es una función de Ansible Core, la cual permite que una tarea particular se ejecute en función de la condición definida en el playbook. Cuando se usa "when", Ansible evalúa una expresión y la tarea sólo se ejecuta si se cumple la condición.
Ejemplo de uso
Un ejemplo común de uso de "when" es cuando se necesita hacer una tarea solo si ciertas condiciones se cumplen. Por ejemplo, si necesitas instalar un paquete de software solo si está ausente, este es el procedimiento:
```yml
- name: Instalar el paquete foo
apt:
name: foo
state: present
when: ansible_facts['distribution'] == 'Ubuntu'
```
En este ejemplo, la tarea "apt" sólo se ejecutará si la distribución es Ubuntu. Si la distribución no es Ubuntu, se omitirá la tarea.
Operadores en las condiciones "when"
Ansible admite varios operadores para ayudar a crear condiciones. A continuación, se muestran algunos operadores comunes:
=
: igualdad!=
: desigualdador
: operador ORand
: operador AND
Ejemplo en el uso de operadores
```yml
- name: Mostrar mensaje de acuerdo con la distribución
debug:
msg: "Distibución es Ubuntu 16.04"
when: (ansible_distribution == "Ubuntu" and ansible_distribution_major_version == "16.04") or (ansible_distribution == "CentOS" and ansible_distribution_major_version == "7") or (ansible_distribution == "Debian" and ansible_distribution_major_version == "9")
```
En este ejemplo, se muestra un mensaje que muestra que la distribución es Ubuntu 16.04, CentOS 7 o Debian 9. La tarea se ejecutará si se cumple una de las tres condiciones definidas.
Diagnóstico de errores con condiciones "when"
Es posible que se presenten problemas de sintaxis cuando se usa la condición "when". La solución más efectiva es usar el comando --syntax-check
para comprobar si hay errores en la sintaxis. Si el comando muestra algún error, se puede identificar y corregir el problema.
Conclusión
La condición "when" es muy útil en Ansible, ya que permite que una tarea en particular se ejecute en función de una condición. Los operadores lógicos también son útiles para crear condiciones. Es importante verificar la sintaxis para evitar errores en la ejecución.
Preguntas frecuentes
¿Cuál es la diferencia entre "when" y "changed_when"?
La condición "when" se usa para especificar si se debe ejecutar una tarea en función de una expresión booleana, mientras que "changed_when" se usa para especificar si una tarea se debe marcar como "cambiada" aunque no haya producido cambios reales.
¿Cómo puedo hacer varias tareas para una misma condición?
Para hacer varias tareas para una misma condición, se puede utilizar el bloque "tasks" dentro de la tarea definida.
¿Cómo puedo utilizar "when" con un bloque completo de tareas?
Es posible usar "when" en un bloque completo de tareas. En ese caso, la tarea solo se ejecutará si se cumple la condición en cuestión.
¿Qué sucede si no se cumple la condición en la tarea "when"?
Si no se cumple la condición en una tarea "when", la tarea será ignorada y no formará parte de la ejecución del playbook.
Ejemplos de código
Un ejemplo simple del uso de la condición "when" se ilustra en el siguiente código:
```yml
---
- name: La tarea sólo se ejecuta en servidores de producción
hosts: produccion
become: yes
tasks:
- apt:
name: apache2
state: present
when: ansible_distribution == 'Ubuntu'
```
En este ejemplo, la tarea sólo se ejecuta en los servidores de producción que utilizan Ubuntu.
Otro ejemplo de código sería:
```yml
- name: Instalar nginx
sudo: true
apt:
name: nginx
state: present
when: ansible_distribution == 'Debian' or ansible_distribution == 'Ubuntu'
```
En este ejemplo, se instala nginx sólo si la distribución es Ubuntu o Debian.
Deja una respuesta