Ansible-条件未按预期工作时

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:

我在目标服务器上停止了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: 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希望根据特定的时间条件启动服务。