acex-devkit 1.2.1__tar.gz → 1.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/PKG-INFO +1 -1
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/pyproject.toml +1 -1
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/src/acex_devkit/models/composed_configuration.py +44 -32
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/src/acex_devkit/models/logging.py +1 -1
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/README.md +0 -0
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/src/acex_devkit/__init__.py +0 -0
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/src/acex_devkit/configdiffer/__init__.py +0 -0
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/src/acex_devkit/configdiffer/command.py +0 -0
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/src/acex_devkit/configdiffer/configdiffer.py +0 -0
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/src/acex_devkit/configdiffer/diff.py +0 -0
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/src/acex_devkit/configdiffer/old_configdiffer.py +0 -0
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/src/acex_devkit/configdiffer/old_diff.py +0 -0
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/src/acex_devkit/drivers/__init__.py +0 -0
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/src/acex_devkit/drivers/base.py +0 -0
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/src/acex_devkit/drivers/base_driver.py +0 -0
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/src/acex_devkit/exceptions/__init__.py +0 -0
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/src/acex_devkit/models/__init__.py +0 -0
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/src/acex_devkit/models/acl_model.py +0 -0
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/src/acex_devkit/models/attribute_value.py +0 -0
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/src/acex_devkit/models/external_value.py +0 -0
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/src/acex_devkit/models/ned.py +0 -0
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/src/acex_devkit/models/node_response.py +0 -0
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/src/acex_devkit/models/spanning_tree.py +0 -0
- {acex_devkit-1.2.1 → acex_devkit-1.3.0}/src/acex_devkit/types/__init__.py +0 -0
|
@@ -52,13 +52,22 @@ class SystemConfig(BaseModel):
|
|
|
52
52
|
#class TripleA(BaseModel): ...
|
|
53
53
|
|
|
54
54
|
# Trying to avoid using "Logging" or "logging" as names for anything due to conflicts with standard lib.
|
|
55
|
-
class
|
|
55
|
+
class RemoteServers(BaseModel):
|
|
56
|
+
servers: Dict[str, RemoteServer] = {}
|
|
57
|
+
|
|
58
|
+
class VtyLines(BaseModel):
|
|
59
|
+
lines: Dict[str, VtyLine] = {}
|
|
60
|
+
|
|
61
|
+
class LogFiles(BaseModel):
|
|
62
|
+
files: Dict[str, FileLogging] = {}
|
|
63
|
+
|
|
64
|
+
class LoggingComponents(BaseModel):
|
|
56
65
|
config: LoggingConfig = LoggingConfig()
|
|
57
66
|
console: Optional[Console] = None
|
|
58
|
-
remote_servers: Optional[
|
|
67
|
+
remote_servers: Optional[RemoteServers] = RemoteServers()
|
|
59
68
|
events: Optional[LoggingEvents] = None
|
|
60
|
-
vty: Optional[
|
|
61
|
-
files: Optional[
|
|
69
|
+
vty: Optional[VtyLines] = VtyLines()
|
|
70
|
+
files: Optional[LogFiles] = LogFiles()
|
|
62
71
|
|
|
63
72
|
class NtpConfig(BaseModel):
|
|
64
73
|
enabled: AttributeValue[bool] = AttributeValue(value=False)
|
|
@@ -73,7 +82,7 @@ class NtpServer(BaseModel):
|
|
|
73
82
|
|
|
74
83
|
class Ntp(BaseModel):
|
|
75
84
|
config: Optional[NtpConfig] = None
|
|
76
|
-
servers: Optional[Dict[str, NtpServer]] =
|
|
85
|
+
servers: Optional[Dict[str, NtpServer]] = {}
|
|
77
86
|
|
|
78
87
|
class SshServer(BaseModel):
|
|
79
88
|
enable: Optional[AttributeValue[bool]] = None
|
|
@@ -100,7 +109,7 @@ class AuthorizedKey(BaseModel):
|
|
|
100
109
|
|
|
101
110
|
class Ssh(BaseModel):
|
|
102
111
|
config: Optional[SshServer] = None
|
|
103
|
-
host_keys: Optional[Dict[str, AuthorizedKey]] =
|
|
112
|
+
host_keys: Optional[Dict[str, AuthorizedKey]] = {}
|
|
104
113
|
|
|
105
114
|
class Lldp(BaseModel): ...
|
|
106
115
|
|
|
@@ -225,11 +234,11 @@ class StaticRouteNextHop(BaseModel):
|
|
|
225
234
|
class StaticRoute(BaseModel):
|
|
226
235
|
route_name: Optional[AttributeValue[str]] = None
|
|
227
236
|
prefix: AttributeValue[str]
|
|
228
|
-
next_hops: Optional[Dict[str, StaticRouteNextHop]] =
|
|
237
|
+
next_hops: Optional[Dict[str, StaticRouteNextHop]] = {}
|
|
229
238
|
network_instance: Optional[AttributeValue[str]] = None
|
|
230
239
|
|
|
231
240
|
class Protocols(BaseModel):
|
|
232
|
-
static_routes: Optional[Dict[str, StaticRoute]] =
|
|
241
|
+
static_routes: Optional[Dict[str, StaticRoute]] = {}
|
|
233
242
|
# OSPF, BGP, etc. can be added here as needed
|
|
234
243
|
|
|
235
244
|
class RouteTarget(BaseModel):
|
|
@@ -245,9 +254,9 @@ class InterInstancePolicy(BaseModel):
|
|
|
245
254
|
class NetworkInstance(BaseModel):
|
|
246
255
|
name: AttributeValue[str]
|
|
247
256
|
description: Optional[AttributeValue[str]] = None
|
|
248
|
-
vlans: Optional[Dict[str, Vlan]] =
|
|
257
|
+
vlans: Optional[Dict[str, Vlan]] = {}
|
|
249
258
|
interfaces: Optional[Dict[str, Reference]] = {}
|
|
250
|
-
inter_instance_policies: Optional[Dict[str, InterInstancePolicy]] =
|
|
259
|
+
inter_instance_policies: Optional[Dict[str, InterInstancePolicy]] = {}
|
|
251
260
|
protocols: Optional[Protocols] = Protocols()
|
|
252
261
|
|
|
253
262
|
class LacpConfig(BaseModel):
|
|
@@ -257,7 +266,7 @@ class LacpConfig(BaseModel):
|
|
|
257
266
|
|
|
258
267
|
class Lacp(BaseModel):
|
|
259
268
|
config: Optional[LacpConfig] = LacpConfig()
|
|
260
|
-
interfaces: Optional[Dict[str, Interface]] =
|
|
269
|
+
interfaces: Optional[Dict[str, Interface]] = {}
|
|
261
270
|
|
|
262
271
|
# SNMP
|
|
263
272
|
class SnmpAccess(str, Enum):
|
|
@@ -455,12 +464,12 @@ class TrapEvent(BaseModel):
|
|
|
455
464
|
#class SnmpTrap(BaseModel): ...
|
|
456
465
|
|
|
457
466
|
class Snmp(BaseModel):
|
|
458
|
-
config: Optional[Dict[str, SnmpConfig]] =
|
|
459
|
-
communities: Optional[Dict[str, SnmpCommunity]] =
|
|
460
|
-
users: Optional[Dict[str, SnmpUser]] =
|
|
461
|
-
trap_servers: Optional[Dict[str, SnmpServer]] =
|
|
462
|
-
trap_events: Optional[Dict[str, TrapEvent]] =
|
|
463
|
-
views: Optional[Dict[str, SnmpView]] =
|
|
467
|
+
config: Optional[Dict[str, SnmpConfig]] = {}
|
|
468
|
+
communities: Optional[Dict[str, SnmpCommunity]] = {}
|
|
469
|
+
users: Optional[Dict[str, SnmpUser]] = {}
|
|
470
|
+
trap_servers: Optional[Dict[str, SnmpServer]] = {}
|
|
471
|
+
trap_events: Optional[Dict[str, TrapEvent]] = {}
|
|
472
|
+
views: Optional[Dict[str, SnmpView]] = {}
|
|
464
473
|
|
|
465
474
|
# AAA
|
|
466
475
|
class aaaBaseClass(BaseModel):
|
|
@@ -509,8 +518,8 @@ class aaaServerGroupAttributes(BaseModel):
|
|
|
509
518
|
"""
|
|
510
519
|
enable: Optional[AttributeValue[bool]] = None
|
|
511
520
|
type: Optional[AttributeValue[Literal['tacacs','radius']]] = None
|
|
512
|
-
tacacs: Optional[Dict[str, aaaTacacsAttributes]] =
|
|
513
|
-
radius: Optional[Dict[str, aaaRadiusAttributes]] =
|
|
521
|
+
tacacs: Optional[Dict[str, aaaTacacsAttributes]] = {}
|
|
522
|
+
radius: Optional[Dict[str, aaaRadiusAttributes]] = {}
|
|
514
523
|
|
|
515
524
|
# Authentication Models
|
|
516
525
|
class aaaAuthenticationMethods(aaaBaseClass):
|
|
@@ -540,19 +549,19 @@ class authenticationUser(aaaBaseClass):
|
|
|
540
549
|
role: Optional[AttributeValue[str]] = None
|
|
541
550
|
|
|
542
551
|
class aaaAuthenticationUsers(aaaBaseClass):
|
|
543
|
-
username: Optional[Dict[str, authenticationUser]] =
|
|
552
|
+
username: Optional[Dict[str, authenticationUser]] = {}
|
|
544
553
|
|
|
545
554
|
class adminUser(aaaBaseClass):
|
|
546
555
|
admin_password: Optional[AttributeValue[str]] = None
|
|
547
556
|
admin_password_hashed: Optional[AttributeValue[str]] = None
|
|
548
557
|
|
|
549
558
|
class aaaAuthenticationAdminUsers(BaseModel):
|
|
550
|
-
config: Optional[Dict[str, adminUser]] =
|
|
559
|
+
config: Optional[Dict[str, adminUser]] = {}
|
|
551
560
|
|
|
552
561
|
class aaaAuthentication(BaseModel):
|
|
553
|
-
config: Optional[Dict[str, aaaAuthenticationMethods]] =
|
|
554
|
-
admin_user: Optional[Dict[str, aaaAuthenticationAdminUsers]] =
|
|
555
|
-
users: Optional[Dict[str, aaaAuthenticationUsers]] =
|
|
562
|
+
config: Optional[Dict[str, aaaAuthenticationMethods]] = {}
|
|
563
|
+
admin_user: Optional[Dict[str, aaaAuthenticationAdminUsers]] = {}
|
|
564
|
+
users: Optional[Dict[str, aaaAuthenticationUsers]] = {}
|
|
556
565
|
|
|
557
566
|
# Authorization Models
|
|
558
567
|
class aaaAuthorizationMethods(aaaBaseClass):
|
|
@@ -582,8 +591,8 @@ class aaaAuthorizationEvents(aaaBaseClass):
|
|
|
582
591
|
event: Optional[AttributeValue[str]] = None
|
|
583
592
|
|
|
584
593
|
class aaaAuthorization(BaseModel):
|
|
585
|
-
config: Optional[Dict[str, aaaAuthorizationMethods]] =
|
|
586
|
-
events: Optional[Dict[str, aaaAuthorizationEvents]] =
|
|
594
|
+
config: Optional[Dict[str, aaaAuthorizationMethods]] = {}
|
|
595
|
+
events: Optional[Dict[str, aaaAuthorizationEvents]] = {}
|
|
587
596
|
|
|
588
597
|
# Accounting Models
|
|
589
598
|
class aaaAccountingMethods(BaseModel):
|
|
@@ -611,15 +620,15 @@ class aaaAccountingEvents(BaseModel):
|
|
|
611
620
|
event: Optional[AttributeValue[str]] = None
|
|
612
621
|
|
|
613
622
|
class aaaAccounting(BaseModel):
|
|
614
|
-
config: Optional[Dict[str, aaaAccountingMethods]] =
|
|
615
|
-
events: Optional[Dict[str, aaaAccountingEvents]] =
|
|
623
|
+
config: Optional[Dict[str, aaaAccountingMethods]] = {}
|
|
624
|
+
events: Optional[Dict[str, aaaAccountingEvents]] = {}
|
|
616
625
|
|
|
617
626
|
class aaaGlobalAttributes(BaseModel):
|
|
618
627
|
enabled: Optional[AttributeValue[bool]] = False # default False
|
|
619
628
|
|
|
620
629
|
class TripleA(BaseModel):
|
|
621
630
|
config: aaaGlobalAttributes = aaaGlobalAttributes()
|
|
622
|
-
server_groups: Optional[Dict[str, aaaServerGroupAttributes]] =
|
|
631
|
+
server_groups: Optional[Dict[str, aaaServerGroupAttributes]] = {}
|
|
623
632
|
authentication: aaaAuthentication = aaaAuthentication()
|
|
624
633
|
authorization: aaaAuthorization = aaaAuthorization()
|
|
625
634
|
accounting: aaaAccounting = aaaAccounting()
|
|
@@ -652,11 +661,14 @@ class ComposedConfiguration(BaseModel):
|
|
|
652
661
|
stp: Optional[SpanningTree] = SpanningTree()
|
|
653
662
|
|
|
654
663
|
|
|
655
|
-
"""
|
|
664
|
+
"""
|
|
656
665
|
GUIDELINES FOR COMPOSED CONFIGURATION:
|
|
657
666
|
|
|
658
667
|
1. All values must always be typed as AttributeValue.
|
|
659
668
|
2. Containers must always be defined as hierarchical pydantic types, no dicts as placeholders.
|
|
660
|
-
3. Component collections
|
|
661
|
-
|
|
669
|
+
3. Component collections must use a typed container class (e.g. RemoteServers, VtyLines) with an inner
|
|
670
|
+
Dict[str, BaseModel] field — the key identifies the component. Raw Dict fields are not allowed at
|
|
671
|
+
the container level.
|
|
672
|
+
4. Default values for Optional containers are always an empty instance of the container class, e.g.
|
|
673
|
+
Optional[RemoteServers] = RemoteServers(). Never default to None or a raw empty dict for collections.
|
|
662
674
|
"""
|
|
@@ -50,7 +50,7 @@ class RemoteServer(BaseModel):
|
|
|
50
50
|
name: Optional[AttributeValue[str]] = None
|
|
51
51
|
host: Optional[AttributeValue[str]] = None
|
|
52
52
|
port: Optional[AttributeValue[int]] = None
|
|
53
|
-
|
|
53
|
+
transport: Optional[AttributeValue[str]] = None
|
|
54
54
|
source_address: Optional[AttributeValue[str]] = None # Can be an IP address or an interface reference
|
|
55
55
|
|
|
56
56
|
class VtyLine(BaseModel):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|