diff --git a/frontend/templates/frontend/login.html b/frontend/templates/frontend/login.html index 618bff1..563720a 100644 --- a/frontend/templates/frontend/login.html +++ b/frontend/templates/frontend/login.html @@ -1,4 +1,5 @@ + {% extends 'frontend/base.html' %} {% block title %} - Login{% endblock %} @@ -9,6 +10,7 @@

Anmelden

+ Benutzer holger, Passwort moep
@@ -27,4 +29,4 @@
-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/lib/mikrotik.py b/lib/mikrotik.py index 1ae2bd1..38f9a6f 100644 --- a/lib/mikrotik.py +++ b/lib/mikrotik.py @@ -360,20 +360,45 @@ class MikrotikModelMixin(RoutedModelAbstract): def sync_from_mikrotik(classname): + to_delete = [] _st = classname() for i in _st.router_get_all: i = {k.replace('-', '_'): v for k, v in i.items()} try: - existing = classname.objects.get(id=i['id']) + existing = list(classname.objects.filter(id=i['id'])) + if not existing: + raise ValueError("Empty") + + _to_delete = [] + if len(existing) > 1: + _to_delete = [a.internal_id for a in existing] + for e in existing: + if e.active_address: + existing = [e] + break + + + _logger.error(f"More than 1 Entry for id {i['id']} - {existing}") + + existing = existing[0] + if _to_delete: + _to_delete.remove(existing.internal_id) + to_delete.extend(_to_delete) for k, v in i.items(): if hasattr(existing, k): _logger.debug(f'Updating {k} to {v} - {existing}') setattr(existing, k, v) existing.save() - except classname.DoesNotExist: + except (ValueError, classname.DoesNotExist): _logger.info(f'Creating {i["id"]}') try: classname.objects.create(**i) except IntegrityError as e: _logger.error(f'Could not create {i["id"]}, already exists') _logger.exception(e) + if to_delete: + deletions = classname.objects.filter(internal_id__in=to_delete) + _logger.warning(f"Delete {classname} items {deletions}") + # deletions.delete() + + diff --git a/manager/admin.py b/manager/admin.py index 2c876c1..36aa5d1 100644 --- a/manager/admin.py +++ b/manager/admin.py @@ -56,11 +56,22 @@ def resync_all(*args, **kwargs): container[hwaddr].lease = lease container[hwaddr].save() elif lxc: - DevContainer.objects.create( - dns=dns, - lease=lease, - lxc=lxc, - ) + try: + DevContainer.objects.create( + dns=dns, + lease=lease, + lxc=lxc, + ) + except Exception as e: + logging.error(e) + if 'dns_id' in str(e): + existing = DevContainer.objects.get(dns=dns) + existing.lease=lease + existing.lxc = lxc + existing.save() + else: + raise e + # Now remove the non lxc devcontainers DevContainer.objects.filter(lxc__isnull=True).delete() diff --git a/manager/models.py b/manager/models.py index f97ad16..deb7b1f 100644 --- a/manager/models.py +++ b/manager/models.py @@ -449,7 +449,10 @@ class DevContainer(BaseModel, SearchableMixin, TaskAwareModelMixin): self.lease.mac_address = self.lxc.hwaddr self.lease.save() - super().save(*args, **kwargs) + try: + super().save(*args, **kwargs) + except Exception as e: + logging.error(e) def __str__(self): return f"{self.name} ({self.address})"