基于条件在ansible中传递Shell命令

基于条件在ansible中传递Shell命令,ansible,ansible-facts,Ansible,Ansible Facts,我对ansible很陌生,在这方面面临一些困难 根据ansible中的某些条件,我必须传递完整的shell命令 我试图设置事实,但无法执行shell并将错误作为未定义的变量 msg:“该任务包含一个带有未定义变量的选项。错误是:“要运行的命令”未定义\n\n - name: setting command for x set_fact: commands_to_run: ls -1d /filepath/* | grep app | grep -E "("

我对ansible很陌生,在这方面面临一些困难 根据ansible中的某些条件,我必须传递完整的shell命令 我试图设置事实,但无法执行shell并将错误作为未定义的变量

msg:“该任务包含一个带有未定义变量的选项。错误是:“要运行的命令”未定义\n\n

- name: setting command for x
    set_fact:
     commands_to_run: ls -1d /filepath/* | grep app | grep  -E "("{{ id }}".*){2}"
    when: id  == 'X'

  - name:setting command for Y
    set_fact:
     commands_to_run: ls -1d /filepath/* | grep app| grep -e "{{ id }}"
    when: id  != 'X'

  - name: list path
    shell: "{{ commands_to_run }}"
    register: path
需要根据条件执行的Shell命令完全不同。 请让我知道是否可以通过其他方式完成

ansible剧本2.4.2.0


提前感谢

修复您的代码标识,以下示例有效:

文件site.yml

---
-主机:本地主机
连接:本地
收集事实:错误
任务:
-名称:X的设置命令
设定事实:
命令\u到\u运行:“echo Case X”
当:id='X'
-名称:Y的设置命令
设定事实:
命令\u至\u运行:“回显案例Y”
当:id!='X'
-名称:调用命令
shell“{{命令{u到}}”
寄存器:路径
呼叫案例X:ansible playbook site.yml-e id=X-v 呼叫案例Y:ansible playbook site.yml-e id=Y-v

如果案例Y必须作为默认案例调用,则可以设置默认值:

-hosts:localhost
连接:本地
收集事实:错误
任务:
-名称:Y的设置命令
设定事实:
命令\u至\u运行:“回显案例Y”
-名称:X的设置命令
设定事实:
命令\u到\u运行:“echo Case X”
当:id='X'
-名称:调用命令
shell“{{命令{u到}}”
寄存器:路径
如果无法定义
id
,请使用默认值:

-hosts:localhost
连接:本地
收集事实:错误
任务:
-名称:Y的设置命令
设定事实:
命令\u至\u运行:“回显案例Y”
-名称:X的设置命令
设定事实:
命令\u到\u运行:“echo Case X”
当:id | default('Y')=='X'
-名称:调用命令
shell“{{命令{u到}}”
寄存器:路径

set\u fact任务上的缩进修复后,它应该可以工作。请参阅上的示例。您的剧本不尊重yaml和/或ansible语法。请注意缩进和新行。您还应该通读以学习基本概念和语法。您可以在发布之前验证您的剧本。