我无法使用AWS boto API为我的AWS Route53注册域更改名称服务器。在下面的Python代码中,我得到
boto.exception.JSONResponseError: JSONResponseError: 400 Bad Request
{u'Message': u'Expected null', u'__type': u'SerializationException'}即使我使用的是API 如文件所示,也要传递一个字符串列表,例如
['ns-705.awsdns-21.net', 'ns-1401.awsdns-24.org', 'ns-1107.awsdns-11.co.uk', 'ns-242.awsdns-75.com']作为第二个论点。
我如何从Python中更改名称服务器?
def createhz(domain=None, verbose=False):
"""Create a Hosted Zone for the specified domain and update nameservers for Route53 Registered Domain"""
r53 = boto.route53.connection.Route53Connection()
if r53.get_hosted_zone_by_name(domain + '.'):
print('WARNING: Hosted Zone for {} already exists.'.format(domain))
hz = r53.get_zone(domain + '.')
else:
if verbose:
print('Creating Hosted Zone for {}.'.format(domain))
hz = r53.create_zone(domain + '.')
nameservers = hz.get_nameservers()
if verbose:
print('Hosted Zone has nameservers:')
for ns in nameservers:
print(' {}'.format(ns))
registered_domains = boto.route53.domains.layer1.Route53DomainsConnection()
try:
registered_domains.get_domain_detail(domain)
if verbose:
print('Updating nameservers for Route53 Registered Domain.'.format(domain))
# THE FOLLOWING LINE FAILS
registered_domains.update_domain_nameservers(domain, nameservers)
except Exception as e:
if e.message == 'Domain not found.':
print('WARNING: No Route53 Registered Domain for {}.'.format(domain))
print('Set the nameservers at your domain registrar to:.'.format(domain))
for ns in nameservers:
print(' {}'.format(ns))
else:
raise e
returnTraceback (most recent call last):
File "manage.py", line 362, in <module>
manager.run()
File "/usr/local/lib/python2.7/site-packages/flask_script/__init__.py", line 412, in run
result = self.handle(sys.argv[0], sys.argv[1:])
File "/usr/local/lib/python2.7/site-packages/flask_script/__init__.py", line 383, in handle
res = handle(*args, **config)
File "/usr/local/lib/python2.7/site-packages/flask_script/commands.py", line 216, in __call__
return self.run(*args, **kwargs)
File "manage.py", line 336, in createhz
raise e
boto.exception.JSONResponseError: JSONResponseError: 400 Bad Request
{u'Message': u'Expected null', u'__type': u'SerializationException'}发布于 2015-02-26 20:20:20
对Route53域功能的支持在boto中是非常新的,而且没有很好的文档。通过查看服务API,我看到update_domain_servers方法期望nameservers参数是表单字典的列表:
[{"Name": "ns1.example.com"}, {"Name": "ns2.example.com"}]还有一个名为GlueIps的可选键。听起来这对你的案子来说并不是必要的,但是你可以找到更多的信息,这里
发布于 2015-06-15 18:48:52
我只是亲自经历了这件事,下面是我所做的(基于上面的例子)..顺便说一句,这是基于Boto v2,fyi:
下一行:
nameservers = hz.get_nameservers()实际上返回NSs的列表,如:
[u'ns-1069.awsdns-05.org.', u'ns-1755.awsdns-27.co.uk.', u'ns-399.awsdns-49.com.', u'ns-816.awsdns-38.net.']但是,当您想要运行registered_domains.update_domain_nameservers(domain, nameservers)时,您必须传入一个键值为"Name“的JSON列表,例如:
[{u'Name': u'ns-1515.awsdns-61.org'}, {u'Name': u'ns-576.awsdns-08.net'}]要进行转换,您可以这样做
ns = [dict(Name=pn) for pn in nameservers]然后您可以更新NS记录:
registered_domains.update_domain_nameservers(domain, ns)希望这能有所帮助!
对不起,我是从两个帐户张贴-固定!
https://stackoverflow.com/questions/28750641
复制相似问题