如何仅根据条件通知 Ansible 中的处理程序?

fbi*_*nel 14 notify conditional-statements ansible

我想通过执行以下操作来通知担任我角色的处理程序:

- name: Notify handler
  notify: my_handler
  when: this_thing_is_true|bool
Run Code Online (Sandbox Code Playgroud)

但 Ansible 只是抱怨:

错误!任务中未检测到模块/操作。

我尝试过各种楔子,例如:

- name: Notify handler
  meta: noop
  notify: my_handler
  when: this_thing_is_true|bool
Run Code Online (Sandbox Code Playgroud)

但同样的抱怨是:

[警告]:有条件时不支持 noop 任务

有什么建议么?

lon*_*nix 14

@\xce\xb2.\xce\xb5\xce\xb7\xce\xbf\xce\xb9\xcf\x84.\xce\xb2\xce\xb5 显示了一个更喜欢的解决方案,但debug我认为 的输出更assert干净。

\n

debug代码:

\n
- name: with debug\n  debug: msg=\'\'\n  changed_when: true\n  when: something is changed\n  notify: \'do stuff\'\n
Run Code Online (Sandbox Code Playgroud)\n

assert代码:

\n
- name: with assert\n  assert: { that: true, quiet: true }\n  changed_when: true\n  when: something is changed\n  notify: \'do stuff\'\n
Run Code Online (Sandbox Code Playgroud)\n

debug输出:

\n
\nTASK [mytask:带调试] ********************************************** **********\n更改:[服务器] => {\n "msg": ""\n}\n\n运行处理程序 [mytask : do stuff] ******** ************************************\n已更改:[服务器]\n
\n

assert输出(看起来更干净):

\n
\nTASK [mytask :带断言] ********************************************** **********\n更改:[服务器]\n\n运行处理程序 [myhandlers:做一些事情] ************************ *****************\n更改:[服务器]\n
\n

  • 我前几天用过这个,谢谢你。我喜欢。 (2认同)

β.ε*_*.βε 11

请注意,运行任务不足以通知处理程序,您还需要一个创建更改结果的任务。

借助changed_whenAnsible 中的选项,您可以实现任何任务的更改结果。
那么,做一个简单的debug可能是一种选择。

我还有其他想法,但最终并没有真​​正意义:

  • pause: 但你不能停顿少于一秒钟
  • assert:但是断言相同的条件感觉很愚蠢,您还需要放入 来changed_that通知处理程序。你仍然可以assert: that=true,但感觉同样愚蠢。
  • 也许我能想到的最愚蠢的想法就是一个fail带有failed_when: false.
  • command: 'true'与上面相比,也许不那么愚蠢,但我并不完全相信,仍然

鉴于剧本:

- hosts: localhost
  gather_facts: no
  vars:
    this_thing_is_true: true

  tasks:
    - debug:
        msg: 'Notifying handlers'
        # var: this_thing_is_true 
        # ^-- might be an alternative option to msg:
      changed_when: this_thing_is_true  
      notify: 
        - me 

  handlers:
    - name: me
      debug:
        msg: 'I have been notified'
Run Code Online (Sandbox Code Playgroud)

给出回顾:

PLAY [localhost] **************************************************

TASK [debug] ******************************************************
changed: [localhost] => 
  msg: Notifying handlers

RUNNING HANDLER [me] **********************************************
ok: [localhost] => 
  msg: I have been notified 
Run Code Online (Sandbox Code Playgroud)