diff options
author | Rob Austein <sra@hactrn.net> | 2012-05-05 06:05:16 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2012-05-05 06:05:16 +0000 |
commit | 3054b7572896e373538ac861adc1113987324fb2 (patch) | |
tree | 6b973357327f6f2dab35610cb7f9f30826c77016 | |
parent | a83b6e795b2a2a47dc1f250e9895ac9e44c1c5c6 (diff) |
Allow loading of CSV files assigning resources to unknown children.
We probably need a config file option or rpkic setting to control this
behavior.
svn path=/branches/tk33/; revision=4467
-rw-r--r-- | rpkid/rpki/irdb/zookeeper.py | 44 | ||||
-rw-r--r-- | rpkid/rpki/rpkic.py | 4 |
2 files changed, 29 insertions, 19 deletions
diff --git a/rpkid/rpki/irdb/zookeeper.py b/rpkid/rpki/irdb/zookeeper.py index b8ed1245..17f057de 100644 --- a/rpkid/rpki/irdb/zookeeper.py +++ b/rpkid/rpki/irdb/zookeeper.py @@ -786,7 +786,7 @@ class Zookeeper(object): @django.db.transaction.commit_on_success - def load_prefixes(self, filename): + def load_prefixes(self, filename, ignore_missing_children = False): """ Whack IRDB to match prefixes.csv. """ @@ -805,14 +805,19 @@ class Zookeeper(object): for version, grouped, rset in ((4, grouped4, rpki.resource_set.resource_set_ipv4), (6, grouped6, rpki.resource_set.resource_set_ipv6)): for handle, prefixes in grouped.iteritems(): - child = self.resource_ca.children.get(handle = handle) - for prefix in rset(",".join(prefixes)): - obj, created = rpki.irdb.ChildNet.objects.get_or_create( - child = child, - start_ip = str(prefix.min), - end_ip = str(prefix.max), - version = version) - primary_keys.append(obj.pk) + try: + child = self.resource_ca.children.get(handle = handle) + except rpki.irdb.Child.DoesNotExist: + if not ignore_missing_children: + raise + else: + for prefix in rset(",".join(prefixes)): + obj, created = rpki.irdb.ChildNet.objects.get_or_create( + child = child, + start_ip = str(prefix.min), + end_ip = str(prefix.max), + version = version) + primary_keys.append(obj.pk) q = rpki.irdb.ChildNet.objects q = q.filter(child__issuer__exact = self.resource_ca) @@ -821,7 +826,7 @@ class Zookeeper(object): @django.db.transaction.commit_on_success - def load_asns(self, filename): + def load_asns(self, filename, ignore_missing_children = False): """ Whack IRDB to match asns.csv. """ @@ -836,13 +841,18 @@ class Zookeeper(object): primary_keys = [] for handle, asns in grouped.iteritems(): - child = self.resource_ca.children.get(handle = handle) - for asn in rpki.resource_set.resource_set_as(",".join(asns)): - obj, created = rpki.irdb.ChildASN.objects.get_or_create( - child = child, - start_as = str(asn.min), - end_as = str(asn.max)) - primary_keys.append(obj.pk) + try: + child = self.resource_ca.children.get(handle = handle) + except rpki.irdb.Child.DoesNotExist: + if not ignore_missing_children: + raise + else: + for asn in rpki.resource_set.resource_set_as(",".join(asns)): + obj, created = rpki.irdb.ChildASN.objects.get_or_create( + child = child, + start_as = str(asn.min), + end_as = str(asn.max)) + primary_keys.append(obj.pk) q = rpki.irdb.ChildASN.objects q = q.filter(child__issuer__exact = self.resource_ca) diff --git a/rpkid/rpki/rpkic.py b/rpkid/rpki/rpkic.py index 1ec1014a..0cdd6aae 100644 --- a/rpkid/rpki/rpkic.py +++ b/rpkid/rpki/rpkic.py @@ -455,7 +455,7 @@ class main(rpki.cli.Cmd): if len(argv) != 1: raise BadCommandSyntax("Need to specify prefixes.csv filename") - self.zoo.load_prefixes(argv[0]) + self.zoo.load_prefixes(argv[0], True) self.zoo.synchronize(self.zoo.handle) @@ -489,7 +489,7 @@ class main(rpki.cli.Cmd): if len(argv) != 1: raise BadCommandSyntax("Need to specify asns.csv filename") - self.zoo.load_asns(argv[0]) + self.zoo.load_asns(argv[0], True) self.zoo.synchronize(self.zoo.handle) |