diff --git a/cluster/admin.py b/cluster/admin.py index 491d03d..9fb403c 100644 --- a/cluster/admin.py +++ b/cluster/admin.py @@ -17,6 +17,6 @@ class WorkerAdmin(admin.ModelAdmin): @admin.register(WorkerStatus) class WorkerStatusAdmin(admin.ModelAdmin): - list_display = ('worker', 'last_seen', 'config_version', 'config_pending', 'last_reload', 'last_restart') - list_filter = ('config_pending', 'last_seen', 'last_reload', 'last_restart') + list_display = ('worker', 'last_seen', 'config_version', 'last_reload', 'last_restart') + list_filter = ('last_seen', 'last_reload', 'last_restart') diff --git a/cluster/cluster_api.py b/cluster/cluster_api.py index d30f74d..25bc3cb 100644 --- a/cluster/cluster_api.py +++ b/cluster/cluster_api.py @@ -30,6 +30,7 @@ def get_worker(request): try: worker_config_version = int(request.GET.get('worker_config_version')) worker_version = int(request.GET.get('worker_version')) + worker_dns_version = int(request.GET.get('dns_version')) except: worker.error_status = 'missing_version' worker.save() @@ -51,6 +52,8 @@ def get_worker(request): worker_status.config_version = worker_config_version if worker_status.worker_version != worker_version: worker_status.worker_version = worker_version + if worker_status.dns_version != worker_dns_version: + worker_status.dns_version = worker_dns_version worker_status.last_seen = timezone.now() worker_status.save() @@ -128,6 +131,7 @@ def api_get_worker_config_files(request): 'cluster_mode': cluster_settings.cluster_mode, 'restart_mode': cluster_settings.restart_mode, 'config_version': cluster_settings.config_version, + 'dns_version': cluster_settings.dns_version, }, }, status=200 @@ -155,6 +159,7 @@ def api_cluster_status(request): 'cluster_mode': cluster_settings.cluster_mode, 'restart_mode': cluster_settings.restart_mode, 'config_version': cluster_settings.config_version, + 'dns_version': cluster_settings.dns_version, }, } diff --git a/cluster/migrations/0011_clustersettings_dns_version_workerstatus_dns_version.py b/cluster/migrations/0011_clustersettings_dns_version_workerstatus_dns_version.py new file mode 100644 index 0000000..363b93a --- /dev/null +++ b/cluster/migrations/0011_clustersettings_dns_version_workerstatus_dns_version.py @@ -0,0 +1,23 @@ +# Generated by Django 5.2.9 on 2025-12-31 21:15 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cluster', '0010_alter_worker_error_status_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='clustersettings', + name='dns_version', + field=models.PositiveIntegerField(default=0), + ), + migrations.AddField( + model_name='workerstatus', + name='dns_version', + field=models.PositiveIntegerField(default=0), + ), + ] diff --git a/cluster/migrations/0012_remove_workerstatus_config_pending.py b/cluster/migrations/0012_remove_workerstatus_config_pending.py new file mode 100644 index 0000000..46d3111 --- /dev/null +++ b/cluster/migrations/0012_remove_workerstatus_config_pending.py @@ -0,0 +1,17 @@ +# Generated by Django 5.2.9 on 2025-12-31 21:27 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('cluster', '0011_clustersettings_dns_version_workerstatus_dns_version'), + ] + + operations = [ + migrations.RemoveField( + model_name='workerstatus', + name='config_pending', + ), + ] diff --git a/cluster/models.py b/cluster/models.py index 3ca7842..24e1aa0 100644 --- a/cluster/models.py +++ b/cluster/models.py @@ -19,6 +19,7 @@ class ClusterSettings(models.Model): ) ) config_version = models.PositiveIntegerField(default=0) + dns_version = models.PositiveIntegerField(default=0) updated = models.DateTimeField(auto_now=True) created = models.DateTimeField(auto_now_add=True) @@ -47,7 +48,7 @@ class Worker(models.Model): ('ip_lock', _('IP lock is enabled, but the worker is attempting to access from a different IP address.')), ('worker_disabled', _('Worker is not enabled')), ('cluster_disabled', _('Cluster is not enabled')), - ('missing_version', _('Please report worker_config_version and worker_version in the API request.')), + ('missing_version', _('Please report worker_config_version, worker_dns_version and worker_version in the API request.')), ('update_required', _('Worker update is required.')) )) @@ -61,8 +62,8 @@ class WorkerStatus(models.Model): last_seen = models.DateTimeField(auto_now=True) last_reload = models.DateTimeField(blank=True, null=True) last_restart = models.DateTimeField(blank=True, null=True) + dns_version = models.PositiveIntegerField(default=0) config_version = models.PositiveIntegerField(default=0) - config_pending = models.BooleanField(default=False) worker_version = models.PositiveIntegerField(default=0) active_peers = models.PositiveIntegerField(default=0) wireguard_status = models.JSONField(default=dict) diff --git a/dns/functions.py b/dns/functions.py index f83b4cd..9269fed 100644 --- a/dns/functions.py +++ b/dns/functions.py @@ -8,8 +8,11 @@ from .models import DNSSettings, StaticHost, DNSFilterList def compress_dnsmasq_config(): output_file = "/etc/dnsmasq/dnsmasq_config.tar.gz" base_dir = "/etc/dnsmasq" - - if not ClusterSettings.objects.filter(enabled=True, name='cluster_settings').exists(): + cluster_settings = ClusterSettings.objects.filter(enabled=True, name='cluster_settings').first() + if cluster_settings: + cluster_settings.dns_version += 1 + cluster_settings.save() + else: if os.path.exists(output_file): os.remove(output_file) return None diff --git a/templates/cluster/workers_list.html b/templates/cluster/workers_list.html index 9c390a4..d4a421c 100644 --- a/templates/cluster/workers_list.html +++ b/templates/cluster/workers_list.html @@ -24,7 +24,7 @@ {% else %} {% if worker.enabled %} - {% if cluster_settings.config_version != worker.workerstatus.config_version %} + {% if cluster_settings.config_version != worker.workerstatus.config_version or cluster_settings.dns_version != worker.workerstatus.dns_version %} {% else %} @@ -63,10 +63,7 @@