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干净。
debug代码:
- name: with debug\n debug: msg=\'\'\n changed_when: true\n when: something is changed\n notify: \'do stuff\'\nRun Code Online (Sandbox Code Playgroud)\nassert代码:
- name: with assert\n assert: { that: true, quiet: true }\n changed_when: true\n when: something is changed\n notify: \'do stuff\'\nRun Code Online (Sandbox Code Playgroud)\ndebug输出:
\nTASK [mytask:带调试] ********************************************** **********\n更改:[服务器] => {\n "msg": ""\n}\n\n运行处理程序 [mytask : do stuff] ******** ************************************\n已更改:[服务器]\n\nassert输出(看起来更干净):
\nTASK [mytask :带断言] ********************************************** **********\n更改:[服务器]\n\n运行处理程序 [myhandlers:做一些事情] ************************ *****************\n更改:[服务器]\n\n
β.ε*_*.βε 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)