騰訊雲平臺繫結域名埠是要一個個綁,比較麻煩,之前看了一下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, port: %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`]
這裡應該用字典比較好,當時寫的時候就不知道怎麼想的了。。後來就沒改了。。
寫得比較弱,不過能用就好了。。