騰訊雲平臺繫結域名埠是要一個個綁,比較麻煩,之前看了一下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`]

這裡應該用字典比較好,當時寫的時候就不知道怎麼想的了。。後來就沒改了。。

寫得比較弱,不過能用就好了。。