我的 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)
另一个但可能不太优雅的解决方案是在结果上使用default
Jinja 过滤器,以防跳过。command
command
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 次 |
最近记录: |