【问题标题】:How to force handler to run before executing a task in Ansible?如何在 Ansible 中执行任务之前强制处理程序运行?
【发布时间】:2015-12-01 11:07:39
【问题描述】:

我有一个应该在指定 IP 上配置的剧本,然后连接到这个应用程序来配置里面的东西。

我遇到了一个问题:在我更改了应用程序配置中的任何内容后,我需要重新启动应用程序,如果我不重新启动应用程序,则与它的连接失败(没有连接,因为应用程序对具有新 IP 的新配置一无所知我正在尝试访问的地址)。

我目前的剧本:

tasks:
- name: Configure app
  template: src=app.conf.j2 dest=/etc/app.conf
  notify: restart app

- name: Change data in app
  configure_app: host={{new_ip}} data={{data}}

handlers:
- name: restart app
  service: name=app state=restarted

如果configure_app 在执行“更改应用程序中的数据”之前发生更改,我需要强制处理程序运行。

【问题讨论】:

    标签: ansible ansible-handlers


    【解决方案1】:

    如果你想强制处理程序在两个任务之间而不是在播放结束时运行,你需要把它放在两个任务之间:

    - meta: flush_handlers

    取自 ansible documentation 的示例:

    tasks:
       - shell: some tasks go here
       - meta: flush_handlers
       - shell: some other tasks
    

    请注意,这将导致 所有 个待处理的处理程序在该点运行,而不仅仅是那个特定的处理程序。

    猜你喜欢
    • 2017-04-14
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多