Skip to content

Commit cbf08de

Browse files
authored
dev: vpnQosMap definition support (#13)
* add: vpnQosMap definition support * bump dev version
1 parent 534b1de commit cbf08de

File tree

8 files changed

+256
-135
lines changed

8 files changed

+256
-135
lines changed

ENDPOINTS.md

Lines changed: 140 additions & 133 deletions
Large diffs are not rendered by default.

catalystwan/api/policy_api.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
from catalystwan.endpoints.configuration.policy.definition.vpn_membership import (
5555
ConfigurationPolicyVPNMembershipGroupDefinition,
5656
)
57+
from catalystwan.endpoints.configuration.policy.definition.vpn_qos_map import ConfigurationPolicyVPNQoSMapDefinition
5758
from catalystwan.endpoints.configuration.policy.definition.zone_based_firewall import (
5859
ConfigurationPolicyZoneBasedFirewallDefinition,
5960
)
@@ -204,6 +205,7 @@
204205
from catalystwan.models.policy.definition.traffic_data import TrafficDataPolicy, TrafficDataPolicyGetResponse
205206
from catalystwan.models.policy.definition.url_filtering import UrlFilteringPolicy, UrlFilteringPolicyGetResponse
206207
from catalystwan.models.policy.definition.vpn_membership import VPNMembershipPolicy, VPNMembershipPolicyGetResponse
208+
from catalystwan.models.policy.definition.vpn_qos_map import VPNQoSMapPolicy
207209
from catalystwan.models.policy.definition.zone_based_firewall import ZoneBasedFWPolicy, ZoneBasedFWPolicyGetResponse
208210
from catalystwan.models.policy.list.app_probe import AppProbeClassListInfo
209211
from catalystwan.models.policy.list.class_map import ClassMapListInfo
@@ -332,6 +334,7 @@
332334
TrafficDataPolicy: ConfigurationPolicyDataDefinition,
333335
UrlFilteringPolicy: ConfigurationPolicyUrlFilteringDefinition,
334336
VPNMembershipPolicy: ConfigurationPolicyVPNMembershipGroupDefinition,
337+
VPNQoSMapPolicy: ConfigurationPolicyVPNQoSMapDefinition,
335338
ZoneBasedFWPolicy: ConfigurationPolicyZoneBasedFirewallDefinition,
336339
}
337340

@@ -932,6 +935,10 @@ def get(self, type: Type[ControlPolicy]) -> DataSequence[PolicyDefinitionInfo]:
932935
def get(self, type: Type[VPNMembershipPolicy]) -> DataSequence[PolicyDefinitionInfo]:
933936
...
934937

938+
@overload
939+
def get(self, type: Type[VPNQoSMapPolicy]) -> DataSequence[PolicyDefinitionInfo]:
940+
...
941+
935942
@overload
936943
def get(self, type: Type[HubAndSpokePolicy]) -> DataSequence[PolicyDefinitionInfo]:
937944
...
@@ -1053,6 +1060,10 @@ def get(self, type: Type[ControlPolicy], id: UUID) -> ControlPolicyGetResponse:
10531060
def get(self, type: Type[VPNMembershipPolicy], id: UUID) -> VPNMembershipPolicyGetResponse:
10541061
...
10551062

1063+
@overload
1064+
def get(self, type: Type[VPNQoSMapPolicy], id: UUID) -> VPNMembershipPolicyGetResponse:
1065+
...
1066+
10561067
@overload
10571068
def get(self, type: Type[HubAndSpokePolicy], id: UUID) -> HubAndSpokePolicyGetResponse:
10581069
...
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# Copyright 2024 Cisco Systems, Inc. and its affiliates
2+
3+
# mypy: disable-error-code="empty-body"
4+
5+
from uuid import UUID
6+
7+
from catalystwan.endpoints import APIEndpoints, delete, get, post, put
8+
from catalystwan.endpoints.configuration.policy.abstractions import PolicyDefinitionEndpoints
9+
from catalystwan.models.policy.definition.vpn_qos_map import (
10+
VPNQoSMapPolicy,
11+
VPNQoSMapPolicyEditPayload,
12+
VPNQoSMapPolicyGetResponse,
13+
)
14+
from catalystwan.models.policy.policy_definition import (
15+
PolicyDefinitionEditResponse,
16+
PolicyDefinitionId,
17+
PolicyDefinitionInfo,
18+
PolicyDefinitionPreview,
19+
)
20+
from catalystwan.typed_list import DataSequence
21+
22+
23+
class ConfigurationPolicyVPNQoSMapDefinition(APIEndpoints, PolicyDefinitionEndpoints):
24+
@post("/template/policy/definition/vpnqosmap")
25+
def create_policy_definition(self, payload: VPNQoSMapPolicy) -> PolicyDefinitionId:
26+
...
27+
28+
@delete("/template/policy/definition/vpnqosmap/{id}")
29+
def delete_policy_definition(self, id: UUID) -> None:
30+
...
31+
32+
@put("/template/policy/definition/vpnqosmap/{id}")
33+
def edit_policy_definition(self, id: UUID, payload: VPNQoSMapPolicyEditPayload) -> PolicyDefinitionEditResponse:
34+
...
35+
36+
@get("/template/policy/definition/vpnqosmap", "data")
37+
def get_definitions(self) -> DataSequence[PolicyDefinitionInfo]:
38+
...
39+
40+
@get("/template/policy/definition/vpnqosmap/{id}")
41+
def get_policy_definition(self, id: UUID) -> VPNQoSMapPolicyGetResponse:
42+
...
43+
44+
@post("/template/policy/definition/vpnqosmap/preview")
45+
def preview_policy_definition(self, payload: VPNQoSMapPolicy) -> PolicyDefinitionPreview:
46+
...
47+
48+
@get("/template/policy/definition/vpnqosmap/preview/{id}")
49+
def preview_policy_definition_by_id(self, id: UUID) -> PolicyDefinitionPreview:
50+
...

catalystwan/endpoints/endpoints_container.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
from catalystwan.endpoints.configuration.policy.definition.vpn_membership import (
5353
ConfigurationPolicyVPNMembershipGroupDefinition,
5454
)
55+
from catalystwan.endpoints.configuration.policy.definition.vpn_qos_map import ConfigurationPolicyVPNQoSMapDefinition
5556
from catalystwan.endpoints.configuration.policy.definition.zone_based_firewall import (
5657
ConfigurationPolicyZoneBasedFirewallDefinition,
5758
)
@@ -195,6 +196,7 @@ def __init__(self, session: ManagerSession):
195196
self.security_group = ConfigurationPolicySecurityGroupDefinition(session)
196197
self.srst_phone_profile = ConfigurationPolicySrstPhoneProfileDefinition(session)
197198
self.vpn_membership = ConfigurationPolicyVPNMembershipGroupDefinition(session)
199+
self.vpn_qos_map = ConfigurationPolicyVPNQoSMapDefinition(session)
198200
self.zone_based_firewall = ConfigurationPolicyZoneBasedFirewallDefinition(session)
199201

200202

catalystwan/models/policy/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
SrstPhoneProfilePolicy,
1717
SrstPhoneProfilePolicyGetResponse,
1818
)
19+
from catalystwan.models.policy.definition.vpn_qos_map import VPNQoSMapPolicy, VPNQoSMapPolicyGetResponse
1920
from catalystwan.models.policy.list.app import AppList, AppListInfo
2021
from catalystwan.models.policy.list.app_probe import AppProbeClassList, AppProbeClassListInfo
2122
from catalystwan.models.policy.list.as_path import ASPathList, ASPathListInfo
@@ -136,6 +137,7 @@
136137
TrafficDataPolicy,
137138
UrlFilteringPolicy,
138139
VPNMembershipPolicy,
140+
VPNQoSMapPolicy,
139141
ZoneBasedFWPolicy,
140142
],
141143
Field(discriminator="type"),
@@ -266,6 +268,7 @@
266268
TrafficDataPolicyGetResponse,
267269
UrlFilteringPolicyGetResponse,
268270
VPNMembershipPolicyGetResponse,
271+
VPNQoSMapPolicyGetResponse,
269272
ZoneBasedFWPolicyGetResponse,
270273
],
271274
Field(discriminator="type"),
@@ -346,6 +349,7 @@
346349
"UrlFilteringPolicy",
347350
"VPNList",
348351
"VPNMembershipPolicy",
352+
"VPNQoSMapPolicy",
349353
"ZoneBasedFWPolicy",
350354
"ZoneList",
351355
)
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# Copyright 2024 Cisco Systems, Inc. and its affiliates
2+
3+
from typing import List, Literal, Optional
4+
from uuid import UUID
5+
6+
from pydantic import BaseModel, ConfigDict, Field
7+
8+
from catalystwan.models.common import IntStr
9+
from catalystwan.models.policy.policy_definition import (
10+
PolicyDefinitionBase,
11+
PolicyDefinitionGetResponse,
12+
PolicyDefinitionId,
13+
)
14+
15+
16+
class VPNQoSScheduler(BaseModel):
17+
model_config = ConfigDict(populate_by_name=True)
18+
child_map_ref: UUID = Field(validation_alias="childMapRef", serialization_alias="childMapRef")
19+
vpn_list_ref: Optional[UUID] = Field(default=None, validation_alias="vpnListRef", serialization_alias="vpnListRef")
20+
bandwidth_rate: Optional[IntStr] = Field(
21+
default=None, validation_alias="bandwidthRate", serialization_alias="bandwidthRate", ge=8, le=100_000_000
22+
)
23+
shaping_rate: Optional[IntStr] = Field(
24+
default=None, validation_alias="shapingRate", serialization_alias="shapingRate", ge=8, le=100_000_000
25+
)
26+
27+
28+
class VPNQoSMapPolicyDefinition(BaseModel):
29+
model_config = ConfigDict(populate_by_name=True)
30+
vpn_qos_schedulers: List[VPNQoSScheduler] = Field(
31+
validation_alias="vpnQosSchedulers", serialization_alias="vpnQosSchedulers"
32+
)
33+
34+
35+
class VPNQoSMapPolicy(PolicyDefinitionBase):
36+
model_config = ConfigDict(populate_by_name=True)
37+
type: Literal["vpnQosMap", "vpnQoSMap"] = "vpnQosMap"
38+
definition: VPNQoSMapPolicyDefinition
39+
40+
41+
class VPNQoSMapPolicyEditPayload(VPNQoSMapPolicy, PolicyDefinitionId):
42+
pass
43+
44+
45+
class VPNQoSMapPolicyGetResponse(VPNQoSMapPolicy, PolicyDefinitionGetResponse):
46+
pass

catalystwan/models/policy/localized.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
LocalizedPolicySupportedItemType = Literal[
1111
"qosMap",
1212
"rewriteRule",
13+
"vpnQosMap",
1314
"vpnQoSMap",
1415
"acl",
1516
"aclv6",
@@ -101,7 +102,7 @@ def add_rewrite_rule(self, definition_id: UUID) -> None:
101102
self._add_item("rewriteRule", definition_id)
102103

103104
def add_vpn_qos_map(self, definition_id: UUID) -> None:
104-
self._add_item("vpnQoSMap", definition_id)
105+
self._add_item("vpnQosMap", definition_id)
105106

106107
def add_access_control_list(self, definition_id: UUID) -> None:
107108
self._add_item("acl", definition_id)

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "catalystwan"
3-
version = "0.40.0dev4"
3+
version = "0.40.0dev5"
44
description = "Cisco Catalyst WAN SDK for Python"
55
authors = ["kagorski <kagorski@cisco.com>"]
66
readme = "README.md"

0 commit comments

Comments
 (0)