diff --git a/netbox/core/choices.py b/netbox/core/choices.py index 6603a7d4f77..34d1460173f 100644 --- a/netbox/core/choices.py +++ b/netbox/core/choices.py @@ -13,6 +13,7 @@ class DataSourceStatusChoices(ChoiceSet): SYNCING = 'syncing' COMPLETED = 'completed' FAILED = 'failed' + READY = 'ready' CHOICES = ( (NEW, _('New'), 'blue'), @@ -20,6 +21,7 @@ class DataSourceStatusChoices(ChoiceSet): (SYNCING, _('Syncing'), 'cyan'), (COMPLETED, _('Completed'), 'green'), (FAILED, _('Failed'), 'red'), + (READY, _('Ready'), 'green'), ) diff --git a/netbox/core/forms/model_forms.py b/netbox/core/forms/model_forms.py index 52c68fd7930..74c2880669e 100644 --- a/netbox/core/forms/model_forms.py +++ b/netbox/core/forms/model_forms.py @@ -16,6 +16,7 @@ from utilities.forms.fields import CommentField, JSONField from utilities.forms.rendering import FieldSet from utilities.forms.widgets import HTMXSelect +from core.choices import DataSourceStatusChoices __all__ = ( 'ConfigRevisionForm', @@ -79,14 +80,24 @@ def __init__(self, *args, **kwargs): if self.instance and self.instance.parameters: self.fields[field_name].initial = self.instance.parameters.get(name) - def save(self, *args, **kwargs): + def clean(self): + super().clean() + if not self.instance.pk: + self.cleaned_data['status'] = DataSourceStatusChoices.NEW + else: + if not self.data.get('sync_interval'): + self.cleaned_data['status'] = DataSourceStatusChoices.READY + def save(self, *args, **kwargs): parameters = {} for name in self.fields: if name.startswith('backend_'): parameters[name[8:]] = self.cleaned_data[name] self.instance.parameters = parameters + # update status + self.instance.status = self.cleaned_data.get('status', self.instance.status) + return super().save(*args, **kwargs) diff --git a/netbox/core/jobs.py b/netbox/core/jobs.py index 8b516e6604a..db596366914 100644 --- a/netbox/core/jobs.py +++ b/netbox/core/jobs.py @@ -31,7 +31,6 @@ def enqueue(cls, *args, **kwargs): # Update the DataSource's synchronization status to queued if datasource := job.object: - datasource.status = DataSourceStatusChoices.QUEUED DataSource.objects.filter(pk=datasource.pk).update(status=datasource.status) return job diff --git a/netbox/core/models/data.py b/netbox/core/models/data.py index 52a11c58ee3..6cfb1bf8d94 100644 --- a/netbox/core/models/data.py +++ b/netbox/core/models/data.py @@ -112,7 +112,6 @@ def backend_class(self): @property def ready_for_sync(self): return self.enabled and self.status not in ( - DataSourceStatusChoices.QUEUED, DataSourceStatusChoices.SYNCING )