From cef6b6cc618628b5a64f7bddf8216a8ab07c701b Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Thu, 24 May 2018 10:36:07 +0200 Subject: [PATCH 8/8] make OzwilloInstance.domain_slug non unique (to be rebased_ uniqueness prevent creating a new instance when the previous one has been destroyed. Collision are prevented by an explicit query in the create_instance test. --- .../migrations/0003_auto_20180524_0828.py | 20 +++++++++++++++++++ hobo/contrib/ozwillo/models.py | 5 +++-- hobo/contrib/ozwillo/views.py | 3 ++- 3 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 hobo/contrib/ozwillo/migrations/0003_auto_20180524_0828.py diff --git a/hobo/contrib/ozwillo/migrations/0003_auto_20180524_0828.py b/hobo/contrib/ozwillo/migrations/0003_auto_20180524_0828.py new file mode 100644 index 0000000..de56993 --- /dev/null +++ b/hobo/contrib/ozwillo/migrations/0003_auto_20180524_0828.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.13 on 2018-05-24 08:28 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ozwillo', '0002_auto_20180517_1047'), + ] + + operations = [ + migrations.AlterField( + model_name='ozwilloinstance', + name='domain_slug', + field=models.CharField(max_length=250), + ), + ] diff --git a/hobo/contrib/ozwillo/models.py b/hobo/contrib/ozwillo/models.py index b1a4e59..db0f713 100644 --- a/hobo/contrib/ozwillo/models.py +++ b/hobo/contrib/ozwillo/models.py @@ -54,7 +54,7 @@ class OzwilloInstance(models.Model): state = models.CharField(max_length=16, default=STATE_NEW, choices=STATES) created = models.DateTimeField(auto_now_add=True) modified = models.DateTimeField(auto_now=True) - domain_slug = models.CharField(max_length=250, unique=True) + domain_slug = models.CharField(max_length=250) external_ozwillo_id = models.CharField(max_length=450, unique=True) deploy_data = models.TextField(null=True) @@ -259,8 +259,9 @@ class OzwilloInstance(models.Model): 'delete_tenant', '--force-drop', tenant ]) - self.delete() logger.info(u'ozwillo: destroy finished') + self.state = self.STATE_DESTROYED + self.save() def run_command(args): diff --git a/hobo/contrib/ozwillo/views.py b/hobo/contrib/ozwillo/views.py index 2de0b40..9b18b47 100644 --- a/hobo/contrib/ozwillo/views.py +++ b/hobo/contrib/ozwillo/views.py @@ -85,7 +85,8 @@ def create_publik_instance(request): return HttpResponseBadRequest('missing parameter "organization_name"') org_name = slugify(data['organization_name']) - if OzwilloInstance.objects.filter(domain_slug=org_name): + # forbid creation of an instance if a not destroyed previous one exists + if OzwilloInstance.objects.exclude(state=OzwilloInstance.STATE_DESTROYED).filter(domain_slug=org_name): logger.warning(u'ozwillo: instance %s already exists', org_name) return HttpResponseBadRequest('instance %s already exists' % org_name) -- 2.17.0