OpsRamp 및 Ansible 인벤토리 협력
Ansible에는 파일의 정적 재고 관리 외에도 재고 정보를 동적으로 관리하는'다이너믹 인벤토리'가 있습니다.
Developing Dynamnic Inventory
Dynamic Inventry를 사용하여 외부 시스템에서 인벤토리 정보를 가져올 수 있습니다.
OptsRamp은 Rest API를 제공하기 때문에'다이너믹 인벤토리'를 통해 협업할 수 있다.
OpsRamp API
Ansible Dynamic Inventory Script
Python 스크립트를 사용하여 외부 시스템과 협업합니다.
Inventory Script
파이썬 스크립트는 실행할 때 '--list' 와 '-host' 인자를 사용할 수 있으며, 실행 결과는 JSON 형식으로 되돌아와야 합니다.
다음은 샘플의 파이썬 스크립트입니다.
opsramp-inv.py
import requests
import json
import sys
import argparse
def getAuthKey(params):
headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "application/json"
}
payload = {
"grant_type": "client_credentials",
"client_id": params["KEY"],
"client_secret": params["SECRET"]
}
url = "https://{url}/auth/oauth/token".format(url=params['URL'])
r = requests.post(url, headers=headers, data=payload)
json_res = json.loads(r.text)
return str(json_res["access_token"])
def getDeviceGroups(params):
headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": "Bearer "+params["AUTHKEY"]
}
url = "https://{url}/api/v2/tenants/{c_id}/deviceGroups/minimal".format(
url=params["URL"],
c_id=params["CLIENT_ID"]
)
r = requests.get(url, headers=headers)
results = json.loads(r.text)
return results
def getResourcesMinimal(params, deviceGroup):
headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": "Bearer "+params["AUTHKEY"]
}
url = "https://{url}/api/v2/tenants/{c_id}/resources/minimal?deviceGroupId={deviceGroup}".format(
url=params["URL"],
c_id=params["CLIENT_ID"],
deviceGroup=deviceGroup
)
r = requests.get(url, headers=headers)
results = json.loads(r.text)
return results
def get_inventory_from_opsramp(params):
params.update({'AUTHKEY':getAuthKey(params)})
deviceGroups = getDeviceGroups(params)
print(deviceGroups)
inventory = {}
for deviceGroup in deviceGroups:
groupName = deviceGroup["name"]
resources = getResourcesMinimal(params, deviceGroup["id"])
inventory.update({groupName: {'hosts': []}})
for resource in resources:
inventory[groupName]['hosts'].append(resource["ipAddress"])
return inventory
def to_json(dict):
return json.dumps(dict)
def parse_args():
parser = argparse.ArgumentParser(description='OpsRamp Inventory Module')
group = parser.add_mutually_exclusive_group()
group.add_argument('--list', action='store_true', help='List active servers')
group.add_argument('--host', help='List details about the specific host')
return parser.parse_args()
def main():
args = parse_args()
params = {
"URL": <API URL: OpsRamp設定上から取得>,
"CLIENT_ID": <Client Id: OpsRamp設定上から取得>,
"KEY": <API Key: OpsRamp設定上から取得>,
"SECRET": <API Secret: OpsRamp設定上から取得>
}
if args.list:
inventory = get_inventory_from_opsramp(params)
output = to_json(inventory)
print(output)
elif args.host:
output = {}
print(output)
sys.exit(0)
if __name__ == '__main__':
main()
Requests 모듈을 사용하고 있습니다.매개변수가 구현되지 않았습니다.
OpsRamp 설정
OpsRamp의 Rest API를 사용하려면 사용자 지정 포인트를 설정해야 합니다.
설정 방법에 대해서는 다음을 참조하십시오.
Custom Integration을 사용하여 쓰러뜨리기
결실
다음은 "ansible-inventry"의 실행 결과입니다.
bash
[root@ansible ansible]# ansible-inventory -i opsramp-inv.py --list
{
"TEST0001": {
"hosts": [
"192.168.0.205"
]
},
"_meta": {
"hostvars": {}
},
"all": {
"children": [
"TEST0001",
"ungrouped"
]
}
}
다음은 OpsRamp의 장치 그룹 설정입니다.Reference
이 문제에 관하여(OpsRamp 및 Ansible 인벤토리 협력), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/vistanet-kh/items/d4194aca0cad967d8b39텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)