diff options
author | Michael Elkins <melkins@tislabs.com> | 2013-02-28 00:07:35 +0000 |
---|---|---|
committer | Michael Elkins <melkins@tislabs.com> | 2013-02-28 00:07:35 +0000 |
commit | 6dd2299b724a20dcfb0aec86e7745464eb7e9300 (patch) | |
tree | b4be3f7fba64259fe523ff9cee875f13d825bd9d | |
parent | 958fd4069679fd74dc80a9eeb4c5b3be953090ac (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.in | 6 | ||||
-rw-r--r-- | rpkid/portal-gui/scripts/rpkigui-flatten-roas.py | 34 |
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() |