diff --git a/netbox/dcim/api/serializers.py b/netbox/dcim/api/serializers.py index eea9d45b5..4f5df9b79 100644 --- a/netbox/dcim/api/serializers.py +++ b/netbox/dcim/api/serializers.py @@ -7,8 +7,8 @@ from rest_framework.validators import UniqueTogetherValidator from circuits.models import Circuit, CircuitTermination from dcim.constants import ( - CONNECTION_STATUS_CHOICES, IFACE_FF_CHOICES, IFACE_MODE_CHOICES, IFACE_ORDERING_CHOICES, RACK_FACE_CHOICES, - RACK_TYPE_CHOICES, RACK_WIDTH_CHOICES, STATUS_CHOICES, SUBDEVICE_ROLE_CHOICES, + CONNECTION_STATUS_CHOICES, DEVICE_STATUS_CHOICES, IFACE_FF_CHOICES, IFACE_MODE_CHOICES, IFACE_ORDERING_CHOICES, + RACK_FACE_CHOICES, RACK_TYPE_CHOICES, RACK_WIDTH_CHOICES, SUBDEVICE_ROLE_CHOICES, ) from dcim.models import ( ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay, @@ -483,7 +483,7 @@ class DeviceSerializer(CustomFieldModelSerializer): site = NestedSiteSerializer() rack = NestedRackSerializer() face = ChoiceFieldSerializer(choices=RACK_FACE_CHOICES) - status = ChoiceFieldSerializer(choices=STATUS_CHOICES) + status = ChoiceFieldSerializer(choices=DEVICE_STATUS_CHOICES) primary_ip = DeviceIPAddressSerializer() primary_ip4 = DeviceIPAddressSerializer() primary_ip6 = DeviceIPAddressSerializer() diff --git a/netbox/dcim/constants.py b/netbox/dcim/constants.py index 1948f32a2..5940c4025 100644 --- a/netbox/dcim/constants.py +++ b/netbox/dcim/constants.py @@ -203,19 +203,19 @@ IFACE_MODE_CHOICES = [ ] # Device statuses -STATUS_OFFLINE = 0 -STATUS_ACTIVE = 1 -STATUS_PLANNED = 2 -STATUS_STAGED = 3 -STATUS_FAILED = 4 -STATUS_INVENTORY = 5 -STATUS_CHOICES = [ - [STATUS_ACTIVE, 'Active'], - [STATUS_OFFLINE, 'Offline'], - [STATUS_PLANNED, 'Planned'], - [STATUS_STAGED, 'Staged'], - [STATUS_FAILED, 'Failed'], - [STATUS_INVENTORY, 'Inventory'], +DEVICE_STATUS_OFFLINE = 0 +DEVICE_STATUS_ACTIVE = 1 +DEVICE_STATUS_PLANNED = 2 +DEVICE_STATUS_STAGED = 3 +DEVICE_STATUS_FAILED = 4 +DEVICE_STATUS_INVENTORY = 5 +DEVICE_STATUS_CHOICES = [ + [DEVICE_STATUS_ACTIVE, 'Active'], + [DEVICE_STATUS_OFFLINE, 'Offline'], + [DEVICE_STATUS_PLANNED, 'Planned'], + [DEVICE_STATUS_STAGED, 'Staged'], + [DEVICE_STATUS_FAILED, 'Failed'], + [DEVICE_STATUS_INVENTORY, 'Inventory'], ] # Bootstrap CSS classes for device stasuses diff --git a/netbox/dcim/filters.py b/netbox/dcim/filters.py index 70d421e13..3f79acf8c 100644 --- a/netbox/dcim/filters.py +++ b/netbox/dcim/filters.py @@ -11,7 +11,7 @@ from tenancy.models import Tenant from utilities.filters import NullableCharFieldFilter, NumericInFilter from virtualization.models import Cluster from .constants import ( - IFACE_FF_LAG, NONCONNECTABLE_IFACE_TYPES, STATUS_CHOICES, VIRTUAL_IFACE_TYPES, WIRELESS_IFACE_TYPES, + DEVICE_STATUS_CHOICES, IFACE_FF_LAG, NONCONNECTABLE_IFACE_TYPES, VIRTUAL_IFACE_TYPES, WIRELESS_IFACE_TYPES, ) from .models import ( ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay, @@ -446,7 +446,7 @@ class DeviceFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Device model (slug)', ) status = django_filters.MultipleChoiceFilter( - choices=STATUS_CHOICES, + choices=DEVICE_STATUS_CHOICES, null_value=None ) is_full_depth = django_filters.BooleanFilter( diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index c45996286..c4af2e605 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -22,10 +22,10 @@ from utilities.forms import ( ) from virtualization.models import Cluster from .constants import ( - CONNECTION_STATUS_CHOICES, CONNECTION_STATUS_CONNECTED, IFACE_FF_CHOICES, IFACE_FF_LAG, IFACE_MODE_ACCESS, - IFACE_MODE_CHOICES, IFACE_MODE_TAGGED_ALL, IFACE_ORDERING_CHOICES, RACK_FACE_CHOICES, RACK_TYPE_CHOICES, - RACK_WIDTH_CHOICES, RACK_WIDTH_19IN, RACK_WIDTH_23IN, STATUS_CHOICES, SUBDEVICE_ROLE_CHILD, SUBDEVICE_ROLE_PARENT, - SUBDEVICE_ROLE_CHOICES, + CONNECTION_STATUS_CHOICES, CONNECTION_STATUS_CONNECTED, DEVICE_STATUS_CHOICES, IFACE_FF_CHOICES, IFACE_FF_LAG, + IFACE_MODE_ACCESS, IFACE_MODE_CHOICES, IFACE_MODE_TAGGED_ALL, IFACE_ORDERING_CHOICES, RACK_FACE_CHOICES, + RACK_TYPE_CHOICES, RACK_WIDTH_CHOICES, RACK_WIDTH_19IN, RACK_WIDTH_23IN, SUBDEVICE_ROLE_CHILD, + SUBDEVICE_ROLE_PARENT, SUBDEVICE_ROLE_CHOICES, ) from .formfields import MACAddressFormField from .models import ( @@ -888,7 +888,7 @@ class BaseDeviceCSVForm(forms.ModelForm): } ) status = CSVChoiceField( - choices=STATUS_CHOICES, + choices=DEVICE_STATUS_CHOICES, help_text='Operational status of device' ) @@ -1025,7 +1025,7 @@ class DeviceBulkEditForm(BootstrapMixin, CustomFieldBulkEditForm): device_role = forms.ModelChoiceField(queryset=DeviceRole.objects.all(), required=False, label='Role') tenant = forms.ModelChoiceField(queryset=Tenant.objects.all(), required=False) platform = forms.ModelChoiceField(queryset=Platform.objects.all(), required=False) - status = forms.ChoiceField(choices=add_blank_choice(STATUS_CHOICES), required=False, initial='') + status = forms.ChoiceField(choices=add_blank_choice(DEVICE_STATUS_CHOICES), required=False, initial='') serial = forms.CharField(max_length=50, required=False, label='Serial Number') class Meta: @@ -1036,7 +1036,7 @@ def device_status_choices(): status_counts = {} for status in Device.objects.values('status').annotate(count=Count('status')).order_by('status'): status_counts[status['status']] = status['count'] - return [(s[0], '{} ({})'.format(s[1], status_counts.get(s[0], 0))) for s in STATUS_CHOICES] + return [(s[0], '{} ({})'.format(s[1], status_counts.get(s[0], 0))) for s in DEVICE_STATUS_CHOICES] class DeviceFilterForm(BootstrapMixin, CustomFieldFilterForm): diff --git a/netbox/dcim/models.py b/netbox/dcim/models.py index 59a41a9da..d19ce7a49 100644 --- a/netbox/dcim/models.py +++ b/netbox/dcim/models.py @@ -844,7 +844,7 @@ class Device(CreatedUpdatedModel, CustomFieldModel): help_text='The lowest-numbered unit occupied by the device' ) face = models.PositiveSmallIntegerField(blank=True, null=True, choices=RACK_FACE_CHOICES, verbose_name='Rack face') - status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, default=STATUS_ACTIVE, verbose_name='Status') + status = models.PositiveSmallIntegerField(choices=DEVICE_STATUS_CHOICES, default=DEVICE_STATUS_ACTIVE, verbose_name='Status') primary_ip4 = models.OneToOneField( 'ipam.IPAddress', related_name='primary_ip4_for', on_delete=models.SET_NULL, blank=True, null=True, verbose_name='Primary IPv4' diff --git a/netbox/dcim/tests/test_forms.py b/netbox/dcim/tests/test_forms.py index acf71411e..c8d438728 100644 --- a/netbox/dcim/tests/test_forms.py +++ b/netbox/dcim/tests/test_forms.py @@ -26,7 +26,7 @@ class DeviceTestCase(TestCase): 'face': RACK_FACE_FRONT, 'position': 41, 'platform': get_id(Platform, 'juniper-junos'), - 'status': STATUS_ACTIVE, + 'status': DEVICE_STATUS_ACTIVE, }) self.assertTrue(test.is_valid(), test.fields['position'].choices) self.assertTrue(test.save()) @@ -43,7 +43,7 @@ class DeviceTestCase(TestCase): 'face': RACK_FACE_FRONT, 'position': 1, 'platform': get_id(Platform, 'juniper-junos'), - 'status': STATUS_ACTIVE, + 'status': DEVICE_STATUS_ACTIVE, }) self.assertFalse(test.is_valid()) @@ -59,7 +59,7 @@ class DeviceTestCase(TestCase): 'face': None, 'position': None, 'platform': None, - 'status': STATUS_ACTIVE, + 'status': DEVICE_STATUS_ACTIVE, }) self.assertTrue(test.is_valid()) self.assertTrue(test.save()) @@ -76,7 +76,7 @@ class DeviceTestCase(TestCase): 'face': RACK_FACE_REAR, 'position': None, 'platform': None, - 'status': STATUS_ACTIVE, + 'status': DEVICE_STATUS_ACTIVE, }) self.assertTrue(test.is_valid()) self.assertTrue(test.save()) diff --git a/netbox/extras/management/commands/run_inventory.py b/netbox/extras/management/commands/run_inventory.py index 574f47e3b..c42bdf50a 100644 --- a/netbox/extras/management/commands/run_inventory.py +++ b/netbox/extras/management/commands/run_inventory.py @@ -8,7 +8,7 @@ from django.db import transaction from ncclient.transport.errors import AuthenticationError from paramiko import AuthenticationException -from dcim.models import Device, InventoryItem, Site, STATUS_ACTIVE +from dcim.models import DEVICE_STATUS_ACTIVE, Device, InventoryItem, Site class Command(BaseCommand): @@ -41,7 +41,7 @@ class Command(BaseCommand): self.password = getpass("Password: ") # Attempt to inventory only active devices - device_list = Device.objects.filter(status=STATUS_ACTIVE) + device_list = Device.objects.filter(status=DEVICE_STATUS_ACTIVE) # --site: Include only devices belonging to specified site(s) if options['site']: diff --git a/netbox/virtualization/api/serializers.py b/netbox/virtualization/api/serializers.py index 6268c0227..7e2ec1690 100644 --- a/netbox/virtualization/api/serializers.py +++ b/netbox/virtualization/api/serializers.py @@ -9,7 +9,7 @@ from extras.api.customfields import CustomFieldModelSerializer from ipam.models import IPAddress from tenancy.api.serializers import NestedTenantSerializer from utilities.api import ChoiceFieldSerializer, ValidatedModelSerializer -from virtualization.constants import STATUS_CHOICES +from virtualization.constants import VM_STATUS_CHOICES from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine @@ -94,7 +94,7 @@ class VirtualMachineIPAddressSerializer(serializers.ModelSerializer): class VirtualMachineSerializer(CustomFieldModelSerializer): - status = ChoiceFieldSerializer(choices=STATUS_CHOICES) + status = ChoiceFieldSerializer(choices=VM_STATUS_CHOICES) cluster = NestedClusterSerializer() role = NestedDeviceRoleSerializer() tenant = NestedTenantSerializer() diff --git a/netbox/virtualization/constants.py b/netbox/virtualization/constants.py index 6324fb785..307921e0e 100644 --- a/netbox/virtualization/constants.py +++ b/netbox/virtualization/constants.py @@ -1,12 +1,12 @@ from __future__ import unicode_literals -from dcim.constants import STATUS_ACTIVE, STATUS_OFFLINE, STATUS_STAGED +from dcim.constants import DEVICE_STATUS_ACTIVE, DEVICE_STATUS_OFFLINE, DEVICE_STATUS_STAGED # VirtualMachine statuses (replicated from Device statuses) -STATUS_CHOICES = [ - [STATUS_ACTIVE, 'Active'], - [STATUS_OFFLINE, 'Offline'], - [STATUS_STAGED, 'Staged'], +VM_STATUS_CHOICES = [ + [DEVICE_STATUS_ACTIVE, 'Active'], + [DEVICE_STATUS_OFFLINE, 'Offline'], + [DEVICE_STATUS_STAGED, 'Staged'], ] # Bootstrap CSS classes for VirtualMachine statuses diff --git a/netbox/virtualization/filters.py b/netbox/virtualization/filters.py index bd3e19400..72faa9094 100644 --- a/netbox/virtualization/filters.py +++ b/netbox/virtualization/filters.py @@ -9,7 +9,7 @@ from dcim.models import DeviceRole, Interface, Platform, Site from extras.filters import CustomFieldFilterSet from tenancy.models import Tenant from utilities.filters import NumericInFilter -from .constants import STATUS_CHOICES +from .constants import VM_STATUS_CHOICES from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine @@ -70,7 +70,7 @@ class VirtualMachineFilter(CustomFieldFilterSet): label='Search', ) status = django_filters.MultipleChoiceFilter( - choices=STATUS_CHOICES, + choices=VM_STATUS_CHOICES, null_value=None ) cluster_group_id = django_filters.ModelMultipleChoiceFilter( diff --git a/netbox/virtualization/forms.py b/netbox/virtualization/forms.py index d697de755..8548dab04 100644 --- a/netbox/virtualization/forms.py +++ b/netbox/virtualization/forms.py @@ -16,7 +16,7 @@ from utilities.forms import ( ChainedFieldsMixin, ChainedModelChoiceField, ChainedModelMultipleChoiceField, CommentField, ComponentForm, ConfirmationForm, CSVChoiceField, ExpandableNameField, FilterChoiceField, SlugField, SmallTextarea, ) -from .constants import STATUS_CHOICES +from .constants import VM_STATUS_CHOICES from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine VIFACE_FF_CHOICES = ( @@ -264,7 +264,7 @@ class VirtualMachineForm(BootstrapMixin, TenancyForm, CustomFieldForm): class VirtualMachineCSVForm(forms.ModelForm): status = CSVChoiceField( - choices=STATUS_CHOICES, + choices=VM_STATUS_CHOICES, required=False, help_text='Operational status of device' ) @@ -311,7 +311,7 @@ class VirtualMachineCSVForm(forms.ModelForm): class VirtualMachineBulkEditForm(BootstrapMixin, CustomFieldBulkEditForm): pk = forms.ModelMultipleChoiceField(queryset=VirtualMachine.objects.all(), widget=forms.MultipleHiddenInput) - status = forms.ChoiceField(choices=add_blank_choice(STATUS_CHOICES), required=False, initial='') + status = forms.ChoiceField(choices=add_blank_choice(VM_STATUS_CHOICES), required=False, initial='') cluster = forms.ModelChoiceField(queryset=Cluster.objects.all(), required=False) role = forms.ModelChoiceField(queryset=DeviceRole.objects.filter(vm_role=True), required=False) tenant = forms.ModelChoiceField(queryset=Tenant.objects.all(), required=False) @@ -329,7 +329,7 @@ def vm_status_choices(): status_counts = {} for status in VirtualMachine.objects.values('status').annotate(count=Count('status')).order_by('status'): status_counts[status['status']] = status['count'] - return [(s[0], '{} ({})'.format(s[1], status_counts.get(s[0], 0))) for s in STATUS_CHOICES] + return [(s[0], '{} ({})'.format(s[1], status_counts.get(s[0], 0))) for s in VM_STATUS_CHOICES] class VirtualMachineFilterForm(BootstrapMixin, CustomFieldFilterForm): diff --git a/netbox/virtualization/models.py b/netbox/virtualization/models.py index 3f2d0ff6d..16e07db44 100644 --- a/netbox/virtualization/models.py +++ b/netbox/virtualization/models.py @@ -11,7 +11,7 @@ from dcim.models import Device from extras.models import CustomFieldModel, CustomFieldValue from utilities.models import CreatedUpdatedModel from utilities.utils import csv_format -from .constants import STATUS_ACTIVE, STATUS_CHOICES, VM_STATUS_CLASSES +from .constants import DEVICE_STATUS_ACTIVE, VM_STATUS_CHOICES, VM_STATUS_CLASSES # @@ -177,8 +177,8 @@ class VirtualMachine(CreatedUpdatedModel, CustomFieldModel): unique=True ) status = models.PositiveSmallIntegerField( - choices=STATUS_CHOICES, - default=STATUS_ACTIVE, + choices=VM_STATUS_CHOICES, + default=DEVICE_STATUS_ACTIVE, verbose_name='Status' ) role = models.ForeignKey(