Giter Site home page Giter Site logo

cli53's People

Contributors

agwa avatar barnybug avatar bensie avatar blackjid avatar chenrui333 avatar daharon avatar floppym avatar flyinprogrammer avatar gabrielr0 avatar gitter-badger avatar joaoqalves avatar johnlinvc avatar keen99 avatar kfeldmann avatar lalinsky avatar lfaraone avatar mrozentsvayg avatar nneul avatar r4um avatar savetherbtz avatar stephengroat avatar voxxit avatar wfaulk-bw avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cli53's Issues

can't create multiple TXT records

We are trying to create both an SPF entry and an google domain verify entry on our domain.

Adding a second TXT record causes a 400 error (already exists).

The console says to add a new line between two records, but none of the following work:

cli53 rrcreate updater.com '@' TXT '"google-site-verification=kptdGyLC37K_so8MXaWGczg4obJjn1N19E2L5t8m5fg" "v=spf1 a mx include:sendgrid.net include:_spf.google.com ~all"' --ttl 3600

cli53 rrcreate updater.com '@' TXT '"google-site-verification=kptdGyLC37K_so8MXaWGczg4obJjn1N19E2L5t8m5fg"\r"v=spf1 a mx include:sendgrid.net include:_spf.google.com ~all"' --ttl 3600

cli53 rrcreate updater.com '@' TXT "google-site-verification=kptdGyLC37K_so8MXaWGczg4obJjn1N19E2L5t8m5fg \r v=spf1 a mx include:sendgrid.net include:_spf.google.com ~all" --ttl 3600'

etc..
How do you create multiple TXT records with cli53?

400 Bad Request on import --replace

Hi Barnybug,

Just trying cli53 for the first time. I've imported a zone file successfully. Then the next thing I tried is making a small change on one record (CNAME record), and then tried to import it again, this time with --replace.

I'm getting this error message:

Traceback (most recent call last):
  File "bin/cli53", line 22, in <module>
    cli53.cli53.main()
  File "/tmp/cli53/src/cli53/cli53.py", line 599, in main
    args.func(args)
  File "/tmp/cli53/src/cli53/cli53.py", line 379, in cmd_import
    ret = r53.change_rrsets(args.zone, xml)
  File "/tmp/cli53/eggs/boto-2.1.1-py2.6.egg/boto/route53/connection.py", line 291, in change_rrsets
    body)
boto.route53.exception.DNSServerError: DNSServerError: 400 Bad Request
<?xml version="1.0"?>
<ErrorResponse xmlns="https://route53.amazonaws.com/doc/2011-05-05/"><Error><Type>Sender</Type><Code>InvalidChangeBatch</Code><Message>Tried to delete resource record set ********.com., type TXT but the values provided do not match the current values</Message></Error><RequestId>b3f620fe-30d3-11e1-bdf7-b5f61935c370</RequestId></ErrorResponse>

I googled and found issue #5, so it might be a similar problem?

Any help would be highly appreciated.

API calls to fetch records fail

API calls that attempt to list records already in Route53 are failing. This breaks --replace for import, as well as rrlist and export. The stack trace is the same for all cases. None of our records use the weight attribute, which is supposed to be optional.

Traceback (most recent call last):
File "./cli53", line 628, in
main()
File "./cli53", line 625, in main
args.func(args)
File "./cli53", line 548, in cmd_rrlist
zone = _get_records(args)
File "./cli53", line 427, in _get_records
return f.get_all_rrsets(r53, info.GetHostedZoneResponse, args.zone)
File "./cli53", line 265, in get_all_rrsets
return self.convert(ghz, rrsets)
File "./cli53", line 285, in convert
rdataset = _create_rdataset(rtype, ttl, values, rrset.weight, rrset.identifier)
AttributeError: 'Record' object has no attribute 'weight'

Import error (AttributeError: 'NoneType' object has no attribute 'is_subdomain')

Hi,

I'm trying to use cli53 to migrate zone files from BIND to Route53 and need help.

I created sucessfully a zone with the command "cli53 create teste.com.br" but I'm receiving error messages while trying to import the zone file.

The zone file bellow was checked with named-checkzone, so it appears to be syntactically ok.

infrate@ubuntu1:~$ cat db.teste.com.br
$ORIGIN .
$TTL 3600 ; 1 hour
teste.com.br IN SOA ns.provedor.com.br. hotmaster.provedor.com.br.teste.com.br. (
2010070401 ; serial
7200 ; refresh (2 hours)
3600 ; retry (1 hour)
432000 ; expire (5 days)
3600 ; minimum (1 hour)
)
NS ns1.provedor.com.br.
NS ns2.provedor.com.br.
A 200.200.200.150
MX 5 mx.teste.com.br.
$ORIGIN teste.com.br.
imap CNAME imap.provedor.com.br.
mail CNAME mail.provedor.com.br.
mx CNAME mx.provedor.com.br.
pop CNAME pop.provedor.com.br.
pop3 CNAME pop.provedor.com.br.
smtp CNAME smtp.provedor.com.br.
webmail CNAME webmail.provedor.com.br.
$TTL 300 ; 5 minutes
www A 200.200.200.150

My first try was to import the zone file but received an error:

infrate@ubuntu1:~$ cli53 import -f db.teste.com.br teste.com.br
Traceback (most recent call last):
File "/usr/local/bin/cli53", line 740, in
main()
File "/usr/local/bin/cli53", line 737, in main
args.func(args)
File "/usr/local/bin/cli53", line 513, in cmd_import
ret = r53.change_rrsets(args.zone, xml)
File "/usr/local/lib/python2.6/dist-packages/boto/route53/connection.py", line 314, in change_rrsets
body)
boto.route53.exception.DNSServerError: DNSServerError: 400 Bad Request

SenderInvalidChangeBatchTried to create resource record set [name='teste.com.br.', type=SOA'] but it already existsf5ad9eb7-4b71-11e2-b1d6-837ed7ed0574
infrate@ubuntu1:~$

So I removed the SOA and NS records:

infrate@ubuntu1:~$ cat db.teste.com.br
$ORIGIN .
$TTL 3600 ; 1 hour
A 200.200.200.150
MX 5 mx.teste.com.br.
$ORIGIN teste.com.br.
imap CNAME imap.provedor.com.br.
mail CNAME mail.provedor.com.br.
mx CNAME mx.provedor.com.br.
pop CNAME pop.provedor.com.br.
pop3 CNAME pop.provedor.com.br.
smtp CNAME smtp.provedor.com.br.
webmail CNAME webmail.provedor.com.br.
$TTL 300 ; 5 minutes
www A 200.200.200.150

And tryed again:

infrate@ubuntu1:~$ cli53 import -f db.teste.com.br teste.com.br
Traceback (most recent call last):
File "/usr/local/bin/cli53", line 740, in
main()
File "/usr/local/bin/cli53", line 737, in main
args.func(args)
File "/usr/local/bin/cli53", line 497, in cmd_import
zone = dns.zone.from_text(text, origin=origin, check_origin=False)
File "/usr/local/lib/python2.6/dist-packages/dns/zone.py", line 761, in from_text
reader.read()
File "/usr/local/lib/python2.6/dist-packages/dns/zone.py", line 710, in read
self._rr_line()
File "/usr/local/lib/python2.6/dist-packages/dns/zone.py", line 586, in _rr_line
if not name.is_subdomain(self.zone.origin):
AttributeError: 'NoneType' object has no attribute 'is_subdomain'

So I commented the A and MX records:

infrate@ubuntu1:~$ cat db.teste.com.br
$ORIGIN .
$TTL 3600 ; 1 hour
; A 200.200.200.150
; MX 5 mx.teste.com.br.
$ORIGIN teste.com.br.
imap CNAME imap.provedor.com.br.
mail CNAME mail.provedor.com.br.
mx CNAME mx.provedor.com.br.
pop CNAME pop.provedor.com.br.
pop3 CNAME pop.provedor.com.br.
smtp CNAME smtp.provedor.com.br.
webmail CNAME webmail.provedor.com.br.
$TTL 300 ; 5 minutes
www A 200.200.200.150

And this time the import was sucessfull:

infrate@ubuntu1:~$ cli53 import -f db.teste.com.br teste.com.br
ChangeInfo:
Status: PENDING
SubmittedAt: 2012-12-21T13:35:08.342Z
Id: /change/C16Z90CXX45XPJ

However, I have 200 domains to migrate and I need to migrate the A and MX records. Any suggestions to fix the zone file and import it ?

Best Regards,

Presciliano

import'ing a zone export'd by cli53 fails due to lack of $origin in the export

ex:

$ ./cli53.py export jmtestzone01.com >bak
$ ./cli53.py import -f bak jmtestzone01.com
Traceback (most recent call last):
  File "./cli53.py", line 381, in <module>
    main()
  File "./cli53.py", line 378, in main
    args.func(args)
  File "./cli53.py", line 224, in cmd_import
    raise Exception, 'Could not find origin'
Exception: Could not find origin

Adding "$ORIGIN jmtestzone01.com." to the top of the exported file will help the import command to succeed

GoDaddy Zone export not uploading to route53

After the outage yesterday, our management has decided that we should move to route53.

I've exported the zone file from godaddy, then ran the perl script against it to fix and "CNAME issues"

From the command line, I'm able to create "hosted zones", create "records", list them, etc.

However when I attempt to import the zonefile:

(without the --wait --replace), the command simply returns to the prompt with no indications of anything.
Examining the Route53 console doesn't show any imported records.

If I include --wait --replace, I see the following error:

Traceback (most recent call last):
File "/usr/local/bin/cli53", line 5, in
pkg_resources.run_script('cli53==0.3.2', 'cli53')
File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/pkg_resources.py", line 442, in run_script
self.require(requires)[0].run_script(script_name, ns)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/pkg_resources.py", line 1167, in run_script
exec script_code in namespace, namespace
File "/Library/Python/2.6/site-packages/cli53-0.3.2-py2.6.egg/EGG-INFO/scripts/cli53", line 735, in

File "/Library/Python/2.6/site-packages/cli53-0.3.2-py2.6.egg/EGG-INFO/scripts/cli53", line 732, in main

File "/Library/Python/2.6/site-packages/cli53-0.3.2-py2.6.egg/EGG-INFO/scripts/cli53", line 495, in cmd_import

File "/Library/Python/2.6/site-packages/cli53-0.3.2-py2.6.egg/EGG-INFO/scripts/cli53", line 530, in _get_records

File "/Library/Python/2.6/site-packages/cli53-0.3.2-py2.6.egg/EGG-INFO/scripts/cli53", line 351, in get_all_rrsets

File "/Library/Python/2.6/site-packages/cli53-0.3.2-py2.6.egg/EGG-INFO/scripts/cli53", line 367, in convert

AttributeError: 'Record' object has no attribute 'alias_dns_name'

Any suggestions would be most helpful.

Thank you.

import zone file and nothing happens with no ouput

Python 2.7.2, installed via pip today on Windows.

I can create zones, delete zones, list zones and create records OK.

But if I try and import my DNS file, nothing happens in Route53, and there is no output from the CLI other than a carriage return / blank line before my prompt returns.

Originally, it complained about no origin, but I fixed that in the file. I've tried the replace, editauth, dump and wait options. None of them make any difference, unless I have replace and editauth together in which case I get a traceback with a 400 back from AWS with "A HostedZone must contain at least one NS record for the zone itself." I've already substituted my original DNS servers with some that Route53 assigned originally, so it does have the NS records. I've also tried taking out all the comments in the file, and all the sub-domain entries. I've looked through the source for a debug option, but I can't see one.

Please help! Thanks.

Unable to import zone ( create resource record set [name='enum-outbound.int.something.com.', type='SOA'] but it already exists )

To ensure everything is clean I first purge the zone

jdyer@retina:~/Projects/carrier-routing » cli53 rrpurge enum-outbound.int.something.com --confirm   
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:47:44.013Z
  Id: /change/C3K1RNP0W1GCF
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:47:44.646Z
  Id: /change/C255RED8RZ42E
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:47:45.344Z
  Id: /change/C1YOGIET1Y15JR
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:47:45.823Z
  Id: /change/CCMOU37LN47EV
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:47:46.436Z
  Id: /change/C2UM5IYJEMEIR
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:47:46.915Z
  Id: /change/CJ5ECFMSETSV
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:47:47.570Z
  Id: /change/C1BAK5AMFU2N4
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:47:47.963Z
  Id: /change/CP0EZ7PDHFBY
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:47:48.384Z
  Id: /change/C2W7KK3FR77NE
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:47:48.791Z
  Id: /change/C2JV1A27AXLDZ

I then delete the zone entirely

jdyer@retina:~/Projects/carrier-routing » cli53 delete enum-outbound.int.something.com
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:48:53.227Z
  Id: /change/C131O8SZD6JNE
jdyer@retina:~/Projects/carrier-routing »

Then I create the new zone

jdyer@retina:~/Projects/carrier-routing » cli53 create enum-outbound.int.something.com                                                        1 ↵
HostedZone:
  ResourceRecordSetCount: 2
  CallerReference: c1c271b-6133-4e05-94a7-8194c6c0d7
  Config:
    Comment: None
  Id: /hostedzone/Z2BRIR61QI8PK
  Name: enum-outbound.int.something.com.
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:49:14.475Z
  Id: /change/C1YQZFMMXPDQW
DelegationSet:
  NameServers:
    - ns-723.awsdns-23.co.uk
    - ns-30.awsdns-38.com
    - ns-98.awsdns-59.net
    - ns-176.awsdns-06.org
jdyer@retina:~/Projects/carrier-routing »

And then I try to import

jdyer@retina:~/Projects/carrier-routing » cli53 import enum-outbound.int.tropo.com --file enum-outbound.int.tropo.com                     1 ↵
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:50:15.781Z
  Id: /change/C4BW3TZ6607U
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:50:16.451Z
  Id: /change/C1UB3S31G2ILC
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:50:17.177Z
  Id: /change/COJJQHH0ZQIS
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:50:17.586Z
  Id: /change/C1JQCSJU5Z03D
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:50:18.261Z
  Id: /change/CJMF4PYNELZ8
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:50:18.869Z
  Id: /change/C3V18I3IXGDWW
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:50:19.470Z
  Id: /change/C1TTV059E53WY
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:50:19.856Z
  Id: /change/CWLLBNVG8I6V
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:50:20.278Z
  Id: /change/C27A1NEQ8LZFJ
ChangeInfo:
  Status: PENDING
  SubmittedAt: 2013-07-19T21:50:20.957Z
  Id: /change/C3TJIXN0FQSSB
Traceback (most recent call last):
  File "/usr/local/bin/cli53", line 749, in <module>
    main()
  File "/usr/local/bin/cli53", line 746, in main
    args.func(args)
  File "/usr/local/bin/cli53", line 513, in cmd_import
    ret = r53.change_rrsets(args.zone, xml)
  File "/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/boto/route53/connection.py", line 315, in change_rrsets
    body)
boto.route53.exception.DNSServerError: DNSServerError: 400 Bad Request
<?xml version="1.0"?>
<ErrorResponse xmlns="https://route53.amazonaws.com/doc/2012-02-29/"><Error><Type>Sender</Type><Code>InvalidChangeBatch</Code><Message>Tried to create resource record set [name='enum-outbound.int.something.com.', type='SOA'] but it already exists</Message></Error><RequestId>35863895-f0bd-11e2-a593-6336d0de74cc</RequestId></ErrorResponse>
jdyer@retina:~/Projects/carrier-routing »                                                                                                 1 ↵

And here is the top of my zone file I am trying to import

$ORIGIN .
$TTL 3600 ; 1 hour
carrier-routing.int.something.com IN SOA  labsdnsmaster100.jyo.somewhere.net. alerts.voxeo.com. (
        2013061301 ; serial
        300        ; refresh (5 minutes)
        60         ; retry (1 minute)
        604800     ; expire (1 week)
        60         ; minimum (1 minute)
        )
$TTL 120  ; 2 minutes
      NS  labsdns181.las.something.net.
      NS  labsdns181.orl.something.net.
      NS  labsdns182.las.something.net.
      NS  labsdns182.orl.something.net.
      NS  labsdnsmaster100.jyo.something.net.
$ORIGIN carrier-selection-us.carrier-routing.int.something.com.
*     TXT "verboten"
$ORIGIN 0.carrier-selection-us.carrier-routing.int.something.com.
*     TXT "verboten"
$ORIGIN 1.carrier-selection-us.carrier-routing.int.something.com.
*     TXT "staging-out.carriers.int.something.com"
$ORIGIN 0.1.carrier-selection-us.carrier-routing.int.something.com.
*     TXT "verboten"
$ORIGIN 1.1.carrier-selection-us.carrier-routing.int.something.com.
*     TXT "staging-out.carriers.int.something.com"

Any idea why this is happening, because I sure dont and I am stuck :(

dns.zone.NoSOA problem

I'm having the same issue (I think) as this one: #28

I've defined a zone in the AWS console, manually entered some records, and now want to import more records from a zone file. I've removed all commented lines from the file and reduced it to just a couple of lines to test. The file is essentially what follows between the dashed lines, values anonymized:


$ORIGIN example.com
example.com. 86400 IN A 192.168.1.100
www.example.com. 86400 IN A 192.168.1.100


That's it, and I'm still getting the following error dump:

Traceback (most recent call last):
File "/usr/local/bin/cli53", line 607, in
main()
File "/usr/local/bin/cli53", line 604, in main
args.func(args)
File "/usr/local/bin/cli53", line 362, in cmd_import
zone = dns.zone.from_text(text, origin=origin, check_origin=True)
File "/usr/local/lib/python2.7/dist-packages/dns/zone.py", line 761, in from_text
reader.read()
File "/usr/local/lib/python2.7/dist-packages/dns/zone.py", line 719, in read
self.zone.check_origin()
File "/usr/local/lib/python2.7/dist-packages/dns/zone.py", line 518, in check_origin
raise NoSOA
dns.zone.NoSOA

The full command line as run is:
cli53 import example.com -f /home/joel/abs/projects/dns/example.com.test

What am I missing?

Adding MX records

Hey ,
i tried

./cli53.py rrecreate domain.com '@' MX mailer.something.com

and got 'ValueError: mx records required two parts: priority name'

Is there any different syntax for MX records?

Thanks.

Missing License

I love cli53, but I can't find the license. You have a bunch of commits from different people (https://github.com/barnybug/cli53/contributors), and they technically need to agree to whatever license you pick -- the longer you wait the more difficult it might get to retroactively slap a license on the project.

Or am I missing something?

AttributeError: 'Record' object has no attribute 'weight'

Hi, I found that a (nearly empty, the default at aws) record set for my domain trips cli53 in two ways. One is that some (all?) of the record sets has no weight. Read below for the second issue:

$ cli53 export mydomain.com
Traceback (most recent call last):
File "/usr/bin/cli53", line 684, in
main()
File "/usr/bin/cli53", line 681, in main
args.func(args)
File "/usr/bin/cli53", line 482, in cmd_export
zone = _get_records(args)
File "/usr/bin/cli53", line 479, in _get_records
return f.get_all_rrsets(r53, info.GetHostedZoneResponse, args.zone)
File "/usr/bin/cli53", line 307, in get_all_rrsets
return self.convert(ghz, rrsets)
File "/usr/bin/cli53", line 327, in convert
rdataset = _create_rdataset(rtype, ttl, values, rrset.weight, rrset.identifier, getattr(rrset, 'region', None))
AttributeError: 'Record' object has no attribute 'weight'

I replaced rrset.weight with None, and then it tripped on rrset.identifier, in the same line.

AttributeError: 'Record' object has no attribute 'identifier'

I then replaced that with None and things went through. I think that None should be made the default for records with non weight and ID. my default set of records for a new domain looks like this:

http://dl.dropbox.com/u/364883/Screenshots/56bz.png

so, it appears that the weight and id are empty by default.

pip fails due to missing README file

When attempting to install cli53 with pip it fails because there is no README file. I renamed "README.markdown" to "README" in the build/cli53 directory and it went fine after that.

error when roundtripping r53 zone through cli53

I'm trying to move a Route 53 zone across AWS accounts.

On the former account, I exported with cli53 export example.com > ~/bindfile.

When trying to import (on the latter account):

tom@braskami:~$ cli53 import -f ~/bindfile example.com
Traceback (most recent call last):
  File "/usr/local/bin/cli53", line 744, in <module>
    main()
  File "/usr/local/bin/cli53", line 741, in main
    args.func(args)
  File "/usr/local/bin/cli53", line 500, in cmd_import
    zone = dns.zone.from_text(text, origin=origin, check_origin=False)
  File "/usr/local/lib/python2.7/dist-packages/dns/zone.py", line 761, in from_text
    reader.read()
  File "/usr/local/lib/python2.7/dist-packages/dns/zone.py", line 710, in read
    self._rr_line()
  File "/usr/local/lib/python2.7/dist-packages/dns/zone.py", line 639, in _rr_line
    rd.choose_relativity(self.zone.origin, self.relativize)
  File "/usr/local/lib/python2.7/dist-packages/dns/rdtypes/nsbase.py", line 66, in choose_relativity
    self.target = self.target.choose_relativity(origin, relativize)
AttributeError: 'str' object has no attribute 'choose_relativity'

Any clue what's going on?

boto: 2.5.2
dnspython: 1.10.0
python: 2.7

Line numbers for errors

When trying to import a zone file, any problem line causes an exception to be raised. But without knowing which line this error was caused on, it's impossible to know how to fix the zone file.

Unable to create multiple A records

When attempting to create multiple A records for sub.domain.com
You get the following error from amazon

Tried to create resource record set sub.domain.com., type A but it already exists

cli53 rrcreate domain.com sub A 1.2.3.4 --ttl 600
cli53 rrcreate domain.com sub A 1.2.3.5 --ttl 600

Issue with odd text record

One of my TXT records has the following value (don't ask ;-)

"aap\" \"noot"

When I try to remove it cli53 gives an error:

$ cli53.py export example.com
$ORIGIN example.com.
@ 172800 IN NS ns-197.awsdns-24.com.
@ 172800 IN NS ns-1110.awsdns-10.org.
@ 172800 IN NS ns-1984.awsdns-56.co.uk.
@ 172800 IN NS ns-831.awsdns-39.net.
@ 900 IN SOA ns-1984.awsdns-56.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
bar 86400 IN TXT "aap\\\" \\\"noot"
$ cli53.py rrdelete example.com bar TXT
Deleting bar TXT...
Traceback (most recent call last):
  File "/home/marco/bin/cli53.py", line 489, in 
    main()
  File "/home/marco/bin/cli53.py", line 486, in main
    args.func(args)
  File "/home/marco/bin/cli53.py", line 403, in cmd_rrdelete
    ret = r53.change_rrsets(args.zone, xml)
  File "/usr/lib/python2.5/site-packages/boto/route53/__init__.py", line 221, in change_rrsets
    raise exception.DNSServerError(response.status, response.reason, body)
boto.route53.exception.DNSServerError: DNSServerError: 400 Bad Request

SenderInvalidChangeBatchTried to delete resource record set bar.example.com., type TXT but the values provided do not match the current values17da61da-2a6b-11e0-8c35-c944823ddc0a
$

Marco

Godaddy Correction Perl Script Issue

Hi, your one-line Perl script for correcting Godaddy export does not work for me --

(2012/12/02 12:28:14)[0]$ perl -pe 's/(CNAME .+)(?!.)$/$1./i' bizspeaking.com.zone > bizspeaking.com.zone.fixed

(2012/12/02 13:22:42)[0]$ diff -wc bizspeaking.com.zone bizspeaking.com.zone.fixed
*** bizspeaking.com.zone 2012-12-02 12:25:57.298353143 +0800
--- bizspeaking.com.zone.fixed 2012-12-02 13:22:42.314278717 +0800


*** 37,43 ****
; A Records
@ 1800 IN A 173.230.149.183

! ; CNAME Records
blog 3600 IN CNAME bizspeaking.wordpress.com
cf 3600 IN CNAME d1hvliv42vq06p.cloudfront.net
cfa 3600 IN CNAME d1hvliv42vq06p.cloudfront.net
--- 37,43 ----
; A Records
@ 1800 IN A 173.230.149.183

! ; CNAME Records.
blog 3600 IN CNAME bizspeaking.wordpress.com
cf 3600 IN CNAME d1hvliv42vq06p.cloudfront.net
cfa 3600 IN CNAME d1hvliv42vq06p.cloudfront.net

For one, tabs are used in Godaddy export. I also had to include explicit character set, otherwise the match behaves so weird as to be beyond my understanding... --

(2012/12/02 13:22:43)[0]$ perl -pe 's/(\s+CNAME\s+[a-zA-Z0-9.-_]+)(?!.)$/$1./i' bizspeaking.com.zone > bizspeaking.com.zone.fixed

(2012/12/02 13:25:06)[0]$ diff -wc bizspeaking.com.zone bizspeaking.com.zone.fixed
*** bizspeaking.com.zone 2012-12-02 12:25:57.298353143 +0800
--- bizspeaking.com.zone.fixed 2012-12-02 13:25:06.962275555 +0800


*** 37,50 ****
; A Records
@ 1800 IN A 173.230.149.183

! ; CNAME Records
! blog 3600 IN CNAME bizspeaking.wordpress.com
! cf 3600 IN CNAME d1hvliv42vq06p.cloudfront.net
! cfa 3600 IN CNAME d1hvliv42vq06p.cloudfront.net
! mail 3600 IN CNAME ghs.google.com
www 3600 IN CNAME @

; MX Records
--- 37,50 ----
; A Records
@ 1800 IN A 173.230.149.183

! ; CNAME Records.
! blog 3600 IN CNAME bizspeaking.wordpress.com.
! cf 3600 IN CNAME d1hvliv42vq06p.cloudfront.net.
! cfa 3600 IN CNAME d1hvliv42vq06p.cloudfront.net.
! mail 3600 IN CNAME ghs.google.com.
www 3600 IN CNAME @

Cannot remove existing SRV records without trailing '.'

I have some SRV records that were added using plain XML without a trailing '.' in the target. It appears a '.' automatically gets added to the target by dnspython. Unfortunately, that makes it impossible to remove SRV records without a trailing '.' using cli53.py.

Below is an example to reproduce the error, but after inspecting the source code I suspect you can just add another custom class like you did for CNAME and MX. I also reproduced the problem for NS records and assume it exists for PTR.

/tmp/test.xml

<?xml version="1.0" encoding="UTF-8"?>
<ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2010-10-01/">
  <ChangeBatch>
    <Comment>
        Test.
    </Comment>
    <Changes>
      <Change>
        <Action>CREATE</Action>
        <ResourceRecordSet>
          <Name>test.example.com.</Name>
          <Type>SRV</Type>
          <TTL>3600</TTL>
          <ResourceRecords>
            <ResourceRecord>
              <Value>20 0 5300 jabber.example.net</Value>
            </ResourceRecord>
          </ResourceRecords>
        </ResourceRecordSet>
      </Change>
    </Changes>
  </ChangeBatch>
</ChangeResourceRecordSetsRequest>
dnscurl.pl --keyname marco -- -X POST --upload-file /tmp/test.xml -H "Content-Type: text/xml; charset=UTF-8" https://route53.amazonaws.com/2010-10-01/hostedzone/Z3D165WXQJETB0/rrset

Trying to remove the record:

$ cli53.py rrdelete example.com test SRV
Deleting test SRV...
Traceback (most recent call last):
  File "/home/marco/bin/cli53.py", line 445, in 
    main()
  File "/home/marco/bin/cli53.py", line 442, in main
    args.func(args)
  File "/home/marco/bin/cli53.py", line 358, in cmd_rrdelete
    ret = r53.change_rrsets(args.zone, xml)
  File "/usr/lib/python2.5/site-packages/boto/route53/__init__.py", line 221, in change_rrsets
    raise exception.DNSServerError(response.status, response.reason, body)
boto.route53.exception.DNSServerError: DNSServerError: 400 Bad Request

SenderInvalidChangeBatchTried to delete resource record set test.example.com., type SRV but the values provided do not match the current valuesbfefa426-0b99-11e0-97ae-7fd6096deaf2

cli53 rrupdate

This is more of a feature request than an actual issue. Just figured it would be nice to be able to update records, unless this isn't already possible.
Actually I see the --replace option in rrcreate
I think this is what I was looking for

Suggestion: JSON Parser Testing

May want to consider testing for json. I had an old python 2.5.1 on FC8 that failed import boto.route53 due to lack of JSON parser. Fixed it with pip install simplejson. Easy enough, but I spent a while chasing boto, since that's what the error message stated.

try:
    import boto.route53, boto.jsonresponse, boto.exception
except ImportError:
    print "Please install latest boto:"
    print "pip install boto"
    sys.exit(-1)

Import fails on LOC entries

I have the following LOC entry in a zone file and using the import feature fails with the following errors. The LOC entry is line 55 in the file that the error is throwing on.

;; LOC Records (Location; Geo Lat/Long)
. 300 IN LOC IN LOC 65 36 22.127 N 37 42 20.753 W 254m 10m 100m 10m

» cli53 import --file --replace --wait
Traceback (most recent call last):
File "/bin/cli53", line 5, in
pkg_resources.run_script('cli53==0.3.6', 'cli53')
File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 499, in run_script
self.require(requires)[0].run_script(script_name, ns)
File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 1239, in run_script
execfile(script_filename, namespace, namespace)
File "/usr/lib/python2.7/site-packages/cli53-0.3.6-py2.7.egg/EGG-INFO/scripts/cli53", line 824, in
main()
File "/usr/lib/python2.7/site-packages/cli53-0.3.6-py2.7.egg/EGG-INFO/scripts/cli53", line 821, in main
args.func(args)
File "/usr/lib/python2.7/site-packages/cli53-0.3.6-py2.7.egg/EGG-INFO/scripts/cli53", line 572, in cmd_import
zone = dns.zone.from_text(text, origin=origin, check_origin=False)
File "/usr/lib/python2.7/site-packages/dnspython-1.10.0-py2.7.egg/dns/zone.py", line 761, in from_text
reader.read()
File "/usr/lib/python2.7/site-packages/dnspython-1.10.0-py2.7.egg/dns/zone.py", line 715, in read
raise dns.exception.SyntaxError("%s:%d: %s" % (filename, line_number, detail))
dns.exception.SyntaxError: :55: expecting an integer

check_origin dns.zone.NoSOA and NoneType' object has no attribute 'is_subdomain'

Hello Im trying to import a long bind file into the amazon dns servers with cli53 and I get two errors depending on what I do..
first I get this one:

Traceback (most recent call last):
File "/home/cfernandez/EC2ACCESS/cli53/bin/cli53", line 22, in
cli53.cli53.main()
File "/home/cfernandez/EC2ACCESS/cli53/src/cli53/cli53.py", line 599, in main
args.func(args)
File "/home/cfernandez/EC2ACCESS/cli53/src/cli53/cli53.py", line 357, in cmd_import
zone = dns.zone.from_text(text, origin=origin, check_origin=True)
File "build/bdist.linux-x86_64/egg/dns/zone.py", line 761, in from_text
File "build/bdist.linux-x86_64/egg/dns/zone.py", line 719, in read
File "build/bdist.linux-x86_64/egg/dns/zone.py", line 518, in check_origin
dns.zone.NoSOA

Im not good reading logs from python at all so kind of confused I do see the NOSOA so I do have the SOA in it but is with my settings still not amazons of course so I just in case comment it out but then I get this:
Traceback (most recent call last):
File "/home/cfernandez/EC2ACCESS/cli53/bin/cli53", line 22, in
cli53.cli53.main()
File "/home/cfernandez/EC2ACCESS/cli53/src/cli53/cli53.py", line 599, in main
args.func(args)
File "/home/cfernandez/EC2ACCESS/cli53/src/cli53/cli53.py", line 357, in cmd_import
zone = dns.zone.from_text(text, origin=origin, check_origin=True)
File "build/bdist.linux-x86_64/egg/dns/zone.py", line 761, in from_text
File "build/bdist.linux-x86_64/egg/dns/zone.py", line 710, in read
File "build/bdist.linux-x86_64/egg/dns/zone.py", line 586, in _rr_line
AttributeError: 'NoneType' object has no attribute 'is_subdomain'

DNSServerError: 505 HTTP Version Not Supported

Using Python 2.7, boto 2.6.0, and cli53 0.3.6, I'm seeing this exception occasionally:

With
Traceback (most recent call last):
File "/usr/bin/cli53", line 749, in
main()
File "/usr/bin/cli53", line 746, in main
args.func(args)
File "/usr/bin/cli53", line 660, in cmd_rrpurge
ret = r53.change_rrsets(args.zone, xml)
File "/usr/lib/python2.7/site-packages/boto/route53/connection.py", line 314, in change_rrsets
body)
boto.route53.exception.DNSServerError: DNSServerError: 505 HTTP Version Not Supported

broken on osx (at least 10.8.2)

Python 2.7.2, installed via setup.py install and pip, same results.

Not a python dev but this is what I observed when creating a record:

Traceback (most recent call last):
File "./cli53", line 738, in
main()
File "./cli53", line 735, in main
args.func(args)
File "./cli53", line 602, in cmd_rrcreate
parts = f.create_record(zone, name, rdataset)
File "./cli53", line 285, in create_record
return self._xml_changes(zone, creates=[(name,rdataset)])
TypeError: _xml_changes() takes exactly 4 arguments (3 given)

After diffing an older version which worked, I found one line that seemed key to the issue:

def _xml_changes(self, zone, creates, deletes):

def _xml_changes(self, zone, creates=[], deletes=[]):

Upon manually editing the new cli53 to put back the =[] after creates and deletes, the code runs cleanly.

Success
ChangeInfo:
Status: PENDING
SubmittedAt: 2012-10-03T23:18:19.699Z
Id: /change/C1IRX2TRblahblah

Not sure if this is the proper fix or not, but it did the job.

Weigted records replace/delete errors

Hi! i tried to replace and then purge zone with weighted records, but received the following:

Tried to delete resource record set [name='vip.site.net.', type='A', set-identifier='srv1] but it was not found

Creating multiple txt records

Is it possible to create multiple txt records on separate lines per the route53 doc? I tried creating multiple records but cant get them to end up on separate lines in the route53 container.

thanks
Ryan

AWS environment variables no longer needed

The latest Boto (2.0) supports retrieving credentials from ~/.boto instead of exposing secret keys through environment variables.

[Credentials]
aws_access_key_id = XXXX
aws_secret_access_key = XXXX

Therefore these lines should be removed from cli53.py. Instead catch the Boto exception that would be raised if credentials are not available.

if not (os.getenv('AWS_ACCESS_KEY_ID') and os.getenv('AWS_SECRET_ACCESS_KEY')):
    print 'Please set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY, e.g.:'
    print 'export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXX'
    print 'export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
    sys.exit(-1)

Suggestion: add the comment field as parameter

Would it be possible to add a parameter so the comment field for the hosted zone can be used ?
For as far as I know, it can only be filled in upon creation of the hosted zone. Changing it after a zone was created is not possible, at least not through the GUI.
I use that field to group my zones, and it would be very handy if I could use it with cli53.

Regards,

Gill

Relative CNAME targets

Amazon assumes that any domain name value you provide is fully qualified, and thus assumes a trailing dot, even if one is not provided in the Route 53 console. When running cli53 export , cli53 does not make this assumption.

For example, if you have a CNAME alias called "alias" in the example.com zone with value "target.otherdomain.tld" (no trailing dot), Amazon would respond with an answer of

alias.example.com. IN CNAME target.otherdomain.tld.

Off the top of my head, I'm not sure if this goes against the RFCs or not. At any rate, when running cli53 export, the above CNAME info would generate the following record:

alias IN CNAME target.otherdomain.tld

or with --full:

alias.example.com. IN CNAME target.otherdomain.tld

which, because it isn't fully qualified, means BIND would return a response of

alias.example.com. IN CNAME target.otherdomain.tld.example.com.

Obviously a different response than Route 53 for the same data!

diff and tests

Is it possible to add a verbose diff output? It would be nice to be able to use this to see whats about to be applied.

Also supporting tests would be nice as well so that you can load to a parallel zone and run a set of tests against those resolvers before pushing to an active zone.

Installation on Ubuntu 8.04 LTS

Hi,

Thank you for writing cli53 and making it publicly available.

I setup a vanilla Ubuntu 8.04 server but noted that pip is not installed by default, nor is python-boto.

It might be useful to add how to install pip in your install instructions:

          sudo apt-get install python-setuptools python-dev build-essential 

         sudo easy_install pip

         sudo apt-get install python-boto

Shaun

list only shows first 100 zones

When I use the cli53 list command, the output only shows the first 100 zones. The output ends with "NextMarker: Z1UWOO378DPC2F", but I can't see any way to enter that on the cmdline to fetch the next 100.

Error when restrict Access ID to certain hostedzone

I created an account in IAM which only allow to make changes to specific hostedzone and encounter an error. Without restrictions it worked.

The error:

root@localhost:/home/www# cli53 rrcreate mydomain.com test2 A 127.0.0.1
Traceback (most recent call last):
File "/usr/local/bin/cli53", line 5, in
pkg_resources.run_script('cli53==0.3.1', 'cli53')
File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 467, in run_script
self.require(requires)[0].run_script(script_name, ns)
File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 1200, in run_script
execfile(script_filename, namespace, namespace)
File "/usr/local/lib/python2.6/dist-packages/cli53-0.3.1-py2.6.egg/EGG-INFO/scripts/cli53", line 735, in
main()
File "/usr/local/lib/python2.6/dist-packages/cli53-0.3.1-py2.6.egg/EGG-INFO/scripts/cli53", line 731, in main
args = parser.parse_args()
File "/usr/local/lib/python2.6/dist-packages/argparse-1.2.1-py2.6.egg/argparse.py", line 1703, in parse_args
args, argv = self.parse_known_args(args, namespace)
File "/usr/local/lib/python2.6/dist-packages/argparse-1.2.1-py2.6.egg/argparse.py", line 1735, in parse_known_args
namespace, args = self._parse_known_args(args, namespace)
File "/usr/local/lib/python2.6/dist-packages/argparse-1.2.1-py2.6.egg/argparse.py", line 1944, in _parse_known_args
stop_index = consume_positionals(start_index)
File "/usr/local/lib/python2.6/dist-packages/argparse-1.2.1-py2.6.egg/argparse.py", line 1900, in consume_positionals
take_action(action, args)
File "/usr/local/lib/python2.6/dist-packages/argparse-1.2.1-py2.6.egg/argparse.py", line 1809, in take_action
action(self, namespace, argument_values, option_string)
File "/usr/local/lib/python2.6/dist-packages/argparse-1.2.1-py2.6.egg/argparse.py", line 1111, in call
namespace, arg_strings = parser.parse_known_args(arg_strings, namespace)
File "/usr/local/lib/python2.6/dist-packages/argparse-1.2.1-py2.6.egg/argparse.py", line 1735, in parse_known_args
namespace, args = self._parse_known_args(args, namespace)
File "/usr/local/lib/python2.6/dist-packages/argparse-1.2.1-py2.6.egg/argparse.py", line 1944, in _parse_known_args
stop_index = consume_positionals(start_index)
File "/usr/local/lib/python2.6/dist-packages/argparse-1.2.1-py2.6.egg/argparse.py", line 1900, in consume_positionals
take_action(action, args)
File "/usr/local/lib/python2.6/dist-packages/argparse-1.2.1-py2.6.egg/argparse.py", line 1793, in take_action
argument_values = self._get_values(action, argument_strings)
File "/usr/local/lib/python2.6/dist-packages/argparse-1.2.1-py2.6.egg/argparse.py", line 2219, in _get_values
value = self._get_value(action, arg_string)
File "/usr/local/lib/python2.6/dist-packages/argparse-1.2.1-py2.6.egg/argparse.py", line 2248, in _get_value
result = type_func(arg_string)
File "/usr/local/lib/python2.6/dist-packages/cli53-0.3.1-py2.6.egg/EGG-INFO/scripts/cli53", line 517, in Zone
ret = r53.get_all_hosted_zones()
File "/usr/local/lib/python2.6/dist-packages/boto-2.5.2-py2.6.egg/boto/route53/connection.py", line 107, in get_all_hosted_zones
body)
boto.route53.exception.DNSServerError: DNSServerError: 403 Forbidden

SenderAccessDeniedUser: mysuer is not authorized to perform: route53:ListHostedZonesdadasdadadasdsaad

This is the policy rules I used. As you can see I use the Full Access policy and edited the resource
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"route53:"
],
"Resource": [
"arn:aws:route53:::hostedzone/ZONE_ID"
]
},
{
"Effect": "Allow",
"Action": [
"elasticloadbalancing:DescribeLoadBalancers"
],
"Resource": [
"
"
]
}
]
}

Routing policy failover error: AttributeError: 'NoneType' object has no attribute 'to_text'

Hi,
I'm trying to export routing policy failover from Route53. I get error on Ubuntu 12.04 and current cli53-0.3.6 cloned directly today from GitHub:

cli53 export domain.com
Traceback (most recent call last):
  File "/usr/local/bin/cli53", line 5, in <module>
    pkg_resources.run_script('cli53==0.3.6', 'cli53')
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 499, in run_script
    self.require(requires)[0].run_script(script_name, ns)
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 1235, in run_script
    execfile(script_filename, namespace, namespace)
  File "/usr/local/lib/python2.7/dist-packages/cli53-0.3.6-py2.7.egg/EGG-INFO/scripts/cli53", line 836, in <module>
    main()
  File "/usr/local/lib/python2.7/dist-packages/cli53-0.3.6-py2.7.egg/EGG-INFO/scripts/cli53", line 831, in main
    args.func(args)
  File "/usr/local/lib/python2.7/dist-packages/cli53-0.3.6-py2.7.egg/EGG-INFO/scripts/cli53", line 625, in cmd_export
    zone.to_file(sys.stdout, relativize=not args.full)
  File "/usr/local/lib/python2.7/dist-packages/dns/zone.py", line 496, in to_file
    relativize=relativize)
  File "/usr/local/lib/python2.7/dist-packages/dns/node.py", line 52, in to_text
    print >> s, rds.to_text(name, **kw)
  File "/usr/local/lib/python2.7/dist-packages/dns/rdataset.py", line 214, in to_text
    rd.to_text(origin=origin, relativize=relativize, **kw))
AttributeError: 'NoneType' object has no attribute 'to_text'

Settings in Route53:

Name            Type         Health check id  TTL Set ID      Health check to associate
-----------     ---------    ---------------  --- ------      -------------------------
domain.com.     A ip-address ijfijf-3478...   60  Primary     http://ip-address:80/[....
domain.com.     A ip-address                  60  Secondary
www.domain.com. A ip-address 2gjfi-fjdif...   60  www-Primary http://ip-address:80/.....

Other records are MX, NS, SOA, SPF and CNAME, but those are also used in other domains that exported correctly. This above with failover settings only gives output:

$ORIGIN domain.com.

and then starts to give errors.

UnicodeError

I started getting this error yesterday:

$ bin/cli53 rrlist domain.net
Traceback (most recent call last):
  File "bin/cli53", line 22, in <module>
    cli53.cli53.main()
  File "/home/user/cli53/src/cli53/cli53.py", line 495, in main
    args.func(args)
  File "/home/user/cli53/src/cli53/cli53.py", line 422, in cmd_rrlist
    zone = _get_records(args)
  File "/home/user/cli53/src/cli53/cli53.py", line 301, in _get_records
    return f.get_all_rrsets(r53, info.GetHostedZoneResponse, args.zone)
  File "/home/user/cli53/src/cli53/cli53.py", line 181, in get_all_rrsets
    return self.convert(ghz, rrsets)
  File "/home/user/cli53/src/cli53/cli53.py", line 197, in convert
    node = z.get_node(name, create=True)
  File "build/bdist.linux-i686/egg/dns/zone.py", line 196, in get_node
  File "build/bdist.linux-i686/egg/dns/zone.py", line 172, in find_node
  File "build/bdist.linux-i686/egg/dns/zone.py", line 111, in _validate_name
  File "build/bdist.linux-i686/egg/dns/name.py", line 602, in from_text
  File "build/bdist.linux-i686/egg/dns/name.py", line 572, in from_unicode
UnicodeDecodeError: 'ascii' codec can't decode byte 0x85 in position 0: ordinal not in range(128)

This patch fixes the glitch for me. I don't know if this is the "right" way to do it (probably want to check for "if default encoding is ascii", or set encoding everywhere to ascii), but it was effective:

diff --git a/src/cli53/cli53.py b/src/cli53/cli53.py
index 166cdcc..52b8a69 100755
--- a/src/cli53/cli53.py
+++ b/src/cli53/cli53.py
@@ -187,6 +187,7 @@ class R53ToBindFormatter(object):

         for rrset in rrsets:
             name = rrset.name
+            name = name.encode('ascii')
             if '\\052' in name:
                 # * char seems to confuse Amazon and is returned as \\052
                 name = name.replace('\\052', '*')

Removing SPF records

I couldn't find a normal way to remove SPF records... and while i tried to create a new SPF records, it added one weird record that i can't get rid of .

Here are the two problematic entires i want to get rid of, would appreciate your help:

@ 14400 IN TXT "v=spf1 include:sendgrid.net ~all"
vKspf1\032includeHamazonses.com\032Mall 14400 IN SPF "\"" "s" "p" "f" "\""

Test 1:
ubuntu@test:~ ./cli53.py rrdelete mydomain.com "v=spf1 include:secureserver.net ~all" SPF
Record not found: v=spf1 include:secureserver.net ~all

Test 2:
ubuntu@test:~ ./cli53.py rrdelete mydomain.com vKspf1\032includeHamazonses.com\032Mall SPF
Record not found: vKspf1032includeHamazonses.com032Mall

PTR with /25 zone fails to import record

I think this is a bug....we have two /25 zones that are delegated to us. I'm currently hosting them locally, but want to migrate to Route53. When I try to create a PTR record, it seems to error out due to the unique nature of a /25 zone name.

I researched how to reference the zone name and amazon automatically inserts the \057 instead of the / and it seems to work. It just doesnt seem to work with cli53.

NOTE: if i just create the zone as X.Y.Z.in-addr.arpa, the rrcreate works fine. However this will not work since our ISP is delegating H.X.Y.Z to H.0/25.X.Y.Z.

`doslager@ubuntu:~/barnybug-cli53-9b91908/scripts$ ./cli53 rrcreate --wait 0\05725.X.Y.Z.in-addr.arpa 98 PTR blah.foo.com --ttl 1800
Traceback (most recent call last):
File "./cli53", line 824, in
main()
File "./cli53", line 821, in main
args.func(args)
File "./cli53", line 691, in cmd_rrcreate
ret = r53.change_rrsets(args.zone, xml)
File "/usr/local/lib/python2.7/dist-packages/boto/route53/connection.py", line 315, in change_rrsets
body)
boto.route53.exception.DNSServerError: DNSServerError: 400 Bad Request

SenderInvalidChangeBatchRRSet with DNS name 98.0925.X.Y.Z.in-addr.arpa. is not permitted in zone 0\05725.X.Y.Z.in-addr.arpa.4269b658-8b68-11e2-a7eb-21b582fee6f0
doslager@ubuntu:~/barnybug-cli53-9b91908/scripts$`

Notice in the error message that it's trying to create an RRset with DNS name 98.0925.X.Y.Z.in-addr.arpa.

It should be 98.0\5725.X.Y.Z.in-addr.arpa.

Support for elastic load balancer aliasing

Let me know if I've missed something here, but I tried to figure this out and couldn't.

Route 53 lets you add an alias to the domain apex, like example.com (with no subdomain) that points to an Elastic Load Balancer. From the documentation it seems you do this with an "A" record:
http://docs.amazonwebservices.com/Route53/latest/DeveloperGuide/index.html?HowToAliasRRS.html

But I get an error when I try to do it with this type of record on clif53. Would be great if it could support it. Thanks!

Traceback (most recent call last):
File "/Applications/AWS/R53/bin/cli53", line 22, in
cli53.cli53.main()
File "/Applications/AWS/R53/src/cli53/cli53.py", line 472, in main
args.func(args)
File "/Applications/AWS/R53/src/cli53/cli53.py", line 342, in cmd_rrcreate
rdataset = _create_rdataset(args.type, args.ttl, args.values)
File "/Applications/AWS/R53/src/cli53/cli53.py", line 202, in _create_rdataset
rdtype = dns.rdtypes.IN.A.A(dns.rdataclass.IN, dns.rdatatype.A, value)
File "build/bdist.macosx-10.6-x86_64/egg/dns/rdtypes/IN/A.py", line 32, in init
socket.error: illegal IP address string passed to inet_aton

Static python location

I tried running cli53.py but ran into issues importing packages.

I noticed that the python path is set to: #!/usr/bin/python
rather than: #!/usr/bin/env python

Changed this and the script works.

Boto detection sucks or wrong version

root@prd-puppet:/cli53/scripts# ./cli53
Please install latest boto:
pip install boto
(error was: No module named route53)
root@prd-puppet:
/cli53/scripts# python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.

import boto

Pip fails installation with py 3.2

when installing using pip and python 3.2 I get:

 ~ # pip install cli53
Downloading/unpacking cli53
  Running setup.py egg_info for package cli53
    Traceback (most recent call last):
      File "<string>", line 16, in <module>
      File "/tmp/pip-build/cli53/setup.py", line 4, in <module>
        long_description = file('README.markdown','r').read()
    NameError: name 'file' is not defined
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):

  File "<string>", line 16, in <module>

  File "/tmp/pip-build/cli53/setup.py", line 4, in <module>

    long_description = file('README.markdown','r').read()

NameError: name 'file' is not defined

----------------------------------------
Command python setup.py egg_info failed with error code 1 in /tmp/pip-build/cli53
Storing complete log in /root/.pip/pip.log
 ~ # python -V
Python 3.2.3

It could also be useful listing the requirements/dependencies on the homepage of the project

Setting SOA or NS records with import can be useful

I'd like to understand the reasoning for setting "exclude=is_root_soa_or_ns" with import.

In my case, I do want to set the SOA and NS records for a zone on import (I check SOA as part of the tests I run on zone changes, and I want to use non-AWS nameservers for the zone).

I'm happy to try to work out a pull request that disables "exclude=is_root_soa_or_ns" via a command-line flag, but I thought I'd ask about motivations for it that I might not understand first.

Thanks!
Andy

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.