Ansible 2.3如何修改join逻辑生成多端口主机池配置串
Ansible 2.3 主机池多端口配置修改方案
原配置仅为每个主机拼接了2100单端口,未做多端口展开,无法生成双端口条目。直接替换_pool_config定义为以下内容即可,完全兼容Ansible 2.3版本:
_pool_config: "{{ (environment_hosts | default(['localhost']) | product([2100,2200]) | map('join', ':') | list) | join(',') }}{% if ssl_enabled | bool %},sslSettings=TLS{% endif %}"
实现逻辑
- 用jinja2原生
product过滤器对主机列表、端口列表[2100,2200]做笛卡尔积,自动按顺序生成(server1,2100)、(server1,2200)、(server2,2100)、(server2,2200)格式的元组,顺序完全匹配预期 - 通过
map('join', ':')将每个元组拼接为host:port格式字符串,转列表后用逗号拼接所有条目 - 完整保留原有逻辑:未定义
environment_hosts时默认使用localhost,ssl_enabled为true时自动在末尾追加,sslSettings=TLS
效果验证
当environment_hosts取值为['server1','server2']、ssl_enabled为false时,渲染结果为:
server1:2100,server1:2200,server2:2100,server2:2200
如果后续需要新增其他监听端口,只需要修改product过滤器里的端口列表即可,不需要调整其他拼接逻辑。
内容的提问来源于stack exchange,提问作者Joly
相关产品推荐
相关产品推荐

