Ansible如何通过单个变量传递多组server_name与server_port参数
解决方案:通过结构化变量传递多台服务器信息
我来帮你解决这个Ansible任务的扩展性问题——不用每次新增服务器都修改任务代码,只需要调整变量的结构,让它支持多台服务器的批量传递即可:
1. 重构变量结构
把原来单独的server_nameN、server_portN字段改成嵌套列表,让每个服务组变量里包含一个servers列表,每一项对应一台服务器的名称和端口:
service_group: - group_name: bif_sg service_state: present servers: - name: bif01 port: 80 - name: bif02 port: 80 - name: bif03 port: 443 # 后续新增服务器直接在这里加条目就行
2. 修改Ansible任务
调整任务中的servers参数,直接引用变量里的servers列表,不需要再单独处理单个服务器字段:
- name: Create a service group with multiple servers a10_service_group_v3: validate_certs: no host: "{{ item.0.a10_host }}" state: "{{ item.1.service_state }}" username: "{{ item.0.user }}" password: "{{ item.0.pass }}" service_group: "{{ item.1.group_name }}" reset_on_server_selection_fail: yes servers: "{{ item.1.servers }}" # 直接传递整个服务器列表 overwrite: yes write_config: yes ignore_errors: yes with_nested: - "{{ a10 }}" - "{{ service_group }}"
为什么这能生效?
因为a10_service_group_v3模块的servers参数本身就支持接收列表格式的输入,模块会自动遍历列表中的每一项,把所有服务器添加到对应的服务组里。以后要加新服务器,只需要在service_group变量的servers列表里追加新的name和port条目,完全不需要修改任务代码。
内容的提问来源于stack exchange,提问作者Dheeraj
相关产品推荐
相关产品推荐

