我可以断言某个服务是最新的,而无需在第一时间再次启动它吗?

时间:2018-07-14 02:45:09

标签: ansible

当我想为服务扮演角色时,我经常写这种模式(本示例中使用的是Mongo,但是与其他任何服务(如Nginx,MySQL,Redis,Bind,ElasticSearch等)相同。 。我要实现的逻辑是:

  • 如果服务未启动,请启动它
  • 否则,如果服务已经启动
    • 如果自启动以来某些配置已更改,请重新启动
    • 否则,什么也不做(该服务已经在运行并且是最新的)

当我用Ansible编写此代码时,我会这样做:

角色/mongo/tasks/main.yml

---
- name: Install Mongo
  yum:
    name: mongodb-org
    state: present
- name: Configure mongo
  template:
    src: mongod.conf.j2
    dest: /etc/mongod.conf
  notify:
    - restart mongod
- name: Start Mongo
  service:
    name: mongod
    state: started

角色/mongo/handlers/main.yml

---
- name: restart mongod
  service:
    name: mongod
    state: restarted

但是,这与我上面所写的并不完全相同。上面代码的逻辑是

  • 如果服务未启动,请启动它
  • 如果任何配置发生了更改(即使在我们启动服务之前已更改),请重新启动服务

结果是我第一次运行剧本时,我

  • 安装Mongo
  • 配置Mongo
  • 启动Mongo
  • 重新启动Mongo

我希望我可以跳过最后一次重启。在我的脑海中,我认为“启动Mongo”任务应清除“重新启动Mongod”处理程序。

是否可以取消处理程序通知?

或者,有没有更好的方式编写我的剧本来实现我真正想要的逻辑?

0 个答案:

没有答案