如何在Ansible中遍历JSON数据并并行执行任务?
解决方案:基于Ansible实现JSON遍历与任务并行执行
步骤1:准备JSON数据文件
将你提供的JSON数据保存为hosts_data.json文件:
{ "xyx": { "hostname": "xyz", "username": "root", "password": "welcome1", "password2": "welcome2", "version": "19.17", "toversion": "19.18", "netconf": "bond", "baseversion": "18.8" }, "abc": { "hostname": "abc", "username": "root", "password": "welcome1", "password2": "welcome2", "version": "19.17", "toversion": "19.18", "netconf": "bond", "baseversion": "18.8" } }
步骤2:编写Ansible Playbook实现遍历与并行执行
创建image_hosts.yml Playbook,通过动态添加主机+默认并行执行的方式完成需求:
- name: 批量执行主机镜像任务 hosts: localhost gather_facts: no vars: # 加载JSON数据文件 host_list: "{{ lookup('file', 'hosts_data.json') | from_json }}" tasks: - name: 动态添加目标主机到临时组 add_host: name: "{{ item.value.hostname }}" groups: target_hosts ansible_user: "{{ item.value.username }}" ansible_password: "{{ item.value.password }}" ansible_host: "{{ item.value.hostname }}" target_version: "{{ item.value.version }}" loop: "{{ host_list | dict2items }}" - name: 在目标主机并行执行镜像任务 hosts: target_hosts gather_facts: no tasks: - name: 执行镜像脚本 command: python3 image.pyc "{{ ansible_host }}" "{{ target_version }}"
关键说明
- JSON遍历:通过
dict2items过滤器将JSON字典转换为键值对列表,再用loop遍历每个主机的配置信息。 - 并行执行:Ansible默认采用并行策略执行同一组内的主机任务(默认
forks=5,足够覆盖你的两台主机)。如果需要调整并发数,可在ansible.cfg中设置forks=10,或在Playbook中添加forks: 10参数。 - 变量传递:通过
add_host将每个主机的version等参数传递为临时变量,在任务中直接引用。
执行方式
运行Playbook即可触发并行任务:
ansible-playbook image_hosts.yml
内容的提问来源于stack exchange,提问作者Akash-BLR
相关产品推荐
相关产品推荐

