Ansible 同步并在更改时执行操作

问题描述 投票:0回答:2

我想编写一个剧本来将源文件同步到目标主机,并在文件更改时重新启动 tomcat/apache。有关同步的文档没有给出任何关于是否可以这样做的示例。有谁可以指点一下吗?

ansible rsync synchronize
2个回答
1
投票

如果您只更改一个文件,您可能需要使用

copy
而不是
synchronize
。然而,无论哪种方式,这种方法都应该有效。

处理程序系统就是为此类事情而设计的。那里的文档提供了配置文件更改后弹回 memcached 的示例:

下面是一个当一个服务的内容被修改时重新启动两个服务的例子 文件更改,但仅当文件更改时:

- name: template configuration file
  template: src=template.j2 dest=/etc/foo.conf
  notify:
     - restart memcached
     - restart apache

任务的通知部分中列出的事物称为处理程序。

处理程序是任务列表,与常规任务没有什么不同 任务,由全局唯一名称引用并收到通知 由通知者。如果没有任何通知处理程序,它将不会运行。 无论有多少任务通知处理程序,它都只会运行一次, 在特定游戏中完成所有任务后。

这是一个示例处理程序部分:

handlers:
    - name: restart memcached
      service: name=memcached state=restarted
    - name: restart apache
      service: name=apache state=restarted

0
投票

如果您来这里是为了通过阅读其

synchronize
结果来了解如何使用
changed
进行操作:

- name: Deploy app files
  ansible.posix.synchronize:
    src: "./"
    dest: "{{ app_cwd }}/"
    recursive: True
    delete: True
    times: False # prevents false positives on changed
  register: deploy_app_files

然后:

- name: Build app dependencies (remote build)
  community.general.npm:
    ci: True
    production: True
    path: "{{ app_cwd }}"
  when: deploy_app_files.changed
  changed_when: True
© www.soinside.com 2019 - 2024. All rights reserved.