继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Python批量绑定腾讯云平台CVM域名与端口

holdtom
关注TA
已关注
手记 1703
粉丝 240
获赞 991


腾讯云平台绑定域名端口是要一个个绑,比较麻烦,之前看了一下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']

这里应该用字典比较好,当时写的时候就不知道怎么想的了。。后来就没改了。。

写得比较弱,不过能用就好了。。

©著作权归作者所有:来自51CTO博客作者lihuipeng的原创作品,如需转载,请注明出处,否则将追究法律责任


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP