默认安装 tomcat7 后,模板未被覆盖

Template is not overriding after the default installation of tomcat7

我有执行以下任务的简单 ansible 角色:

  1. 安装tomcat7
  2. 更新 /etc/default/tomcat7 - 这是为了配置堆和其他配置
  3. 更新 /etc/tomcat7/server.xml - 这会将 tomcat 端口从 8080 覆盖到 80
  4. 重新启动 tomcat 服务

我的角色是这样的:

- name: Update apt cache
  apt: update_cache=yes

- name: Install Tomcat 7
  apt: pkg=tomcat7 state=present

- name: Configure tomcat memory/java_home configuration
  template: src=tomcat7.j2 dest=/etc/default

- name: Configure tomcat server configuration, port, connections ssl etc
  template: src=server.xml.j2 dest=/etc/tomcat7

 notify: 
- tomcat7-restart

此文件存储在 roles/task 中,我的模板存储在 roles/template

当我 运行 剧本时,我没有看到任何错误或警告,但是当去检查实际文件时它没有更新,显示 tomcat7 安装附带的默认内容.

如果你们知道我在这里做错了什么,请告诉我!

模板任务中的dest参数应该是文件的完整路径,而不仅仅是目录路径。您需要将任务更改为如下所示:

编辑:使用 "notify" 命令的正确方法是将其也包含在每个任务中。这样,如果任一任务修改了其关联文件,则将调用重新启动 tomcat 的处理程序,但如果两个文件均未修改,则不会重新启动 tomcat。

- name: Configure tomcat memory/java_home configuration
  template: src=tomcat7.j2 dest=/etc/default/tomcat7
  notify: tomcat7-restart

- name: Configure tomcat server configuration, port, connections ssl etc
  template: src=server.xml.j2 dest=/etc/tomcat7/server.xml
  notify: tomcat7-restart

您还希望 roles/tomcat7/handlers/main.yml 文件看起来像这样:

---
- name: tomcat7-restart
  service: name=tomcat7 state=restarted