Tutoriales

Cómo definir múltiples condiciones when en Ansible

S.A veces, necesitamos evaluar múltiples condiciones de cuándo en los libros de jugadas de Ansible. Veamos cómo definir múltiples condiciones when en Ansible para una sola tarea.

Esta página explica cómo definir múltiples condiciones when en Ansible. Los ejemplos también muestran cómo utilizar la herramienta de automatización de TI de Ansible para realizar un «O» o «Y» lógico en su escritorio macOS, Linux o Unix.

Detalles de las instrucciones
Nivel de dificultad Sencillo
Derechos de root No
requisitos Ansible
Horario de verano europeo. Tiempo de leer 2 minutos

sintaxis

En este ejemplo a continuación, estoy agregando varias condiciones cuando para una tarea de Ansible en nuestros libros de jugadas. Los siguientes criterios explican la sintaxis correcta para las condiciones lógicas «O» y «Y».
Cómo definir múltiples condiciones when en Ansible

Ejemplo simple de una condición de «cuándo»

Usamos la instrucción when para una sola tarea. La sintaxis en su libro de jugadas es la siguiente:

tasks:
  - name: Let us update box when OS is Debian
    apt:
      update_cache: yes
      cache_valid_time: 3600
      upgrade: dist
    when: ansible_distribution == "Debian"

También podemos usar hechos ansible junto con la condición when:

tasks:
  - name: Reboot Ubuntu systems
    ansible.builtin.command: /sbin/shutdown -r now
    when: ansible_facts['os_family'] == "Ubuntu"

Verifica múltiples condiciones usando «when» en Ansible

Podemos definir varias condiciones como: B. reinicie el cuadro si el sistema operativo es Debian o Ubuntu, pero omita todos los demás sistemas operativos con una lógica de la siguiente manera O con Si Cláusula de la siguiente manera:

tasks:
  - name: Reboot Debian or Ubuntu Linux box
    ansible.builtin.command: /sbin/shutdown -r now
    when: (ansible_distribution == "Debian" ) or (ansible_distribution == "Ubuntu")

Operadores lógicos en Jinja2

  1. y : Booleano y
  2. o : Booleano o
  3. No : Negación booleana

Por ejemplo:

# run when os is debian and nginx version 1.8.0 not found 
- hosts: webservers

- shell: /sbin/nginx -v 2>&1
  register: currentNginxVersion

  roles:
     - role: debian_config
       when: (ansible_facts['os_family'] == 'Debian') and ('"nginx/1.8.0" not in currentNginxVersion.stdout')

Definir múltiples condiciones if en Ansible

Veamos un ejemplo de una lógica Y. Quiero reiniciar el sistema Debian o Ubuntu Linux después de la actualización del kernel y el nombre de host del inventario debe ser Servidor proxy de AWS. Si ambas condiciones son verdaderas, emita el comando de reinicio con el módulo de reinicio de Ansible. De lo contrario, omita la opción de reinicio.

Paso 1: crea una nueva variable «reboot_file»

      - name: Check if a reboot is needed on all Ubuntu/Debian based servers
        register: reboot_file
        stat: path=/var/run/reboot-required get_md5=no

Paso 2: crear una condición If múltiple de Ansible

      - name: Reboot the box if kernel updated and hostname == aws-proxy-server
        reboot:
          msg: "Reboot initiated by Ansible for kernel updates"
          connect_timeout: 5
          reboot_timeout: 300
          pre_reboot_delay: 0
          post_reboot_delay: 30
          test_command: uptime
        when: (reboot_file.stat.exists) and (inventory_hostname == 'aws-proxy-server')

Paso 3 – Pruébalo

Hazlo asi:

ansible-playbook -i hosts aws.yaml
ansible-playbook -i hosts  --ask-vault-pass --extra-vars '@private.data.yml' aws.yaml

Resumir

Espero que estos simples ejemplos le ayuden con el «O» o «Y» lógicos en las condiciones de Ansible. Consulte la documentación de Ansible para obtener más información.


PUBLICIDAD


Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba