我正在尝试使用此处定义的“始终”和“阻止”功能 - https://docs.ansible.com/ansible/latest/user_guide/playbooks_blocks.html
我有一个如下所示的 main.yml 文件 -
- block:
- include: git_clone_and_combining.yml
run_once: yes
delegate_to: localhost
- include: combined_repo_push.yml
run_once: yes
delegate_to: localhost
- include: deploy_code.yml
always:
- include: resume_asg.yml
delegate_to: localhost
它按预期运行整个剧本,但“resume_asg.yml”脚本之前的
always
块似乎被忽略,因为它不会在失败时运行。游戏不支持这种块的使用吗?
编辑 - 向 Redhat 提出了有关此问题的票证,他们在此处打开了错误报告 - https://github.com/ansible/ansible/issues/72941。当指定
Always
参数时,block
和 run_once
在 main.yml 中似乎不起作用。
谢谢。
引用自包括
此模块仍将受支持一段时间,但我们正在考虑在不久的将来弃用它。
A:我可以使用 include 重现问题。要解决该问题,请使用 include_tasks。例如
shell> cat pb.yml
- hosts: localhost
tasks:
- block:
- include_tasks: test_fail.yml
run_once: true
always:
- include_tasks: tasks-always.yml
shell> cat test_fail.yml
- command: "{{ cmd|default('true') }}"
shell> cat tasks-always.yml
- debug:
msg: Always
给予(删节)
shell> ansible-playbook pb.yml
TASK [command] ****
changed: [localhost]
TASK [debug] ****
ok: [localhost] =>
msg: Always
shell> ansible-playbook pb.yml -e "cmd=false"
TASK [command] ****
fatal: [localhost]: FAILED! => changed=true
cmd:
- 'false'
delta: '0:00:00.003130'
end: '2020-12-11 21:29:26.481652'
msg: non-zero return code
rc: 1
start: '2020-12-11 21:29:26.478522'
stderr: ''
stderr_lines: <omitted>
stdout: ''
stdout_lines: <omitted>
TASK [debug] ****
ok: [localhost] =>
msg: Always
always部分按预期工作。
示例
shell> cat pb.yml
- hosts: localhost
tasks:
- block:
- command: "{{ cmd|default('true') }}"
always:
- debug:
msg: Always
shell> ansible-playbook pb.yml
PLAY [localhost] ****
TASK [command] ****
changed: [localhost]
TASK [debug] ****
ok: [localhost] =>
msg: Always
...
shell> ansible-playbook pb.yml -e "cmd=false"
PLAY [localhost] ****
TASK [command] ****
fatal: [localhost]: FAILED! => changed=true
cmd:
- 'false'
delta: '0:00:00.004007'
end: '2020-12-11 06:57:10.055177'
msg: non-zero return code
rc: 1
start: '2020-12-11 06:57:10.051170'
stderr: ''
stderr_lines: <omitted>
stdout: ''
stdout_lines: <omitted>
TASK [debug] ****
ok: [localhost] =>
msg: Always
...
包含的任务给出相同的结果
shell> cat pb.yml
- hosts: localhost
tasks:
- block:
- command: "{{ cmd|default('true') }}"
always:
- include: tasks-always.yml
shell> cat tasks-always.yml
- debug:
msg: Always
角色给出相同的结果
shell> cat pb.yml
- hosts: localhost
roles:
- test-01
shell> cat roles/test-01/tasks/main.yml
- block:
- command: "{{ cmd|default('true') }}"
always:
- include: tasks-always.yml
shell> cat roles/test-01/tasks/tasks-always.yml
- debug:
msg: Always