
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».
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
- y : Booleano y
- o : Booleano o
- 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: 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