Ansible-条件未按预期工作时
我在目标服务器上停止了splunk,如果它没有根据第一个命令的输出运行,我希望Ansible启动它。我使用以下命令从目标服务器获取了splunk的状态:Ansible-条件未按预期工作时,ansible,Ansible,我在目标服务器上停止了splunk,如果它没有根据第一个命令的输出运行,我希望Ansible启动它。我使用以下命令从目标服务器获取了splunk的状态: service splunk status | grep -i running | grep -v grep # output: splunkd is not running. 剧本片段: - shell: service splunk status | grep -i running register: SERV # - debug:
service splunk status | grep -i running | grep -v grep
# output:
splunkd is not running.
剧本片段:
- shell: service splunk status | grep -i running
register: SERV
# - debug: var=SERV.stdout
- shell: echo OK
register: ECHO
- debug: var=ECHO.stdout
# - debug: msg="SPLUNK is NOT Running and will be Started"
- service: name=splunk state=started
when: SERV.stdout == "splunkd is not running."
“何时”条件不能按预期工作。如果Splunk未运行,“何时”条件起作用。但如果splunk正在运行,Ansible仍然会启动splunk
问:如何配置“何时”条件,以便在第一个命令的输出中出现“Spunkd未运行”时启动splunk?也许您可以尝试Ansible Service module,参考 像这样的东西应该有用,但不确定你是否在寻找其他东西
- name: Start service splunk, if not started
service:
name: splunk
state: started
希望这对您有所帮助。请使用:
- service:
name: splunk
state: started
when: "'splunkd is not running' in SERV.stdout"
这不是我的服务命令的问题,它在slunk未运行时工作,但在splunk运行时不应执行它,服务是否应启动应基于上一个命令的输出。@KevinC Ok,但
started/stopped
是幂等操作,除非必要,否则不会运行命令。因此,除非状态不同,否则它们不会运行。当然,我同意在这个意义上,任务不应该被设计跳过,因为Ansible就是这样工作的。但是OP希望根据特定的时间条件启动服务。