diff options
author | Rob Austein <sra@hactrn.net> | 2016-04-23 15:03:09 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2016-04-23 15:03:09 +0000 |
commit | 44d1c604a15ff23151b5b7b40a5953b2af9ca935 (patch) | |
tree | a308a4f5d39f3968b9ddc89cdfa363f4bccaaa2b /rpki/rpkidb | |
parent | c4b459b8e80471f071d0d335771b5cbaf79ec1d4 (diff) |
Upon further analysis: Roots and Turtles don't need handles, only
Parents do, because Roots will be uniquely named by reference to their
associated Parent. So move the handle back to Parent.
svn path=/branches/tk705/; revision=6370
Diffstat (limited to 'rpki/rpkidb')
-rw-r--r-- | rpki/rpkidb/migrations/0002_add_turtle.py | 10 | ||||
-rw-r--r-- | rpki/rpkidb/migrations/0003_turtle_data.py | 2 | ||||
-rw-r--r-- | rpki/rpkidb/migrations/0004_turtle_cleanup.py | 8 | ||||
-rw-r--r-- | rpki/rpkidb/migrations/0005_turtle_rehome.py | 9 | ||||
-rw-r--r-- | rpki/rpkidb/models.py | 30 |
5 files changed, 17 insertions, 42 deletions
diff --git a/rpki/rpkidb/migrations/0002_add_turtle.py b/rpki/rpkidb/migrations/0002_add_turtle.py index e898f43a..fc45c46e 100644 --- a/rpki/rpkidb/migrations/0002_add_turtle.py +++ b/rpki/rpkidb/migrations/0002_add_turtle.py @@ -15,7 +15,6 @@ class Migration(migrations.Migration): name='Turtle', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('parent_handle', models.SlugField(max_length=255)), ('repository', models.ForeignKey(related_name='parents', to='rpkidb.Repository')), ('tenant', models.ForeignKey(related_name='parents', to='rpkidb.Tenant')), ], @@ -30,11 +29,6 @@ class Migration(migrations.Migration): ), migrations.RenameField( model_name='parent', - old_name='parent_handle', - new_name='old_parent_handle', - ), - migrations.RenameField( - model_name='parent', old_name='repository', new_name='old_repository', ), @@ -49,8 +43,4 @@ class Migration(migrations.Migration): field=models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, default=0, serialize=False, to='rpkidb.Turtle'), preserve_default=False, ), - migrations.AlterUniqueTogether( - name='turtle', - unique_together=set([('tenant', 'parent_handle')]), - ), ] diff --git a/rpki/rpkidb/migrations/0003_turtle_data.py b/rpki/rpkidb/migrations/0003_turtle_data.py index dbf3b211..90bc8854 100644 --- a/rpki/rpkidb/migrations/0003_turtle_data.py +++ b/rpki/rpkidb/migrations/0003_turtle_data.py @@ -10,7 +10,6 @@ def turtle_forward(apps, schema_editor): db_alias = schema_editor.connection.alias for parent in Parent.objects.using(db_alias).all(): turtle = Turtle.objects.using(db_alias).create( - parent_handle = parent.old_parent_handle, tenant = parent.old_tenant, repository = parent.old_repository) parent.turtle_ptr = turtle @@ -22,7 +21,6 @@ def turtle_reverse(apps, schema_editor): Parent = apps.get_model("rpkidb", "Parent") db_alias = schema_editor.connection.alias for parent in Parent.objects.using(db_alias).all(): - parent.old_parent_handle = parent.turtle_ptr.parent_handle parent.old_tenant = parent.turtle_ptr.tenant parent.old_repository = parent.turtle_ptr.repository parent.turtle_ptr = None diff --git a/rpki/rpkidb/migrations/0004_turtle_cleanup.py b/rpki/rpkidb/migrations/0004_turtle_cleanup.py index 5d2d78ec..58a664a0 100644 --- a/rpki/rpkidb/migrations/0004_turtle_cleanup.py +++ b/rpki/rpkidb/migrations/0004_turtle_cleanup.py @@ -13,14 +13,14 @@ class Migration(migrations.Migration): operations = [ migrations.RemoveField( model_name='parent', - name='old_parent_handle', - ), - migrations.RemoveField( - model_name='parent', name='old_repository', ), migrations.RemoveField( model_name='parent', name='old_tenant', ), + migrations.AlterUniqueTogether( + name='parent', + unique_together=set([('turtle_ptr', 'parent_handle')]), + ), ] diff --git a/rpki/rpkidb/migrations/0005_turtle_rehome.py b/rpki/rpkidb/migrations/0005_turtle_rehome.py index 0724ceaa..a3e6586f 100644 --- a/rpki/rpkidb/migrations/0005_turtle_rehome.py +++ b/rpki/rpkidb/migrations/0005_turtle_rehome.py @@ -11,11 +11,6 @@ class Migration(migrations.Migration): ] operations = [ - migrations.RenameField( - model_name='turtle', - old_name='parent_handle', - new_name='turtle_handle', - ), migrations.AlterField( model_name='ca', name='parent', @@ -31,8 +26,4 @@ class Migration(migrations.Migration): name='tenant', field=models.ForeignKey(related_name='turtles', to='rpkidb.Tenant'), ), - migrations.AlterUniqueTogether( - name='turtle', - unique_together=set([('tenant', 'turtle_handle')]), - ), ] diff --git a/rpki/rpkidb/models.py b/rpki/rpkidb/models.py index 848c691a..4bb95932 100644 --- a/rpki/rpkidb/models.py +++ b/rpki/rpkidb/models.py @@ -544,16 +544,22 @@ class Repository(models.Model): # single place to hang a relationship with the CA model. class Turtle(models.Model): - turtle_handle = models.SlugField(max_length = 255) tenant = models.ForeignKey(Tenant, related_name = "turtles") repository = models.ForeignKey(Repository, related_name = "turtles") - class Meta: - unique_together = ("tenant", "turtle_handle") + @property + def turtle_handle(self): + try: + return self.parent.parent_handle + except Parent.DoesNotExist: + return "<Root>" + except: + return "<???>" @xml_hooks class Parent(Turtle): + parent_handle = models.SlugField(max_length = 255) bpki_cert = CertificateField(null = True) bpki_glue = CertificateField(null = True) peer_contact_uri = models.TextField(null = True) @@ -564,6 +570,8 @@ class Parent(Turtle): bsc = models.ForeignKey(BSC, related_name = "parents") objects = XMLManager() + class Meta: + unique_together = ("turtle_ptr", "parent_handle") xml_template = XMLTemplate( name = "parent", @@ -578,23 +586,11 @@ class Parent(Turtle): except: uri = "" try: - return "<Parent: {}.{}{}>".format(self.tenant.tenant_handle, self.turtle_handle, uri) + return "<Parent: {}.{}{}>".format(self.tenant.tenant_handle, self.parent_handle, uri) except: return "<Parent: Parent object>" - # We need to preserve the name "parent_handle" to keep the XML - # code simple, so just pass it through to turtle_handle. - - @property - def parent_handle(self): - return self.turtle_handle - - @parent_handle.setter - def parent_handle(self, value): - self.turtle_handle = value - - @tornado.gen.coroutine def xml_pre_delete_hook(self, rpkid): trace_call_chain() @@ -693,7 +689,7 @@ class Parent(Turtle): trace_call_chain() skis_from_parent = yield self.get_skis(rpkid = rpkid) for rc_name, skis_to_revoke in skis_from_parent.iteritems(): - for ca_detail in CADetail.objects.filter(ca__parent = self).exclude(state = "revoked"): + for ca_detail in CADetail.objects.filter(ca__turtle = self).exclude(state = "revoked"): skis_to_revoke.discard(ca_detail.latest_ca_cert.gSKI()) yield self.revoke_skis(rpkid, rc_name, skis_to_revoke) |