1. ホーム
  2. ansible

[解決済み] Ansible Blocksです。main.yml で "always" と "block" が動作しない。

2022-02-10 02:43:14

質問

ここで定義されている "always" と "block" の機能を使おうとしています。 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

予想通りプレイブックを実行しましたが always の前にあるブロックは、失敗時に実行されないため、無視されるようです。 このようなブロックの使用は、playではサポートされていないのでしょうか?

EDIT - この件に関してRedhatにチケットを提出したところ、ここにバグレポートが作成されました。 https://github.com/ansible/ansible/issues/72941 . Alwaysblock を指定した場合、main.ymlでは動作しないようです。 run_once 引数が指定されています。

ありがとうございます。

解決方法は?

引用元 含む

このモジュールはまだしばらくサポートされますが、近い将来、非推奨にすることを検討しています。

A:で再現できます。 インクルード . この問題を解決するには インクルードタスク . 例えば

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


常に セクションは期待通りに動作します。

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