diff options
author | Rob Austein <sra@hactrn.net> | 2013-04-18 23:30:56 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2013-04-18 23:30:56 +0000 |
commit | de186b4393ce25cdfb51b1c3240e0326c85890cf (patch) | |
tree | 619ac6176b1dd05fe528d41cc26d15a6307cd9f0 /rpkid | |
parent | 89506621cfbb5f539fd93ca0c0250a785bd5f143 (diff) |
Teach rpkic and yamltest about Ghostbusters records.
svn path=/trunk/; revision=5300
Diffstat (limited to 'rpkid')
-rw-r--r-- | rpkid/rpki/irdb/zookeeper.py | 21 | ||||
-rw-r--r-- | rpkid/rpki/rpkic.py | 15 | ||||
-rw-r--r-- | rpkid/tests/smoketest.1.yaml | 10 | ||||
-rw-r--r-- | rpkid/tests/smoketest.6.yaml | 19 | ||||
-rw-r--r-- | rpkid/tests/yamltest.py | 25 |
5 files changed, 90 insertions, 0 deletions
diff --git a/rpkid/rpki/irdb/zookeeper.py b/rpkid/rpki/irdb/zookeeper.py index bd32caf1..6b72a8a8 100644 --- a/rpkid/rpki/irdb/zookeeper.py +++ b/rpkid/rpki/irdb/zookeeper.py @@ -918,6 +918,27 @@ class Zookeeper(object): max_prefixlen = int(p.max_prefixlen)) + @django.db.transaction.commit_on_success + def load_ghostbuster_requests(self, filename, parent = None): + """ + Whack IRDB to match ghostbusters.vcard. + + This accepts one or more vCards from a file. + """ + + self.resource_ca.ghostbuster_requests.filter(parent = parent).delete() + + vcard = [] + + for line in open(filename, "r"): + if not vcard and not line.upper().startswith("BEGIN:VCARD"): + continue + vcard.append(line) + if line.upper().startswith("END:VCARD"): + self.resource_ca.ghostbuster_requests.create(vcard = "".join(vcard), parent = parent) + vcard = [] + + def call_rpkid(self, *pdus): """ Issue a call to rpkid, return result. diff --git a/rpkid/rpki/rpkic.py b/rpkid/rpki/rpkic.py index 342ed339..c5a9a919 100644 --- a/rpkid/rpki/rpkic.py +++ b/rpkid/rpki/rpkic.py @@ -617,6 +617,21 @@ class main(Cmd): self.zoo.run_rpkid_now() + def do_load_ghostbuster_requests(self, arg): + """ + Load Ghostbuster requests into IRDB from file. + """ + + argv = arg.split() + + if len(argv) != 1: + raise BadCommandSyntax("Expecting filename of Ghostbuster vCard(s)") + + self.zoo.load_ghostbuster_requests(argv[0]) + if self.autosync: + self.zoo.run_rpkid_now() + + def do_synchronize(self, arg): """ Whack daemons to match IRDB. diff --git a/rpkid/tests/smoketest.1.yaml b/rpkid/tests/smoketest.1.yaml index 2a498997..36c0a43c 100644 --- a/rpkid/tests/smoketest.1.yaml +++ b/rpkid/tests/smoketest.1.yaml @@ -34,6 +34,16 @@ regen_margin: 2m valid_for: 2d kids: - name: R0 + ghostbuster: | + BEGIN:VCARD + VERSION:4.0 + FN:R0 + ORG:Organizational Entity + ADR;TYPE=WORK:;;42 Twisty Passage;Deep Cavern;WA;98666;U.S.A. + TEL;TYPE=VOICE,TEXT,WORK;VALUE=uri:tel:+1-666-555-1212 + TEL;TYPE=FAX,WORK;VALUE=uri:tel:+1-666-555-1213 + EMAIL:human@example.com + END:VCARD kids: - name: Alice ipv4: 192.0.2.1-192.0.2.33 diff --git a/rpkid/tests/smoketest.6.yaml b/rpkid/tests/smoketest.6.yaml index dbcc06e3..72bded44 100644 --- a/rpkid/tests/smoketest.6.yaml +++ b/rpkid/tests/smoketest.6.yaml @@ -22,6 +22,12 @@ kids: kids: - name: Betty hosted_by: RIR + ghostbuster: | + BEGIN:VCARD + VERSION:4.0 + FN:Carol Clever + EMAIL:carol@example.org + END:VCARD kids: - name: Carol hosted_by: RIR @@ -40,6 +46,19 @@ kids: roa_request: - asn: 64533 ipv6: 2001:db8::80/121 + ghostbusters: + - | + BEGIN:VCARD + VERSION:4.0 + FN:Fiona Fearless + EMAIL:fiona@example.org + END:VCARD + - | + BEGIN:VCARD + VERSION:4.0 + FN:Frank Fearless + EMAIL:frank@example.org + END:VCARD --- - name: Fiona add_as: 33 diff --git a/rpkid/tests/yamltest.py b/rpkid/tests/yamltest.py index 1e9256e3..6c950645 100644 --- a/rpkid/tests/yamltest.py +++ b/rpkid/tests/yamltest.py @@ -215,6 +215,12 @@ class allocation(object): if "regen_margin" in yaml: self.regen_margin = rpki.sundial.timedelta.parse(yaml["regen_margin"]).convert_to_seconds() self.roa_requests = [roa_request.parse(y) for y in yaml.get("roa_request", yaml.get("route_origin", ()))] + if "ghostbusters" in yaml: + self.ghostbusters = yaml.get("ghostbusters") + elif "ghostbuster" in yaml: + self.ghostbusters = [yaml.get("ghostbuster")] + else: + self.ghostbusters = [] for r in self.roa_requests: if r.v4: self.base.v4 |= r.v4.to_resource_set() @@ -349,6 +355,24 @@ class allocation(object): if not stop_after_config: self.run_rpkic("load_roa_requests", fn) + def dump_ghostbusters(self): + """ + Write Ghostbusters vCard file. + """ + if self.ghostbusters: + fn = "%s.ghostbusters.vcard" % d.name + if not skip_config: + path = self.path(fn) + print "Writing", path + f = open(path, "w") + for i, g in enumerate(self.ghostbusters): + if i: + f.write("\n") + f.write(g) + f.close() + if not stop_after_config: + self.run_rpkic("load_ghostbuster_requests", fn) + @property def pubd(self): """ @@ -759,6 +783,7 @@ try: d.dump_asns() d.dump_prefixes() d.dump_roas() + d.dump_ghostbusters() # Wait until something terminates. |