如何使用Ansible批量修改多个目录下的Tomcat server.xml配置
Ansible批量修改多Tomcat实例shutdown端口实现方案
首先你需要提前规划好4个Tomcat实例各自对应的shutdown端口,再通过Ansible Playbook完成批量修改,推荐用XML专用模块操作,避免正则匹配误改其他内容。
步骤1:准备Playbook
你可以直接使用如下示例Playbook,根据你的实际环境调整参数即可:
--- - name: 批量更新Tomcat server.xml配置 hosts: 你的目标主机组或主机IP gather_facts: no vars: # 按你的实际需求调整目录和对应端口的映射关系 tomcat_config: tomcat_1: 8005 tomcat_2: 8006 tomcat_3: 8007 tomcat_4: 8008 tasks: - name: 修改Server节点的port属性 community.general.xml: # 替换为你的Tomcat目录实际父路径,比如所有tomcat目录都存放在/opt下就保持该结构 path: "/opt/{{ item.key }}/conf/server.xml" xpath: /Server attribute: port value: "{{ item.value }}" loop: "{{ tomcat_config | dict2items }}"
可选方案:无需额外集合的正则替换方案
如果目标环境无法安装community.general集合,可以用lineinfile模块通过正则匹配替换实现,对应task示例如下:
- name: 正则替换shutdown端口配置 ansible.builtin.lineinfile: path: "/opt/{{ item.key }}/conf/server.xml" regexp: '^<Server port=".*" shutdown="SHUTDOWN">' line: '<Server port="{{ item.value }}" shutdown="SHUTDOWN">' loop: "{{ tomcat_config | dict2items }}"
执行说明
- 执行Playbook前可以加
--check参数执行 dry run,确认修改内容符合预期后再正式运行 - 如果你的Tomcat目录没有统一父路径,可以直接把完整目录路径写到
tomcat_config的key中,同步调整path参数的拼接逻辑即可 - 如果目标主机没有预装community.general集合,可以在控制节点执行
ansible-galaxy collection install community.general完成安装
内容的提问来源于stack exchange,提问作者Noob_devops
相关产品推荐
相关产品推荐

