Skip to content

Commit 67ed7e0

Browse files
committed
add tracker models
1 parent bfbf0e0 commit 67ed7e0

4 files changed

Lines changed: 188 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: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
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, as_default
7+
from catalystwan.models.configuration.feature_profile.common import RefIdItem
8+
9+
Protocol = Literal[
10+
"tcp",
11+
"udp",
12+
]
13+
14+
15+
class EndpointTcpUdp(BaseModel):
16+
port: Optional[Union[Variable, Global[int]]] = Field(default=None)
17+
protocol: Optional[Union[Variable, Global[Protocol]]] = Field(default=None)
18+
19+
20+
EndpointTrackerType = Literal[
21+
"ipv6-interface",
22+
"ipv6-interface-icmp",
23+
]
24+
25+
26+
class Tracker(_ParcelBase):
27+
model_config = ConfigDict(
28+
extra="forbid",
29+
populate_by_name=True,
30+
)
31+
type_: Literal["tracker"] = Field(default="tracker", exclude=True, frozen=True)
32+
tracker_name: Union[Variable, Global[str]] = Field(validation_alias=AliasPath("data", "trackerName"))
33+
tracker_type: Union[Default[Literal["endpoint"]], Variable, Global[Literal["endpoint"]]] = Field(
34+
validation_alias=AliasPath("data", "trackerType")
35+
)
36+
endpoint_api_url: Optional[Union[Variable, Global[str]]] = Field(
37+
default=None, validation_alias=AliasPath("data", "endpointApiUrl")
38+
)
39+
endpoint_dns_name: Optional[Union[Variable, Global[str]]] = Field(
40+
default=None, validation_alias=AliasPath("data", "endpointDnsName")
41+
)
42+
endpoint_ip: Optional[Union[Variable, Global[str]]] = Field(
43+
default=None, validation_alias=AliasPath("data", "endpointIp")
44+
)
45+
endpoint_tcp_udp: Optional[EndpointTcpUdp] = Field(
46+
default=None, validation_alias=AliasPath("data", "endpointTcpUdp"), description="Endpoint tcp/udp"
47+
)
48+
endpoint_tracker_type: Optional[
49+
Union[Variable, Default[Literal["static-route"]], Global[Literal["static-route"]]]
50+
] = Field(default=None, validation_alias=AliasPath("data", "endpointTrackerType"))
51+
interval: Optional[Union[Default[int], Variable, Global[int]]] = Field(
52+
default=None, validation_alias=AliasPath("data", "interval")
53+
)
54+
multiplier: Optional[Union[Default[int], Variable, Global[int]]] = Field(
55+
default=None, validation_alias=AliasPath("data", "multiplier")
56+
)
57+
threshold: Optional[Union[Default[int], Variable, Global[int]]] = Field(
58+
default=None, validation_alias=AliasPath("data", "threshold")
59+
)
60+
61+
62+
class TrackerIPv6(_ParcelBase):
63+
model_config = ConfigDict(
64+
extra="forbid",
65+
populate_by_name=True,
66+
)
67+
type_: Literal["ipv6-tracker"] = Field(default="ipv6-tracker", exclude=True, frozen=True)
68+
endpoint_api_url: Optional[Union[Variable, Global[str]]] = Field(
69+
default=None, validation_alias=AliasPath("data", "endpointApiUrl")
70+
)
71+
endpoint_dns_name: Optional[Union[Variable, Global[str]]] = Field(
72+
default=None, validation_alias=AliasPath("data", "endpointDnsName")
73+
)
74+
endpoint_ip: Optional[Union[Variable, Global[str]]] = Field(
75+
default=None, validation_alias=AliasPath("data", "endpointIp")
76+
)
77+
endpoint_tracker_type: Optional[Union[Default[Literal["ipv6-interface"]], Global[EndpointTrackerType]]] = Field(
78+
default=None, validation_alias=AliasPath("data", "endpointTrackerType")
79+
)
80+
icmp_interval: Optional[Union[Default[int], Variable, Global[int]]] = Field(
81+
default=None, validation_alias=AliasPath("data", "icmpInterval")
82+
)
83+
interval: Optional[Union[Default[int], Variable, Global[int]]] = Field(
84+
default=None, validation_alias=AliasPath("data", "interval")
85+
)
86+
multiplier: Optional[Union[Default[int], Variable, Global[int]]] = Field(
87+
default=None, validation_alias=AliasPath("data", "multiplier")
88+
)
89+
threshold: Optional[Union[Default[int], Variable, Global[int]]] = Field(
90+
default=None, validation_alias=AliasPath("data", "threshold")
91+
)
92+
tracker_name: Optional[Union[Variable, Global[str]]] = Field(
93+
default=None, validation_alias=AliasPath("data", "trackerName")
94+
)
95+
tracker_type: Optional[Union[Default[Literal["endpoint"]], Variable, Global[Literal["endpoint"]]]] = Field(
96+
default=None, validation_alias=AliasPath("data", "trackerType")
97+
)
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, as_default
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)