aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Elkins <melkins@tislabs.com>2013-02-28 00:07:35 +0000
committerMichael Elkins <melkins@tislabs.com>2013-02-28 00:07:35 +0000
commit6dd2299b724a20dcfb0aec86e7745464eb7e9300 (patch)
treeb4be3f7fba64259fe523ff9cee875f13d825bd9d
parent958fd4069679fd74dc80a9eeb4c5b3be953090ac (diff)
add new script rpkigui-flatten-roas script to take care of flattening old roas which had multiple prefixes
see #421 svn path=/trunk/; revision=5086
-rw-r--r--rpkid/Makefile.in6
-rw-r--r--rpkid/portal-gui/scripts/rpkigui-flatten-roas.py34
2 files changed, 39 insertions, 1 deletions
diff --git a/rpkid/Makefile.in b/rpkid/Makefile.in
index 2b405c51..5980d6bd 100644
--- a/rpkid/Makefile.in
+++ b/rpkid/Makefile.in
@@ -64,7 +64,8 @@ SCRIPTS = rpki-sql-backup rpki-sql-setup rpki-start-servers irbe_cli irdbd \
portal-gui/scripts/rpki-manage
# scripts we build, but don't install
-BUILD_SCRIPTS = portal-gui/scripts/rpkigui-reset-demo
+BUILD_SCRIPTS = portal-gui/scripts/rpkigui-reset-demo \
+ portal-gui/scripts/rpkigui-flatten-roas
AUX_SCRIPTS =
@@ -278,6 +279,9 @@ portal-gui/scripts/rpkigui-reset-demo: portal-gui/scripts/rpkigui-reset-demo.py
portal-gui/scripts/rpkigui-check-expired: portal-gui/scripts/rpkigui-check-expired.py
${COMPILE_DJANGO}
+portal-gui/scripts/rpkigui-flatten-roas: portal-gui/scripts/rpkigui-flatten-roas.py
+ ${COMPILE_DJANGO}
+
portal-gui/rpki.wsgi: ${srcdir}/portal-gui/rpki.wsgi.in
sed -e "s|@VIRTUAL"_"ENV@|${VIRTUAL_ENV}|" \
-e "s|@PYTHON""PATH@|${sysconfdir}/rpki|" \
diff --git a/rpkid/portal-gui/scripts/rpkigui-flatten-roas.py b/rpkid/portal-gui/scripts/rpkigui-flatten-roas.py
new file mode 100644
index 00000000..e94484cf
--- /dev/null
+++ b/rpkid/portal-gui/scripts/rpkigui-flatten-roas.py
@@ -0,0 +1,34 @@
+from django.db import transaction
+from django.db.models import Count
+from rpki.gui.app.models import ROARequest
+from rpki.irdb.zookeeper import Zookeeper
+
+handles = set()
+
+
+@transaction.commit_on_success
+def flatten():
+ for roa in ROARequest.objects.annotate(num_prefixes=Count('prefixes')).filter(num_prefixes__gt=1):
+ print 'splitting roa for AS%d' % roa.asn
+ for pfx in roa.prefixes.all():
+ # create new roa objects for each prefix
+ newroa = ROARequest.objects.create(
+ issuer=roa.issuer,
+ asn=roa.asn)
+ newroa.prefixes.create(
+ version=pfx.version,
+ prefix=pfx.prefix,
+ prefixlen=pfx.prefixlen,
+ max_prefixlen=pfx.max_prefixlen
+ )
+ roa.delete()
+ handles.add(roa.issuer.handle)
+
+flatten()
+
+if handles:
+ # poke rpkid to run the cron job for each handle that had a roa change
+ z = Zookeeper()
+ for h in handles:
+ z.reset_identity(h)
+ z.run_rpkid_now()