首页 > 解决方案 > 为什么ansible库存解析器我的json这么慢

问题描述

我从公共云生成了一个 json,但是使用这个 inventory.json 太慢了。请告诉我为什么我的 json 是这样的:

{
  "angelbeats": {
    "hosts": ["10.193.0.24", "10.193.0.23"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "grammy": {
    "hosts": ["10.193.2.5", "10.193.0.9", "10.193.10.4", "10.193.8.5"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "cdn": {
    "hosts": ["10.193.0.12", "10.193.0.11", "10.193.2.7", "10.193.2.8"],
    "vars": {
      "ansible_ssh_user": "root"
    }
  },
  "mdianying": {
    "hosts": ["10.193.0.31"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "zkmq": {
    "hosts": ["10.193.0.26", "10.193.0.27", "10.193.0.25"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "bmovie": {
    "hosts": [],
    "children": ["angelbeats", "growingpains", "forrestgump", "zkmq", "job", "tm", "inception"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "xxljob": {
    "hosts": ["10.193.0.6"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "redis": {
    "hosts": ["10.193.0.40", "10.193.2.13"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "tm": {
    "hosts": ["10.193.0.13", "10.193.0.14", "10.193.0.16", "10.193.0.17", "10.193.0.15"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "dns": {
    "hosts": ["10.193.0.100", "10.193.2.100", "10.193.10.10", "10.193.8.19"],
    "vars": {
      "ansible_ssh_user": "root"
    }
  },
  "yctask": {
    "hosts": ["10.193.8.15"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "cmovie": {
    "hosts": [],
    "children": ["angelbeats", "growingpains", "forrestgump", "zkmq", "job", "tm", "inception"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "forrestgump": {
    "hosts": ["10.193.0.104", "10.193.2.101", "10.193.8.20", "10.193.10.11"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "pwapi": {
    "hosts": ["10.193.0.28", "10.193.2.11", "10.193.8.10", "10.193.10.9"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "pwweb": {
    "hosts": ["10.193.0.20", "10.193.0.19", "10.193.2.9", "10.193.2.10", "10.193.8.9", "10.193.8.8", "10.193.10.6", "10.193.10.7"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "pwtask": {
    "hosts": ["10.193.0.29"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "apishow": {
    "hosts": ["10.193.0.32", "10.193.8.11"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "inception": {
    "hosts": ["10.193.0.10", "10.193.2.6", "10.193.8.7", "10.193.10.5"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "moviebi": {
    "hosts": ["10.193.0.42", "10.193.8.18"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "yanchu": {
    "hosts": ["10.193.0.35", "10.193.8.14"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "growingpains": {
    "hosts": ["10.193.0.21", "10.193.0.22"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "goods": {
    "hosts": ["10.193.0.33", "10.193.8.12"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "urm": {
    "hosts": ["10.193.0.39", "10.193.2.12"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "job": {
    "hosts": ["10.193.0.105"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  },
  "order": {
    "hosts": ["10.193.0.34", "10.193.8.13"],
    "vars": {
      "ansible_ssh_user": "wangluoli"
    }
  }
}

标签: performanceansibleinventory

解决方案


您需要_meta在 JSON 中创建一个部分:

https://docs.ansible.com/ansible/latest/dev_guide/developing_inventory.html#tuning-the-external-inventory-script

上面详述的库存脚本系统适用于所有版本的 Ansible,但为每个主机调用 --host 可能效率很低,尤其是当它涉及对远程子系统的 API 调用时。

为了避免这种低效率,如果清单脚本返回一个名为“_meta”的顶级元素,则可以在一个脚本执行中返回所有主变量。当此元元素包含“hostvars”的值时,将不会使用 --host 为每个主机调用清单脚本。这导致大量主机的性能显着提高。


推荐阅读