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

简介:

腾讯云平台绑定域名端口是要一个个绑,比较麻烦,之前看了一下API,简单写了一个绑域名端口的脚本:


ApiLogger.py(这个是输出日志用的)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/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提交信息的基础方法)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/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及返回相关状态)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/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  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 (实际工作,调用上面的接口)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/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  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博客,原文链接http://blog.51cto.com/lihuipeng/1285389如需转载请自行联系原作者


lihuipeng

相关文章
|
5月前
|
域名解析 网络协议 CDN
阿里云服务器购买后如何解析域名,三步操作即可解析绑定
阿里云服务器购买后如何解析域名,三步操作即可解析绑定
|
5月前
|
网络协议 安全 网络安全
阿里云国际修改域名绑定的DDoS高防服务器
阿里云国际修改域名绑定的DDoS高防服务器
|
7月前
|
域名解析 网络协议 Serverless
函数计算产品使用问题之绑定自定义域名的步骤是什么
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
8月前
|
缓存 Serverless API
函数计算产品使用问题之不同环境下如何绑定自定义域名
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
8月前
|
缓存 运维 Serverless
函数计算产品使用问题之如何绑定自己的域名
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
8月前
|
运维 网络协议 Serverless
函数计算产品使用问题之如何绑定自定义域名
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
9月前
|
弹性计算 运维 Serverless
函数计算产品使用问题之应用无法绑定自定义域名,是什么情况
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
9月前
|
存储 运维 Cloud Native
函数计算产品使用问题之绑定了自定义域名,还是会调用老的域名,是什么原因
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
9月前
|
运维 Serverless 数据处理
函数计算产品使用问题之绑定了自定义域名后,若要处理跨域请求,该怎么办
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
128 0
|
9月前
|
人工智能 运维 Serverless
函数计算产品使用问题之怎么绑定自定义域名
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。

热门文章

最新文章