diff --git a/rootfs/api/models/app.py b/rootfs/api/models/app.py index 9c8b151f2..9b9eede0b 100644 --- a/rootfs/api/models/app.py +++ b/rootfs/api/models/app.py @@ -207,7 +207,7 @@ def _refresh_ingress(self, hosts, tls_map, ssl_redirect, appsettings): except KubeException as e: raise ServiceUnavailable('Could not create Ingress in Kubernetes') from e - def refresh(self, app_settings=None, tls=None): + def refresh(self, app_settings=None, tls=None, domains=None): if not getattr(self, 'refresh_enabled', True): return app_settings = app_settings if app_settings else self.appsettings_set.latest() @@ -217,7 +217,8 @@ def refresh(self, app_settings=None, tls=None): ssl_redirect = bool(tls.https_enforced) certs_auto_enabled = bool(tls.certs_auto_enabled) hosts, tls_map = [], defaultdict(list) - for domain in Domain.objects.filter(app=self): + domains = domains if domains else Domain.objects.filter(app=self) + for domain in domains: host = str(domain.domain) hosts.append(host) if domain.certificate: diff --git a/rootfs/api/models/domain.py b/rootfs/api/models/domain.py index 651fc5c59..473ae79ae 100644 --- a/rootfs/api/models/domain.py +++ b/rootfs/api/models/domain.py @@ -27,22 +27,30 @@ class Meta: @transaction.atomic def save(self, *args, **kwargs): + domains = list(self.app.domain_set.all()) + # certificate attach update domains + if self in domains: + domains.remove(self) + domains.append(self) try: # Save to DB return super(Domain, self).save(*args, **kwargs) finally: - self.app.refresh() + self.app.refresh(domains=domains) @transaction.atomic def delete(self, *args, **kwargs): # Deatch cert, updates k8s if self.certificate: self.certificate.detach(domain=str(self.domain)) + domains = list(self.app.domain_set.all()) + if self in domains: + domains.remove(self) try: # Delete from DB return super(Domain, self).delete(*args, **kwargs) finally: - self.app.refresh() + self.app.refresh(domains=domains) def __str__(self): return self.domain