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

如何在Ansible Playbook中排除BDD节点,重置APP节点编号起始值

解决Ansible Playbook排除BDD节点并重新编号APP节点的问题

直接调整Playbook的变量定义和执行条件就能实现需求,以下是修改后的完整代码:

vars:
  # 过滤出所有非BDD的节点,生成APP专属节点列表
  - app_nodes: "{{ ansible_play_hosts_all | reject('equalto', 'BDD') | list }}"
  # 基于APP节点列表计算当前节点的编号
  - node_number: "{{ app_nodes.index(inventory_hostname) + 1 }}"

- name: 设置Python解释器
  block:
    - name: 指定Python3解释器
      set_fact:
        ansible_python_interpreter: "/usr/bin/python3"

- name: 配置Tomcat节点编号
  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:
    - ansible_facts['distribution'] == 'Rocky'
    # 仅在非BDD节点执行该配置任务
    - inventory_hostname != 'BDD'

关键修改说明:

  • app_nodes变量:通过reject('equalto', 'BDD')从当前Play执行的全量主机列表(ansible_play_hosts_all)中剔除BDD节点,得到仅包含APP1、APP2、APP3的列表。
  • node_number变量:基于过滤后的APP节点列表计算当前主机的索引值再加1,这样APP1会排在列表首位,编号为1(对应node01),APP2、APP3依次递推。
  • 任务执行条件:新增inventory_hostname != 'BDD',避免Tomcat配置任务在BDD节点上无效执行。

如果你的Inventory中APP节点已归属特定组(比如app_servers),也可以直接用组列表替代过滤逻辑,更简洁:

vars:
  - node_number: "{{ groups['app_servers'].index(inventory_hostname) + 1 }}"

这种情况下,只需确保Play的hosts字段指定为app_servers,即可省略when中的节点判断条件。

内容的提问来源于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.26 22:42:31