设为首页 收藏本站
查看: 2186|回复: 5

[经验分享] Python批量绑定腾讯云平台CVM域名与端口

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2013-8-30 08:59:09 | 显示全部楼层 |阅读模式
腾讯云平台绑定域名端口是要一个个绑,比较麻烦,之前看了一下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']

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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-8835-1-1.html 上篇帖子: python监控文件或目录变化 下篇帖子: python用paramiko模块上传本地目录到远程目录 云平台 腾讯

尚未签到

发表于 2013-9-2 01:01:07 | 显示全部楼层
不知该说些什么。。。。。。就是谢谢

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-9-5 12:22:17 | 显示全部楼层
人生自古谁无死,啊个拉屎不用纸!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-9-18 00:04:33 | 显示全部楼层
爱护环境,人人有病。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-10-10 13:39:53 | 显示全部楼层
听君一席话,省我十本书!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-10-24 07:35:35 | 显示全部楼层
看尽天下A片,心中自然无码~

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表