腾讯云API__CVM
获取CVM数据
其实直接存self.cvm_list更方便,但是为了测试redis,就写了一下
import json
from tcecloud.bms.v20180813.models import Instance
from tcecloud.common import credential
from tcecloud.common.profile.client_profile import ClientProfile
from tcecloud.common.profile.http_profile import HttpProfile
from tcecloud.common.exception.cloud_sdk_exception import CloudSDKException
from tcecloud.cvm.v20170312 import cvm_client, models
from datetime import datetime
import re
import pandas as pd
import redis
def modify_index():
## 修改nginx页面
now = datetime.now()
date = str(now.date()) + '.xlsx'
output = "C:/Users/Administrator/Downloads/nginx-1.26.3/nginx-1.26.3/html/index.html"
with open(output, "r", encoding="utf-8") as f:
html = f.read()
# 匹配href和download属性中任意值,保留引号结构
pattern = r'^\s*<a\b.*?\bhref="([^"]+)".*?\bdownload="([^"]+)"'
replaced_str = re.sub(pattern, lambda match: f'<a href="{date}" download="{date}"', html, flags=re.MULTILINE | re.DOTALL)
# 保存结果
with open(output, "w", encoding="utf-8") as f:
f.write(replaced_str)
print('index,Done!!')
class GetCVMInfo():
def __init__(self):
self.cvm_list = []
def get_cvm(self, secret_id, secret_key, limit, offset):
'''
单次获取CVM信息
'''
cred = credential.Credential(secret_id, secret_key)
http_profile = HttpProfile()
http_profile.endpoint = "cvm.api3.zjcftce.com"
client_profile = ClientProfile()
client_profile.httpProfile = http_profile
client = cvm_client.CvmClient(cred, "sz", client_profile)
req = models.DescribeInstancesRequest()
params = {
"Limit": limit,
"Offset": offset
}
req.from_json_string(json.dumps(params))
resp = client.DescribeInstances(req)
return resp.to_json_string()
def create_redis_conn(self, product):
self.r = redis.StrictRedis(host='10.135.114.14', port=6379, db=0, password='123456')
self.r.delete(product)
def get_cvm_info(self, secretId, secretKey, product):
'''
遍历获取整个租户的CVM信息
'''
Limit = 100
Offset = 0
InstanceList = []
dict_cvm = json.loads(self.get_cvm(secretId, secretKey, Limit, Offset))
TotalCount = dict_cvm.get('TotalCount', 0)
Title = list(dict_cvm.get('InstanceSet', {})[0].keys())
while TotalCount > 0:
params = {
"Limit": Limit,
"Offset": Offset
}
dict_cvm = json.loads(self.get_cvm(secretId, secretKey, Limit, Offset))
Offset += Limit
TotalCount -= Limit
for Instance in dict_cvm['InstanceSet']:
temp = Instance
temp['部落'] = product
self.r.rpush(product, json.dumps(temp, ensure_ascii=False).encode('utf-8'))
def redis_to_list(self, product):
r = redis.StrictRedis(host='10.135.114.14', port=6379, db=0, password='123456')
items = r.lrange(product, 0, -1)
for item in items:
self.cvm_list.append(json.loads(item.decode('utf-8')))
def write_to_excel(self):
now = datetime.now()
day = str(now.date())
file = "C:/Users/Administrator/Downloads/nginx-1.26.3/nginx-1.26.3/html/" + day + ".xlsx"
df = pd.DataFrame(self.cvm_list)
df.to_excel(file, index=False)
try:
product_dict = {
'深圳':{"id": "XXX", "key": "YYY"},
'上海':{"id": "XXX", "key": "YYY"}
}
Class_cvm = GetCVMInfo()
for product in product_dict.keys():
Class_cvm.create_redis_conn(product)
id = product_dict[product]['id']
key = product_dict[product]['key']
print('开始获取' + product + '信息')
Class_cvm.get_cvm_info(id, key, product)
print(product + '信息获取结束')
Class_cvm.redis_to_list(product)
Class_cvm.write_to_excel()
modify_index()
except CloudSDKException as err:
print(err)

浙公网安备 33010602011771号