我的 ansible 代码如下所示。问题是这只在我的库存有 dev、qa、perf 和 prod 服务器时才有效。例如,如果我的库存只有开发服务器,那么它就会失败。有什么办法可以避免这种失败吗?
我尝试将cmd_dev_out和更改cmd_qa_out为,cmd_out但这也没有帮助。
- 名称:执行
主办方:全部
任务:
- name: 针对 dev 执行
shell:一些命令
寄存器:cmd_dev_out
当:(服务器是开发者)
- 调试:msg =“{{cmd_dev_out}}”
- 名称:针对 qa 执行
shell:一些命令
注册:cmd_qa_out
当:(服务器是质量保证)
- 调试:msg =“{{cmd_qa_out}}”
......更多条件如下......
最好是在这里使用 a对上述命令block的执行和输出的打印进行逻辑分组。command
因为,如果没有命令运行,显然你不会得到任何结果。
这是一个使用的示例block
- name: Execute
hosts: all
tasks:
- block:
- name: Execute against dev
shell: 'echo "dev"'
register: cmd_dev_out
- debug:
msg: "{{ cmd_dev_out }}"
when: "'dev' in inventory_hostname"
- block:
- name: Execute against qa
shell: 'echo "qa"'
register: cmd_qa_out
- debug:
msg: "{{ cmd_qa_out }}"
when: "'qa' in inventory_hostname"
Run Code Online (Sandbox Code Playgroud)
请注意,这意味着条件when现在与 the 相关联block,并且当条件为假时, thecommand和 the将被跳过。debug
回顾示例:
PLAY [localhost] **************************************************
TASK [Execute against dev] ****************************************
skipping: [localhost]
TASK [debug] ******************************************************
skipping: [localhost]
TASK [Execute against qa] *****************************************
changed: [localhost]
TASK [debug] ******************************************************
ok: [localhost] =>
msg:
changed: true
cmd: echo "qa"
delta: '0:00:00.002641'
end: '2023-01-25 20:51:04.049532'
failed: false
msg: ''
rc: 0
start: '2023-01-25 20:51:04.046891'
stderr: ''
stderr_lines: []
stdout: qa
stdout_lines:
- qa
Run Code Online (Sandbox Code Playgroud)
另一个但可能不太优雅的解决方案是在结果上使用defaultJinja 过滤器,以防跳过。commandcommand
PLAY [localhost] **************************************************
TASK [Execute against dev] ****************************************
skipping: [localhost]
TASK [debug] ******************************************************
skipping: [localhost]
TASK [Execute against qa] *****************************************
changed: [localhost]
TASK [debug] ******************************************************
ok: [localhost] =>
msg:
changed: true
cmd: echo "qa"
delta: '0:00:00.002641'
end: '2023-01-25 20:51:04.049532'
failed: false
msg: ''
rc: 0
start: '2023-01-25 20:51:04.046891'
stderr: ''
stderr_lines: []
stdout: qa
stdout_lines:
- qa
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8800 次 |
| 最近记录: |