Ansible可从服务器接口获取动态Inventroy配置
动态Inventory格式如下:
{
"group1": {
"hosts": ["host1", "host2"],
"vars": {
"env1": "aaa",
"env2": "bbb"
},
},
"group2": {},
"group3": {}
}
要求:
- 接口必须返回
json
字典,如上格式 Inventory
脚本必须支持--list
选项(列出所有组信息,格式如上)Inventory
脚本必须支持--host
选项(列出host
信息)
使用:
ansible/ansible-playbook -i inventory.py group1 -m ping
例子
服务端接口:
from fastapi import FastAPI
import json
app1 = FastAPI()
ansible = FastAPI()
@app1.get("/")
def sayhi():
return {"Hello World!"}
@ansible.get("/")
def getinfo():
info = {
# _meta可加速--host,详情见:https://ansible-tran.readthedocs.io/en/latest/docs/developing_inventory.html
"_meta": {
"hostvars": {
"192.168.161.129": {"var1": 1111, "var2": "hhhh"},
"192.168.161.128": {"var3": 2222, "var4": "xxxx"}
}
},
"group1": {
"hosts": ["192.168.161.129"],
"vars": {
"group1_user": "ec2-user",
"dbport": "3306"
},
"children": ["group2", "group3"]
},
"group2": {
"hosts": ["192.168.161.128"]
},
"group3": {
"hosts": ["192.168.161.129"]
},
"vars": {
"ansible_ssh_port": "22",
"ansible_ssh_user": "root"
}
}
return info
Inventory
脚本:
import requests
import sys
if sys.argv[1] == "--list":
response = requests.get("http://192.168.30.132:8000/")
print(response.json())