腾讯云平台绑定域名端口是要一个个绑,比较麻烦,之前看了一下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
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 (实际工作,调用上面的接口)
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
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博客,原文链接http://blog.51cto.com/lihuipeng/1285389如需转载请自行联系原作者
lihuipeng