You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Ansible为各节点Tomcat的jvmroute设置递增编号node0x?

问题描述

我尝试为Tomcat的server.xml中的jvmroute定义为node0x格式的名称,编写了一个试图实现编号递增的Playbook,但无法达成server1对应node01、server2对应node02的按节点递增效果。原代码如下:

原任务文件(nommage_nodes.yml)

- name: set number node
  become: yes
  become_method: sudo
  become_user: "{{env}}adm"
  set_fact:
     node_number: 1

- name: Nommage des nodes
  become: yes
  become_method: sudo
  become_user: "{{env}}adm"
  community.general.xml:
    path: /data/{{env}}/web/tomcat/conf/server.xml
    xpath: /Server/Service/Engine
    attribute: jvmroute
    value: "node0{{node_number}}"
    backup: true
  when: load_balancing == "yes"

- name: increment number node
  become: yes
  become_method: sudo
  become_user: "{{env}}adm"
  set_fact:
     node_number={{ node_number | int + 1 }}

原调用代码

- name: set count
  set_fact:
    node_number: 1

- name: Nommages des nodes tomcat
  include_tasks: nommage_nodes.yml
  with_items: "{{hostlb}}"
  when: not resultchrono.stat.exists
调整方案

原写法的核心问题是:每次循环调用任务时,都会重新初始化node_number为1,导致所有节点都被设置为node01。正确做法是利用循环索引生成编号,无需手动维护计数器。

步骤1:修改调用任务的循环逻辑

替换原调用代码,使用Ansible推荐的loop语法,并通过loop_control获取循环索引:

- name: Nommages des nodes tomcat
  include_tasks: nommage_nodes.yml
  loop: "{{ hostlb }}"
  loop_control:
    index_var: node_index
  when: not resultchrono.stat.exists

步骤2:简化任务文件(nommage_nodes.yml)

删除手动维护node_number的步骤,直接利用索引生成格式化编号:

- name: 设置Tomcat节点的jvmroute
  become: yes
  become_method: sudo
  become_user: "{{ env }}adm"
  community.general.xml:
    path: /data/{{ env }}/web/tomcat/conf/server.xml
    xpath: /Server/Service/Engine
    attribute: jvmroute
    value: "node{{ '%02d' | format(node_index | int + 1) }}"
    backup: true
  when: load_balancing == "yes"

关键说明

  • loop_control: index_var: node_index:获取循环的索引值(从0开始),加1后得到从1起始的节点编号。
  • '%02d' | format(...):将数字格式化为两位数,自动补零,比如1转为01、2转为02,完美匹配node0x的格式要求。
  • 确保hostlb列表中主机顺序与server1、server2的顺序一致,即可实现主机与编号的一一对应。

内容的提问来源于stack exchange,提问作者Kain Taozia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 10:02:54