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
它的工作完美!!非常感谢你的支持。