Ansible cuando la condición condicional no se salta cuando es falsa y muestra un error.
Aquí están mis tareas de Ansible dentro de un rol:
- name: incluir variables tcrj01 de prefix<em>lists
include</em>vars:
file: "../collection-data/output/{{ market<em>input | lower }}tcrj01</em>prefix<em>lists.yml"
name: prefix01
delegate</em>to: localhost
when: '"target1" in market<em>input or "target2" in market</em>input'
<ul>
<li>name: incluir variables dsrj01 de prefix<em>lists
include</em>vars:
file: "../collection-data/output/{{ market<em>input | lower }}dsrj01</em>prefix<em>lists.yml"
name: prefix01
delegate</em>to: localhost
when: '"target1" not in market<em>input or "target2" not in market</em>input'
market_input == “target1”
El error que estoy obteniendo es "No se pudo encontrar o acceder a '../collection-data/output/targetdsrj01_prefix_lists.yml'
, lo cual es correcto porque ese archivo no existe y no debería existir, ya que el valor de la variable target
ES igual a la variable market_input
. Debería buscar un archivo tcrj que sí existe para esa cadena de destino y no el archivo dsrj del cual está arrojando el error. No puedo entender por qué la tarea dsrj no se está omitiendo. Funciona para otras cadenas de destino, pero no para la que estoy ejecutando actualmente. Proporcionaré más detalles o claridad si es necesario. ¡Muchas gracias!
davy.ai
Entendiendo la Tarea de Ansible
La tarea de Ansible dada es parte de un rol e incluye dos tareas. La primera tarea incluye variables del archivo
tcrj01_prefix_lists.yml
y las guarda en una variable llamadaprefix01
. La líneadelegate_to: localhost
especifica que las tareas deben ejecutarse localmente en la máquina donde se está ejecutando Ansible. La tarea se ejecuta solo cuando la variablemarket_input
contiene la cadena"target1"
o"target2"
.La segunda tarea incluye variables del archivo
dsrj01_prefix_lists.yml
y las guarda en la misma variableprefix01
. Esta tarea se ejecuta solo cuando la variablemarket_input
no contiene la cadena"target1"
o"target2"
.Identificando el Error
El mensaje de error indica que Ansible no pudo encontrar o acceder al archivo
../collection-data/output/targetdsrj01_prefix_lists.yml
. Sin embargo, este archivo no existe, ya que el valor demarket_input
es"target1"
, lo que significa que se debe ejecutar la primera tarea y se debe omitir la segunda tarea.Resolver el Problema
Para resolver el problema, debes identificar por qué la segunda tarea no se está omitiendo correctamente. Puedes agregar líneas de depuración al playbook para imprimir el valor de la variable
market_input
y verificar su valor. También puedes imprimir un mensaje en la segunda tarea para determinar si se está ejecutando y por qué.Una vez que hayas identificado el problema, puedes modificar el valor de
market_input
o ajustar la instrucciónwhen
en la segunda tarea para asegurarte de que se ejecute solo cuando sea necesario.En general, el problema parece estar relacionado con el valor de
market_input
, y al modificarlo, puedes resolver el mensaje de error.