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

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 05:45:34