ansible template模块通过变量驱动和事实采集实现ip矩阵配置批量下发,核心是用inventory_hostname哈希生成唯一ip、模板加default()防错、validate校验语法、backup备份旧配置、serial限并发,并通过wait_for闭环验证。

用 Ansible 的 template 模块批量下发几十台节点的 IP 矩阵配置,关键不是“写死 IP”,而是让每台机器按需生成唯一、合规、可验证的网络配置。核心在于:变量驱动 + 事实采集 + 模板防护 + 安全校验。
IP矩阵配置必须结构化定义
几十台节点的 IP 不是随机分配,而是有规律的矩阵结构(如:192.168.10.{1..50} 对应不同角色;或按机柜/区域/角色分段)。不能靠人工填表,要提前在 inventory 或变量文件中声明逻辑:- 在
group_vars/all.yml或host_vars/node01.yml中定义:network_config: ip: "192.168.10.{{ 100 + ansible_play_hosts.index(inventory_hostname) | int }}" netmask: "255.255.255.0" gateway: "192.168.10.1" dns: ["114.114.114.114", "8.8.8.8"] - 或更推荐用
inventory_hostname做哈希映射(避免顺序依赖):ip_base: "192.168.10." ip_suffix: "{{ (inventory_hostname | hash('md5') | truncate(3, '', '')[1:] | int(base=16) % 254) + 2 }}" # 生成类似 192.168.10.127 这样的唯一地址
模板文件要兼顾差异与健壮性
模板必须放在 `templates/` 目录下,且后缀为 `.j2`(如 `templates/netplan.j2`),内容示例(以 Netplan YAML 为例):network:
version: 2
ethernets:
ens33:
dhcp4: false
addresses: ["{{ network_config.ip | default(ip_base + ip_suffix + '/24') }}"]
routes:
- to: default
via: "{{ network_config.gateway | default('192.168.10.1') }}"
nameservers:
addresses: {{ network_config.dns | default(["114.114.114.114"]) }}
注意要点:
- 所有变量都加
default()防止未定义报错 - 不直接用
{{ ansible_all_ipv4_addresses | first }}替代配置 IP,那是采集结果,不是配置意图 - 多网卡场景用
{% if 'bond0' in ansible_interfaces %}判断再渲染,别硬编码接口名
Playbook 中调用 template 要带安全兜底
下发时绝不能只 copy 文件,必须加三重保障:- 强制语法校验:用
validate调用netplan try或ifconfig -a预检 - 自动备份旧配置:
backup: true,Ansible 会存为/etc/netplan/50-cloud-init.yaml.2026-07-20@17:29:12~ - 限制并发数防雪崩:
serial: 5控制每次只更新 5 台
示例 task:
- name: Deploy netplan config per node
template:
src: netplan.j2
dest: /etc/netplan/99-custom.yaml
owner: root
group: root
mode: '0600'
backup: true
validate: /usr/sbin/netplan --debug generate
notify: Apply netplan
上线前必须做闭环验证
下发完成不等于生效。真正可用的 IP 矩阵需要自动确认:- 用
wait_for检查新 IP 是否响应: - name: Wait for new IP to respond wait_for: host: "{{ network_config.ip | default(ip_base + ip_suffix) }}" port: 22 timeout: 30 state: started
- 或执行
command: ip -br a | grep ens33获取实际绑定地址,比对预期值 - 若失败,整个 play 自动中断,保留 backup 文件供人工排查
不复杂但容易忽略。











