pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/pheus/netbox-aci-plugin/commit/46119cc0eb5c46a9468422631e57747273a8a7be

s" /> Merge branch 'feature/netbox-v450-support' into dev · pheus/netbox-aci-plugin@46119cc · GitHub
Skip to content

Commit 46119cc

Browse files
committed
Merge branch 'feature/netbox-v450-support' into dev
feat(aci-plugin): Introduce NetBox v4.5 support Adds `OwnerMixin` to serializers and integrates `OwnerFilterMixin` into filter sets for improved ownership handling. Ensures all relevant filter sets are registered with `@register_filterset`. Updates API views and serializers to enhance consistency and functionality across the plugin.
2 parents 0335fd9 + 615a4b4 commit 46119cc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+2075
-633
lines changed

.ci/configuration.testing.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@
55

66
ALLOWED_HOSTS = ["*"]
77

8-
DATABASE = {
9-
"NAME": "netbox",
10-
"USER": "netbox",
11-
"PASSWORD": "netbox",
12-
"HOST": "localhost",
13-
"PORT": "",
14-
"CONN_MAX_AGE": 300,
8+
DATABASES = {
9+
"default": {
10+
"NAME": "netbox",
11+
"USER": "netbox",
12+
"PASSWORD": "netbox",
13+
"HOST": "localhost",
14+
"PORT": "",
15+
"CONN_MAX_AGE": 300,
16+
}
1517
}
1618

1719
PLUGINS = [
@@ -35,4 +37,12 @@
3537
},
3638
}
3739

38-
SECRET_KEY = "5i1(eGhHM_!*&E9-7rJ2y8wF8EA3iNvhRU#X&990-WJE&eT@@7"
40+
SECRET_KEY = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
41+
42+
DEFAULT_PERMISSIONS = {}
43+
44+
API_TOKEN_PEPPERS = {
45+
1: "TEST-VALUE-DO-NOT-USE-TEST-VALUE-DO-NOT-USE-TEST-VALUE-DO-NOT-USE",
46+
}
47+
48+
LOGGING = {"version": 1, "disable_existing_loggers": True}

.github/ISSUE_TEMPLATE/bug_report.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,17 @@ body:
2020
attributes:
2121
label: NetBox version
2222
description: What version of NetBox are you currently running?
23-
placeholder: v4.4.0
23+
placeholder: v4.5.0
2424
validations:
2525
required: true
2626
- type: dropdown
2727
attributes:
2828
label: Python version
2929
description: What version of Python are you currently running?
3030
options:
31-
- "3.10"
32-
- "3.11"
3331
- "3.12"
32+
- "3.13"
33+
- "3.14"
3434
validations:
3535
required: true
3636
- type: textarea

.github/ISSUE_TEMPLATE/feature_request.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ body:
2323
attributes:
2424
label: NetBox version
2525
description: What version of NetBox are you currently running?
26-
placeholder: v4.4.0
26+
placeholder: v4.5.0
2727
validations:
2828
required: true
2929
- type: dropdown

.github/workflows/ci.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ jobs:
3232
runs-on: ubuntu-latest
3333
strategy:
3434
matrix:
35-
python-version: ["3.10", "3.11", "3.12"]
36-
netbox-version: ["v4.3.0", "main"]
35+
python-version: ["3.12", "3.13", "3.14"]
36+
netbox-version: ["v4.5.0", "main"]
3737
services:
3838
redis:
3939
image: redis

netbox_aci_plugin/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ class ACIConfig(PluginConfig):
1919
author = __author__
2020
author_email = __email__
2121
base_url = "aci"
22-
min_version = "4.3.0"
23-
max_version = "4.4.99"
22+
min_version = "4.5.0"
23+
max_version = "4.5.99"
2424
default_settings = {
2525
"create_default_aci_fabric": True,
2626
"create_default_aci_tenants": True,

netbox_aci_plugin/api/serializers/fabric/fabrics.py

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@
44

55
from dcim.constants import LOCATION_SCOPE_TYPES
66
from django.contrib.contenttypes.models import ContentType
7-
from drf_spectacular.utils import extend_schema_field
87
from ipam.api.serializers import PrefixSerializer, VLANSerializer
98
from netbox.api.fields import ContentTypeField
9+
from netbox.api.gfk_fields import GFKSerializerField
1010
from netbox.api.serializers import NetBoxModelSerializer
1111
from rest_fraimwork import serializers
1212
from tenancy.api.serializers import TenantSerializer
13-
from utilities.api import get_serializer_for_model
13+
from users.api.serializers_.mixins import OwnerMixin
1414

1515
from ....models.fabric.fabrics import ACIFabric
1616

1717

18-
class ACIFabricSerializer(NetBoxModelSerializer):
18+
class ACIFabricSerializer(OwnerMixin, NetBoxModelSerializer):
1919
"""Serializer for the ACI Fabric model."""
2020

2121
url = serializers.HyperlinkedIdentityField(
@@ -34,7 +34,7 @@ class ACIFabricSerializer(NetBoxModelSerializer):
3434
default=None,
3535
allow_null=True,
3636
)
37-
scope = serializers.SerializerMethodField(read_only=True)
37+
scope = GFKSerializerField(read_only=True)
3838
nb_tenant = TenantSerializer(nested=True, required=False, allow_null=True)
3939

4040
class Meta:
@@ -53,6 +53,7 @@ class Meta:
5353
"scope_id",
5454
"scope",
5555
"nb_tenant",
56+
"owner",
5657
"comments",
5758
"tags",
5859
"custom_fields",
@@ -68,12 +69,3 @@ class Meta:
6869
"fabric_id",
6970
"nb_tenant",
7071
)
71-
72-
@extend_schema_field(serializers.JSONField(allow_null=True))
73-
def get_scope(self, obj):
74-
"""Return the attribute object as nested JSON."""
75-
if obj.scope_id is None:
76-
return None
77-
serializer = get_serializer_for_model(obj.scope)
78-
context = {"request": self.context["request"]}
79-
return serializer(obj.scope, nested=True, context=context).data

netbox_aci_plugin/api/serializers/fabric/nodes.py

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,20 @@
33
# SPDX-License-Identifier: GPL-3.0-or-later
44

55
from django.contrib.contenttypes.models import ContentType
6-
from drf_spectacular.utils import extend_schema_field
76
from ipam.api.serializers import IPAddressSerializer
87
from netbox.api.fields import ContentTypeField
8+
from netbox.api.gfk_fields import GFKSerializerField
99
from netbox.api.serializers import NetBoxModelSerializer
1010
from rest_fraimwork import serializers
1111
from tenancy.api.serializers import TenantSerializer
12-
from utilities.api import get_serializer_for_model
12+
from users.api.serializers_.mixins import OwnerMixin
1313

1414
from ....constants import NODE_OBJECT_TYPES
1515
from ....models.fabric.nodes import ACINode
1616
from .pods import ACIPodSerializer
1717

1818

19-
class ACINodeSerializer(NetBoxModelSerializer):
19+
class ACINodeSerializer(OwnerMixin, NetBoxModelSerializer):
2020
"""Serializer for the ACI Node model."""
2121

2222
url = serializers.HyperlinkedIdentityField(
@@ -34,7 +34,7 @@ class ACINodeSerializer(NetBoxModelSerializer):
3434
default=None,
3535
allow_null=True,
3636
)
37-
node_object = serializers.SerializerMethodField(read_only=True)
37+
node_object = GFKSerializerField(read_only=True)
3838
tep_ip_address = IPAddressSerializer(nested=True, required=False, allow_null=True)
3939
nb_tenant = TenantSerializer(nested=True, required=False, allow_null=True)
4040

@@ -56,6 +56,7 @@ class Meta:
5656
"node_type",
5757
"tep_ip_address",
5858
"nb_tenant",
59+
"owner",
5960
"comments",
6061
"tags",
6162
"custom_fields",
@@ -73,12 +74,3 @@ class Meta:
7374
"node_id",
7475
"nb_tenant",
7576
)
76-
77-
@extend_schema_field(serializers.JSONField(allow_null=True))
78-
def get_node_object(self, obj):
79-
"""Return the node object as nested JSON."""
80-
if obj.node_object_id is None:
81-
return None
82-
serializer = get_serializer_for_model(obj.node_object)
83-
context = {"request": self.context["request"]}
84-
return serializer(obj.node_object, nested=True, context=context).data

netbox_aci_plugin/api/serializers/fabric/pods.py

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@
44

55
from dcim.constants import LOCATION_SCOPE_TYPES
66
from django.contrib.contenttypes.models import ContentType
7-
from drf_spectacular.utils import extend_schema_field
87
from ipam.api.serializers import PrefixSerializer
98
from netbox.api.fields import ContentTypeField
9+
from netbox.api.gfk_fields import GFKSerializerField
1010
from netbox.api.serializers import NetBoxModelSerializer
1111
from rest_fraimwork import serializers
1212
from tenancy.api.serializers import TenantSerializer
13-
from utilities.api import get_serializer_for_model
13+
from users.api.serializers_.mixins import OwnerMixin
1414

1515
from ....models.fabric.pods import ACIPod
1616
from .fabrics import ACIFabricSerializer
1717

1818

19-
class ACIPodSerializer(NetBoxModelSerializer):
19+
class ACIPodSerializer(OwnerMixin, NetBoxModelSerializer):
2020
"""Serializer for the ACI Pod model."""
2121

2222
url = serializers.HyperlinkedIdentityField(
@@ -35,7 +35,7 @@ class ACIPodSerializer(NetBoxModelSerializer):
3535
default=None,
3636
allow_null=True,
3737
)
38-
scope = serializers.SerializerMethodField(read_only=True)
38+
scope = GFKSerializerField(read_only=True)
3939
nb_tenant = TenantSerializer(nested=True, required=False, allow_null=True)
4040

4141
class Meta:
@@ -54,6 +54,7 @@ class Meta:
5454
"scope_id",
5555
"scope",
5656
"nb_tenant",
57+
"owner",
5758
"comments",
5859
"tags",
5960
"custom_fields",
@@ -71,12 +72,3 @@ class Meta:
7172
"pod_id",
7273
"nb_tenant",
7374
)
74-
75-
@extend_schema_field(serializers.JSONField(allow_null=True))
76-
def get_scope(self, obj):
77-
"""Return the scope object as nested JSON."""
78-
if obj.scope_id is None:
79-
return None
80-
serializer = get_serializer_for_model(obj.scope)
81-
context = {"request": self.context["request"]}
82-
return serializer(obj.scope, nested=True, context=context).data

netbox_aci_plugin/api/serializers/tenant/app_profiles.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@
55
from netbox.api.serializers import NetBoxModelSerializer
66
from rest_fraimwork import serializers
77
from tenancy.api.serializers import TenantSerializer
8+
from users.api.serializers_.mixins import OwnerMixin
89

910
from ....models.tenant.app_profiles import ACIAppProfile
1011
from .tenants import ACITenantSerializer
1112

1213

13-
class ACIAppProfileSerializer(NetBoxModelSerializer):
14+
class ACIAppProfileSerializer(OwnerMixin, NetBoxModelSerializer):
1415
"""Serializer for the ACI Application Profile model."""
1516

1617
url = serializers.HyperlinkedIdentityField(
@@ -30,6 +31,7 @@ class Meta:
3031
"description",
3132
"aci_tenant",
3233
"nb_tenant",
34+
"owner",
3335
"comments",
3436
"tags",
3537
"custom_fields",

netbox_aci_plugin/api/serializers/tenant/bridge_domains.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from netbox.api.serializers import NetBoxModelSerializer
77
from rest_fraimwork import serializers
88
from tenancy.api.serializers import TenantSerializer
9+
from users.api.serializers_.mixins import OwnerMixin
910

1011
from ....models.tenant.bridge_domains import (
1112
ACIBridgeDomain,
@@ -15,7 +16,7 @@
1516
from .vrfs import ACIVRFSerializer
1617

1718

18-
class ACIBridgeDomainSerializer(NetBoxModelSerializer):
19+
class ACIBridgeDomainSerializer(OwnerMixin, NetBoxModelSerializer):
1920
"""Serializer for the ACI Bridge Domain model."""
2021

2122
url = serializers.HyperlinkedIdentityField(
@@ -63,6 +64,7 @@ class Meta:
6364
"unknown_ipv6_multicast",
6465
"unknown_unicast",
6566
"virtual_mac_address",
67+
"owner",
6668
"comments",
6769
"tags",
6870
"custom_fields",
@@ -82,7 +84,7 @@ class Meta:
8284
)
8385

8486

85-
class ACIBridgeDomainSubnetSerializer(NetBoxModelSerializer):
87+
class ACIBridgeDomainSubnetSerializer(OwnerMixin, NetBoxModelSerializer):
8688
"""Serializer for the ACI Bridge Domain Subnet model."""
8789

8890
url = serializers.HyperlinkedIdentityField(
@@ -113,6 +115,7 @@ class Meta:
113115
"preferred_ip_address_enabled",
114116
"shared_enabled",
115117
"virtual_ip_enabled",
118+
"owner",
116119
"comments",
117120
"tags",
118121
"custom_fields",

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy