7
7
from django .db import models
8
8
from django .urls import reverse
9
9
from netbox .models import NetBoxModel
10
+ from ipam .models import Prefix , IPRange , IPAddress , Aggregate , Service
10
11
11
12
from ..choices import ACLProtocolChoices , ACLRuleActionChoices , ACLTypeChoices
12
13
from .access_lists import AccessList
17
18
"ACLExtendedRule" ,
18
19
)
19
20
20
-
21
21
class ACLRule (NetBoxModel ):
22
22
"""
23
23
Abstract model for ACL Rules.
@@ -43,16 +43,57 @@ class ACLRule(NetBoxModel):
43
43
choices = ACLRuleActionChoices ,
44
44
max_length = 30 ,
45
45
)
46
+
46
47
source_prefix = models .ForeignKey (
47
48
blank = True ,
48
49
null = True ,
49
50
on_delete = models .PROTECT ,
50
51
related_name = "+" ,
51
- to = "ipam. Prefix" ,
52
+ to = Prefix ,
52
53
verbose_name = "Source Prefix" ,
53
54
)
55
+ source_iprange = models .ForeignKey (
56
+ blank = True ,
57
+ null = True ,
58
+ on_delete = models .PROTECT ,
59
+ related_name = "+" ,
60
+ to = IPRange ,
61
+ verbose_name = "Source IP-Range" ,
62
+ )
63
+ source_ipaddress = models .ForeignKey (
64
+ blank = True ,
65
+ null = True ,
66
+ on_delete = models .PROTECT ,
67
+ related_name = "+" ,
68
+ to = IPAddress ,
69
+ verbose_name = "Source IP-Address" ,
70
+ )
71
+ source_aggregate = models .ForeignKey (
72
+ blank = True ,
73
+ null = True ,
74
+ on_delete = models .PROTECT ,
75
+ related_name = "+" ,
76
+ to = Aggregate ,
77
+ verbose_name = "Source Aggregate" ,
78
+ )
79
+ source_service = models .ForeignKey (
80
+ blank = True ,
81
+ null = True ,
82
+ on_delete = models .PROTECT ,
83
+ related_name = "+" ,
84
+ to = Service ,
85
+ verbose_name = "Source Service" ,
86
+ )
54
87
55
- clone_fields = ("access_list" , "action" , "source_prefix" )
88
+ clone_fields = (
89
+ "access_list" ,
90
+ "action" ,
91
+ "source_prefix" ,
92
+ "source_iprange" ,
93
+ "source_ipaddress" ,
94
+ "source_aggregate" ,
95
+ "source_service"
96
+ )
56
97
57
98
def __str__ (self ):
58
99
return f"{ self .access_list } : Rule { self .index } "
@@ -62,7 +103,14 @@ def get_action_color(self):
62
103
63
104
@classmethod
64
105
def get_prerequisite_models (cls ):
65
- return [apps .get_model ("ipam.Prefix" ), AccessList ]
106
+ return [
107
+ Prefix ,
108
+ IPRange ,
109
+ IPAddress ,
110
+ Aggregate ,
111
+ Service ,
112
+ AccessList
113
+ ]
66
114
67
115
class Meta :
68
116
"""
@@ -99,7 +147,14 @@ def get_absolute_url(self):
99
147
100
148
@classmethod
101
149
def get_prerequisite_models (cls ):
102
- return [AccessList ]
150
+ return [
151
+ Prefix ,
152
+ IPRange ,
153
+ IPAddress ,
154
+ Aggregate ,
155
+ Service ,
156
+ AccessList
157
+ ]
103
158
104
159
class Meta (ACLRule .Meta ):
105
160
"""
0 commit comments