Skip to content

Commit 8c5a755

Browse files
committed
add tracker models
1 parent bfbf0e0 commit 8c5a755

4 files changed

Lines changed: 187 additions & 0 deletions

File tree

catalystwan/models/configuration/feature_profile/parcel.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from catalystwan.models.configuration.feature_profile.sdwan.sig_security import AnySIGSecurityParcel
1818
from catalystwan.models.configuration.feature_profile.sdwan.system import AnySystemParcel
1919
from catalystwan.models.configuration.feature_profile.sdwan.topology import AnyTopologyParcel
20+
from catalystwan.models.configuration.feature_profile.sdwan.trackers import AnyTrackerParcel
2021
from catalystwan.models.configuration.feature_profile.sdwan.transport import AnyTransportParcel
2122
from catalystwan.models.configuration.feature_profile.sdwan.uc_voice import AnyUcVoiceParcel
2223
from catalystwan.models.configuration.network_hierarchy import AnyNetworkHierarchyParcel
@@ -108,6 +109,8 @@
108109
"tloc",
109110
"tracker",
110111
"trackergroup",
112+
"ipv6-tracker",
113+
"ipv6-trackergroup",
111114
"traffic-policy",
112115
"trunk-group",
113116
"unified/advanced-inspection-profile",
@@ -144,6 +147,7 @@
144147
AnyOtherParcel,
145148
AnyPolicyObjectParcel,
146149
AnyRoutingParcel,
150+
AnyTrackerParcel,
147151
AnyServiceParcel,
148152
AnySIGSecurityParcel,
149153
AnySystemParcel,
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Copyright 2025 Cisco Systems, Inc. and its affiliates
2+
from typing import List, Union
3+
4+
from pydantic import Field
5+
from typing_extensions import Annotated
6+
7+
from catalystwan.models.configuration.feature_profile.sdwan.trackers.tracker import (
8+
EndpointTcpUdp,
9+
EndpointTrackerType,
10+
Tracker,
11+
TrackerIPv6,
12+
)
13+
from catalystwan.models.configuration.feature_profile.sdwan.trackers.tracker_group import (
14+
TrackerGroup,
15+
TrackerGroupIPv6,
16+
TrackerRefs,
17+
)
18+
19+
AnyTrackerParcel = Annotated[
20+
Union[Tracker, TrackerIPv6, TrackerGroup, TrackerGroupIPv6],
21+
Field(discriminator="type_"),
22+
]
23+
__all__ = [
24+
"Tracker",
25+
"TrackerIPv6",
26+
"EndpointTcpUdp",
27+
"EndpointTrackerType",
28+
"TrackerGroup",
29+
"TrackerGroupIPv6",
30+
"TrackerRefs",
31+
"AnyTrackerParcel",
32+
]
33+
34+
35+
def __dir__() -> "List[str]":
36+
return list(__all__)
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
# Copyright 2025 Cisco Systems, Inc. and its affiliates
2+
from typing import Literal, Optional, Union
3+
4+
from pydantic import AliasPath, BaseModel, ConfigDict, Field
5+
6+
from catalystwan.api.configuration_groups.parcel import Default, Global, Variable, _ParcelBase
7+
8+
Protocol = Literal[
9+
"tcp",
10+
"udp",
11+
]
12+
13+
14+
class EndpointTcpUdp(BaseModel):
15+
port: Optional[Union[Variable, Global[int]]] = Field(default=None)
16+
protocol: Optional[Union[Variable, Global[Protocol]]] = Field(default=None)
17+
18+
19+
EndpointTrackerType = Literal[
20+
"ipv6-interface",
21+
"ipv6-interface-icmp",
22+
]
23+
24+
25+
class Tracker(_ParcelBase):
26+
model_config = ConfigDict(
27+
extra="forbid",
28+
populate_by_name=True,
29+
)
30+
type_: Literal["tracker"] = Field(default="tracker", exclude=True, frozen=True)
31+
tracker_name: Union[Variable, Global[str]] = Field(validation_alias=AliasPath("data", "trackerName"))
32+
tracker_type: Union[Default[Literal["endpoint"]], Variable, Global[Literal["endpoint"]]] = Field(
33+
validation_alias=AliasPath("data", "trackerType")
34+
)
35+
endpoint_api_url: Optional[Union[Variable, Global[str]]] = Field(
36+
default=None, validation_alias=AliasPath("data", "endpointApiUrl")
37+
)
38+
endpoint_dns_name: Optional[Union[Variable, Global[str]]] = Field(
39+
default=None, validation_alias=AliasPath("data", "endpointDnsName")
40+
)
41+
endpoint_ip: Optional[Union[Variable, Global[str]]] = Field(
42+
default=None, validation_alias=AliasPath("data", "endpointIp")
43+
)
44+
endpoint_tcp_udp: Optional[EndpointTcpUdp] = Field(
45+
default=None, validation_alias=AliasPath("data", "endpointTcpUdp"), description="Endpoint tcp/udp"
46+
)
47+
endpoint_tracker_type: Optional[
48+
Union[Variable, Default[Literal["static-route"]], Global[Literal["static-route"]]]
49+
] = Field(default=None, validation_alias=AliasPath("data", "endpointTrackerType"))
50+
interval: Optional[Union[Default[int], Variable, Global[int]]] = Field(
51+
default=None, validation_alias=AliasPath("data", "interval")
52+
)
53+
multiplier: Optional[Union[Default[int], Variable, Global[int]]] = Field(
54+
default=None, validation_alias=AliasPath("data", "multiplier")
55+
)
56+
threshold: Optional[Union[Default[int], Variable, Global[int]]] = Field(
57+
default=None, validation_alias=AliasPath("data", "threshold")
58+
)
59+
60+
61+
class TrackerIPv6(_ParcelBase):
62+
model_config = ConfigDict(
63+
extra="forbid",
64+
populate_by_name=True,
65+
)
66+
type_: Literal["ipv6-tracker"] = Field(default="ipv6-tracker", exclude=True, frozen=True)
67+
endpoint_api_url: Optional[Union[Variable, Global[str]]] = Field(
68+
default=None, validation_alias=AliasPath("data", "endpointApiUrl")
69+
)
70+
endpoint_dns_name: Optional[Union[Variable, Global[str]]] = Field(
71+
default=None, validation_alias=AliasPath("data", "endpointDnsName")
72+
)
73+
endpoint_ip: Optional[Union[Variable, Global[str]]] = Field(
74+
default=None, validation_alias=AliasPath("data", "endpointIp")
75+
)
76+
endpoint_tracker_type: Optional[Union[Default[Literal["ipv6-interface"]], Global[EndpointTrackerType]]] = Field(
77+
default=None, validation_alias=AliasPath("data", "endpointTrackerType")
78+
)
79+
icmp_interval: Optional[Union[Default[int], Variable, Global[int]]] = Field(
80+
default=None, validation_alias=AliasPath("data", "icmpInterval")
81+
)
82+
interval: Optional[Union[Default[int], Variable, Global[int]]] = Field(
83+
default=None, validation_alias=AliasPath("data", "interval")
84+
)
85+
multiplier: Optional[Union[Default[int], Variable, Global[int]]] = Field(
86+
default=None, validation_alias=AliasPath("data", "multiplier")
87+
)
88+
threshold: Optional[Union[Default[int], Variable, Global[int]]] = Field(
89+
default=None, validation_alias=AliasPath("data", "threshold")
90+
)
91+
tracker_name: Optional[Union[Variable, Global[str]]] = Field(
92+
default=None, validation_alias=AliasPath("data", "trackerName")
93+
)
94+
tracker_type: Optional[Union[Default[Literal["endpoint"]], Variable, Global[Literal["endpoint"]]]] = Field(
95+
default=None, validation_alias=AliasPath("data", "trackerType")
96+
)
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Copyright 2025 Cisco Systems, Inc. and its affiliates
2+
from typing import List, Literal, Optional, Union
3+
4+
from pydantic import AliasPath, BaseModel, ConfigDict, Field
5+
6+
from catalystwan.api.configuration_groups.parcel import Default, Global, Variable, _ParcelBase
7+
from catalystwan.models.configuration.feature_profile.common import RefIdItem
8+
9+
10+
class TrackerRefs(BaseModel):
11+
tracker_ref: Optional[RefIdItem] = Field(default=None, validation_alias="trackerRef")
12+
13+
14+
CombineBoolean = Literal[
15+
"and",
16+
"or",
17+
]
18+
19+
20+
class TrackerGroup(_ParcelBase):
21+
model_config = ConfigDict(
22+
extra="forbid",
23+
populate_by_name=True,
24+
)
25+
type_: Literal["trackergroup"] = Field(default="trackergroup", exclude=True, frozen=True)
26+
combine_boolean: Union[Global[CombineBoolean], Variable, Default[Literal["or"]]] = Field(
27+
validation_alias=AliasPath("data", "combineBoolean")
28+
)
29+
tracker_group_name: Optional[Union[Variable, Global[str]]] = Field(
30+
validation_alias=AliasPath("data", "trackerGroupName")
31+
)
32+
tracker_refs: List[TrackerRefs] = Field(
33+
validation_alias=AliasPath("data", "trackerRefs"), description="trackers ref list"
34+
)
35+
36+
37+
class TrackerGroupIPv6(_ParcelBase):
38+
model_config = ConfigDict(
39+
extra="forbid",
40+
populate_by_name=True,
41+
)
42+
type_: Literal["ipv6-trackergroup"] = Field(default="ipv6-trackergroup", exclude=True, frozen=True)
43+
combine_boolean: Union[Global[CombineBoolean], Variable, Default[Literal["or"]]] = Field(
44+
validation_alias=AliasPath("data", "combineBoolean")
45+
)
46+
tracker_group_name: Optional[Union[Variable, Global[str]]] = Field(
47+
validation_alias=AliasPath("data", "trackerGroupName")
48+
)
49+
tracker_refs: List[TrackerRefs] = Field(
50+
validation_alias=AliasPath("data", "trackerRefs"), description="trackers ref list"
51+
)

0 commit comments

Comments
 (0)