Ansible 块:“always”和“block”在 main.yml 中不起作用

问题描述 投票:0回答:1

我正在尝试使用此处定义的“始终”和“阻止”功能 - 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 中似乎不起作用。

谢谢。

ansible
1个回答
4
投票

引用自包括

此模块仍将受支持一段时间,但我们正在考虑在不久的将来弃用它。

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
© www.soinside.com 2019 - 2024. All rights reserved.