diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index 640a3fd39..97b55b285 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -17,7 +17,7 @@ body: What version of NetBox are you currently running? (If you don't have access to the most recent NetBox release, consider testing on our [demo instance](https://demo.netbox.dev/) before opening a bug report to see if your issue has already been addressed.) - placeholder: v2.11.8 + placeholder: v2.11.9 validations: required: true - type: dropdown diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml index 760d74298..bfb0cc7aa 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -14,7 +14,7 @@ body: attributes: label: NetBox version description: What version of NetBox are you currently running? - placeholder: v2.11.8 + placeholder: v2.11.9 validations: required: true - type: dropdown diff --git a/docs/release-notes/version-2.11.md b/docs/release-notes/version-2.11.md index c5a500698..1ff9a8483 100644 --- a/docs/release-notes/version-2.11.md +++ b/docs/release-notes/version-2.11.md @@ -1,5 +1,15 @@ # NetBox v2.11 +## v2.11.9 (2021-07-08) + +### Bug Fixes + +* [#6456](https://github.com/netbox-community/netbox/issues/6456) - API schema type should be boolean for `_occupied` on cable termination models +* [#6710](https://github.com/netbox-community/netbox/issues/6710) - Fix assignment of VM interface parent via REST API +* [#6714](https://github.com/netbox-community/netbox/issues/6714) - Fix rendering of device type component creation forms + +--- + ## v2.11.8 (2021-07-06) ### Enhancements diff --git a/netbox/dcim/api/serializers.py b/netbox/dcim/api/serializers.py index f41d5eeb4..deb73fba4 100644 --- a/netbox/dcim/api/serializers.py +++ b/netbox/dcim/api/serializers.py @@ -25,6 +25,7 @@ from .nested_serializers import * class CableTerminationSerializer(serializers.ModelSerializer): cable_peer_type = serializers.SerializerMethodField(read_only=True) cable_peer = serializers.SerializerMethodField(read_only=True) + _occupied = serializers.SerializerMethodField(read_only=True) def get_cable_peer_type(self, obj): if obj._cable_peer is not None: @@ -42,6 +43,10 @@ class CableTerminationSerializer(serializers.ModelSerializer): return serializer(obj._cable_peer, context=context).data return None + @swagger_serializer_method(serializer_or_field=serializers.BooleanField) + def get__occupied(self, obj): + return obj._occupied + class ConnectedEndpointSerializer(serializers.ModelSerializer): connected_endpoint_type = serializers.SerializerMethodField(read_only=True) diff --git a/netbox/dcim/tests/test_api.py b/netbox/dcim/tests/test_api.py index 2c64ad294..002a4513f 100644 --- a/netbox/dcim/tests/test_api.py +++ b/netbox/dcim/tests/test_api.py @@ -1211,8 +1211,9 @@ class InterfaceTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCase { 'device': device.pk, 'name': 'Interface 6', - 'type': '1000base-t', + 'type': 'virtual', 'mode': InterfaceModeChoices.MODE_TAGGED, + 'parent': interfaces[0].pk, 'tagged_vlans': [vlans[0].pk, vlans[1].pk], 'untagged_vlan': vlans[2].pk, }, diff --git a/netbox/templates/dcim/device_component_add.html b/netbox/templates/dcim/device_component_add.html index c80357990..245d6adeb 100644 --- a/netbox/templates/dcim/device_component_add.html +++ b/netbox/templates/dcim/device_component_add.html @@ -30,7 +30,7 @@ {{ field }} {% endfor %} {% for field in form.visible_fields %} - {% if field.name not in form.custom_fields %} + {% if not form.custom_fields or field.name not in form.custom_fields %} {% render_field field %} {% endif %} {% endfor %} diff --git a/netbox/virtualization/api/nested_serializers.py b/netbox/virtualization/api/nested_serializers.py index aa0a9437e..16e10b5fd 100644 --- a/netbox/virtualization/api/nested_serializers.py +++ b/netbox/virtualization/api/nested_serializers.py @@ -1,8 +1,7 @@ from rest_framework import serializers -from dcim.models import Interface from netbox.api import WritableNestedSerializer -from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine +from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface __all__ = [ 'NestedClusterGroupSerializer', @@ -61,5 +60,5 @@ class NestedVMInterfaceSerializer(WritableNestedSerializer): virtual_machine = NestedVirtualMachineSerializer(read_only=True) class Meta: - model = Interface + model = VMInterface fields = ['id', 'url', 'display', 'virtual_machine', 'name'] diff --git a/netbox/virtualization/tests/test_api.py b/netbox/virtualization/tests/test_api.py index 289ccf843..3245fb9bf 100644 --- a/netbox/virtualization/tests/test_api.py +++ b/netbox/virtualization/tests/test_api.py @@ -252,6 +252,7 @@ class VMInterfaceTest(APIViewTestCases.APIViewTestCase): { 'virtual_machine': virtualmachine.pk, 'name': 'Interface 6', + 'parent': interfaces[0].pk, 'mode': InterfaceModeChoices.MODE_TAGGED, 'tagged_vlans': [vlans[0].pk, vlans[1].pk], 'untagged_vlan': vlans[2].pk, diff --git a/requirements.txt b/requirements.txt index 2a1cecd66..2acf122b7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ gunicorn==20.1.0 Jinja2==3.0.1 Markdown==3.3.4 netaddr==0.8.0 -Pillow==8.3.0 +Pillow==8.3.1 psycopg2-binary==2.9.1 pycryptodome==3.10.1 PyYAML==5.4.1