基于条件在ansible中传递Shell命令
我对ansible很陌生,在这方面面临一些困难 根据ansible中的某些条件,我必须传递完整的shell命令 我试图设置事实,但无法执行shell并将错误作为未定义的变量 msg:“该任务包含一个带有未定义变量的选项。错误是:“要运行的命令”未定义\n\n基于条件在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 "("
- 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语法。请注意缩进和新行。您还应该通读以学习基本概念和语法。您可以在发布之前验证您的剧本。