CMDB_阿里Api詳解
一、接上節課優化:
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time: 2019-1-26 11:53 # @Author: [email protected] # @File: Ali_api.py from aliyunsdkcore.client import AcsClient from aliyunsdkcore.request import CommonRequest import json client = AcsClient('accesskey-id', 'accesskey', 'cn-hangzhou') request = CommonRequest() request.set_accept_format('json') request.set_domain('ecs.aliyuncs.com') request.set_method('POST') request.set_version('2014-05-26') request.set_action_name('DescribeInstances') request.add_query_param('RegionId', 'cn-hangzhou') response = client.do_action(request) # python2:print(response) # print(str(response, encoding = 'utf-8'))##打印出的內容是字串 ret = json.loads(response.decode('utf-8'))##這樣打印出的內容就是字典(這樣我們就可以隨便取值了) print(ret) print(ret.get('RequestId'))
檢視下:
print(ret.get('RequestId')) 595D5730-C5CC-4C06-86E7-CE90269BF6C2
篩選需要的值
先來看下如上ret的值經過json處理後的結果:(部分資料)
from aliyunsdkcore.client import AcsClient from aliyunsdkcore.request import CommonRequest import json client = AcsClient('XXXXXX', 'XXXXXXXXXXXXXX', 'cn-hangzhou') request = CommonRequest() request.set_accept_format('json') request.set_domain('ecs.aliyuncs.com') request.set_method('POST') request.set_version('2014-05-26') request.set_action_name('DescribeInstances') request.add_query_param('RegionId', 'cn-hangzhou') response = client.do_action(request) # python2:print(response) # print(str(response, encoding = 'utf-8')) ret = json.loads(response.decode('utf-8')) ret_data = ret.get('Instances').get('Instance') for item in ret_data: print('區域:', item.get('ZoneId')) print('記憶體:', item.get('Memory')) print('Cpu:', item.get('Cpu')) print('OS型別:', item.get('OSName')) print('建立日期:', item.get('CreationTime')) print('過期日期:', item.get('ExpiredTime')) print('唯一標識:', item.get('InstanceId')) net_info = item.get('PublicIpAddress') print('公網IP:', net_info.get('IpAddress'))
輸出:
區域: cn-hangzhou-b 記憶體: 2048 Cpu: 1 OS型別: CentOS7.4 64位 建立日期: 2018-04-01T12:41Z 過期日期: 2021-04-01T16:00Z 唯一標識: i-bp1iidpxlqigcvrjz7mj 公網IP: ['47.98.156.84']
當然CMDB需要的是一組字典資料,我們需要重新封裝下:
from aliyunsdkcore.client import AcsClient from aliyunsdkcore.request import CommonRequest import json client = AcsClient('XXXXXXX', 'XXXXXXXXXXXX', 'cn-hangzhou') request = CommonRequest() request.set_accept_format('json') request.set_domain('ecs.aliyuncs.com') request.set_method('POST') request.set_version('2014-05-26') request.set_action_name('DescribeInstances') request.add_query_param('RegionId', 'cn-hangzhou') response = client.do_action(request) # python2:print(response) # print(str(response, encoding = 'utf-8')) ret = json.loads(response.decode('utf-8')) result_dic = {} ret_data = ret.get('Instances').get('Instance') for item in ret_data: net_info = item.get('PublicIpAddress') result_dic[item.get('InstanceId')] = {'InstanceId':item.get('InstanceId')} result_dic[item.get('InstanceId')]['Cpu'] = item.get('Cpu') result_dic[item.get('InstanceId')]['OS'] = item.get('OSName') result_dic[item.get('InstanceId')]['Mem'] = item.get('Memory') result_dic[item.get('InstanceId')]['ZoneId'] = item.get('ZoneId') result_dic[item.get('InstanceId')]['CreateTime'] = item.get('CreationTime') result_dic[item.get('InstanceId')]['EndTime'] = item.get('ExpiredTime') result_dic[item.get('InstanceId')]['PublicIp'] = net_info.get('IpAddress') print(result_dic)
輸出看下最終的結果:
{'i-bp1iidpxlqigcvrjz7mj': {'InstanceId': 'i-bp1iidpxlqigcvrjz7mj', 'EndTime': '2021-04-01T16:00Z', 'OS': 'CentOS7.4 64位', 'PublicIp': ['47.98.156.84'], 'CreateTime': '2018-04-01T12:41Z', 'Mem': 2048, 'ZoneId': 'cn-hangzhou-b', 'Cpu': 1}}
關於磁碟資訊
阿里雲 API 中磁碟資訊通過單獨的介面呼叫,在雲主機中沒有磁碟資訊;
通過這個介面:
DescribeDisks
然後在OpenApi Explorer 平臺 中查詢程式碼即可!
#!/usr/bin/env python #coding=utf-8 from aliyunsdkcore.client import AcsClient from aliyunsdkcore.request import CommonRequest client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-hangzhou') request = CommonRequest() request.set_accept_format('json') request.set_domain('ecs.aliyuncs.com') request.set_method('POST') request.set_version('2014-05-26') request.set_action_name('DescribeDisks') request.add_query_param('RegionId', 'cn-hangzhou') response = client.do_action(request) # python2:print(response) print(str(response, encoding = 'utf-8'))
和如上一個步驟,我們就可以獲取到磁碟的詳細資訊:
當然阿里封裝的API有很多,也包括常用的 關閉,重啟,啟動一臺ecs等;
還有一個作為運維特別使用的 webssh 阿里也幫我們封裝ok了;
呼叫該介面時,您需要注意:
- 管理終端地址的有效期為 15 秒,呼叫介面成功後如果 15 秒內不使用該連結,URL 地址自動失效,您需要重新查詢。
- 單個管理終端連結的持久連結(KeepAlive)時間為 60 秒,60 秒內您管理終端視窗沒有任何互動操作時,連線自動斷開。
- 如果連線中斷,每分鐘內重新連線的次數不能超過 30 次。
使用方法
您需要在如下連結:
https://g.alicdn.com/aliyun/ecs-console-vnc/0.0.7/index.html? 末尾加上 vncUrl=xxxx、 instanceId=xxx 和 isWindows=true、 isWindows=false 和 password=XXXXXX,引數之間使用 & 連線。其中引數 vncUrl:呼叫介面成功後會返回的 VncUrl 的值。
- 引數 instanceId:您的例項 ID。
- 引數 isWindows:該例項的作業系統是否是 Windows 系統。取值為 true 表示是 Windows 系統,取值為 false 表示不是 Windows 系統。
- (可選)引數 password:該例項的遠端連線密碼,由 6 位數字或大小寫字母組成。使用該引數時,在連線管理終端處您不需要再輸入密碼。
示例:
https://g.alicdn.com/aliyun/ecs-console-vnc/0.0.7/index.html?vncUrl=ws%3A%2F%xxx&instanceId=i-wz9hhwq5a6tmxxxxxxx&isWindows=true
或:
https://g.alicdn.com/aliyun/ecs-console-vnc/0.0.7/index.html?vncUrl=ws%3A%2F%xxx&instanceId=i-wz9hhwq5a6tmxxxxxxx&isWindows=true&Password=111111
程式碼如下:
#!/usr/bin/env python #coding=utf-8 from aliyunsdkcore.client import AcsClient from aliyunsdkcore.request import CommonRequest import json client = AcsClient('XXXX', 'XXXXXXXXXXX', 'cn-hangzhou') request = CommonRequest() request.set_accept_format('json') request.set_domain('ecs.aliyuncs.com') request.set_method('POST') request.set_version('2014-05-26') request.set_action_name('DescribeInstanceVncUrl') request.add_query_param('RegionId', 'cn-hangzhou') request.add_query_param('InstanceId', 'i-bp1iXXXXXXXXXmj') response = client.do_action(request) # python2:print(response) # print(str(response, encoding = 'utf-8')) ret = json.loads(response.decode('utf-8')) vncurl = 'vncUrl=' + ret.get('VncUrl') # print(vncurl) basicUrl = "https://g.alicdn.com/aliyun/ecs-console-vnc/0.0.7/index.html?" instanceId = 'instanceId=i-bp1iXXXXXXXXXmj' isWindows = 'isWindows=false' a = '&' print(basicUrl+vncurl+a+instanceId+a+isWindows)
列印結果為:
https://g.alicdn.com/aliyun/ecs-console-vnc/0.0.7/index.html?vncUrl=wss%3A%XXXXXXFhz01-vncproxy.aliyun.com%2Fwebsockify%2F%3Fs%3DU5ddnEFHagDx0mRYtnYbpXXXXXXXgWv9VNICEQ7CPszGI%252Br7vMTHExgu7EiFz9t&instanceId=i-bp1iXXXXXXXXXmj&isWindows=false
訪問結果如下: