0

我正在研究 AWX,我编写了一个自定义脚本来构建库存。该脚本只是向 API 发出 GET 请求,以检索状态为“ON”的机器列表。

当这个脚本在 AWX 上启动时,我看到了对 API 的多个 GET 请求(实际上每个主机一个),而不是只有一个。我不知道问题出在哪里。

这是脚本:

#!/usr/bin/env python
import requests
import json
headers = {
    "Authorization": "xxx"
}
url = 'https://xxxxx.com/api/ppd/machineson'
r = requests.get(url, verify=False, headers=headers)
data = json.loads(r.text)
print({"XPC_PPD": {'hosts': data["objects"]}})

输出示例:导入 20 个主机,20 个 GET 请求而不是 1 个需要 11.0s:

输出捕捉

4

1 回答 1

0

我发现它是 Ansible 清单脚本的一个已发布功能,如果它不提供嵌套在 _meta 字典下的 hostvars 字典,它将为每个主机重新调用一次脚本。我的脚本没有这样做,所以很可能这就是正在发生的事情。它也可能将整个清单内容嵌套在每个主机的 hostvars 下,因为它假设的合同是将 --host 选项传递给脚本将告诉脚本为该主机提供变量。

https://docs.ansible.com/ansible/latest/dev_guide/developing_inventory.html#inventory-script-conventions

必须遵守以下架构:

{
  "_meta": {
    "hostvars": {}
  },
  "all": {
    "children": [
      "ungrouped"
    ]
  },
  "ungrouped": {
    "children": [
   ]
 }
}
于 2019-12-11T16:54:05.000 回答