From 0bb86f1e7d4e0c48dce5ccb40f529ce656cfa5c4 Mon Sep 17 00:00:00 2001 From: Abhimanyu Saharan Date: Wed, 2 Aug 2023 19:25:52 +0530 Subject: [PATCH] Replaces device_role with role on device model (#13342) * replaces device_role with role on device model #6391 * fixes lint issue #6391 * revert the database user * revert test_runner comment * changes as per review * Update references to device_role column in UserConfigs --------- Co-authored-by: Jeremy Stretch --- docs/customization/custom-scripts.md | 2 +- netbox/dcim/api/serializers.py | 17 +- netbox/dcim/api/views.py | 4 +- netbox/dcim/filtersets.py | 24 ++- netbox/dcim/forms/bulk_edit.py | 4 +- netbox/dcim/forms/bulk_import.py | 4 +- netbox/dcim/forms/filtersets.py | 24 +-- netbox/dcim/forms/model_forms.py | 4 +- .../0181_rename_device_role_device_role.py | 35 ++++ netbox/dcim/models/devices.py | 22 +- netbox/dcim/models/racks.py | 2 +- netbox/dcim/svg/cables.py | 4 +- netbox/dcim/svg/racks.py | 6 +- netbox/dcim/tables/devices.py | 18 +- netbox/dcim/tests/test_api.py | 120 +++++------ netbox/dcim/tests/test_cablepaths.py | 4 +- netbox/dcim/tests/test_filtersets.py | 190 +++++++++--------- netbox/dcim/tests/test_forms.py | 14 +- netbox/dcim/tests/test_models.py | 74 ++++--- netbox/dcim/tests/test_natural_ordering.py | 4 +- netbox/dcim/tests/test_views.py | 66 +++--- netbox/dcim/views.py | 12 +- netbox/extras/querysets.py | 5 +- netbox/extras/tests/test_api.py | 4 +- netbox/extras/tests/test_models.py | 10 +- netbox/ipam/tests/test_api.py | 6 +- netbox/ipam/tests/test_filtersets.py | 24 +-- netbox/ipam/tests/test_models.py | 4 +- netbox/ipam/tests/test_views.py | 4 +- netbox/templates/dcim/device.html | 2 +- netbox/templates/dcim/device_edit.html | 2 +- netbox/templates/dcim/devicerole.html | 2 +- .../templates/dcim/inc/nonracked_devices.html | 2 +- netbox/templates/dcim/platform.html | 2 +- netbox/utilities/testing/utils.py | 2 +- netbox/utilities/tests/test_filters.py | 10 +- netbox/virtualization/tests/test_views.py | 20 +- 37 files changed, 422 insertions(+), 331 deletions(-) create mode 100644 netbox/dcim/migrations/0181_rename_device_role_device_role.py diff --git a/docs/customization/custom-scripts.md b/docs/customization/custom-scripts.md index e20b09ae6a..3811474d2b 100644 --- a/docs/customization/custom-scripts.md +++ b/docs/customization/custom-scripts.md @@ -390,7 +390,7 @@ class NewBranchScript(Script): name=f'{site.slug}-switch{i}', site=site, status=DeviceStatusChoices.STATUS_PLANNED, - device_role=switch_role + role=switch_role ) switch.full_clean() switch.save() diff --git a/netbox/dcim/api/serializers.py b/netbox/dcim/api/serializers.py index 550e9123b1..978ddea7c0 100644 --- a/netbox/dcim/api/serializers.py +++ b/netbox/dcim/api/serializers.py @@ -665,7 +665,8 @@ class PlatformSerializer(NetBoxModelSerializer): class DeviceSerializer(NetBoxModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:device-detail') device_type = NestedDeviceTypeSerializer() - device_role = NestedDeviceRoleSerializer() + role = NestedDeviceRoleSerializer() + device_role = NestedDeviceRoleSerializer(read_only=True, help_text='Deprecated in v3.6 in favor of `role`.') tenant = NestedTenantSerializer(required=False, allow_null=True, default=None) platform = NestedPlatformSerializer(required=False, allow_null=True) site = NestedSiteSerializer() @@ -707,9 +708,9 @@ class DeviceSerializer(NetBoxModelSerializer): class Meta: model = Device fields = [ - 'id', 'url', 'display', 'name', 'device_type', 'device_role', 'tenant', 'platform', 'serial', 'asset_tag', - 'site', 'location', 'rack', 'position', 'face', 'latitude', 'longitude', 'parent_device', 'status', - 'airflow', 'primary_ip', 'primary_ip4', 'primary_ip6', 'oob_ip', 'cluster', 'virtual_chassis', + 'id', 'url', 'display', 'name', 'device_type', 'role', 'device_role', 'tenant', 'platform', 'serial', + 'asset_tag', 'site', 'location', 'rack', 'position', 'face', 'latitude', 'longitude', 'parent_device', + 'status', 'airflow', 'primary_ip', 'primary_ip4', 'primary_ip6', 'oob_ip', 'cluster', 'virtual_chassis', 'vc_position', 'vc_priority', 'description', 'comments', 'config_template', 'local_context_data', 'tags', 'custom_fields', 'created', 'last_updated', 'console_port_count', 'console_server_port_count', 'power_port_count', 'power_outlet_count', 'interface_count', 'front_port_count', 'rear_port_count', @@ -727,13 +728,16 @@ class DeviceSerializer(NetBoxModelSerializer): data['device_bay'] = NestedDeviceBaySerializer(instance=device_bay, context=context).data return data + def get_device_role(self, obj): + return obj.role + class DeviceWithConfigContextSerializer(DeviceSerializer): config_context = serializers.SerializerMethodField(read_only=True) class Meta(DeviceSerializer.Meta): fields = [ - 'id', 'url', 'display', 'name', 'device_type', 'device_role', 'tenant', 'platform', 'serial', 'asset_tag', + 'id', 'url', 'display', 'name', 'device_type', 'role', 'tenant', 'platform', 'serial', 'asset_tag', 'site', 'location', 'rack', 'position', 'face', 'parent_device', 'status', 'airflow', 'primary_ip', 'primary_ip4', 'primary_ip6', 'oob_ip', 'cluster', 'virtual_chassis', 'vc_position', 'vc_priority', 'description', 'comments', 'local_context_data', 'tags', 'custom_fields', 'config_context', @@ -1035,7 +1039,8 @@ class ModuleBaySerializer(NetBoxModelSerializer): class Meta: model = ModuleBay fields = [ - 'id', 'url', 'display', 'device', 'name', 'installed_module', 'label', 'position', 'description', 'tags', 'custom_fields', + 'id', 'url', 'display', 'device', 'name', 'installed_module', 'label', 'position', 'description', 'tags', + 'custom_fields', 'created', 'last_updated', ] diff --git a/netbox/dcim/api/views.py b/netbox/dcim/api/views.py index dfedc74328..f045f1bb42 100644 --- a/netbox/dcim/api/views.py +++ b/netbox/dcim/api/views.py @@ -362,7 +362,7 @@ class InventoryItemTemplateViewSet(NetBoxModelViewSet): class DeviceRoleViewSet(NetBoxModelViewSet): queryset = DeviceRole.objects.prefetch_related('config_template', 'tags').annotate( - device_count=count_related(Device, 'device_role'), + device_count=count_related(Device, 'role'), virtualmachine_count=count_related(VirtualMachine, 'role') ) serializer_class = serializers.DeviceRoleSerializer @@ -393,7 +393,7 @@ class DeviceViewSet( NetBoxModelViewSet ): queryset = Device.objects.prefetch_related( - 'device_type__manufacturer', 'device_role', 'tenant', 'platform', 'site', 'location', 'rack', 'parent_bay', + 'device_type__manufacturer', 'role', 'tenant', 'platform', 'site', 'location', 'rack', 'parent_bay', 'virtual_chassis__master', 'primary_ip4__nat_outside', 'primary_ip6__nat_outside', 'config_template', 'tags', ) filterset_class = filtersets.DeviceFilterSet diff --git a/netbox/dcim/filtersets.py b/netbox/dcim/filtersets.py index e575c00dbc..f7c53b23da 100644 --- a/netbox/dcim/filtersets.py +++ b/netbox/dcim/filtersets.py @@ -840,12 +840,12 @@ class DeviceFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilter label=_('Device type (ID)'), ) role_id = django_filters.ModelMultipleChoiceFilter( - field_name='device_role_id', + field_name='role_id', queryset=DeviceRole.objects.all(), label=_('Role (ID)'), ) role = django_filters.ModelMultipleChoiceFilter( - field_name='device_role__slug', + field_name='role__slug', queryset=DeviceRole.objects.all(), to_field_name='slug', label=_('Role (slug)'), @@ -1251,13 +1251,13 @@ class DeviceComponentFilterSet(django_filters.FilterSet): to_field_name='model', label=_('Device type (model)'), ) - device_role_id = django_filters.ModelMultipleChoiceFilter( - field_name='device__device_role', + role_id = django_filters.ModelMultipleChoiceFilter( + field_name='device__role', queryset=DeviceRole.objects.all(), label=_('Device role (ID)'), ) - device_role = django_filters.ModelMultipleChoiceFilter( - field_name='device__device_role__slug', + role = django_filters.ModelMultipleChoiceFilter( + field_name='device__role__slug', queryset=DeviceRole.objects.all(), to_field_name='slug', label=_('Device role (slug)'), @@ -1273,6 +1273,18 @@ class DeviceComponentFilterSet(django_filters.FilterSet): to_field_name='name', label=_('Virtual Chassis'), ) + # TODO: Remove in v4.0 + device_role_id = django_filters.ModelMultipleChoiceFilter( + field_name='device__role', + queryset=DeviceRole.objects.all(), + label=_('Device role (ID)'), + ) + device_role = django_filters.ModelMultipleChoiceFilter( + field_name='device__role__slug', + queryset=DeviceRole.objects.all(), + to_field_name='slug', + label=_('Device role (slug)'), + ) def search(self, queryset, name, value): if not value.strip(): diff --git a/netbox/dcim/forms/bulk_edit.py b/netbox/dcim/forms/bulk_edit.py index 33e60322d4..cacf1f72b9 100644 --- a/netbox/dcim/forms/bulk_edit.py +++ b/netbox/dcim/forms/bulk_edit.py @@ -553,7 +553,7 @@ class DeviceBulkEditForm(NetBoxModelBulkEditForm): 'manufacturer_id': '$manufacturer' } ) - device_role = DynamicModelChoiceField( + role = DynamicModelChoiceField( label=_('Device role'), queryset=DeviceRole.objects.all(), required=False @@ -610,7 +610,7 @@ class DeviceBulkEditForm(NetBoxModelBulkEditForm): model = Device fieldsets = ( - (_('Device'), ('device_role', 'status', 'tenant', 'platform', 'description')), + (_('Device'), ('role', 'status', 'tenant', 'platform', 'description')), (_('Location'), ('site', 'location')), (_('Hardware'), ('manufacturer', 'device_type', 'airflow', 'serial')), (_('Configuration'), ('config_template',)), diff --git a/netbox/dcim/forms/bulk_import.py b/netbox/dcim/forms/bulk_import.py index 85d2b88bdb..a8e75e3c21 100644 --- a/netbox/dcim/forms/bulk_import.py +++ b/netbox/dcim/forms/bulk_import.py @@ -404,7 +404,7 @@ class PlatformImportForm(NetBoxModelImportForm): class BaseDeviceImportForm(NetBoxModelImportForm): - device_role = CSVModelChoiceField( + role = CSVModelChoiceField( label=_('Device role'), queryset=DeviceRole.objects.all(), to_field_name='name', @@ -527,7 +527,7 @@ class DeviceImportForm(BaseDeviceImportForm): class Meta(BaseDeviceImportForm.Meta): fields = [ - 'name', 'device_role', 'tenant', 'manufacturer', 'device_type', 'platform', 'serial', 'asset_tag', 'status', + 'name', 'role', 'tenant', 'manufacturer', 'device_type', 'platform', 'serial', 'asset_tag', 'status', 'site', 'location', 'rack', 'position', 'face', 'latitude', 'longitude', 'parent', 'device_bay', 'airflow', 'virtual_chassis', 'vc_position', 'vc_priority', 'cluster', 'description', 'config_template', 'comments', 'tags', diff --git a/netbox/dcim/forms/filtersets.py b/netbox/dcim/forms/filtersets.py index 3efbfb9741..43e5f44818 100644 --- a/netbox/dcim/forms/filtersets.py +++ b/netbox/dcim/forms/filtersets.py @@ -109,7 +109,7 @@ class DeviceComponentFilterForm(NetBoxModelFilterSetForm): required=False, label=_('Device type') ) - device_role_id = DynamicModelMultipleChoiceField( + role_id = DynamicModelMultipleChoiceField( queryset=DeviceRole.objects.all(), required=False, label=_('Device role') @@ -122,7 +122,7 @@ class DeviceComponentFilterForm(NetBoxModelFilterSetForm): 'location_id': '$location_id', 'virtual_chassis_id': '$virtual_chassis_id', 'device_type_id': '$device_type_id', - 'role_id': '$device_role_id' + 'role_id': '$role_id' }, label=_('Device') ) @@ -1136,7 +1136,7 @@ class ConsolePortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): (None, ('q', 'filter_id', 'tag')), (_('Attributes'), ('name', 'label', 'type', 'speed')), (_('Location'), ('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id')), - (_('Device'), ('device_type_id', 'device_role_id', 'device_id', 'virtual_chassis_id')), + (_('Device'), ('device_type_id', 'role_id', 'device_id', 'virtual_chassis_id')), (_('Connection'), ('cabled', 'connected', 'occupied')), ) type = forms.MultipleChoiceField( @@ -1158,7 +1158,7 @@ class ConsoleServerPortFilterForm(PathEndpointFilterForm, DeviceComponentFilterF (None, ('q', 'filter_id', 'tag')), (_('Attributes'), ('name', 'label', 'type', 'speed')), (_('Location'), ('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id')), - (_('Device'), ('device_type_id', 'device_role_id', 'device_id', 'virtual_chassis_id')), + (_('Device'), ('device_type_id', 'role_id', 'device_id', 'virtual_chassis_id')), (_('Connection'), ('cabled', 'connected', 'occupied')), ) type = forms.MultipleChoiceField( @@ -1180,7 +1180,7 @@ class PowerPortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): (None, ('q', 'filter_id', 'tag')), (_('Attributes'), ('name', 'label', 'type')), (_('Location'), ('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id')), - (_('Device'), ('device_type_id', 'device_role_id', 'device_id', 'virtual_chassis_id')), + (_('Device'), ('device_type_id', 'role_id', 'device_id', 'virtual_chassis_id')), (_('Connection'), ('cabled', 'connected', 'occupied')), ) type = forms.MultipleChoiceField( @@ -1197,7 +1197,7 @@ class PowerOutletFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): (None, ('q', 'filter_id', 'tag')), (_('Attributes'), ('name', 'label', 'type')), (_('Location'), ('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id')), - (_('Device'), ('device_type_id', 'device_role_id', 'device_id', 'virtual_chassis_id')), + (_('Device'), ('device_type_id', 'role_id', 'device_id', 'virtual_chassis_id')), (_('Connection'), ('cabled', 'connected', 'occupied')), ) type = forms.MultipleChoiceField( @@ -1217,7 +1217,7 @@ class InterfaceFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): (_('PoE'), ('poe_mode', 'poe_type')), (_('Wireless'), ('rf_role', 'rf_channel', 'rf_channel_width', 'tx_power')), (_('Location'), ('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id')), - (_('Device'), ('device_type_id', 'device_role_id', 'device_id', 'virtual_chassis_id', 'vdc_id')), + (_('Device'), ('device_type_id', 'role_id', 'device_id', 'virtual_chassis_id', 'vdc_id')), (_('Connection'), ('cabled', 'connected', 'occupied')), ) vdc_id = DynamicModelMultipleChoiceField( @@ -1324,7 +1324,7 @@ class FrontPortFilterForm(CabledFilterForm, DeviceComponentFilterForm): (None, ('q', 'filter_id', 'tag')), (_('Attributes'), ('name', 'label', 'type', 'color')), (_('Location'), ('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id')), - (_('Device'), ('device_type_id', 'device_role_id', 'device_id', 'virtual_chassis_id')), + (_('Device'), ('device_type_id', 'role_id', 'device_id', 'virtual_chassis_id')), (_('Cable'), ('cabled', 'occupied')), ) model = FrontPort @@ -1346,7 +1346,7 @@ class RearPortFilterForm(CabledFilterForm, DeviceComponentFilterForm): (None, ('q', 'filter_id', 'tag')), (_('Attributes'), ('name', 'label', 'type', 'color')), (_('Location'), ('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id')), - (_('Device'), ('device_type_id', 'device_role_id', 'device_id', 'virtual_chassis_id')), + (_('Device'), ('device_type_id', 'role_id', 'device_id', 'virtual_chassis_id')), (_('Cable'), ('cabled', 'occupied')), ) type = forms.MultipleChoiceField( @@ -1367,7 +1367,7 @@ class ModuleBayFilterForm(DeviceComponentFilterForm): (None, ('q', 'filter_id', 'tag')), (_('Attributes'), ('name', 'label', 'position')), (_('Location'), ('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id')), - (_('Device'), ('device_type_id', 'device_role_id', 'device_id', 'virtual_chassis_id')), + (_('Device'), ('device_type_id', 'role_id', 'device_id', 'virtual_chassis_id')), ) tag = TagFilterField(model) position = forms.CharField( @@ -1382,7 +1382,7 @@ class DeviceBayFilterForm(DeviceComponentFilterForm): (None, ('q', 'filter_id', 'tag')), (_('Attributes'), ('name', 'label')), (_('Location'), ('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id')), - (_('Device'), ('device_type_id', 'device_role_id', 'device_id', 'virtual_chassis_id')), + (_('Device'), ('device_type_id', 'role_id', 'device_id', 'virtual_chassis_id')), ) tag = TagFilterField(model) @@ -1393,7 +1393,7 @@ class InventoryItemFilterForm(DeviceComponentFilterForm): (None, ('q', 'filter_id', 'tag')), (_('Attributes'), ('name', 'label', 'role_id', 'manufacturer_id', 'serial', 'asset_tag', 'discovered')), (_('Location'), ('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id')), - (_('Device'), ('device_type_id', 'device_role_id', 'device_id', 'virtual_chassis_id')), + (_('Device'), ('device_type_id', 'role_id', 'device_id', 'virtual_chassis_id')), ) role_id = DynamicModelMultipleChoiceField( queryset=InventoryItemRole.objects.all(), diff --git a/netbox/dcim/forms/model_forms.py b/netbox/dcim/forms/model_forms.py index 4bdb19120f..e24154b00d 100644 --- a/netbox/dcim/forms/model_forms.py +++ b/netbox/dcim/forms/model_forms.py @@ -434,7 +434,7 @@ class DeviceForm(TenancyForm, NetBoxModelForm): queryset=DeviceType.objects.all(), selector=True ) - device_role = DynamicModelChoiceField( + role = DynamicModelChoiceField( label=_('Device role'), queryset=DeviceRole.objects.all() ) @@ -479,7 +479,7 @@ class DeviceForm(TenancyForm, NetBoxModelForm): class Meta: model = Device fields = [ - 'name', 'device_role', 'device_type', 'serial', 'asset_tag', 'site', 'rack', 'location', 'position', 'face', + 'name', 'role', 'device_type', 'serial', 'asset_tag', 'site', 'rack', 'location', 'position', 'face', 'latitude', 'longitude', 'status', 'airflow', 'platform', 'primary_ip4', 'primary_ip6', 'oob_ip', 'cluster', 'tenant_group', 'tenant', 'virtual_chassis', 'vc_position', 'vc_priority', 'description', 'config_template', 'comments', 'tags', 'local_context_data', diff --git a/netbox/dcim/migrations/0181_rename_device_role_device_role.py b/netbox/dcim/migrations/0181_rename_device_role_device_role.py new file mode 100644 index 0000000000..e32e00221c --- /dev/null +++ b/netbox/dcim/migrations/0181_rename_device_role_device_role.py @@ -0,0 +1,35 @@ +from django.db import migrations + + +def update_table_configs(apps, schema_editor): + """ + Replace the `device_role` column in DeviceTable configs with `role`. + """ + UserConfig = apps.get_model('users', 'UserConfig') + + for table in ('DeviceTable', 'DeviceBayTable'): + for config in UserConfig.objects.filter(**{f'data__tables__{table}__columns__contains': 'device_role'}): + config.data['tables'][table]['columns'] = [ + 'role' if x == 'device_role' else x + for x in config.data['tables'][table]['columns'] + ] + config.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('dcim', '0180_powerfeed_tenant'), + ] + + operations = [ + migrations.RenameField( + model_name='device', + old_name='device_role', + new_name='role', + ), + migrations.RunPython( + code=update_table_configs, + reverse_code=migrations.RunPython.noop + ), + ] diff --git a/netbox/dcim/models/devices.py b/netbox/dcim/models/devices.py index cfaaf81642..2b598704aa 100644 --- a/netbox/dcim/models/devices.py +++ b/netbox/dcim/models/devices.py @@ -537,7 +537,7 @@ class Device(PrimaryModel, ConfigContextModel, TrackingModelMixin): on_delete=models.PROTECT, related_name='instances' ) - device_role = models.ForeignKey( + role = models.ForeignKey( to='dcim.DeviceRole', on_delete=models.PROTECT, related_name='devices', @@ -758,7 +758,7 @@ class Device(PrimaryModel, ConfigContextModel, TrackingModelMixin): objects = ConfigContextModelQuerySet.as_manager() clone_fields = ( - 'device_type', 'device_role', 'tenant', 'platform', 'site', 'location', 'rack', 'face', 'status', 'airflow', + 'device_type', 'role', 'tenant', 'platform', 'site', 'location', 'rack', 'face', 'status', 'airflow', 'cluster', 'virtual_chassis', ) prerequisite_models = ( @@ -808,6 +808,20 @@ class Device(PrimaryModel, ConfigContextModel, TrackingModelMixin): def get_absolute_url(self): return reverse('dcim:device', args=[self.pk]) + @property + def device_role(self): + """ + For backwards compatibility with pre-v3.6 code expecting a device_role to be present on Device. + """ + return self.role + + @device_role.setter + def device_role(self, value): + """ + For backwards compatibility with pre-v3.6 code expecting a device_role to be present on Device. + """ + self.role = value + def clean(self): super().clean() @@ -1063,8 +1077,8 @@ class Device(PrimaryModel, ConfigContextModel, TrackingModelMixin): """ if self.config_template: return self.config_template - if self.device_role.config_template: - return self.device_role.config_template + if self.role.config_template: + return self.role.config_template if self.platform and self.platform.config_template: return self.platform.config_template diff --git a/netbox/dcim/models/racks.py b/netbox/dcim/models/racks.py index 13fb41b595..5fc24e7244 100644 --- a/netbox/dcim/models/racks.py +++ b/netbox/dcim/models/racks.py @@ -323,7 +323,7 @@ class Rack(PrimaryModel, WeightMixin): devices = Device.objects.prefetch_related( 'device_type', 'device_type__manufacturer', - 'device_role' + 'role' ).annotate( devicebay_count=Count('devicebays') ).exclude( diff --git a/netbox/dcim/svg/cables.py b/netbox/dcim/svg/cables.py index 33adef798a..9413726fa5 100644 --- a/netbox/dcim/svg/cables.py +++ b/netbox/dcim/svg/cables.py @@ -167,9 +167,9 @@ class CableTraceSVG: if hasattr(instance, 'parent_object'): # Termination return getattr(instance, 'color', 'f0f0f0') or 'f0f0f0' - if hasattr(instance, 'device_role'): + if hasattr(instance, 'role'): # Device - return instance.device_role.color + return instance.role.color else: # Other parent object return 'e0e0e0' diff --git a/netbox/dcim/svg/racks.py b/netbox/dcim/svg/racks.py index 6333abcf18..07ea55a338 100644 --- a/netbox/dcim/svg/racks.py +++ b/netbox/dcim/svg/racks.py @@ -46,14 +46,14 @@ def get_device_description(device): Return a description for a device to be rendered in the rack elevation in the following format Name: - Role: + Role: Device Type: () Asset tag: (if defined) Serial: (if defined) Description: (if defined) """ description = f'Name: {device.name}' - description += f'\nRole: {device.device_role}' + description += f'\nRole: {device.role}' u_height = f'{floatformat(device.device_type.u_height)}U' description += f'\nDevice Type: {device.device_type.manufacturer.name} {device.device_type.model} ({u_height})' if device.asset_tag: @@ -205,7 +205,7 @@ class RackElevationSVG: """ Draw the front (mounted) face of a device. """ - color = device.device_role.color + color = device.role.color image = device.device_type.front_image self._draw_device(device, coords, size, color=color, image=image) diff --git a/netbox/dcim/tables/devices.py b/netbox/dcim/tables/devices.py index 00226d3f9a..28b6efe019 100644 --- a/netbox/dcim/tables/devices.py +++ b/netbox/dcim/tables/devices.py @@ -190,7 +190,7 @@ class DeviceTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): verbose_name=_('Position'), template_code='{{ value|floatformat }}' ) - device_role = columns.ColoredLabelColumn( + role = columns.ColoredLabelColumn( verbose_name=_('Role') ) manufacturer = tables.Column( @@ -285,14 +285,14 @@ class DeviceTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): class Meta(NetBoxTable.Meta): model = models.Device fields = ( - 'pk', 'id', 'name', 'status', 'tenant', 'tenant_group', 'device_role', 'manufacturer', 'device_type', + 'pk', 'id', 'name', 'status', 'tenant', 'tenant_group', 'role', 'manufacturer', 'device_type', 'platform', 'serial', 'asset_tag', 'region', 'site_group', 'site', 'location', 'rack', 'parent_device', 'device_bay_position', 'position', 'face', 'latitude', 'longitude', 'airflow', 'primary_ip', 'primary_ip4', 'primary_ip6', 'oob_ip', 'cluster', 'virtual_chassis', 'vc_position', 'vc_priority', 'description', 'config_template', 'comments', 'contacts', 'tags', 'created', 'last_updated', ) default_columns = ( - 'pk', 'name', 'status', 'tenant', 'site', 'location', 'rack', 'device_role', 'manufacturer', 'device_type', + 'pk', 'name', 'status', 'tenant', 'site', 'location', 'rack', 'role', 'manufacturer', 'device_type', 'primary_ip', ) @@ -314,7 +314,7 @@ class DeviceImportTable(TenancyColumnsMixin, NetBoxTable): verbose_name=_('Rack'), linkify=True ) - device_role = tables.Column( + role = tables.Column( verbose_name=_('Role') ) device_type = tables.Column( @@ -323,7 +323,7 @@ class DeviceImportTable(TenancyColumnsMixin, NetBoxTable): class Meta(NetBoxTable.Meta): model = models.Device - fields = ('id', 'name', 'status', 'tenant', 'tenant_group', 'site', 'rack', 'position', 'device_role', 'device_type') + fields = ('id', 'name', 'status', 'tenant', 'tenant_group', 'site', 'rack', 'position', 'role', 'device_type') empty_text = False @@ -822,8 +822,8 @@ class DeviceBayTable(DeviceComponentTable): 'args': [Accessor('device_id')], } ) - device_role = columns.ColoredLabelColumn( - accessor=Accessor('installed_device__device_role'), + role = columns.ColoredLabelColumn( + accessor=Accessor('installed_device__role'), verbose_name=_('Role') ) device_type = tables.Column( @@ -847,8 +847,8 @@ class DeviceBayTable(DeviceComponentTable): class Meta(DeviceComponentTable.Meta): model = models.DeviceBay fields = ( - 'pk', 'id', 'name', 'device', 'label', 'status', 'device_role', 'device_type', 'installed_device', 'description', 'tags', - 'created', 'last_updated', + 'pk', 'id', 'name', 'device', 'label', 'status', 'role', 'device_type', 'installed_device', 'description', + 'tags', 'created', 'last_updated', ) default_columns = ('pk', 'name', 'device', 'label', 'status', 'installed_device', 'description') diff --git a/netbox/dcim/tests/test_api.py b/netbox/dcim/tests/test_api.py index ecaf32a06e..1ce3629633 100644 --- a/netbox/dcim/tests/test_api.py +++ b/netbox/dcim/tests/test_api.py @@ -40,7 +40,7 @@ class Mixins: peer_device = Device.objects.create( site=Site.objects.first(), device_type=DeviceType.objects.first(), - device_role=DeviceRole.objects.first(), + role=DeviceRole.objects.first(), name='Peer Device' ) if self.peer_termination_type is None: @@ -1052,12 +1052,12 @@ class DeviceRoleTest(APIViewTestCases.APIViewTestCase): @classmethod def setUpTestData(cls): - device_roles = ( + roles = ( DeviceRole(name='Device Role 1', slug='device-role-1', color='ff0000'), DeviceRole(name='Device Role 2', slug='device-role-2', color='00ff00'), DeviceRole(name='Device Role 3', slug='device-role-3', color='0000ff'), ) - DeviceRole.objects.bulk_create(device_roles) + DeviceRole.objects.bulk_create(roles) class PlatformTest(APIViewTestCases.APIViewTestCase): @@ -1122,11 +1122,11 @@ class DeviceTest(APIViewTestCases.APIViewTestCase): ) DeviceType.objects.bulk_create(device_types) - device_roles = ( + roles = ( DeviceRole(name='Device Role 1', slug='device-role-1', color='ff0000'), DeviceRole(name='Device Role 2', slug='device-role-2', color='00ff00'), ) - DeviceRole.objects.bulk_create(device_roles) + DeviceRole.objects.bulk_create(roles) cluster_type = ClusterType.objects.create(name='Cluster Type 1', slug='cluster-type-1') @@ -1139,7 +1139,7 @@ class DeviceTest(APIViewTestCases.APIViewTestCase): devices = ( Device( device_type=device_types[0], - device_role=device_roles[0], + role=roles[0], name='Device 1', site=sites[0], rack=racks[0], @@ -1148,7 +1148,7 @@ class DeviceTest(APIViewTestCases.APIViewTestCase): ), Device( device_type=device_types[0], - device_role=device_roles[0], + role=roles[0], name='Device 2', site=sites[0], rack=racks[0], @@ -1157,7 +1157,7 @@ class DeviceTest(APIViewTestCases.APIViewTestCase): ), Device( device_type=device_types[0], - device_role=device_roles[0], + role=roles[0], name='Device 3', site=sites[0], rack=racks[0], @@ -1170,7 +1170,7 @@ class DeviceTest(APIViewTestCases.APIViewTestCase): cls.create_data = [ { 'device_type': device_types[1].pk, - 'device_role': device_roles[1].pk, + 'role': roles[1].pk, 'name': 'Test Device 4', 'site': sites[1].pk, 'rack': racks[1].pk, @@ -1178,7 +1178,7 @@ class DeviceTest(APIViewTestCases.APIViewTestCase): }, { 'device_type': device_types[1].pk, - 'device_role': device_roles[1].pk, + 'role': roles[1].pk, 'name': 'Test Device 5', 'site': sites[1].pk, 'rack': racks[1].pk, @@ -1186,7 +1186,7 @@ class DeviceTest(APIViewTestCases.APIViewTestCase): }, { 'device_type': device_types[1].pk, - 'device_role': device_roles[1].pk, + 'role': roles[1].pk, 'name': 'Test Device 6', 'site': sites[1].pk, 'rack': racks[1].pk, @@ -1221,7 +1221,7 @@ class DeviceTest(APIViewTestCases.APIViewTestCase): device = Device.objects.first() data = { 'device_type': device.device_type.pk, - 'device_role': device.device_role.pk, + 'role': device.role.pk, 'site': device.site.pk, 'name': device.name, } @@ -1241,7 +1241,7 @@ class DeviceTest(APIViewTestCases.APIViewTestCase): data = [ { 'device_type': device_type.pk, - 'device_role': device.device_role.pk, + 'role': device.role.pk, 'site': device.site.pk, 'name': 'Test Device 7', 'rack': device.rack.pk, @@ -1250,7 +1250,7 @@ class DeviceTest(APIViewTestCases.APIViewTestCase): }, { 'device_type': device_type.pk, - 'device_role': device.device_role.pk, + 'role': device.role.pk, 'site': device.site.pk, 'name': 'Test Device 8', 'rack': device.rack.pk, @@ -1343,8 +1343,8 @@ class ConsolePortTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCa manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1') site = Site.objects.create(name='Site 1', slug='site-1') - devicerole = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000') - device = Device.objects.create(device_type=devicetype, device_role=devicerole, name='Device 1', site=site) + role = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000') + device = Device.objects.create(device_type=devicetype, role=role, name='Device 1', site=site) console_ports = ( ConsolePort(device=device, name='Console Port 1'), @@ -1385,8 +1385,8 @@ class ConsoleServerPortTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIView manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1') site = Site.objects.create(name='Site 1', slug='site-1') - devicerole = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000') - device = Device.objects.create(device_type=devicetype, device_role=devicerole, name='Device 1', site=site) + role = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000') + device = Device.objects.create(device_type=devicetype, role=role, name='Device 1', site=site) console_server_ports = ( ConsoleServerPort(device=device, name='Console Server Port 1'), @@ -1427,8 +1427,8 @@ class PowerPortTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCase manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1') site = Site.objects.create(name='Site 1', slug='site-1') - devicerole = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000') - device = Device.objects.create(device_type=devicetype, device_role=devicerole, name='Device 1', site=site) + role = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000') + device = Device.objects.create(device_type=devicetype, role=role, name='Device 1', site=site) power_ports = ( PowerPort(device=device, name='Power Port 1'), @@ -1466,8 +1466,8 @@ class PowerOutletTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCa manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1') site = Site.objects.create(name='Site 1', slug='site-1') - devicerole = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000') - device = Device.objects.create(device_type=devicetype, device_role=devicerole, name='Device 1', site=site) + role = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000') + device = Device.objects.create(device_type=devicetype, role=role, name='Device 1', site=site) power_ports = ( PowerPort(device=device, name='Power Port 1'), @@ -1514,8 +1514,8 @@ class InterfaceTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCase manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1') site = Site.objects.create(name='Site 1', slug='site-1') - devicerole = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000') - device = Device.objects.create(device_type=devicetype, device_role=devicerole, name='Device 1', site=site) + role = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000') + device = Device.objects.create(device_type=devicetype, role=role, name='Device 1', site=site) interfaces = ( Interface(device=device, name='Interface 1', type='1000base-t'), @@ -1621,8 +1621,8 @@ class FrontPortTest(APIViewTestCases.APIViewTestCase): manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1') site = Site.objects.create(name='Site 1', slug='site-1') - devicerole = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000') - device = Device.objects.create(device_type=devicetype, device_role=devicerole, name='Device 1', site=site) + role = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000') + device = Device.objects.create(device_type=devicetype, role=role, name='Device 1', site=site) rear_ports = ( RearPort(device=device, name='Rear Port 1', type=PortTypeChoices.TYPE_8P8C), @@ -1679,8 +1679,8 @@ class RearPortTest(APIViewTestCases.APIViewTestCase): manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1') site = Site.objects.create(name='Site 1', slug='site-1') - devicerole = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000') - device = Device.objects.create(device_type=devicetype, device_role=devicerole, name='Device 1', site=site) + role = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000') + device = Device.objects.create(device_type=devicetype, role=role, name='Device 1', site=site) rear_ports = ( RearPort(device=device, name='Rear Port 1', type=PortTypeChoices.TYPE_8P8C), @@ -1719,10 +1719,10 @@ class ModuleBayTest(APIViewTestCases.APIViewTestCase): def setUpTestData(cls): manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') site = Site.objects.create(name='Site 1', slug='site-1') - devicerole = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000') + role = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000') device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1') - device = Device.objects.create(device_type=device_type, device_role=devicerole, name='Device 1', site=site) + device = Device.objects.create(device_type=device_type, role=role, name='Device 1', site=site) device_bays = ( ModuleBay(device=device, name='Device Bay 1'), @@ -1758,7 +1758,7 @@ class DeviceBayTest(APIViewTestCases.APIViewTestCase): def setUpTestData(cls): manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') site = Site.objects.create(name='Site 1', slug='site-1') - devicerole = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000') + role = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000') device_types = ( DeviceType( @@ -1777,10 +1777,10 @@ class DeviceBayTest(APIViewTestCases.APIViewTestCase): DeviceType.objects.bulk_create(device_types) devices = ( - Device(device_type=device_types[0], device_role=devicerole, name='Device 1', site=site), - Device(device_type=device_types[1], device_role=devicerole, name='Device 2', site=site), - Device(device_type=device_types[1], device_role=devicerole, name='Device 3', site=site), - Device(device_type=device_types[1], device_role=devicerole, name='Device 4', site=site), + Device(device_type=device_types[0], role=role, name='Device 1', site=site), + Device(device_type=device_types[1], role=role, name='Device 2', site=site), + Device(device_type=device_types[1], role=role, name='Device 3', site=site), + Device(device_type=device_types[1], role=role, name='Device 4', site=site), ) Device.objects.bulk_create(devices) @@ -1822,8 +1822,8 @@ class InventoryItemTest(APIViewTestCases.APIViewTestCase): manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1') site = Site.objects.create(name='Site 1', slug='site-1') - devicerole = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000') - device = Device.objects.create(device_type=devicetype, device_role=devicerole, name='Device 1', site=site) + role = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000') + device = Device.objects.create(device_type=devicetype, role=role, name='Device 1', site=site) roles = ( InventoryItemRole(name='Inventory Item Role 1', slug='inventory-item-role-1'), @@ -1932,11 +1932,11 @@ class CableTest(APIViewTestCases.APIViewTestCase): site = Site.objects.create(name='Site 1', slug='site-1') manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1') - devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1', color='ff0000') + role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1', color='ff0000') devices = ( - Device(device_type=devicetype, device_role=devicerole, name='Device 1', site=site), - Device(device_type=devicetype, device_role=devicerole, name='Device 2', site=site), + Device(device_type=devicetype, role=role, name='Device 1', site=site), + Device(device_type=devicetype, role=role, name='Device 2', site=site), ) Device.objects.bulk_create(devices) @@ -1998,10 +1998,10 @@ class ConnectedDeviceTest(APITestCase): site = Site.objects.create(name='Site 1', slug='site-1') manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1') - devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1', color='ff0000') + role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1', color='ff0000') devices = ( - Device(device_type=devicetype, device_role=devicerole, name='TestDevice1', site=site), - Device(device_type=devicetype, device_role=devicerole, name='TestDevice2', site=site), + Device(device_type=devicetype, role=role, name='TestDevice1', site=site), + Device(device_type=devicetype, role=role, name='TestDevice2', site=site), ) Device.objects.bulk_create(devices) interfaces = ( @@ -2037,21 +2037,21 @@ class VirtualChassisTest(APIViewTestCases.APIViewTestCase): site = Site.objects.create(name='Test Site', slug='test-site') manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type', slug='device-type') - devicerole = DeviceRole.objects.create(name='Device Role', slug='device-role', color='ff0000') + role = DeviceRole.objects.create(name='Device Role', slug='device-role', color='ff0000') devices = ( - Device(name='Device 1', device_type=devicetype, device_role=devicerole, site=site), - Device(name='Device 2', device_type=devicetype, device_role=devicerole, site=site), - Device(name='Device 3', device_type=devicetype, device_role=devicerole, site=site), - Device(name='Device 4', device_type=devicetype, device_role=devicerole, site=site), - Device(name='Device 5', device_type=devicetype, device_role=devicerole, site=site), - Device(name='Device 6', device_type=devicetype, device_role=devicerole, site=site), - Device(name='Device 7', device_type=devicetype, device_role=devicerole, site=site), - Device(name='Device 8', device_type=devicetype, device_role=devicerole, site=site), - Device(name='Device 9', device_type=devicetype, device_role=devicerole, site=site), - Device(name='Device 10', device_type=devicetype, device_role=devicerole, site=site), - Device(name='Device 11', device_type=devicetype, device_role=devicerole, site=site), - Device(name='Device 12', device_type=devicetype, device_role=devicerole, site=site), + Device(name='Device 1', device_type=devicetype, role=role, site=site), + Device(name='Device 2', device_type=devicetype, role=role, site=site), + Device(name='Device 3', device_type=devicetype, role=role, site=site), + Device(name='Device 4', device_type=devicetype, role=role, site=site), + Device(name='Device 5', device_type=devicetype, role=role, site=site), + Device(name='Device 6', device_type=devicetype, role=role, site=site), + Device(name='Device 7', device_type=devicetype, role=role, site=site), + Device(name='Device 8', device_type=devicetype, role=role, site=site), + Device(name='Device 9', device_type=devicetype, role=role, site=site), + Device(name='Device 10', device_type=devicetype, role=role, site=site), + Device(name='Device 11', device_type=devicetype, role=role, site=site), + Device(name='Device 12', device_type=devicetype, role=role, site=site), ) Device.objects.bulk_create(devices) @@ -2225,12 +2225,12 @@ class VirtualDeviceContextTest(APIViewTestCases.APIViewTestCase): site = Site.objects.create(name='Test Site', slug='test-site') manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type', slug='device-type') - devicerole = DeviceRole.objects.create(name='Device Role', slug='device-role', color='ff0000') + role = DeviceRole.objects.create(name='Device Role', slug='device-role', color='ff0000') devices = ( - Device(name='Device 1', device_type=devicetype, device_role=devicerole, site=site), - Device(name='Device 2', device_type=devicetype, device_role=devicerole, site=site), - Device(name='Device 3', device_type=devicetype, device_role=devicerole, site=site), + Device(name='Device 1', device_type=devicetype, role=role, site=site), + Device(name='Device 2', device_type=devicetype, role=role, site=site), + Device(name='Device 3', device_type=devicetype, role=role, site=site), ) Device.objects.bulk_create(devices) diff --git a/netbox/dcim/tests/test_cablepaths.py b/netbox/dcim/tests/test_cablepaths.py index 3367a3efe2..d25333aedc 100644 --- a/netbox/dcim/tests/test_cablepaths.py +++ b/netbox/dcim/tests/test_cablepaths.py @@ -24,8 +24,8 @@ class CablePathTestCase(TestCase): manufacturer = Manufacturer.objects.create(name='Generic', slug='generic') device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Test Device') - device_role = DeviceRole.objects.create(name='Device Role', slug='device-role') - cls.device = Device.objects.create(site=cls.site, device_type=device_type, device_role=device_role, name='Test Device') + role = DeviceRole.objects.create(name='Device Role', slug='device-role') + cls.device = Device.objects.create(site=cls.site, device_type=device_type, role=role, name='Test Device') cls.powerpanel = PowerPanel.objects.create(site=cls.site, name='Power Panel') diff --git a/netbox/dcim/tests/test_filtersets.py b/netbox/dcim/tests/test_filtersets.py index c75df5cf61..0597bbf991 100644 --- a/netbox/dcim/tests/test_filtersets.py +++ b/netbox/dcim/tests/test_filtersets.py @@ -24,11 +24,11 @@ class DeviceComponentFilterSetTests: params = {'device_type': [device_types[0].model, device_types[1].model]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) - def test_device_role(self): - device_role = DeviceRole.objects.all()[:2] - params = {'device_role_id': [device_role[0].pk, device_role[1].pk]} + def test_role(self): + role = DeviceRole.objects.all()[:2] + params = {'role_id': [role[0].pk, role[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) - params = {'device_role': [device_role[0].slug, device_role[1].slug]} + params = {'role': [role[0].slug, role[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) @@ -1473,12 +1473,12 @@ class DeviceRoleTestCase(TestCase, ChangeLoggedFilterSetTests): @classmethod def setUpTestData(cls): - device_roles = ( + roles = ( DeviceRole(name='Device Role 1', slug='device-role-1', color='ff0000', vm_role=True, description='foobar1'), DeviceRole(name='Device Role 2', slug='device-role-2', color='00ff00', vm_role=True, description='foobar2'), DeviceRole(name='Device Role 3', slug='device-role-3', color='0000ff', vm_role=False), ) - DeviceRole.objects.bulk_create(device_roles) + DeviceRole.objects.bulk_create(roles) def test_name(self): params = {'name': ['Device Role 1', 'Device Role 2']} @@ -1565,12 +1565,12 @@ class DeviceTestCase(TestCase, ChangeLoggedFilterSetTests): ) DeviceType.objects.bulk_create(device_types) - device_roles = ( + roles = ( DeviceRole(name='Device Role 1', slug='device-role-1'), DeviceRole(name='Device Role 2', slug='device-role-2'), DeviceRole(name='Device Role 3', slug='device-role-3'), ) - DeviceRole.objects.bulk_create(device_roles) + DeviceRole.objects.bulk_create(roles) platforms = ( Platform(name='Platform 1', slug='platform-1'), @@ -1641,9 +1641,9 @@ class DeviceTestCase(TestCase, ChangeLoggedFilterSetTests): Tenant.objects.bulk_create(tenants) devices = ( - Device(name='Device 1', device_type=device_types[0], device_role=device_roles[0], platform=platforms[0], tenant=tenants[0], serial='ABC', asset_tag='1001', site=sites[0], location=locations[0], rack=racks[0], position=1, face=DeviceFaceChoices.FACE_FRONT, latitude=10, longitude=10, status=DeviceStatusChoices.STATUS_ACTIVE, cluster=clusters[0], local_context_data={"foo": 123}), - Device(name='Device 2', device_type=device_types[1], device_role=device_roles[1], platform=platforms[1], tenant=tenants[1], serial='DEF', asset_tag='1002', site=sites[1], location=locations[1], rack=racks[1], position=2, face=DeviceFaceChoices.FACE_FRONT, latitude=20, longitude=20, status=DeviceStatusChoices.STATUS_STAGED, airflow=DeviceAirflowChoices.AIRFLOW_FRONT_TO_REAR, cluster=clusters[1]), - Device(name='Device 3', device_type=device_types[2], device_role=device_roles[2], platform=platforms[2], tenant=tenants[2], serial='GHI', asset_tag='1003', site=sites[2], location=locations[2], rack=racks[2], position=3, face=DeviceFaceChoices.FACE_REAR, latitude=30, longitude=30, status=DeviceStatusChoices.STATUS_FAILED, airflow=DeviceAirflowChoices.AIRFLOW_REAR_TO_FRONT, cluster=clusters[2]), + Device(name='Device 1', device_type=device_types[0], role=roles[0], platform=platforms[0], tenant=tenants[0], serial='ABC', asset_tag='1001', site=sites[0], location=locations[0], rack=racks[0], position=1, face=DeviceFaceChoices.FACE_FRONT, latitude=10, longitude=10, status=DeviceStatusChoices.STATUS_ACTIVE, cluster=clusters[0], local_context_data={"foo": 123}), + Device(name='Device 2', device_type=device_types[1], role=roles[1], platform=platforms[1], tenant=tenants[1], serial='DEF', asset_tag='1002', site=sites[1], location=locations[1], rack=racks[1], position=2, face=DeviceFaceChoices.FACE_FRONT, latitude=20, longitude=20, status=DeviceStatusChoices.STATUS_STAGED, airflow=DeviceAirflowChoices.AIRFLOW_FRONT_TO_REAR, cluster=clusters[1]), + Device(name='Device 3', device_type=device_types[2], role=roles[2], platform=platforms[2], tenant=tenants[2], serial='GHI', asset_tag='1003', site=sites[2], location=locations[2], rack=racks[2], position=3, face=DeviceFaceChoices.FACE_REAR, latitude=30, longitude=30, status=DeviceStatusChoices.STATUS_FAILED, airflow=DeviceAirflowChoices.AIRFLOW_REAR_TO_FRONT, cluster=clusters[2]), ) Device.objects.bulk_create(devices) @@ -1755,10 +1755,10 @@ class DeviceTestCase(TestCase, ChangeLoggedFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_devicerole(self): - device_roles = DeviceRole.objects.all()[:2] - params = {'role_id': [device_roles[0].pk, device_roles[1].pk]} + roles = DeviceRole.objects.all()[:2] + params = {'role_id': [roles[0].pk, roles[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) - params = {'role': [device_roles[0].slug, device_roles[1].slug]} + params = {'role': [roles[0].slug, roles[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_platform(self): @@ -2062,12 +2062,12 @@ class ConsolePortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedF module_type = ModuleType.objects.create(manufacturer=manufacturer, model='Module Type 1') - device_roles = ( + roles = ( DeviceRole(name='Device Role 1', slug='device-role-1'), DeviceRole(name='Device Role 2', slug='device-role-2'), DeviceRole(name='Device Role 3', slug='device-role-3'), ) - DeviceRole.objects.bulk_create(device_roles) + DeviceRole.objects.bulk_create(roles) locations = ( Location(name='Location 1', slug='location-1', site=sites[0]), @@ -2085,10 +2085,10 @@ class ConsolePortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedF Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], device_role=device_roles[0], site=sites[0], location=locations[0], rack=racks[0]), - Device(name='Device 2', device_type=device_types[1], device_role=device_roles[1], site=sites[1], location=locations[1], rack=racks[1]), - Device(name='Device 3', device_type=device_types[2], device_role=device_roles[2], site=sites[2], location=locations[2], rack=racks[2]), - Device(name=None, device_type=device_types[0], device_role=device_roles[0], site=sites[3]), # For cable connections + Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0]), + Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1]), + Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2]), + Device(name=None, device_type=device_types[0], role=roles[0], site=sites[3]), # For cable connections ) Device.objects.bulk_create(devices) @@ -2242,12 +2242,12 @@ class ConsoleServerPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeL module_type = ModuleType.objects.create(manufacturer=manufacturer, model='Module Type 1') - device_roles = ( + roles = ( DeviceRole(name='Device Role 1', slug='device-role-1'), DeviceRole(name='Device Role 2', slug='device-role-2'), DeviceRole(name='Device Role 3', slug='device-role-3'), ) - DeviceRole.objects.bulk_create(device_roles) + DeviceRole.objects.bulk_create(roles) locations = ( Location(name='Location 1', slug='location-1', site=sites[0]), @@ -2265,10 +2265,10 @@ class ConsoleServerPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeL Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], device_role=device_roles[0], site=sites[0], location=locations[0], rack=racks[0]), - Device(name='Device 2', device_type=device_types[1], device_role=device_roles[1], site=sites[1], location=locations[1], rack=racks[1]), - Device(name='Device 3', device_type=device_types[2], device_role=device_roles[2], site=sites[2], location=locations[2], rack=racks[2]), - Device(name=None, device_type=device_types[2], device_role=device_roles[2], site=sites[3]), # For cable connections + Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0]), + Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1]), + Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2]), + Device(name=None, device_type=device_types[2], role=roles[2], site=sites[3]), # For cable connections ) Device.objects.bulk_create(devices) @@ -2422,12 +2422,12 @@ class PowerPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil module_type = ModuleType.objects.create(manufacturer=manufacturer, model='Module Type 1') - device_roles = ( + roles = ( DeviceRole(name='Device Role 1', slug='device-role-1'), DeviceRole(name='Device Role 2', slug='device-role-2'), DeviceRole(name='Device Role 3', slug='device-role-3'), ) - DeviceRole.objects.bulk_create(device_roles) + DeviceRole.objects.bulk_create(roles) locations = ( Location(name='Location 1', slug='location-1', site=sites[0]), @@ -2445,10 +2445,10 @@ class PowerPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], device_role=device_roles[0], site=sites[0], location=locations[0], rack=racks[0]), - Device(name='Device 2', device_type=device_types[1], device_role=device_roles[1], site=sites[1], location=locations[1], rack=racks[1]), - Device(name='Device 3', device_type=device_types[2], device_role=device_roles[2], site=sites[2], location=locations[2], rack=racks[2]), - Device(name=None, device_type=device_types[2], device_role=device_roles[2], site=sites[3]), # For cable connections + Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0]), + Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1]), + Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2]), + Device(name=None, device_type=device_types[2], role=roles[2], site=sites[3]), # For cable connections ) Device.objects.bulk_create(devices) @@ -2610,12 +2610,12 @@ class PowerOutletTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedF module_type = ModuleType.objects.create(manufacturer=manufacturer, model='Module Type 1') - device_roles = ( + roles = ( DeviceRole(name='Device Role 1', slug='device-role-1'), DeviceRole(name='Device Role 2', slug='device-role-2'), DeviceRole(name='Device Role 3', slug='device-role-3'), ) - DeviceRole.objects.bulk_create(device_roles) + DeviceRole.objects.bulk_create(roles) locations = ( Location(name='Location 1', slug='location-1', site=sites[0]), @@ -2633,10 +2633,10 @@ class PowerOutletTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedF Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], device_role=device_roles[0], site=sites[0], location=locations[0], rack=racks[0]), - Device(name='Device 2', device_type=device_types[1], device_role=device_roles[1], site=sites[1], location=locations[1], rack=racks[1]), - Device(name='Device 3', device_type=device_types[2], device_role=device_roles[2], site=sites[2], location=locations[2], rack=racks[2]), - Device(name=None, device_type=device_types[2], device_role=device_roles[2], site=sites[3]), # For cable connections + Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0]), + Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1]), + Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2]), + Device(name=None, device_type=device_types[2], role=roles[2], site=sites[3]), # For cable connections ) Device.objects.bulk_create(devices) @@ -2794,12 +2794,12 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil module_type = ModuleType.objects.create(manufacturer=manufacturer, model='Module Type 1') - device_roles = ( + roles = ( DeviceRole(name='Device Role 1', slug='device-role-1'), DeviceRole(name='Device Role 2', slug='device-role-2'), DeviceRole(name='Device Role 3', slug='device-role-3'), ) - DeviceRole.objects.bulk_create(device_roles) + DeviceRole.objects.bulk_create(roles) locations = ( Location(name='Location 1', slug='location-1', site=sites[0]), @@ -2817,10 +2817,10 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], device_role=device_roles[0], site=sites[0], location=locations[0], rack=racks[0]), - Device(name='Device 2', device_type=device_types[1], device_role=device_roles[1], site=sites[1], location=locations[1], rack=racks[1]), - Device(name='Device 3', device_type=device_types[2], device_role=device_roles[2], site=sites[2], location=locations[2], rack=racks[2]), - Device(name=None, device_type=device_types[2], device_role=device_roles[2], site=sites[3]), # For cable connections + Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0]), + Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1]), + Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2]), + Device(name=None, device_type=device_types[2], role=roles[2], site=sites[3]), # For cable connections ) Device.objects.bulk_create(devices) @@ -3230,12 +3230,12 @@ class FrontPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil module_type = ModuleType.objects.create(manufacturer=manufacturer, model='Module Type 1') - device_roles = ( + roles = ( DeviceRole(name='Device Role 1', slug='device-role-1'), DeviceRole(name='Device Role 2', slug='device-role-2'), DeviceRole(name='Device Role 3', slug='device-role-3'), ) - DeviceRole.objects.bulk_create(device_roles) + DeviceRole.objects.bulk_create(roles) locations = ( Location(name='Location 1', slug='location-1', site=sites[0]), @@ -3253,10 +3253,10 @@ class FrontPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], device_role=device_roles[0], site=sites[0], location=locations[0], rack=racks[0]), - Device(name='Device 2', device_type=device_types[1], device_role=device_roles[1], site=sites[1], location=locations[1], rack=racks[1]), - Device(name='Device 3', device_type=device_types[2], device_role=device_roles[2], site=sites[2], location=locations[2], rack=racks[2]), - Device(name=None, device_type=device_types[2], device_role=device_roles[2], site=sites[3]), # For cable connections + Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0]), + Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1]), + Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2]), + Device(name=None, device_type=device_types[2], role=roles[2], site=sites[3]), # For cable connections ) Device.objects.bulk_create(devices) @@ -3419,12 +3419,12 @@ class RearPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFilt module_type = ModuleType.objects.create(manufacturer=manufacturer, model='Module Type 1') - device_roles = ( + roles = ( DeviceRole(name='Device Role 1', slug='device-role-1'), DeviceRole(name='Device Role 2', slug='device-role-2'), DeviceRole(name='Device Role 3', slug='device-role-3'), ) - DeviceRole.objects.bulk_create(device_roles) + DeviceRole.objects.bulk_create(roles) locations = ( Location(name='Location 1', slug='location-1', site=sites[0]), @@ -3442,10 +3442,10 @@ class RearPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFilt Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], device_role=device_roles[0], site=sites[0], location=locations[0], rack=racks[0]), - Device(name='Device 2', device_type=device_types[1], device_role=device_roles[1], site=sites[1], location=locations[1], rack=racks[1]), - Device(name='Device 3', device_type=device_types[2], device_role=device_roles[2], site=sites[2], location=locations[2], rack=racks[2]), - Device(name=None, device_type=device_types[2], device_role=device_roles[2], site=sites[3]), # For cable connections + Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0]), + Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1]), + Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2]), + Device(name=None, device_type=device_types[2], role=roles[2], site=sites[3]), # For cable connections ) Device.objects.bulk_create(devices) @@ -3600,12 +3600,12 @@ class ModuleBayTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil ) DeviceType.objects.bulk_create(device_types) - device_roles = ( + roles = ( DeviceRole(name='Device Role 1', slug='device-role-1'), DeviceRole(name='Device Role 2', slug='device-role-2'), DeviceRole(name='Device Role 3', slug='device-role-3'), ) - DeviceRole.objects.bulk_create(device_roles) + DeviceRole.objects.bulk_create(roles) locations = ( Location(name='Location 1', slug='location-1', site=sites[0]), @@ -3623,9 +3623,9 @@ class ModuleBayTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], device_role=device_roles[0], site=sites[0], location=locations[0], rack=racks[0]), - Device(name='Device 2', device_type=device_types[1], device_role=device_roles[1], site=sites[1], location=locations[1], rack=racks[1]), - Device(name='Device 3', device_type=device_types[2], device_role=device_roles[2], site=sites[2], location=locations[2], rack=racks[2]), + Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0]), + Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1]), + Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2]), ) Device.objects.bulk_create(devices) @@ -3729,12 +3729,12 @@ class DeviceBayTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil ) DeviceType.objects.bulk_create(device_types) - device_roles = ( + roles = ( DeviceRole(name='Device Role 1', slug='device-role-1'), DeviceRole(name='Device Role 2', slug='device-role-2'), DeviceRole(name='Device Role 3', slug='device-role-3'), ) - DeviceRole.objects.bulk_create(device_roles) + DeviceRole.objects.bulk_create(roles) locations = ( Location(name='Location 1', slug='location-1', site=sites[0]), @@ -3752,9 +3752,9 @@ class DeviceBayTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], device_role=device_roles[0], site=sites[0], location=locations[0], rack=racks[0]), - Device(name='Device 2', device_type=device_types[1], device_role=device_roles[1], site=sites[1], location=locations[1], rack=racks[1]), - Device(name='Device 3', device_type=device_types[2], device_role=device_roles[2], site=sites[2], location=locations[2], rack=racks[2]), + Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0]), + Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1]), + Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2]), ) Device.objects.bulk_create(devices) @@ -3840,12 +3840,12 @@ class InventoryItemTestCase(TestCase, ChangeLoggedFilterSetTests): ) DeviceType.objects.bulk_create(device_types) - device_roles = ( + roles = ( DeviceRole(name='Device Role 1', slug='device-role-1'), DeviceRole(name='Device Role 2', slug='device-role-2'), DeviceRole(name='Device Role 3', slug='device-role-3'), ) - DeviceRole.objects.bulk_create(device_roles) + DeviceRole.objects.bulk_create(roles) regions = ( Region(name='Region 1', slug='region-1'), @@ -3886,9 +3886,9 @@ class InventoryItemTestCase(TestCase, ChangeLoggedFilterSetTests): Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], device_role=device_roles[0], site=sites[0], location=locations[0], rack=racks[0]), - Device(name='Device 2', device_type=device_types[1], device_role=device_roles[1], site=sites[1], location=locations[1], rack=racks[1]), - Device(name='Device 3', device_type=device_types[2], device_role=device_roles[2], site=sites[2], location=locations[2], rack=racks[2]), + Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0]), + Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1]), + Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2]), ) Device.objects.bulk_create(devices) @@ -3986,11 +3986,11 @@ class InventoryItemTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'device_type': [device_types[0].model, device_types[1].model]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) - def test_device_role(self): - device_role = DeviceRole.objects.all()[:2] - params = {'device_role_id': [device_role[0].pk, device_role[1].pk]} + def test_role(self): + role = DeviceRole.objects.all()[:2] + params = {'role_id': [role[0].pk, role[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) - params = {'device_role': [device_role[0].slug, device_role[1].slug]} + params = {'role': [role[0].slug, role[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_device(self): @@ -4066,7 +4066,7 @@ class VirtualChassisTestCase(TestCase, ChangeLoggedFilterSetTests): manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Model 1', slug='model-1') - device_role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') + role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') regions = ( Region(name='Region 1', slug='region-1'), @@ -4092,12 +4092,12 @@ class VirtualChassisTestCase(TestCase, ChangeLoggedFilterSetTests): Site.objects.bulk_create(sites) devices = ( - Device(name='Device 1', device_type=device_type, device_role=device_role, site=sites[0], vc_position=1), - Device(name='Device 2', device_type=device_type, device_role=device_role, site=sites[0], vc_position=2), - Device(name='Device 3', device_type=device_type, device_role=device_role, site=sites[1], vc_position=1), - Device(name='Device 4', device_type=device_type, device_role=device_role, site=sites[1], vc_position=2), - Device(name='Device 5', device_type=device_type, device_role=device_role, site=sites[2], vc_position=1), - Device(name='Device 6', device_type=device_type, device_role=device_role, site=sites[2], vc_position=2), + Device(name='Device 1', device_type=device_type, role=role, site=sites[0], vc_position=1), + Device(name='Device 2', device_type=device_type, role=role, site=sites[0], vc_position=2), + Device(name='Device 3', device_type=device_type, role=role, site=sites[1], vc_position=1), + Device(name='Device 4', device_type=device_type, role=role, site=sites[1], vc_position=2), + Device(name='Device 5', device_type=device_type, role=role, site=sites[2], vc_position=1), + Device(name='Device 6', device_type=device_type, role=role, site=sites[2], vc_position=2), ) Device.objects.bulk_create(devices) @@ -4187,15 +4187,15 @@ class CableTestCase(TestCase, ChangeLoggedFilterSetTests): manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Model 1', slug='model-1') - device_role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') + role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') devices = ( - Device(name='Device 1', device_type=device_type, device_role=device_role, site=sites[0], rack=racks[0], location=locations[0], position=1), - Device(name='Device 2', device_type=device_type, device_role=device_role, site=sites[0], rack=racks[0], location=locations[0], position=2), - Device(name='Device 3', device_type=device_type, device_role=device_role, site=sites[1], rack=racks[1], location=locations[1], position=1), - Device(name='Device 4', device_type=device_type, device_role=device_role, site=sites[1], rack=racks[1], location=locations[1], position=2), - Device(name='Device 5', device_type=device_type, device_role=device_role, site=sites[2], rack=racks[2], location=locations[2], position=1), - Device(name='Device 6', device_type=device_type, device_role=device_role, site=sites[2], rack=racks[2], location=locations[2], position=2), + Device(name='Device 1', device_type=device_type, role=role, site=sites[0], rack=racks[0], location=locations[0], position=1), + Device(name='Device 2', device_type=device_type, role=role, site=sites[0], rack=racks[0], location=locations[0], position=2), + Device(name='Device 3', device_type=device_type, role=role, site=sites[1], rack=racks[1], location=locations[1], position=1), + Device(name='Device 4', device_type=device_type, role=role, site=sites[1], rack=racks[1], location=locations[1], position=2), + Device(name='Device 5', device_type=device_type, role=role, site=sites[2], rack=racks[2], location=locations[2], position=1), + Device(name='Device 6', device_type=device_type, role=role, site=sites[2], rack=racks[2], location=locations[2], position=2), ) Device.objects.bulk_create(devices) @@ -4485,8 +4485,8 @@ class PowerFeedTestCase(TestCase, ChangeLoggedFilterSetTests): manufacturer = Manufacturer.objects.create(name='Manufacturer', slug='manufacturer') device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Model', slug='model') - device_role = DeviceRole.objects.create(name='Device Role', slug='device-role') - device = Device.objects.create(name='Device', device_type=device_type, device_role=device_role, site=sites[0]) + role = DeviceRole.objects.create(name='Device Role', slug='device-role') + device = Device.objects.create(name='Device', device_type=device_type, role=role, site=sites[0]) power_ports = [ PowerPort(device=device, name='Power Port 1'), PowerPort(device=device, name='Power Port 2'), @@ -4608,12 +4608,12 @@ class VirtualDeviceContextTestCase(TestCase, ChangeLoggedFilterSetTests): manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Model 1', slug='model-1') - device_role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') + role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') devices = ( - Device(name='Device 1', device_type=device_type, device_role=device_role, site=sites[0]), - Device(name='Device 2', device_type=device_type, device_role=device_role, site=sites[1]), - Device(name='Device 3', device_type=device_type, device_role=device_role, site=sites[2]), + Device(name='Device 1', device_type=device_type, role=role, site=sites[0]), + Device(name='Device 2', device_type=device_type, role=role, site=sites[1]), + Device(name='Device 3', device_type=device_type, role=role, site=sites[2]), ) Device.objects.bulk_create(devices) diff --git a/netbox/dcim/tests/test_forms.py b/netbox/dcim/tests/test_forms.py index 1cd75765a2..7a57bf3f0b 100644 --- a/netbox/dcim/tests/test_forms.py +++ b/netbox/dcim/tests/test_forms.py @@ -22,12 +22,12 @@ class DeviceTestCase(TestCase): device_type = DeviceType.objects.create( manufacturer=manufacturer, model='Device Type 1', slug='device-type-1', u_height=1 ) - device_role = DeviceRole.objects.create( + role = DeviceRole.objects.create( name='Device Role 1', slug='device-role-1', color='ff0000' ) Platform.objects.create(name='Platform 1', slug='platform-1') Device.objects.create( - name='Device 1', device_type=device_type, device_role=device_role, site=site, rack=rack, position=1 + name='Device 1', device_type=device_type, role=role, site=site, rack=rack, position=1 ) cluster_type = ClusterType.objects.create(name='Cluster Type 1', slug='cluster-type-1') cluster_group = ClusterGroup.objects.create(name='Cluster Group 1', slug='cluster-group-1') @@ -36,7 +36,7 @@ class DeviceTestCase(TestCase): def test_racked_device(self): form = DeviceForm(data={ 'name': 'New Device', - 'device_role': DeviceRole.objects.first().pk, + 'role': DeviceRole.objects.first().pk, 'tenant': None, 'manufacturer': Manufacturer.objects.first().pk, 'device_type': DeviceType.objects.first().pk, @@ -53,7 +53,7 @@ class DeviceTestCase(TestCase): def test_racked_device_occupied(self): form = DeviceForm(data={ 'name': 'test', - 'device_role': DeviceRole.objects.first().pk, + 'role': DeviceRole.objects.first().pk, 'tenant': None, 'manufacturer': Manufacturer.objects.first().pk, 'device_type': DeviceType.objects.first().pk, @@ -70,7 +70,7 @@ class DeviceTestCase(TestCase): def test_non_racked_device(self): form = DeviceForm(data={ 'name': 'New Device', - 'device_role': DeviceRole.objects.first().pk, + 'role': DeviceRole.objects.first().pk, 'tenant': None, 'manufacturer': Manufacturer.objects.first().pk, 'device_type': DeviceType.objects.first().pk, @@ -87,7 +87,7 @@ class DeviceTestCase(TestCase): def test_non_racked_device_with_face(self): form = DeviceForm(data={ 'name': 'New Device', - 'device_role': DeviceRole.objects.first().pk, + 'role': DeviceRole.objects.first().pk, 'tenant': None, 'manufacturer': Manufacturer.objects.first().pk, 'device_type': DeviceType.objects.first().pk, @@ -103,7 +103,7 @@ class DeviceTestCase(TestCase): def test_non_racked_device_with_position(self): form = DeviceForm(data={ 'name': 'New Device', - 'device_role': DeviceRole.objects.first().pk, + 'role': DeviceRole.objects.first().pk, 'tenant': None, 'manufacturer': Manufacturer.objects.first().pk, 'device_type': DeviceType.objects.first().pk, diff --git a/netbox/dcim/tests/test_models.py b/netbox/dcim/tests/test_models.py index e9a577648c..2e5ae0d5c3 100644 --- a/netbox/dcim/tests/test_models.py +++ b/netbox/dcim/tests/test_models.py @@ -25,7 +25,7 @@ class LocationTestCase(TestCase): device_type = DeviceType.objects.create( manufacturer=manufacturer, model='Device Type 1', slug='device-type-1' ) - device_role = DeviceRole.objects.create( + role = DeviceRole.objects.create( name='Device Role 1', slug='device-role-1', color='ff0000' ) @@ -45,14 +45,14 @@ class LocationTestCase(TestCase): location=location_a1, name='Device 1', device_type=device_type, - device_role=device_role + role=role ) device2 = Device.objects.create( site=site_a, location=location_a2, name='Device 2', device_type=device_type, - device_role=device_role + role=role ) powerpanel1 = PowerPanel.objects.create(site=site_a, location=location_a1, name='Power Panel 1') @@ -114,7 +114,7 @@ class RackTestCase(TestCase): device1 = Device( name='Device 1', device_type=DeviceType.objects.first(), - device_role=DeviceRole.objects.first(), + role=DeviceRole.objects.first(), site=site, rack=rack, position=43, @@ -147,7 +147,7 @@ class RackTestCase(TestCase): device1 = Device( name='TestSwitch1', device_type=DeviceType.objects.first(), - device_role=DeviceRole.objects.first(), + role=DeviceRole.objects.first(), site=site, rack=rack, position=10.0, @@ -189,7 +189,7 @@ class RackTestCase(TestCase): Device( name='Device 1', - device_role=DeviceRole.objects.first(), + role=DeviceRole.objects.first(), device_type=DeviceType.objects.first(), site=site, rack=rack @@ -202,7 +202,7 @@ class RackTestCase(TestCase): rack = Rack.objects.first() attrs = { 'device_type': DeviceType.objects.get(u_height=0.5), - 'device_role': DeviceRole.objects.first(), + 'role': DeviceRole.objects.first(), 'site': Site.objects.first(), 'rack': rack, 'face': DeviceFaceChoices.FACE_FRONT, @@ -228,7 +228,7 @@ class RackTestCase(TestCase): site=site_a, rack=rack1, device_type=DeviceType.objects.first(), - device_role=DeviceRole.objects.first() + role=DeviceRole.objects.first() ) # Move Rack1 to Site B @@ -244,14 +244,16 @@ class DeviceTestCase(TestCase): @classmethod def setUpTestData(cls): - site = Site.objects.create(name='Test Site 1', slug='test-site-1') + Site.objects.create(name='Test Site 1', slug='test-site-1') manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') device_type = DeviceType.objects.create( manufacturer=manufacturer, model='Test Device Type 1', slug='test-device-type-1' ) - device_role = DeviceRole.objects.create( - name='Test Device Role 1', slug='test-device-role-1', color='ff0000' + roles = ( + DeviceRole(name='Test Role 1', slug='test-role-1'), + DeviceRole(name='Test Role 2', slug='test-role-2'), ) + DeviceRole.objects.bulk_create(roles) # Create DeviceType components ConsolePortTemplate( @@ -319,7 +321,7 @@ class DeviceTestCase(TestCase): d = Device( site=Site.objects.first(), device_type=DeviceType.objects.first(), - device_role=DeviceRole.objects.first(), + role=DeviceRole.objects.first(), name='Test Device 1' ) d.save() @@ -385,7 +387,7 @@ class DeviceTestCase(TestCase): device1 = Device( site=Site.objects.first(), device_type=DeviceType.objects.first(), - device_role=DeviceRole.objects.first(), + role=DeviceRole.objects.first(), name=None ) device1.save() @@ -393,7 +395,7 @@ class DeviceTestCase(TestCase): device2 = Device( site=device1.site, device_type=device1.device_type, - device_role=device1.device_role, + role=device1.role, name=None ) device2.full_clean() @@ -406,7 +408,7 @@ class DeviceTestCase(TestCase): device1 = Device( site=Site.objects.first(), device_type=DeviceType.objects.first(), - device_role=DeviceRole.objects.first(), + role=DeviceRole.objects.first(), name='device 1' ) device1.save() @@ -414,7 +416,7 @@ class DeviceTestCase(TestCase): device2 = Device( site=device1.site, device_type=device1.device_type, - device_role=device1.device_role, + role=device1.role, name='DEVICE 1' ) @@ -427,7 +429,7 @@ class DeviceTestCase(TestCase): device1 = Device( site=Site.objects.first(), device_type=DeviceType.objects.first(), - device_role=DeviceRole.objects.first(), + role=DeviceRole.objects.first(), name='Test Device 1' ) device1.save() @@ -435,7 +437,7 @@ class DeviceTestCase(TestCase): device2 = Device( site=device1.site, device_type=device1.device_type, - device_role=device1.device_role, + role=device1.role, name=device1.name ) @@ -458,6 +460,30 @@ class DeviceTestCase(TestCase): device2.full_clean() device2.save() + def test_old_device_role_field(self): + """ + Ensure that the old device role field sets the value in the new role field. + """ + + # Test getter method + device = Device( + site=Site.objects.first(), + device_type=DeviceType.objects.first(), + role=DeviceRole.objects.first(), + name='Test Device 1', + device_role=DeviceRole.objects.first() + ) + device.full_clean() + device.save() + + self.assertEqual(device.role, device.device_role) + + # Test setter method + device.device_role = DeviceRole.objects.last() + device.full_clean() + device.save() + self.assertEqual(device.role, device.device_role) + class CableTestCase(TestCase): @@ -469,14 +495,14 @@ class CableTestCase(TestCase): devicetype = DeviceType.objects.create( manufacturer=manufacturer, model='Test Device Type 1', slug='test-device-type-1' ) - devicerole = DeviceRole.objects.create( + role = DeviceRole.objects.create( name='Test Device Role 1', slug='test-device-role-1', color='ff0000' ) device1 = Device.objects.create( - device_type=devicetype, device_role=devicerole, name='TestDevice1', site=site + device_type=devicetype, role=role, name='TestDevice1', site=site ) device2 = Device.objects.create( - device_type=devicetype, device_role=devicerole, name='TestDevice2', site=site + device_type=devicetype, role=role, name='TestDevice2', site=site ) interface1 = Interface.objects.create(device=device1, name='eth0') interface2 = Interface.objects.create(device=device2, name='eth0') @@ -485,7 +511,7 @@ class CableTestCase(TestCase): power_port1 = PowerPort.objects.create(device=device2, name='psu1') patch_pannel = Device.objects.create( - device_type=devicetype, device_role=devicerole, name='TestPatchPanel', site=site + device_type=devicetype, role=role, name='TestPatchPanel', site=site ) rear_port1 = RearPort.objects.create(device=patch_pannel, name='RP1', type='8p8c') front_port1 = FrontPort.objects.create( @@ -626,11 +652,11 @@ class VirtualDeviceContextTestCase(TestCase): devicetype = DeviceType.objects.create( manufacturer=manufacturer, model='Test Device Type 1', slug='test-device-type-1' ) - devicerole = DeviceRole.objects.create( + role = DeviceRole.objects.create( name='Test Device Role 1', slug='test-device-role-1', color='ff0000' ) Device.objects.create( - device_type=devicetype, device_role=devicerole, name='TestDevice1', site=site + device_type=devicetype, role=role, name='TestDevice1', site=site ) def test_vdc_and_interface_creation(self): diff --git a/netbox/dcim/tests/test_natural_ordering.py b/netbox/dcim/tests/test_natural_ordering.py index 8edaf0a90b..599fc955f6 100644 --- a/netbox/dcim/tests/test_natural_ordering.py +++ b/netbox/dcim/tests/test_natural_ordering.py @@ -13,11 +13,11 @@ class NaturalOrderingTestCase(TestCase): devicetype = DeviceType.objects.create( manufacturer=manufacturer, model='Test Device Type 1', slug='test-device-type-1' ) - devicerole = DeviceRole.objects.create( + role = DeviceRole.objects.create( name='Test Device Role 1', slug='test-device-role-1', color='ff0000' ) Device.objects.create( - device_type=devicetype, device_role=devicerole, name='Test Device 1', site=site + device_type=devicetype, role=role, name='Test Device 1', site=site ) def test_interface_ordering_numeric(self): diff --git a/netbox/dcim/tests/test_views.py b/netbox/dcim/tests/test_views.py index cca6b3f02d..aff4a65b53 100644 --- a/netbox/dcim/tests/test_views.py +++ b/netbox/dcim/tests/test_views.py @@ -1554,12 +1554,12 @@ class DeviceRoleTestCase(ViewTestCases.OrganizationalObjectViewTestCase): @classmethod def setUpTestData(cls): - device_roles = ( + roles = ( DeviceRole(name='Device Role 1', slug='device-role-1'), DeviceRole(name='Device Role 2', slug='device-role-2'), DeviceRole(name='Device Role 3', slug='device-role-3'), ) - DeviceRole.objects.bulk_create(device_roles) + DeviceRole.objects.bulk_create(roles) tags = create_tags('Alpha', 'Bravo', 'Charlie') @@ -1581,9 +1581,9 @@ class DeviceRoleTestCase(ViewTestCases.OrganizationalObjectViewTestCase): cls.csv_update_data = ( "id,name,description", - f"{device_roles[0].pk},Device Role 7,New description7", - f"{device_roles[1].pk},Device Role 8,New description8", - f"{device_roles[2].pk},Device Role 9,New description9", + f"{roles[0].pk},Device Role 7,New description7", + f"{roles[1].pk},Device Role 8,New description8", + f"{roles[2].pk},Device Role 9,New description9", ) cls.bulk_edit_data = { @@ -1665,11 +1665,11 @@ class DeviceTestCase(ViewTestCases.PrimaryObjectViewTestCase): ) DeviceType.objects.bulk_create(devicetypes) - deviceroles = ( + roles = ( DeviceRole(name='Device Role 1', slug='device-role-1'), DeviceRole(name='Device Role 2', slug='device-role-2'), ) - DeviceRole.objects.bulk_create(deviceroles) + DeviceRole.objects.bulk_create(roles) platforms = ( Platform(name='Platform 1', slug='platform-1'), @@ -1678,9 +1678,9 @@ class DeviceTestCase(ViewTestCases.PrimaryObjectViewTestCase): Platform.objects.bulk_create(platforms) devices = ( - Device(name='Device 1', site=sites[0], rack=racks[0], device_type=devicetypes[0], device_role=deviceroles[0], platform=platforms[0]), - Device(name='Device 2', site=sites[0], rack=racks[0], device_type=devicetypes[0], device_role=deviceroles[0], platform=platforms[0]), - Device(name='Device 3', site=sites[0], rack=racks[0], device_type=devicetypes[0], device_role=deviceroles[0], platform=platforms[0]), + Device(name='Device 1', site=sites[0], rack=racks[0], device_type=devicetypes[0], role=roles[0], platform=platforms[0]), + Device(name='Device 2', site=sites[0], rack=racks[0], device_type=devicetypes[0], role=roles[0], platform=platforms[0]), + Device(name='Device 3', site=sites[0], rack=racks[0], device_type=devicetypes[0], role=roles[0], platform=platforms[0]), ) Device.objects.bulk_create(devices) @@ -1690,7 +1690,7 @@ class DeviceTestCase(ViewTestCases.PrimaryObjectViewTestCase): cls.form_data = { 'device_type': devicetypes[1].pk, - 'device_role': deviceroles[1].pk, + 'role': roles[1].pk, 'tenant': None, 'platform': platforms[1].pk, 'name': 'Device X', @@ -1715,7 +1715,7 @@ class DeviceTestCase(ViewTestCases.PrimaryObjectViewTestCase): } cls.csv_data = ( - "device_role,manufacturer,device_type,status,name,site,location,rack,position,face,virtual_chassis,vc_position,vc_priority", + "role,manufacturer,device_type,status,name,site,location,rack,position,face,virtual_chassis,vc_position,vc_priority", "Device Role 1,Manufacturer 1,Device Type 1,active,Device 4,Site 1,Location 1,Rack 1,10,front,Virtual Chassis 1,1,10", "Device Role 1,Manufacturer 1,Device Type 1,active,Device 5,Site 1,Location 1,Rack 1,20,front,Virtual Chassis 1,2,20", "Device Role 1,Manufacturer 1,Device Type 1,active,Device 6,Site 1,Location 1,Rack 1,30,front,Virtual Chassis 1,3,30", @@ -1730,7 +1730,7 @@ class DeviceTestCase(ViewTestCases.PrimaryObjectViewTestCase): cls.bulk_edit_data = { 'device_type': devicetypes[1].pk, - 'device_role': deviceroles[1].pk, + 'role': roles[1].pk, 'tenant': None, 'platform': platforms[1].pk, 'serial': '123456', @@ -2909,14 +2909,14 @@ class CableTestCase( site = Site.objects.create(name='Site 1', slug='site-1') manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') devicetype = DeviceType.objects.create(model='Device Type 1', manufacturer=manufacturer) - devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') + role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') vc = VirtualChassis.objects.create(name='Virtual Chassis') devices = ( - Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole), - Device(name='Device 2', site=site, device_type=devicetype, device_role=devicerole), - Device(name='Device 3', site=site, device_type=devicetype, device_role=devicerole), - Device(name='Device 4', site=site, device_type=devicetype, device_role=devicerole), + Device(name='Device 1', site=site, device_type=devicetype, role=role), + Device(name='Device 2', site=site, device_type=devicetype, role=role), + Device(name='Device 3', site=site, device_type=devicetype, role=role), + Device(name='Device 4', site=site, device_type=devicetype, role=role), ) Device.objects.bulk_create(devices) @@ -3016,23 +3016,23 @@ class VirtualChassisTestCase(ViewTestCases.PrimaryObjectViewTestCase): device_type = DeviceType.objects.create( manufacturer=manufacturer, model='Device Type 1', slug='device-type-1' ) - device_role = DeviceRole.objects.create( + role = DeviceRole.objects.create( name='Device Role', slug='device-role-1' ) devices = ( - Device(device_type=device_type, device_role=device_role, name='Device 1', site=site), - Device(device_type=device_type, device_role=device_role, name='Device 2', site=site), - Device(device_type=device_type, device_role=device_role, name='Device 3', site=site), - Device(device_type=device_type, device_role=device_role, name='Device 4', site=site), - Device(device_type=device_type, device_role=device_role, name='Device 5', site=site), - Device(device_type=device_type, device_role=device_role, name='Device 6', site=site), - Device(device_type=device_type, device_role=device_role, name='Device 7', site=site), - Device(device_type=device_type, device_role=device_role, name='Device 8', site=site), - Device(device_type=device_type, device_role=device_role, name='Device 9', site=site), - Device(device_type=device_type, device_role=device_role, name='Device 10', site=site), - Device(device_type=device_type, device_role=device_role, name='Device 11', site=site), - Device(device_type=device_type, device_role=device_role, name='Device 12', site=site), + Device(device_type=device_type, role=role, name='Device 1', site=site), + Device(device_type=device_type, role=role, name='Device 2', site=site), + Device(device_type=device_type, role=role, name='Device 3', site=site), + Device(device_type=device_type, role=role, name='Device 4', site=site), + Device(device_type=device_type, role=role, name='Device 5', site=site), + Device(device_type=device_type, role=role, name='Device 6', site=site), + Device(device_type=device_type, role=role, name='Device 7', site=site), + Device(device_type=device_type, role=role, name='Device 8', site=site), + Device(device_type=device_type, role=role, name='Device 9', site=site), + Device(device_type=device_type, role=role, name='Device 10', site=site), + Device(device_type=device_type, role=role, name='Device 11', site=site), + Device(device_type=device_type, role=role, name='Device 12', site=site), ) Device.objects.bulk_create(devices) @@ -3211,11 +3211,11 @@ class PowerFeedTestCase(ViewTestCases.PrimaryObjectViewTestCase): device_type = DeviceType.objects.create( manufacturer=manufacturer, model='Device Type 1', slug='device-type-1' ) - device_role = DeviceRole.objects.create( + role = DeviceRole.objects.create( name='Device Role', slug='device-role-1' ) device = Device.objects.create( - site=Site.objects.first(), device_type=device_type, device_role=device_role + site=Site.objects.first(), device_type=device_type, role=role ) powerfeed = PowerFeed.objects.first() diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 9ac5623e7b..c7255f5f2c 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -407,7 +407,7 @@ class SiteView(generic.ObjectView): site=instance, rack__isnull=True, parent_bay__isnull=True - ).prefetch_related('device_type__manufacturer', 'parent_bay', 'device_role') + ).prefetch_related('device_type__manufacturer', 'parent_bay', 'role') return { 'related_models': related_models, @@ -489,7 +489,7 @@ class LocationView(generic.ObjectView): location=instance, rack__isnull=True, parent_bay__isnull=True - ).prefetch_related('device_type__manufacturer', 'parent_bay', 'device_role') + ).prefetch_related('device_type__manufacturer', 'parent_bay', 'role') return { 'related_models': related_models, @@ -1721,7 +1721,7 @@ class InventoryItemTemplateBulkDeleteView(generic.BulkDeleteView): class DeviceRoleListView(generic.ObjectListView): queryset = DeviceRole.objects.annotate( - device_count=count_related(Device, 'device_role'), + device_count=count_related(Device, 'role'), vm_count=count_related(VirtualMachine, 'role') ) filterset = filtersets.DeviceRoleFilterSet @@ -1735,7 +1735,7 @@ class DeviceRoleView(generic.ObjectView): def get_extra_context(self, request, instance): related_models = ( - (Device.objects.restrict(request.user, 'view').filter(device_role=instance), 'role_id'), + (Device.objects.restrict(request.user, 'view').filter(role=instance), 'role_id'), (VirtualMachine.objects.restrict(request.user, 'view').filter(role=instance), 'role_id'), ) @@ -1762,7 +1762,7 @@ class DeviceRoleBulkImportView(generic.BulkImportView): class DeviceRoleBulkEditView(generic.BulkEditView): queryset = DeviceRole.objects.annotate( - device_count=count_related(Device, 'device_role'), + device_count=count_related(Device, 'role'), vm_count=count_related(VirtualMachine, 'role') ) filterset = filtersets.DeviceRoleFilterSet @@ -1772,7 +1772,7 @@ class DeviceRoleBulkEditView(generic.BulkEditView): class DeviceRoleBulkDeleteView(generic.BulkDeleteView): queryset = DeviceRole.objects.annotate( - device_count=count_related(Device, 'device_role'), + device_count=count_related(Device, 'role'), vm_count=count_related(VirtualMachine, 'role') ) filterset = filtersets.DeviceRoleFilterSet diff --git a/netbox/extras/querysets.py b/netbox/extras/querysets.py index 7b71fa6566..478dedf92d 100644 --- a/netbox/extras/querysets.py +++ b/netbox/extras/querysets.py @@ -19,8 +19,7 @@ class ConfigContextQuerySet(RestrictedQuerySet): aggregate_data: If True, use the JSONBAgg aggregate function to return only the list of JSON data objects """ - # `device_role` for Device; `role` for VirtualMachine - role = getattr(obj, 'device_role', None) or obj.role + role = obj.role # Device type and location assignment is relevant only for Devices device_type = getattr(obj, 'device_type', None) @@ -121,7 +120,7 @@ class ConfigContextModelQuerySet(RestrictedQuerySet): if self.model._meta.model_name == 'device': base_query.add((Q(locations=OuterRef('location')) | Q(locations=None)), Q.AND) base_query.add((Q(device_types=OuterRef('device_type')) | Q(device_types=None)), Q.AND) - base_query.add((Q(roles=OuterRef('device_role')) | Q(roles=None)), Q.AND) + base_query.add((Q(roles=OuterRef('role')) | Q(roles=None)), Q.AND) base_query.add((Q(sites=OuterRef('site')) | Q(sites=None)), Q.AND) region_field = 'site__region' sitegroup_field = 'site__group' diff --git a/netbox/extras/tests/test_api.py b/netbox/extras/tests/test_api.py index ad50d3562d..255457f21b 100644 --- a/netbox/extras/tests/test_api.py +++ b/netbox/extras/tests/test_api.py @@ -579,9 +579,9 @@ class ConfigContextTest(APIViewTestCases.APIViewTestCase): """ manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1') - devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') + role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') site = Site.objects.create(name='Site-1', slug='site-1') - device = Device.objects.create(name='Device 1', device_type=devicetype, device_role=devicerole, site=site) + device = Device.objects.create(name='Device 1', device_type=devicetype, role=role, site=site) # Test default config contexts (created at test setup) rendered_context = device.get_config_context() diff --git a/netbox/extras/tests/test_models.py b/netbox/extras/tests/test_models.py index 0d1dc0e518..ef93984011 100644 --- a/netbox/extras/tests/test_models.py +++ b/netbox/extras/tests/test_models.py @@ -44,7 +44,7 @@ class ConfigContextTest(TestCase): manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1') - devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') + role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') region = Region.objects.create(name='Region') sitegroup = SiteGroup.objects.create(name='Site Group') site = Site.objects.create(name='Site 1', slug='site-1', region=region, group=sitegroup) @@ -58,7 +58,7 @@ class ConfigContextTest(TestCase): Device.objects.create( name='Device 1', device_type=devicetype, - device_role=devicerole, + role=role, site=site, location=location ) @@ -252,7 +252,7 @@ class ConfigContextTest(TestCase): location=location, tenant=tenant, platform=platform, - device_role=DeviceRole.objects.first(), + role=DeviceRole.objects.first(), device_type=DeviceType.objects.first() ) device.tags.add(tag) @@ -382,7 +382,7 @@ class ConfigContextTest(TestCase): site=site, tenant=tenant, platform=platform, - device_role=DeviceRole.objects.first(), + role=DeviceRole.objects.first(), device_type=DeviceType.objects.first() ) device.tags.set(tags) @@ -430,7 +430,7 @@ class ConfigContextTest(TestCase): site=site, tenant=tenant, platform=platform, - device_role=DeviceRole.objects.first(), + role=DeviceRole.objects.first(), device_type=DeviceType.objects.first() ) device.tags.set([tag1, tag2]) diff --git a/netbox/ipam/tests/test_api.py b/netbox/ipam/tests/test_api.py index b6aeccc1a7..24d219ca0e 100644 --- a/netbox/ipam/tests/test_api.py +++ b/netbox/ipam/tests/test_api.py @@ -1009,11 +1009,11 @@ class ServiceTest(APIViewTestCases.APIViewTestCase): site = Site.objects.create(name='Site 1', slug='site-1') manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1') - devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') + role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') devices = ( - Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole), - Device(name='Device 2', site=site, device_type=devicetype, device_role=devicerole), + Device(name='Device 1', site=site, device_type=devicetype, role=role), + Device(name='Device 2', site=site, device_type=devicetype, role=role), ) Device.objects.bulk_create(devices) diff --git a/netbox/ipam/tests/test_filtersets.py b/netbox/ipam/tests/test_filtersets.py index 3d9a665671..0e17a9ce2c 100644 --- a/netbox/ipam/tests/test_filtersets.py +++ b/netbox/ipam/tests/test_filtersets.py @@ -825,12 +825,12 @@ class IPAddressTestCase(TestCase, ChangeLoggedFilterSetTests): site = Site.objects.create(name='Site 1', slug='site-1') manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1') - device_role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') + role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') devices = ( - Device(device_type=device_type, name='Device 1', site=site, device_role=device_role), - Device(device_type=device_type, name='Device 2', site=site, device_role=device_role), - Device(device_type=device_type, name='Device 3', site=site, device_role=device_role), + Device(device_type=device_type, name='Device 1', site=site, role=role), + Device(device_type=device_type, name='Device 2', site=site, role=role), + Device(device_type=device_type, name='Device 3', site=site, role=role), ) Device.objects.bulk_create(devices) @@ -1282,11 +1282,11 @@ class VLANTestCase(TestCase, ChangeLoggedFilterSetTests): manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1') - device_role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') + role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') devices = ( - Device(name='Device 1', site=sites[0], location=locations[0], rack=racks[0], device_type=device_type, device_role=device_role), - Device(name='Device 2', site=sites[1], location=locations[1], rack=racks[1], device_type=device_type, device_role=device_role), - Device(name='Device 3', site=sites[2], location=locations[2], rack=racks[2], device_type=device_type, device_role=device_role), + Device(name='Device 1', site=sites[0], location=locations[0], rack=racks[0], device_type=device_type, role=role), + Device(name='Device 2', site=sites[1], location=locations[1], rack=racks[1], device_type=device_type, role=role), + Device(name='Device 3', site=sites[2], location=locations[2], rack=racks[2], device_type=device_type, role=role), ) Device.objects.bulk_create(devices) @@ -1516,12 +1516,12 @@ class ServiceTestCase(TestCase, ChangeLoggedFilterSetTests): site = Site.objects.create(name='Site 1', slug='site-1') manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1') - device_role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') + role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') devices = ( - Device(device_type=device_type, name='Device 1', site=site, device_role=device_role), - Device(device_type=device_type, name='Device 2', site=site, device_role=device_role), - Device(device_type=device_type, name='Device 3', site=site, device_role=device_role), + Device(device_type=device_type, name='Device 1', site=site, role=role), + Device(device_type=device_type, name='Device 2', site=site, role=role), + Device(device_type=device_type, name='Device 3', site=site, role=role), ) Device.objects.bulk_create(devices) diff --git a/netbox/ipam/tests/test_models.py b/netbox/ipam/tests/test_models.py index 94a315be5f..06cd9b445a 100644 --- a/netbox/ipam/tests/test_models.py +++ b/netbox/ipam/tests/test_models.py @@ -549,12 +549,12 @@ class TestL2VPNTermination(TestCase): site = Site.objects.create(name='Site 1') manufacturer = Manufacturer.objects.create(name='Manufacturer 1') device_type = DeviceType.objects.create(model='Device Type 1', manufacturer=manufacturer) - device_role = DeviceRole.objects.create(name='Switch') + role = DeviceRole.objects.create(name='Switch') device = Device.objects.create( name='Device 1', site=site, device_type=device_type, - device_role=device_role, + role=role, status='active' ) diff --git a/netbox/ipam/tests/test_views.py b/netbox/ipam/tests/test_views.py index c9128c0f69..afc97cc634 100644 --- a/netbox/ipam/tests/test_views.py +++ b/netbox/ipam/tests/test_views.py @@ -909,8 +909,8 @@ class ServiceTestCase(ViewTestCases.PrimaryObjectViewTestCase): site = Site.objects.create(name='Site 1', slug='site-1') manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1') - devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') - device = Device.objects.create(name='Device 1', site=site, device_type=devicetype, device_role=devicerole) + role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') + device = Device.objects.create(name='Device 1', site=site, device_type=devicetype, role=role) services = ( Service(device=device, name='Service 1', protocol=ServiceProtocolChoices.PROTOCOL_TCP, ports=[101]), diff --git a/netbox/templates/dcim/device.html b/netbox/templates/dcim/device.html index ddc17262f9..663447bf7e 100644 --- a/netbox/templates/dcim/device.html +++ b/netbox/templates/dcim/device.html @@ -202,7 +202,7 @@ {% trans "Role" %} - {{ object.device_role|linkify }} + {{ object.role|linkify }} {% trans "Platform" %} diff --git a/netbox/templates/dcim/device_edit.html b/netbox/templates/dcim/device_edit.html index 75a42c8ac5..4dbb2f477d 100644 --- a/netbox/templates/dcim/device_edit.html +++ b/netbox/templates/dcim/device_edit.html @@ -10,7 +10,7 @@
{% trans "Device" %}
{% render_field form.name %} - {% render_field form.device_role %} + {% render_field form.role %} {% render_field form.description %} {% render_field form.tags %} diff --git a/netbox/templates/dcim/devicerole.html b/netbox/templates/dcim/devicerole.html index 1ffdc9e85d..8bc10bfc24 100644 --- a/netbox/templates/dcim/devicerole.html +++ b/netbox/templates/dcim/devicerole.html @@ -10,7 +10,7 @@ {% block extra_controls %} {% if perms.dcim.add_device %} - + {% trans "Add Device" %} {% endif %} diff --git a/netbox/templates/dcim/inc/nonracked_devices.html b/netbox/templates/dcim/inc/nonracked_devices.html index 08750fd496..88a37987be 100644 --- a/netbox/templates/dcim/inc/nonracked_devices.html +++ b/netbox/templates/dcim/inc/nonracked_devices.html @@ -19,7 +19,7 @@ {{ device }} - {{ device.device_role }} + {{ device.role }} {{ device.device_type }} {% if device.parent_bay %} {{ device.parent_bay.device|linkify }} diff --git a/netbox/templates/dcim/platform.html b/netbox/templates/dcim/platform.html index f3fb97e0e5..a974f9f937 100644 --- a/netbox/templates/dcim/platform.html +++ b/netbox/templates/dcim/platform.html @@ -13,7 +13,7 @@ {% block extra_controls %} {% if perms.dcim.add_device %} - + {% trans "Add Device" %} {% endif %} diff --git a/netbox/utilities/testing/utils.py b/netbox/utilities/testing/utils.py index 87fc3319c5..fd6d72e271 100644 --- a/netbox/utilities/testing/utils.py +++ b/netbox/utilities/testing/utils.py @@ -44,7 +44,7 @@ def create_test_device(name, site=None, **attrs): manufacturer, _ = Manufacturer.objects.get_or_create(name='Manufacturer 1', slug='manufacturer-1') devicetype, _ = DeviceType.objects.get_or_create(model='Device Type 1', manufacturer=manufacturer) devicerole, _ = DeviceRole.objects.get_or_create(name='Device Role 1', slug='device-role-1') - device = Device.objects.create(name=name, site=site, device_type=devicetype, device_role=devicerole, **attrs) + device = Device.objects.create(name=name, site=site, device_type=devicetype, role=devicerole, **attrs) return device diff --git a/netbox/utilities/tests/test_filters.py b/netbox/utilities/tests/test_filters.py index 334f270dcb..80d6113759 100644 --- a/netbox/utilities/tests/test_filters.py +++ b/netbox/utilities/tests/test_filters.py @@ -360,12 +360,12 @@ class DynamicFilterLookupExpressionTest(TestCase): ) DeviceType.objects.bulk_create(device_types) - device_roles = ( + roles = ( DeviceRole(name='Device Role 1', slug='device-role-1'), DeviceRole(name='Device Role 2', slug='device-role-2'), DeviceRole(name='Device Role 3', slug='device-role-3'), ) - DeviceRole.objects.bulk_create(device_roles) + DeviceRole.objects.bulk_create(roles) platforms = ( Platform(name='Platform 1', slug='platform-1'), @@ -401,9 +401,9 @@ class DynamicFilterLookupExpressionTest(TestCase): Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], device_role=device_roles[0], platform=platforms[0], serial='ABC', asset_tag='1001', site=sites[0], rack=racks[0], position=1, face=DeviceFaceChoices.FACE_FRONT, status=DeviceStatusChoices.STATUS_ACTIVE, local_context_data={"foo": 123}), - Device(name='Device 2', device_type=device_types[1], device_role=device_roles[1], platform=platforms[1], serial='DEF', asset_tag='1002', site=sites[1], rack=racks[1], position=2, face=DeviceFaceChoices.FACE_FRONT, status=DeviceStatusChoices.STATUS_STAGED), - Device(name='Device 3', device_type=device_types[2], device_role=device_roles[2], platform=platforms[2], serial='GHI', asset_tag='1003', site=sites[2], rack=racks[2], position=3, face=DeviceFaceChoices.FACE_REAR, status=DeviceStatusChoices.STATUS_FAILED), + Device(name='Device 1', device_type=device_types[0], role=roles[0], platform=platforms[0], serial='ABC', asset_tag='1001', site=sites[0], rack=racks[0], position=1, face=DeviceFaceChoices.FACE_FRONT, status=DeviceStatusChoices.STATUS_ACTIVE, local_context_data={"foo": 123}), + Device(name='Device 2', device_type=device_types[1], role=roles[1], platform=platforms[1], serial='DEF', asset_tag='1002', site=sites[1], rack=racks[1], position=2, face=DeviceFaceChoices.FACE_FRONT, status=DeviceStatusChoices.STATUS_STAGED), + Device(name='Device 3', device_type=device_types[2], role=roles[2], platform=platforms[2], serial='GHI', asset_tag='1003', site=sites[2], rack=racks[2], position=3, face=DeviceFaceChoices.FACE_REAR, status=DeviceStatusChoices.STATUS_FAILED), ) Device.objects.bulk_create(devices) diff --git a/netbox/virtualization/tests/test_views.py b/netbox/virtualization/tests/test_views.py index 32382ee3b8..a5d831d7ee 100644 --- a/netbox/virtualization/tests/test_views.py +++ b/netbox/virtualization/tests/test_views.py @@ -180,11 +180,11 @@ class VirtualMachineTestCase(ViewTestCases.PrimaryObjectViewTestCase): @classmethod def setUpTestData(cls): - deviceroles = ( + roles = ( DeviceRole(name='Device Role 1', slug='device-role-1'), DeviceRole(name='Device Role 2', slug='device-role-2'), ) - DeviceRole.objects.bulk_create(deviceroles) + DeviceRole.objects.bulk_create(roles) platforms = ( Platform(name='Platform 1', slug='platform-1'), @@ -212,9 +212,9 @@ class VirtualMachineTestCase(ViewTestCases.PrimaryObjectViewTestCase): ) virtual_machines = ( - VirtualMachine(name='Virtual Machine 1', site=sites[0], cluster=clusters[0], device=devices[0], role=deviceroles[0], platform=platforms[0]), - VirtualMachine(name='Virtual Machine 2', site=sites[0], cluster=clusters[0], device=devices[0], role=deviceroles[0], platform=platforms[0]), - VirtualMachine(name='Virtual Machine 3', site=sites[0], cluster=clusters[0], device=devices[0], role=deviceroles[0], platform=platforms[0]), + VirtualMachine(name='Virtual Machine 1', site=sites[0], cluster=clusters[0], device=devices[0], role=roles[0], platform=platforms[0]), + VirtualMachine(name='Virtual Machine 2', site=sites[0], cluster=clusters[0], device=devices[0], role=roles[0], platform=platforms[0]), + VirtualMachine(name='Virtual Machine 3', site=sites[0], cluster=clusters[0], device=devices[0], role=roles[0], platform=platforms[0]), ) VirtualMachine.objects.bulk_create(virtual_machines) @@ -228,7 +228,7 @@ class VirtualMachineTestCase(ViewTestCases.PrimaryObjectViewTestCase): 'platform': platforms[1].pk, 'name': 'Virtual Machine X', 'status': VirtualMachineStatusChoices.STATUS_STAGED, - 'role': deviceroles[1].pk, + 'role': roles[1].pk, 'primary_ip4': None, 'primary_ip6': None, 'vcpus': 4, @@ -260,7 +260,7 @@ class VirtualMachineTestCase(ViewTestCases.PrimaryObjectViewTestCase): 'tenant': None, 'platform': platforms[1].pk, 'status': VirtualMachineStatusChoices.STATUS_STAGED, - 'role': deviceroles[1].pk, + 'role': roles[1].pk, 'vcpus': 8, 'memory': 65535, 'disk': 8000, @@ -289,12 +289,12 @@ class VMInterfaceTestCase(ViewTestCases.DeviceComponentViewTestCase): def setUpTestData(cls): site = Site.objects.create(name='Site 1', slug='site-1') - devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') + role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') clustertype = ClusterType.objects.create(name='Cluster Type 1', slug='cluster-type-1') cluster = Cluster.objects.create(name='Cluster 1', type=clustertype, site=site) virtualmachines = ( - VirtualMachine(name='Virtual Machine 1', site=site, cluster=cluster, role=devicerole), - VirtualMachine(name='Virtual Machine 2', site=site, cluster=cluster, role=devicerole), + VirtualMachine(name='Virtual Machine 1', site=site, cluster=cluster, role=role), + VirtualMachine(name='Virtual Machine 2', site=site, cluster=cluster, role=role), ) VirtualMachine.objects.bulk_create(virtualmachines)