AWX动态库存重复获取请求

时间:2019-12-10 09:29:45

标签: python ansible inventory ansible-tower

我正在使用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请求(而不是一个)需要11.0s:

OUTPUT CAPTURE

1 个答案:

答案 0 :(得分:0)

我发现这是Ansible库存脚本的已发布功能,如果它不提供嵌套在_meta dict下的hostvars dict,它将为每个主机重新调用一次该脚本。我的脚本没有执行此操作,因此很有可能就是这种情况。对于每个主机,它也有可能将整个清单内容嵌套在hostvars下,因为它所假定的约定是,将--host选项传递给脚本会告诉脚本为该主机提供变量。

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

必须遵循以下架构:

{
  "_meta": {
    "hostvars": {}
  },
  "all": {
    "children": [
      "ungrouped"
    ]
  },
  "ungrouped": {
    "children": [
   ]
 }
}