Skip to content

Commit 4f11e77

Browse files
authored
Merge pull request #266 from pheus/feature/261-add-NetBox-v4-3-support
Closes #261 - Add support for NetBox v4.3
2 parents db52990 + 5e52acf commit 4f11e77

File tree

7 files changed

+189
-39
lines changed

7 files changed

+189
-39
lines changed

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
ARG NETBOX_VARIANT=v4.2
1+
ARG NETBOX_VARIANT=v4.3
22

33
FROM netboxcommunity/netbox:${NETBOX_VARIANT}
44

55
RUN mkdir -pv /plugins/netbox-acls
66
COPY . /plugins/netbox-acls
77

8-
RUN /usr/local/bin/uv pip install --editable /plugins/netbox-acls
8+
RUN /usr/local/bin/uv pip install --editable /plugins/netbox-acls

netbox_acls/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ class NetBoxACLsConfig(PluginConfig):
1515
version = importlib.metadata.version('netbox-acls')
1616
description = "Manage simple ACLs in NetBox"
1717
base_url = "access-lists"
18-
min_version = "4.2.0"
19-
max_version = "4.2.99"
18+
min_version = "4.3.0"
19+
max_version = "4.3.99"
2020

2121

2222
config = NetBoxACLsConfig

netbox_acls/graphql/enums.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import strawberry
2+
3+
from ..choices import (
4+
ACLActionChoices,
5+
ACLAssignmentDirectionChoices,
6+
ACLProtocolChoices,
7+
ACLRuleActionChoices,
8+
ACLTypeChoices,
9+
)
10+
11+
__all__ = (
12+
"ACLActionEnum",
13+
"ACLAssignmentDirectionEnum",
14+
"ACLProtocolEnum",
15+
"ACLRuleActionEnum",
16+
"ACLTypeEnum",
17+
)
18+
19+
#
20+
# Access List
21+
#
22+
23+
ACLActionEnum = strawberry.enum(ACLActionChoices.as_enum())
24+
ACLTypeEnum = strawberry.enum(ACLTypeChoices.as_enum())
25+
26+
#
27+
# Access List Assignments
28+
#
29+
30+
ACLAssignmentDirectionEnum = strawberry.enum(ACLAssignmentDirectionChoices.as_enum())
31+
32+
#
33+
# Access List Rules
34+
#
35+
36+
ACLProtocolEnum = strawberry.enum(ACLProtocolChoices.as_enum())
37+
ACLRuleActionEnum = strawberry.enum(ACLRuleActionChoices.as_enum())

netbox_acls/graphql/filters.py

Lines changed: 0 additions & 35 deletions
This file was deleted.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from .access_list_rules import ACLExtendedRuleFilter, ACLStandardRuleFilter
2+
from .access_lists import AccessListFilter, ACLInterfaceAssignmentFilter
3+
4+
__all__ = (
5+
"AccessListFilter",
6+
"ACLExtendedRuleFilter",
7+
"ACLInterfaceAssignmentFilter",
8+
"ACLStandardRuleFilter",
9+
)
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
from dataclasses import dataclass
2+
from typing import TYPE_CHECKING, Annotated
3+
4+
import strawberry
5+
import strawberry_django
6+
from netbox.graphql.filter_mixins import NetBoxModelFilterMixin
7+
from strawberry.scalars import ID
8+
from strawberry_django import FilterLookup
9+
10+
from ... import models
11+
12+
if TYPE_CHECKING:
13+
from ipam.graphql.filters import PrefixFilter
14+
from netbox.graphql.filter_lookups import IntegerArrayLookup, IntegerLookup
15+
16+
from ..enums import (
17+
ACLProtocolEnum,
18+
ACLRuleActionEnum,
19+
)
20+
from .access_lists import AccessListFilter
21+
22+
23+
__all__ = (
24+
"ACLStandardRuleFilter",
25+
"ACLExtendedRuleFilter",
26+
)
27+
28+
29+
@dataclass
30+
class ACLRuleFilterMixin(NetBoxModelFilterMixin):
31+
"""
32+
Base GraphQL filter mixin for ACL Rule models.
33+
"""
34+
35+
access_list: Annotated["AccessListFilter", strawberry.lazy("netbox_acls.graphql.filters")] | None = (
36+
strawberry_django.filter_field()
37+
)
38+
access_list_id: ID | None = strawberry_django.filter_field()
39+
index: Annotated["IntegerLookup", strawberry.lazy("netbox.graphql.filter_lookups")] | None = (
40+
strawberry_django.filter_field()
41+
)
42+
remark: FilterLookup[str] | None = strawberry_django.filter_field()
43+
description: FilterLookup[str] | None = strawberry_django.filter_field()
44+
action: Annotated["ACLRuleActionEnum", strawberry.lazy("netbox_acls.graphql.enums")] | None = (
45+
strawberry_django.filter_field()
46+
)
47+
source_prefix: Annotated["PrefixFilter", strawberry.lazy("ipam.graphql.filters")] | None = (
48+
strawberry_django.filter_field()
49+
)
50+
51+
52+
@strawberry_django.filter(models.ACLStandardRule, lookups=True)
53+
class ACLStandardRuleFilter(ACLRuleFilterMixin):
54+
"""
55+
GraphQL filter definition for the ACLStandardRule model.
56+
"""
57+
58+
pass
59+
60+
61+
@strawberry_django.filter(models.ACLExtendedRule, lookups=True)
62+
class ACLExtendedRuleFilter(ACLRuleFilterMixin):
63+
"""
64+
GraphQL filter definition for the ACLExtendedRule model.
65+
"""
66+
67+
source_ports: Annotated["IntegerArrayLookup", strawberry.lazy("netbox.graphql.filter_lookups")] | None = (
68+
strawberry_django.filter_field()
69+
)
70+
destination_prefix: Annotated["PrefixFilter", strawberry.lazy("ipam.graphql.filters")] | None = (
71+
strawberry_django.filter_field()
72+
)
73+
destination_ports: Annotated["IntegerArrayLookup", strawberry.lazy("netbox.graphql.filter_lookups")] | None = (
74+
strawberry_django.filter_field()
75+
)
76+
protocol: Annotated["ACLProtocolEnum", strawberry.lazy("netbox_acls.graphql.enums")] | None = (
77+
strawberry_django.filter_field()
78+
)
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
from typing import TYPE_CHECKING, Annotated
2+
3+
import strawberry
4+
import strawberry_django
5+
from core.graphql.filters import ContentTypeFilter
6+
from netbox.graphql.filter_mixins import NetBoxModelFilterMixin
7+
from strawberry.scalars import ID
8+
from strawberry_django import FilterLookup
9+
10+
from ... import models
11+
12+
if TYPE_CHECKING:
13+
from ..enums import (
14+
ACLActionEnum,
15+
ACLAssignmentDirectionEnum,
16+
ACLTypeEnum,
17+
)
18+
19+
20+
__all__ = (
21+
"AccessListFilter",
22+
"ACLInterfaceAssignmentFilter",
23+
)
24+
25+
26+
@strawberry_django.filter(models.AccessList, lookups=True)
27+
class AccessListFilter(NetBoxModelFilterMixin):
28+
"""
29+
GraphQL filter definition for the AccessList model.
30+
"""
31+
32+
name: FilterLookup[str] | None = strawberry_django.filter_field()
33+
assigned_object_type: Annotated["ContentTypeFilter", strawberry.lazy("core.graphql.filters")] | None = (
34+
strawberry_django.filter_field()
35+
)
36+
assigned_object_id: ID | None = strawberry_django.filter_field()
37+
type: Annotated["ACLTypeEnum", strawberry.lazy("netbox_acls.graphql.enums")] | None = (
38+
strawberry_django.filter_field()
39+
)
40+
default_action: Annotated["ACLActionEnum", strawberry.lazy("netbox_acls.graphql.enums")] | None = (
41+
strawberry_django.filter_field()
42+
)
43+
44+
45+
@strawberry_django.filter(models.ACLInterfaceAssignment, lookups=True)
46+
class ACLInterfaceAssignmentFilter(NetBoxModelFilterMixin):
47+
"""
48+
GraphQL filter definition for the ACLInterfaceAssignment model.
49+
"""
50+
51+
access_list: Annotated["AccessListFilter", strawberry.lazy("netbox_acls.graphql.filters")] | None = (
52+
strawberry_django.filter_field()
53+
)
54+
access_list_id: ID | None = strawberry_django.filter_field()
55+
direction: Annotated["ACLAssignmentDirectionEnum", strawberry.lazy("netbox_acls.graphql.enums")] | None = (
56+
strawberry_django.filter_field()
57+
)
58+
assigned_object_type: Annotated["ContentTypeFilter", strawberry.lazy("core.graphql.filters")] | None = (
59+
strawberry_django.filter_field()
60+
)
61+
assigned_object_id: ID | None = strawberry_django.filter_field()

0 commit comments

Comments
 (0)