Ansible &引用;什么时候;动态包含文件时条件不起作用

Ansible &引用;什么时候;动态包含文件时条件不起作用,ansible,ansible-playbook,Ansible,Ansible Playbook,我正在尝试根据ansible playbook中传递的参数动态地包含文件。为了验证参数,我在条件下检查它,但假设它对我不起作用。它的检查首先包括文件 playbook.yml:- --- - hosts: local user: roop gather_facts: no vars: {action: "",validAction: ["action1","action2","action3","action4"]} tasks: - name: validate

我正在尝试根据
ansible playbook
中传递的参数动态地包含
文件。为了验证参数,我在
条件下检查它,但假设它对我不起作用。它的检查首先包括文件

playbook.yml:-

---
- hosts: local
  user: roop
  gather_facts: no

  vars: {action: "",validAction: ["action1","action2","action3","action4"]}

  tasks:

    - name: validate action
      fail: msg="please make sure you pass valid action"
      when: action == "" or action not in validAction

    - include: "action/{{ action }}.yml"
      when: action !="" and action in validAction
这是两种情况:

1) 当未在参数中传递操作时

ansible-playbook playbook.yml 
错误:

ERROR: file not found: /path/to/action/.yml
ERROR: file not found: /path/to/action/action5.yml
预期输出:

Should be execute task 1 "Validate action" first.
2) 当行动是错误的

ansible-playbook playbook.yml -e "action=action5"
错误:

ERROR: file not found: /path/to/action/.yml
ERROR: file not found: /path/to/action/action5.yml
预期输出:

当用户传递的操作无效时,它应该签入task1
实体无效
。在第一个任务中,如果条件无效,则应中止执行


有什么处理这个案子的建议吗

看来ansible在运行函数之前对include进行了预检查,调用了函数
parse_yaml_from_file
,如果FS上没有文件,则会失败

作为一种解决方法,您可以使用以下代码,但您可能希望在Ansible github上将其作为功能请求报告

请在目录操作下创建一个dummy.yml,使下面的代码工作
触摸操作/dummy.yml

---
- hosts: all
  gather_facts: no

  vars: 

     action      : ""
     dummy       : "{{ action if action in validAction else 'dummy' }}"
     validAction : ["action1","action2","action3","action4"]

  tasks:
   - include: "action/{{dummy}}.yml"

谢谢!我将尝试您的解决方案。我的验证任务工作正常,但它不会改变虚拟变量的值。我的意思是说,每当该节设置动作变量{%set dummy=action%}时,它都包含
dummy.yml
。。。你移除了那个部分吗?我需要移除哪个部分?我使用的代码与您建议的相同。操作变量值没有更改。我已经通过在包含任务之前添加
-debug:var=dummy
进行了检查。它总是显示
dummy.yml
。当
action=action1
时,它应该包括
action1.yml
它的工作完美!!非常感谢你的支持。