腾讯云平台绑定域名端口是要一个个绑,比较麻烦,之前看了一下API,简单写了一个绑域名端口的脚本:
ApiLogger.py(这个是输出日志用的)
#!/usr/bin/python #coding:utf-8 import logging #日志模块 logger = logging.getLogger("sy_tools") logger.setLevel(logging.DEBUG) ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) fh = logging.FileHandler("sy_tools.log") fh.setLevel(logging.DEBUG) formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") ch.setFormatter(formatter) fh.setFormatter(formatter) logger.addHandler(ch) logger.addHandler(fh)
ApiRequest.py (这个API提交信息的基础方法)
#!/usr/bin/python #coding:utf-8 import urllib2 import base64 import json import time import random import hmac import hashlib import ApiLogger logger = ApiLogger.logger class TX_API: def __init__(self): self.accessId = 'accessid' self.secretKey = 'secretKey' self.endPoint = 'http://api.yun.qq.com' self.uri = '' self.body = '' self.method = '' def set_uri(self, value): self.uri = value return self.uri def set_body(self, value): self.body = value return self.body def set_method(self, value): self.method = value return self.method def do_request(self): if self.body: data = json.dumps(self.body) else: data = self.body self.nonce = random.randint(1,2**31-1) self.timestamp=int(time.time()) self.orignal = '''body=%s&method=%s&uri=%s&x-txc-cloud-secretid=%s&x-txc-cloud-nonce=%s&x-txc-cloud-timestamp=%s''' %(data,self.method,self.uri,self.accessId,self.nonce,self.timestamp) self.signature = base64.b64encode(hmac.new(self.secretKey,self.orignal,digestmod=hashlib.sha1).digest()) self.header = { "Content-type":"application/json; charset=utf-8", "x-txc-cloud-secretid":self.accessId, "x-txc-cloud-nonce":self.nonce, "x-txc-cloud-timestamp":self.timestamp, "x-txc-cloud-signature":self.signature, } if self.body: self.request = urllib2.Request(self.endPoint + self.uri, json.dumps(self.body)) else: self.request = urllib2.Request(self.endPoint + self.uri) for key in self.header: self.request.add_header(key, self.header[key]) try: result = urllib2.urlopen(self.request) except urllib2.HTTPError as http_error: print http_error else: response = json.loads(result.read()) result.close() return responsep jfd
这里是做一些接口认证,比较麻烦,详细要求看下API文档
self.accessId 和 self.secretKey 这两个KEY是要自己在云平台生成的
ApiDomain.py (调用绑定域名API及返回相关状态)
#!/usr/bin/python #coding:utf-8 import ApiRequest import ApiLogger logger = ApiLogger.logger def get_domain_id(domain): sy = ApiRequest.TX_API() sy.set_method('GET') sy.set_uri('/v1/domains/query_instance_id?domains=%s' % domain) result = sy.do_request() if result: return result['instanceIds'][domain] # return result['instances'][0]['instanceId'] def bind_domain_port(domain_id, cvm_ip, cvm_port): sy = ApiRequest.TX_API() sy.set_method('POST') sy.set_uri('/v1/domains/%s/cvm_bind' % domain_id) body = {'lanIps':[cvm_ip],'port':cvm_port} sy.set_body(body) result = sy.do_request() if result: errorCode = result['errorCode'] httpCode = result['httpCode'] logger.debug("errorCode = %s and httpCode = %s" % (errorCode, httpCode)) else: logger.error("Request Error! Please try again!") def check_domain_info(domain_id): sy = ApiRequest.TX_API() sy.set_method('GET') sy.set_uri('/v1/domains/%s' % domain_id) result = sy.do_request() if result: logger.debug("Domain '%s' already bind:" % result['instanceInfo']['domain']) for i in result['instanceInfo']['devicesList']: logger.debug("host : %s,\tport: %s" % (i['lanIp'], i['port'])) else: logger.error("Request Error! Please try again!") if __name__ == "__main__": print get_domain_id('s233.app100670828.qqopenapp.com') #bind_domain_port('100000041073', "10.204.153.56", 8008) #check_domain_info(100000041073)
get_domain_id : 根据域名获取它的ID
bind_domain_port: 把CVM绑定到该域名的某个端口
check_domain_info: 获取该域名绑定了哪些CVM及端口
sy_tools.py (实际工作,调用上面的接口)
#!/usr/bin/python #coding:utf-8 import ApiDomain import time import ApiLogger logger = ApiLogger.logger domains = ['s233.app100670828.qqopenapp.com'] hosts = ['10.207.252.117'] ports = ['80','8000', '8001', '8002', '8003', '8004', '8005'] logger.debug("This scripts will bind domain ports!") raw_input("Please Enter any key to start!") num = len(domains) for i in range(0,num): domain = domains[i] host = hosts[i] domain_id = ApiDomain.get_domain_id(domain) print domain, domain_id, host for port in ports: logger.debug("bind %s port ING~~~" % port) ApiDomain.bind_domain_port(domain_id, host, int(port)) time.sleep(20) ApiDomain.check_domain_info(domain_id) time.sleep(20) logger.debug("Done!") raw_input("Please Enter any key to exit!")
domains = [‘s233.app100670828.qqopenapp.com’]
hosts = [‘10.207.252.117’]
这里应该用字典比较好,当时写的时候就不知道怎么想的了。。后来就没改了。。
写得比较弱,不过能用就好了。。