catalystwan 0.41.2__py3-none-any.whl → 0.41.2.dev1__py3-none-any.whl

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.
Files changed (504) hide show
  1. catalystwan/__init__.py +3 -2
  2. catalystwan/api/administration.py +13 -2
  3. catalystwan/api/api_container.py +4 -1
  4. catalystwan/api/builders/__init__.py +14 -0
  5. catalystwan/api/builders/feature_profiles/__init__.py +0 -0
  6. catalystwan/api/builders/feature_profiles/application_priority.py +58 -0
  7. catalystwan/api/builders/feature_profiles/builder_factory.py +59 -0
  8. catalystwan/api/builders/feature_profiles/cli.py +76 -0
  9. catalystwan/api/builders/feature_profiles/mixins.py +44 -0
  10. catalystwan/api/builders/feature_profiles/other.py +79 -0
  11. catalystwan/api/builders/feature_profiles/report.py +155 -0
  12. catalystwan/api/builders/feature_profiles/service.py +248 -0
  13. catalystwan/api/builders/feature_profiles/system.py +80 -0
  14. catalystwan/api/builders/feature_profiles/transport.py +256 -0
  15. catalystwan/api/builders/feature_profiles/uc_voice.py +287 -0
  16. catalystwan/api/config_group_api.py +41 -16
  17. catalystwan/api/configuration_groups/parcel.py +100 -30
  18. catalystwan/api/feature_profile_api.py +2021 -242
  19. catalystwan/api/policy_api.py +470 -116
  20. catalystwan/api/template_api.py +113 -44
  21. catalystwan/api/templates/README.md +61 -47
  22. catalystwan/api/templates/cli_template.py +17 -7
  23. catalystwan/api/templates/device_template/device_template.py +127 -32
  24. catalystwan/api/templates/feature_template.py +3 -3
  25. catalystwan/api/templates/models/aaa_model.py +387 -0
  26. catalystwan/api/templates/models/cisco_aaa_model.py +289 -42
  27. catalystwan/api/templates/models/cisco_banner_model.py +11 -2
  28. catalystwan/api/templates/models/cisco_bfd_model.py +31 -36
  29. catalystwan/api/templates/models/cisco_bgp_model.py +382 -131
  30. catalystwan/api/templates/models/cisco_logging_model.py +80 -43
  31. catalystwan/api/templates/models/cisco_ntp_model.py +34 -15
  32. catalystwan/api/templates/models/cisco_omp_model.py +70 -60
  33. catalystwan/api/templates/models/cisco_ospf.py +143 -74
  34. catalystwan/api/templates/models/cisco_ospfv3.py +217 -95
  35. catalystwan/api/templates/models/cisco_secure_internet_gateway.py +304 -142
  36. catalystwan/api/templates/models/cisco_snmp_model.py +66 -52
  37. catalystwan/api/templates/models/cisco_system.py +238 -129
  38. catalystwan/api/templates/models/cisco_vpn_interface_model.py +632 -275
  39. catalystwan/api/templates/models/cisco_vpn_model.py +433 -270
  40. catalystwan/api/templates/models/cli_template.py +3 -2
  41. catalystwan/api/templates/models/omp_vsmart_model.py +46 -10
  42. catalystwan/api/templates/models/security_vsmart_model.py +11 -8
  43. catalystwan/api/templates/models/supported.py +10 -4
  44. catalystwan/api/templates/models/system_vsmart_model.py +164 -27
  45. catalystwan/api/templates/models/vpn_vsmart_interface_model.py +198 -0
  46. catalystwan/api/templates/models/vpn_vsmart_model.py +124 -0
  47. catalystwan/apigw_auth.py +6 -2
  48. catalystwan/dataclasses.py +2 -53
  49. catalystwan/endpoints/__init__.py +41 -41
  50. catalystwan/endpoints/certificate_management_device.py +4 -0
  51. catalystwan/endpoints/cluster_management.py +27 -7
  52. catalystwan/endpoints/configuration/feature_profile/sdwan/application_priority.py +107 -0
  53. catalystwan/endpoints/configuration/feature_profile/sdwan/cli.py +60 -0
  54. catalystwan/endpoints/configuration/feature_profile/sdwan/dns_security.py +83 -0
  55. catalystwan/endpoints/configuration/feature_profile/sdwan/embedded_security.py +88 -0
  56. catalystwan/endpoints/configuration/feature_profile/sdwan/other.py +62 -0
  57. catalystwan/endpoints/configuration/feature_profile/sdwan/policy_object.py +35 -12
  58. catalystwan/endpoints/configuration/feature_profile/sdwan/service.py +154 -0
  59. catalystwan/endpoints/configuration/feature_profile/sdwan/sig_security.py +88 -0
  60. catalystwan/endpoints/configuration/feature_profile/sdwan/system.py +164 -11
  61. catalystwan/endpoints/configuration/feature_profile/sdwan/topology.py +93 -0
  62. catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py +144 -26
  63. catalystwan/endpoints/configuration/feature_profile/sdwan/uc_voice.py +77 -0
  64. catalystwan/endpoints/configuration/network_hierarchy.py +32 -0
  65. catalystwan/endpoints/configuration/policy/abstractions.py +49 -0
  66. catalystwan/endpoints/configuration/policy/definition/access_control_list.py +6 -11
  67. catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py +6 -11
  68. catalystwan/endpoints/configuration/policy/definition/aip.py +52 -0
  69. catalystwan/endpoints/configuration/policy/definition/amp.py +52 -0
  70. catalystwan/endpoints/configuration/policy/definition/app_route.py +50 -0
  71. catalystwan/endpoints/configuration/policy/definition/cflowd.py +46 -0
  72. catalystwan/endpoints/configuration/policy/definition/control.py +6 -11
  73. catalystwan/endpoints/configuration/policy/definition/device_access.py +6 -11
  74. catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py +6 -11
  75. catalystwan/endpoints/configuration/policy/definition/dial_peer.py +57 -0
  76. catalystwan/endpoints/configuration/policy/definition/dns_security.py +50 -0
  77. catalystwan/endpoints/configuration/policy/definition/fxo_port.py +57 -0
  78. catalystwan/endpoints/configuration/policy/definition/fxs_did_port.py +57 -0
  79. catalystwan/endpoints/configuration/policy/definition/fxs_port.py +57 -0
  80. catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py +6 -11
  81. catalystwan/endpoints/configuration/policy/definition/intrusion_prevention.py +52 -0
  82. catalystwan/endpoints/configuration/policy/definition/mesh.py +2 -11
  83. catalystwan/endpoints/configuration/policy/definition/pri_isdn_port.py +57 -0
  84. catalystwan/endpoints/configuration/policy/definition/qos_map.py +2 -11
  85. catalystwan/endpoints/configuration/policy/definition/rewrite.py +6 -11
  86. catalystwan/endpoints/configuration/policy/definition/route_policy.py +50 -0
  87. catalystwan/endpoints/configuration/policy/definition/rule_set.py +2 -11
  88. catalystwan/endpoints/configuration/policy/definition/security_group.py +6 -11
  89. catalystwan/endpoints/configuration/policy/definition/srst_phone_profile.py +59 -0
  90. catalystwan/endpoints/configuration/policy/definition/ssl_decryption.py +50 -0
  91. catalystwan/endpoints/configuration/policy/definition/ssl_decryption_utd_profile.py +52 -0
  92. catalystwan/endpoints/configuration/policy/definition/traffic_data.py +6 -11
  93. catalystwan/endpoints/configuration/policy/definition/url_filtering.py +50 -0
  94. catalystwan/endpoints/configuration/policy/definition/vpn_membership.py +6 -11
  95. catalystwan/endpoints/configuration/policy/definition/vpn_qos_map.py +50 -0
  96. catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py +6 -11
  97. catalystwan/endpoints/configuration/policy/list/app.py +3 -16
  98. catalystwan/endpoints/configuration/policy/list/app_probe.py +6 -15
  99. catalystwan/endpoints/configuration/policy/list/as_path.py +3 -16
  100. catalystwan/endpoints/configuration/policy/list/class_map.py +3 -16
  101. catalystwan/endpoints/configuration/policy/list/color.py +3 -16
  102. catalystwan/endpoints/configuration/policy/list/community.py +3 -16
  103. catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py +6 -15
  104. catalystwan/endpoints/configuration/policy/list/data_prefix.py +3 -16
  105. catalystwan/endpoints/configuration/policy/list/expanded_community.py +6 -15
  106. catalystwan/endpoints/configuration/policy/list/extended_community.py +52 -0
  107. catalystwan/endpoints/configuration/policy/list/fax_protocol.py +48 -0
  108. catalystwan/endpoints/configuration/policy/list/fqdn.py +3 -16
  109. catalystwan/endpoints/configuration/policy/list/geo_location.py +3 -16
  110. catalystwan/endpoints/configuration/policy/list/identity.py +48 -0
  111. catalystwan/endpoints/configuration/policy/list/ips_signature.py +6 -15
  112. catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py +3 -16
  113. catalystwan/endpoints/configuration/policy/list/local_app.py +3 -16
  114. catalystwan/endpoints/configuration/policy/list/local_domain.py +3 -16
  115. catalystwan/endpoints/configuration/policy/list/media_profile.py +52 -0
  116. catalystwan/endpoints/configuration/policy/list/mirror.py +3 -16
  117. catalystwan/endpoints/configuration/policy/list/modem_pass_through.py +52 -0
  118. catalystwan/endpoints/configuration/policy/list/policer.py +3 -16
  119. catalystwan/endpoints/configuration/policy/list/port.py +3 -16
  120. catalystwan/endpoints/configuration/policy/list/preferred_color_group.py +6 -15
  121. catalystwan/endpoints/configuration/policy/list/prefix.py +4 -16
  122. catalystwan/endpoints/configuration/policy/list/protocol_name.py +6 -15
  123. catalystwan/endpoints/configuration/policy/list/region.py +2 -10
  124. catalystwan/endpoints/configuration/policy/list/scalable_group_tag.py +52 -0
  125. catalystwan/endpoints/configuration/policy/list/site.py +3 -16
  126. catalystwan/endpoints/configuration/policy/list/sla.py +3 -16
  127. catalystwan/endpoints/configuration/policy/list/supervisory_disconnect.py +52 -0
  128. catalystwan/endpoints/configuration/policy/list/threat_grid_api_key.py +52 -0
  129. catalystwan/endpoints/configuration/policy/list/tloc.py +3 -16
  130. catalystwan/endpoints/configuration/policy/list/translation_profile.py +52 -0
  131. catalystwan/endpoints/configuration/policy/list/translation_rules.py +52 -0
  132. catalystwan/endpoints/configuration/policy/list/trunkgroup.py +48 -0
  133. catalystwan/endpoints/configuration/policy/list/umbrella_data.py +52 -0
  134. catalystwan/endpoints/configuration/policy/list/url_allow_list.py +3 -16
  135. catalystwan/endpoints/configuration/policy/list/url_block_list.py +3 -16
  136. catalystwan/endpoints/configuration/policy/list/vpn.py +3 -16
  137. catalystwan/endpoints/configuration/policy/list/zone.py +3 -16
  138. catalystwan/endpoints/configuration/policy/security_template.py +2 -3
  139. catalystwan/endpoints/configuration/policy/voice_template.py +39 -0
  140. catalystwan/endpoints/configuration/policy_group.py +30 -0
  141. catalystwan/endpoints/configuration/software_actions.py +2 -4
  142. catalystwan/endpoints/configuration/topology_group.py +51 -0
  143. catalystwan/endpoints/configuration_dashboard_status.py +2 -2
  144. catalystwan/endpoints/configuration_device_template.py +15 -1
  145. catalystwan/endpoints/configuration_feature_profile.py +8 -11
  146. catalystwan/endpoints/configuration_general_template.py +31 -0
  147. catalystwan/endpoints/configuration_group.py +28 -5
  148. catalystwan/endpoints/configuration_settings.py +90 -1
  149. catalystwan/endpoints/configuration_template_master.py +48 -0
  150. catalystwan/endpoints/endpoints_container.py +79 -19
  151. catalystwan/endpoints/real_time_monitoring/reboot_history.py +1 -3
  152. catalystwan/endpoints/tenant_migration.py +2 -0
  153. catalystwan/exceptions.py +17 -0
  154. catalystwan/integration_tests/base.py +81 -0
  155. catalystwan/integration_tests/feature_profile/sdwan/__init__.py +0 -0
  156. catalystwan/integration_tests/feature_profile/sdwan/policy/__init__.py +0 -0
  157. catalystwan/integration_tests/feature_profile/sdwan/policy/base.py +33 -0
  158. catalystwan/integration_tests/feature_profile/sdwan/policy/test_extended_community.py +33 -0
  159. catalystwan/integration_tests/feature_profile/sdwan/policy/test_security_app_list.py +32 -0
  160. catalystwan/integration_tests/feature_profile/sdwan/test_application_priority.py +433 -0
  161. catalystwan/integration_tests/feature_profile/sdwan/test_cli.py +54 -0
  162. catalystwan/integration_tests/feature_profile/sdwan/test_dns_security.py +106 -0
  163. catalystwan/integration_tests/feature_profile/sdwan/test_other.py +49 -0
  164. catalystwan/integration_tests/feature_profile/sdwan/test_service.py +1078 -0
  165. catalystwan/integration_tests/feature_profile/sdwan/test_sig_security.py +322 -0
  166. catalystwan/integration_tests/feature_profile/sdwan/test_ssl_decryption.py +85 -0
  167. catalystwan/integration_tests/feature_profile/sdwan/test_system.py +368 -0
  168. catalystwan/integration_tests/feature_profile/sdwan/test_tracker.py +127 -0
  169. catalystwan/integration_tests/feature_profile/sdwan/test_transport.py +1698 -0
  170. catalystwan/integration_tests/feature_profile/sdwan/topology/test_topology.py +93 -0
  171. catalystwan/integration_tests/profile_builder/__init__.py +0 -0
  172. catalystwan/integration_tests/profile_builder/test_pb_service.py +197 -0
  173. catalystwan/integration_tests/profile_builder/test_pb_transport.py +226 -0
  174. catalystwan/integration_tests/profile_builder/test_pb_uc_voice.py +277 -0
  175. catalystwan/integration_tests/test_data/__init__.py +117 -0
  176. catalystwan/integration_tests/test_find_template_values.py +7 -18
  177. catalystwan/integration_tests/test_network_hierarchy.py +82 -0
  178. catalystwan/integration_tests/test_settings.py +30 -0
  179. catalystwan/models/common.py +1898 -2
  180. catalystwan/models/configuration/common.py +1 -0
  181. catalystwan/models/configuration/feature_profile/common.py +634 -149
  182. catalystwan/models/configuration/feature_profile/parcel.py +238 -0
  183. catalystwan/models/configuration/feature_profile/sdwan/acl/__init__.py +13 -0
  184. catalystwan/models/configuration/feature_profile/sdwan/acl/ipv4acl.py +298 -0
  185. catalystwan/models/configuration/feature_profile/sdwan/acl/ipv6acl.py +344 -0
  186. catalystwan/models/configuration/feature_profile/sdwan/application_priority/__init__.py +218 -0
  187. catalystwan/models/configuration/feature_profile/sdwan/application_priority/cloud_probe.py +61 -0
  188. catalystwan/models/configuration/feature_profile/sdwan/application_priority/policy_settings.py +31 -0
  189. catalystwan/models/configuration/feature_profile/sdwan/application_priority/qos_policy.py +102 -0
  190. catalystwan/models/configuration/feature_profile/sdwan/application_priority/traffic_policy.py +1057 -0
  191. catalystwan/models/configuration/feature_profile/sdwan/cli/__init__.py +23 -0
  192. catalystwan/models/configuration/feature_profile/sdwan/cli/config.py +18 -0
  193. catalystwan/models/configuration/feature_profile/sdwan/cli/full_config.py +15 -0
  194. catalystwan/models/configuration/feature_profile/sdwan/dns_security/__init__.py +13 -0
  195. catalystwan/models/configuration/feature_profile/sdwan/dns_security/dns.py +110 -0
  196. catalystwan/models/configuration/feature_profile/sdwan/embedded_security/__init__.py +23 -0
  197. catalystwan/models/configuration/feature_profile/sdwan/embedded_security/ngfirewall.py +493 -0
  198. catalystwan/models/configuration/feature_profile/sdwan/embedded_security/policy.py +171 -0
  199. catalystwan/models/configuration/feature_profile/sdwan/other/__init__.py +25 -0
  200. catalystwan/models/configuration/feature_profile/sdwan/other/cybervision.py +44 -0
  201. catalystwan/models/configuration/feature_profile/sdwan/other/thousandeyes.py +147 -0
  202. catalystwan/models/configuration/feature_profile/sdwan/other/ucse.py +110 -0
  203. catalystwan/models/configuration/feature_profile/sdwan/policy_object/__init__.py +62 -48
  204. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/app_probe.py +34 -20
  205. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/application_list.py +8 -6
  206. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/as_path.py +22 -0
  207. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/color_list.py +7 -5
  208. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/data_prefix.py +13 -4
  209. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/expanded_community_list.py +9 -7
  210. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/extended_community.py +34 -0
  211. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/fowarding_class.py +7 -5
  212. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv4_network_object.py +15 -0
  213. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv4_service_object.py +254 -0
  214. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_data_prefix.py +11 -9
  215. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_prefix_list.py +25 -10
  216. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/mirror.py +27 -0
  217. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/network_object_group.py +15 -0
  218. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/object_group.py +15 -0
  219. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/{policier.py → policer.py} +12 -10
  220. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefered_group_color.py +29 -10
  221. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefix_list.py +23 -8
  222. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/service_object_group.py +21 -0
  223. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/sla_class.py +12 -31
  224. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/standard_community.py +16 -10
  225. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/tloc_list.py +8 -7
  226. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/aip.py +64 -0
  227. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/amp.py +79 -0
  228. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/application_list.py +8 -6
  229. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/data_prefix.py +7 -5
  230. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/fqdn.py +7 -5
  231. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/geolocation_list.py +7 -5
  232. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/identity.py +30 -0
  233. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/intrusion_prevention.py +58 -0
  234. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ips_signature.py +7 -5
  235. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/local_domain.py +7 -5
  236. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/object_group.py +72 -0
  237. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/protocol_list.py +7 -5
  238. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/rule_set.py +137 -0
  239. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/scalable_group_tag.py +26 -0
  240. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/security_port.py +21 -11
  241. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption.py +126 -0
  242. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption_profile.py +165 -0
  243. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url.py +15 -10
  244. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url_filtering.py +148 -0
  245. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/zone.py +14 -18
  246. catalystwan/models/configuration/feature_profile/sdwan/routing/__init__.py +26 -0
  247. catalystwan/models/configuration/feature_profile/sdwan/routing/bgp.py +609 -0
  248. catalystwan/models/configuration/feature_profile/sdwan/{service → routing}/ospf.py +55 -47
  249. catalystwan/models/configuration/feature_profile/sdwan/{service → routing}/ospfv3.py +74 -72
  250. catalystwan/models/configuration/feature_profile/sdwan/service/__init__.py +91 -0
  251. catalystwan/models/configuration/feature_profile/sdwan/service/appqoe.py +76 -41
  252. catalystwan/models/configuration/feature_profile/sdwan/service/dhcp_server.py +107 -64
  253. catalystwan/models/configuration/feature_profile/sdwan/service/dual_router_ha.py +26 -0
  254. catalystwan/models/configuration/feature_profile/sdwan/service/eigrp.py +39 -42
  255. catalystwan/models/configuration/feature_profile/sdwan/service/lan/common.py +7 -88
  256. catalystwan/models/configuration/feature_profile/sdwan/service/lan/ethernet.py +231 -155
  257. catalystwan/models/configuration/feature_profile/sdwan/service/lan/gre.py +38 -108
  258. catalystwan/models/configuration/feature_profile/sdwan/service/lan/ipsec.py +77 -84
  259. catalystwan/models/configuration/feature_profile/sdwan/service/lan/multilink.py +101 -0
  260. catalystwan/models/configuration/feature_profile/sdwan/service/lan/svi.py +62 -56
  261. catalystwan/models/configuration/feature_profile/sdwan/service/lan/vpn.py +111 -120
  262. catalystwan/models/configuration/feature_profile/sdwan/service/multicast.py +56 -57
  263. catalystwan/models/configuration/feature_profile/sdwan/service/object_tracker.py +15 -21
  264. catalystwan/models/configuration/feature_profile/sdwan/service/route_policy.py +358 -110
  265. catalystwan/models/configuration/feature_profile/sdwan/service/service_chain.py +38 -0
  266. catalystwan/models/configuration/feature_profile/sdwan/service/service_insertion_attachment.py +17 -25
  267. catalystwan/models/configuration/feature_profile/sdwan/service/switchport.py +50 -58
  268. catalystwan/models/configuration/feature_profile/sdwan/service/tracker.py +12 -21
  269. catalystwan/models/configuration/feature_profile/sdwan/service/wireless_lan.py +27 -31
  270. catalystwan/models/configuration/feature_profile/sdwan/sig_security/__init__.py +19 -0
  271. catalystwan/models/configuration/feature_profile/sdwan/sig_security/sig_security.py +379 -0
  272. catalystwan/models/configuration/feature_profile/sdwan/system/__init__.py +59 -0
  273. catalystwan/models/configuration/feature_profile/sdwan/system/aaa.py +58 -10
  274. catalystwan/models/configuration/feature_profile/sdwan/system/banner.py +30 -0
  275. catalystwan/models/configuration/feature_profile/sdwan/system/basic.py +290 -0
  276. catalystwan/models/configuration/feature_profile/sdwan/system/bfd.py +69 -0
  277. catalystwan/models/configuration/feature_profile/sdwan/system/device_access.py +157 -0
  278. catalystwan/models/configuration/feature_profile/sdwan/system/device_access_ipv6.py +157 -0
  279. catalystwan/models/configuration/feature_profile/sdwan/system/global_parcel.py +163 -0
  280. catalystwan/models/configuration/feature_profile/sdwan/system/logging_parcel.py +162 -0
  281. catalystwan/models/configuration/feature_profile/sdwan/system/mrf.py +75 -0
  282. catalystwan/models/configuration/feature_profile/sdwan/system/ntp.py +103 -0
  283. catalystwan/models/configuration/feature_profile/sdwan/system/omp.py +120 -0
  284. catalystwan/models/configuration/feature_profile/sdwan/system/security.py +179 -0
  285. catalystwan/models/configuration/feature_profile/sdwan/system/snmp.py +173 -0
  286. catalystwan/models/configuration/feature_profile/sdwan/topology/__init__.py +29 -0
  287. catalystwan/models/configuration/feature_profile/sdwan/topology/custom_control.py +425 -0
  288. catalystwan/models/configuration/feature_profile/sdwan/topology/hubspoke.py +60 -0
  289. catalystwan/models/configuration/feature_profile/sdwan/topology/mesh.py +23 -0
  290. catalystwan/models/configuration/feature_profile/sdwan/trackers/__init__.py +36 -0
  291. catalystwan/models/configuration/feature_profile/sdwan/trackers/tracker.py +96 -0
  292. catalystwan/models/configuration/feature_profile/sdwan/trackers/tracker_group.py +63 -0
  293. catalystwan/models/configuration/feature_profile/sdwan/transport/__init__.py +93 -0
  294. catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_controller.py +26 -23
  295. catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_profile.py +71 -0
  296. catalystwan/models/configuration/feature_profile/sdwan/transport/gps.py +37 -0
  297. catalystwan/models/configuration/feature_profile/sdwan/transport/management/ethernet.py +121 -0
  298. catalystwan/models/configuration/feature_profile/sdwan/transport/t1e1controller.py +124 -0
  299. catalystwan/models/configuration/feature_profile/sdwan/transport/vpn.py +285 -0
  300. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/cellular.py +173 -0
  301. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ethernet.py +389 -0
  302. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/gre.py +46 -0
  303. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ipsec.py +137 -0
  304. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/multilink.py +219 -0
  305. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/protocol_over.py +405 -0
  306. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/t1e1serial.py +195 -0
  307. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/__init__.py +62 -0
  308. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/analog_interface.py +436 -0
  309. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/call_routing.py +179 -0
  310. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/digital_interface.py +380 -0
  311. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/dsp_farm.py +193 -0
  312. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/media_profile.py +17 -0
  313. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/server_group.py +51 -0
  314. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/srst.py +86 -0
  315. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/supervisory_disconnect.py +69 -0
  316. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_profile.py +42 -0
  317. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_rule.py +31 -0
  318. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/trunk_group.py +26 -0
  319. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_global.py +57 -0
  320. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_tenant.py +40 -0
  321. catalystwan/models/configuration/network_hierarchy/__init__.py +22 -0
  322. catalystwan/models/configuration/network_hierarchy/cflowd.py +120 -0
  323. catalystwan/models/configuration/network_hierarchy/node.py +88 -0
  324. catalystwan/models/configuration/policy_group.py +74 -0
  325. catalystwan/models/configuration/profile_type.py +1 -6
  326. catalystwan/models/configuration/topology_group.py +52 -0
  327. catalystwan/models/policy/__init__.py +275 -69
  328. catalystwan/models/policy/centralized.py +26 -29
  329. catalystwan/models/policy/{definitions → definition}/access_control_list.py +47 -17
  330. catalystwan/models/policy/{definitions → definition}/access_control_list_ipv6.py +42 -18
  331. catalystwan/models/policy/definition/aip.py +60 -0
  332. catalystwan/models/policy/definition/amp.py +65 -0
  333. catalystwan/models/policy/definition/app_route.py +246 -0
  334. catalystwan/models/policy/definition/cflowd.py +95 -0
  335. catalystwan/models/policy/{definitions → definition}/control.py +48 -25
  336. catalystwan/models/policy/{definitions → definition}/device_access.py +22 -11
  337. catalystwan/models/policy/{definitions → definition}/device_access_ipv6.py +20 -11
  338. catalystwan/models/policy/definition/dial_peer.py +60 -0
  339. catalystwan/models/policy/definition/dns_security.py +130 -0
  340. catalystwan/models/policy/definition/fxo_port.py +63 -0
  341. catalystwan/models/policy/definition/fxs_did_port.py +58 -0
  342. catalystwan/models/policy/definition/fxs_port.py +56 -0
  343. catalystwan/models/policy/{definitions → definition}/hub_and_spoke.py +18 -4
  344. catalystwan/models/policy/definition/intrusion_prevention.py +55 -0
  345. catalystwan/models/policy/{definitions → definition}/mesh.py +13 -1
  346. catalystwan/models/policy/definition/pri_isdn_port.py +48 -0
  347. catalystwan/models/policy/{definitions → definition}/qos_map.py +39 -32
  348. catalystwan/models/policy/{definitions → definition}/rewrite.py +12 -2
  349. catalystwan/models/policy/definition/route_policy.py +187 -0
  350. catalystwan/models/policy/{definitions → definition}/rule_set.py +66 -48
  351. catalystwan/models/policy/{definitions → definition}/security_group.py +38 -14
  352. catalystwan/models/policy/definition/srst_phone_profile.py +37 -0
  353. catalystwan/models/policy/definition/ssl_decryption.py +209 -0
  354. catalystwan/models/policy/definition/ssl_decryption_utd_profile.py +87 -0
  355. catalystwan/models/policy/{definitions → definition}/traffic_data.py +184 -61
  356. catalystwan/models/policy/definition/url_filtering.py +70 -0
  357. catalystwan/models/policy/{definitions → definition}/vpn_membership.py +13 -1
  358. catalystwan/models/policy/definition/vpn_qos_map.py +46 -0
  359. catalystwan/models/policy/{definitions → definition}/zone_based_firewall.py +93 -32
  360. catalystwan/models/policy/list/app.py +44 -0
  361. catalystwan/models/policy/list/app_probe.py +42 -0
  362. catalystwan/models/policy/list/as_path.py +30 -0
  363. catalystwan/models/policy/list/class_map.py +30 -0
  364. catalystwan/models/policy/list/color.py +28 -0
  365. catalystwan/models/policy/list/communities.py +83 -0
  366. catalystwan/models/policy/list/data_ipv6_prefix.py +30 -0
  367. catalystwan/models/policy/list/data_prefix.py +30 -0
  368. catalystwan/models/policy/list/fax_protocol.py +45 -0
  369. catalystwan/models/policy/list/fqdn.py +24 -0
  370. catalystwan/models/policy/list/geo_location.py +33 -0
  371. catalystwan/models/policy/list/identity.py +29 -0
  372. catalystwan/models/policy/list/ips_signature.py +27 -0
  373. catalystwan/models/policy/list/ipv6_prefix.py +33 -0
  374. catalystwan/models/policy/list/local_app.py +45 -0
  375. catalystwan/models/policy/list/local_domain.py +36 -0
  376. catalystwan/models/policy/list/media_profile.py +44 -0
  377. catalystwan/models/policy/list/mirror.py +27 -0
  378. catalystwan/models/policy/list/modem_pass_through.py +27 -0
  379. catalystwan/models/policy/list/policer.py +39 -0
  380. catalystwan/models/policy/list/port.py +33 -0
  381. catalystwan/models/policy/list/preferred_color_group.py +82 -0
  382. catalystwan/models/policy/list/prefix.py +33 -0
  383. catalystwan/models/policy/list/protocol_name.py +26 -0
  384. catalystwan/models/policy/list/region.py +45 -0
  385. catalystwan/models/policy/list/scalable_group_tag.py +30 -0
  386. catalystwan/models/policy/list/site.py +34 -0
  387. catalystwan/models/policy/list/sla.py +77 -0
  388. catalystwan/models/policy/list/supervisory_disconnect.py +62 -0
  389. catalystwan/models/policy/list/threat_grid_api_key.py +32 -0
  390. catalystwan/models/policy/list/tloc.py +32 -0
  391. catalystwan/models/policy/list/translation_profile.py +32 -0
  392. catalystwan/models/policy/list/translation_rules.py +29 -0
  393. catalystwan/models/policy/list/trunkgroup.py +56 -0
  394. catalystwan/models/policy/list/umbrella_data.py +30 -0
  395. catalystwan/models/policy/list/url.py +39 -0
  396. catalystwan/models/policy/list/vpn.py +40 -0
  397. catalystwan/models/policy/list/zone.py +46 -0
  398. catalystwan/models/policy/localized.py +34 -16
  399. catalystwan/models/policy/policy.py +13 -9
  400. catalystwan/models/policy/policy_definition.py +673 -173
  401. catalystwan/models/policy/policy_list.py +38 -27
  402. catalystwan/models/policy/security.py +145 -46
  403. catalystwan/models/policy/voice.py +77 -0
  404. catalystwan/models/settings.py +41 -0
  405. catalystwan/models/templates.py +79 -0
  406. catalystwan/response.py +6 -2
  407. catalystwan/session.py +1 -1
  408. catalystwan/tests/builders/test_report.py +60 -0
  409. catalystwan/tests/builders/uc_voice.py +85 -0
  410. catalystwan/tests/models/__init__.py +0 -0
  411. catalystwan/tests/models/test_digital_interface.py +56 -0
  412. catalystwan/tests/templates/definitions/aaa_basic.json +96 -0
  413. catalystwan/tests/templates/definitions/aaa_complex.json +464 -0
  414. catalystwan/tests/templates/definitions/{iuo.json → cisco_aaa.json} +44 -15
  415. catalystwan/tests/templates/definitions/cisco_aaa_complex.json +361 -0
  416. catalystwan/tests/templates/definitions/cisco_logging_complex.json +268 -0
  417. catalystwan/tests/templates/definitions/cisco_ntp_complex.json +143 -0
  418. catalystwan/tests/templates/definitions/cisco_omp_complex.json +175 -0
  419. catalystwan/tests/templates/definitions/cisco_ospf_complex.json +302 -0
  420. catalystwan/tests/templates/definitions/cisco_sig.json +405 -0
  421. catalystwan/tests/templates/definitions/cisco_snmp_complex.json +258 -0
  422. catalystwan/tests/templates/definitions/cisco_system_complex.json +502 -0
  423. catalystwan/tests/templates/definitions/{Basic_Cisco_VPN_Model.json → cisco_vpn_basic.json} +2 -2
  424. catalystwan/tests/templates/definitions/{complex_cisco_vpn.json → cisco_vpn_complex.json} +27 -12
  425. catalystwan/tests/templates/definitions/cisco_vpn_interface_complex.json +821 -0
  426. catalystwan/tests/templates/definitions/omp_vsmart_1.json +26 -0
  427. catalystwan/tests/templates/definitions/{omp_2.json → omp_vsmart_2.json} +16 -2
  428. catalystwan/tests/templates/definitions/{omp_3.json → omp_vsmart_3.json} +16 -2
  429. catalystwan/tests/templates/definitions/omp_vsmart_complex.json +73 -0
  430. catalystwan/tests/templates/definitions/security_vsmart_complex.json +24 -0
  431. catalystwan/tests/templates/definitions/system_vsmart_complex.json +193 -0
  432. catalystwan/tests/templates/definitions/vpn_vsmart_basic.json +17 -0
  433. catalystwan/tests/templates/definitions/vpn_vsmart_complex.json +179 -0
  434. catalystwan/tests/templates/definitions/vpn_vsmart_interface_basic.json +42 -0
  435. catalystwan/tests/templates/definitions/vpn_vsmart_interface_complex.json +208 -0
  436. catalystwan/tests/templates/models/__init__.py +46 -13
  437. catalystwan/tests/templates/models/aaa.py +106 -0
  438. catalystwan/tests/templates/models/cisco_aaa.py +81 -48
  439. catalystwan/tests/templates/models/cisco_banner.py +2 -2
  440. catalystwan/tests/templates/models/cisco_bfd.py +4 -6
  441. catalystwan/tests/templates/models/cisco_logging.py +65 -0
  442. catalystwan/tests/templates/models/cisco_ntp.py +17 -0
  443. catalystwan/tests/templates/models/cisco_omp.py +37 -0
  444. catalystwan/tests/templates/models/cisco_ospf.py +60 -0
  445. catalystwan/tests/templates/models/cisco_secure_internet_gateway.py +95 -0
  446. catalystwan/tests/templates/models/cisco_snmp.py +40 -0
  447. catalystwan/tests/templates/models/cisco_system.py +108 -3
  448. catalystwan/tests/templates/models/cisco_vpn.py +42 -72
  449. catalystwan/tests/templates/models/cisco_vpn_interface.py +200 -0
  450. catalystwan/tests/templates/models/omp_vsmart.py +28 -8
  451. catalystwan/tests/templates/models/security_vsmart.py +11 -0
  452. catalystwan/tests/templates/models/system_vsmart.py +37 -0
  453. catalystwan/tests/templates/models/vpn_vsmart.py +32 -0
  454. catalystwan/tests/templates/models/vpn_vsmart_interface.py +54 -0
  455. catalystwan/tests/templates/schemas/aaa.json +1096 -0
  456. catalystwan/tests/templates/schemas/cedge_aaa.json +1 -1
  457. catalystwan/tests/templates/schemas/cisco_logging.json +577 -0
  458. catalystwan/tests/templates/schemas/cisco_ntp.json +265 -0
  459. catalystwan/tests/templates/schemas/cisco_omp.json +479 -0
  460. catalystwan/tests/templates/schemas/cisco_ospf.json +908 -0
  461. catalystwan/tests/templates/schemas/cisco_secure_internet_gateway.json +1520 -0
  462. catalystwan/tests/templates/schemas/cisco_snmp.json +561 -0
  463. catalystwan/tests/templates/schemas/cisco_system.json +242 -0
  464. catalystwan/tests/templates/schemas/cisco_vpn.json +53 -1
  465. catalystwan/tests/templates/schemas/cisco_vpn_interface.json +3348 -0
  466. catalystwan/tests/templates/schemas/omp-vsmart.json +20 -0
  467. catalystwan/tests/templates/schemas/security-vsmart.json +58 -0
  468. catalystwan/tests/templates/schemas/system-vsmart.json +2585 -0
  469. catalystwan/tests/templates/schemas/vpn-vsmart-interface.json +859 -0
  470. catalystwan/tests/templates/schemas/vpn-vsmart.json +445 -0
  471. catalystwan/tests/templates/test_chose_model.py +6 -10
  472. catalystwan/tests/templates/test_deserialize_model.py +4 -4
  473. catalystwan/tests/templates/test_find_template_values.py +229 -0
  474. catalystwan/tests/templates/test_find_template_values_2.py +193 -0
  475. catalystwan/tests/templates/test_serialize_model.py +1 -2
  476. catalystwan/tests/test_cli_template.py +8 -9
  477. catalystwan/tests/test_endpoints.py +42 -11
  478. catalystwan/tests/test_feature_profile_api.py +282 -0
  479. catalystwan/tests/test_models_common.py +53 -0
  480. catalystwan/tests/test_templates.py +16 -19
  481. catalystwan/utils/feature_template/find_template_values.py +17 -4
  482. catalystwan/utils/model.py +45 -0
  483. catalystwan/utils/persona.py +5 -0
  484. catalystwan/utils/type_check.py +22 -0
  485. catalystwan/workflows/backup_restore_device_templates.py +467 -0
  486. catalystwan/workflows/tenant_migration.py +1 -1
  487. {catalystwan-0.41.2.dist-info → catalystwan-0.41.2.dev1.dist-info}/METADATA +20 -1
  488. catalystwan-0.41.2.dev1.dist-info/RECORD +636 -0
  489. catalystwan/ENDPOINTS.md +0 -611
  490. catalystwan/api/configuration_groups/parcels/cellular_controller.py +0 -33
  491. catalystwan/api/templates/device_template/device_template_payload.json.j2 +0 -19
  492. catalystwan/models/configuration/config_migration.py +0 -36
  493. catalystwan/models/configuration/feature_profile/sdwan/management/vpn.py +0 -26
  494. catalystwan/models/configuration/feature_profile/sdwan/service/acl.py +0 -409
  495. catalystwan/models/configuration/feature_profile/sdwan/service/bgp.py +0 -288
  496. catalystwan/models/policy/lists.py +0 -330
  497. catalystwan/models/policy/lists_entries.py +0 -444
  498. catalystwan/tests/templates/definitions/complex_aaa.json +0 -277
  499. catalystwan/tests/templates/definitions/omp_1.json +0 -11
  500. catalystwan/utils/timezone.py +0 -422
  501. catalystwan-0.41.2.dist-info/RECORD +0 -353
  502. /catalystwan/tests/templates/definitions/{banner_1.json → cisco_banner.json} +0 -0
  503. {catalystwan-0.41.2.dist-info → catalystwan-0.41.2.dev1.dist-info}/LICENSE +0 -0
  504. {catalystwan-0.41.2.dist-info → catalystwan-0.41.2.dev1.dist-info}/WHEEL +0 -0
@@ -0,0 +1,77 @@
1
+ # Copyright 2022 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, SLAClassCriteria
9
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
10
+
11
+
12
+ class FallbackBestTunnel(BaseModel):
13
+ model_config = ConfigDict(populate_by_name=True)
14
+
15
+ criteria: Optional[SLAClassCriteria] = None
16
+ jitter_variance: Optional[IntStr] = Field(
17
+ default=None,
18
+ serialization_alias="jitterVariance",
19
+ validation_alias="jitterVariance",
20
+ description="jitter variance in ms",
21
+ ge=1,
22
+ le=1000,
23
+ )
24
+ latency_variance: Optional[IntStr] = Field(
25
+ default=None,
26
+ serialization_alias="latencyVariance",
27
+ validation_alias="latencyVariance",
28
+ description="latency variance in ms",
29
+ ge=1,
30
+ le=1000,
31
+ )
32
+ loss_variance: Optional[IntStr] = Field(
33
+ default=None,
34
+ serialization_alias="lossVariance",
35
+ validation_alias="lossVariance",
36
+ description="loss variance as percentage",
37
+ ge=0,
38
+ le=100,
39
+ )
40
+
41
+
42
+ class SLAClassListEntry(BaseModel):
43
+ model_config = ConfigDict(populate_by_name=True)
44
+
45
+ latency: Optional[IntStr] = Field(default=None, ge=1, le=1000)
46
+ loss: Optional[IntStr] = Field(default=None, ge=0, le=100)
47
+ jitter: Optional[IntStr] = Field(default=None, ge=1, le=1000)
48
+ app_probe_class: Optional[UUID] = Field(
49
+ default=None, serialization_alias="appProbeClass", validation_alias="appProbeClass"
50
+ )
51
+ fallback_best_tunnel: Optional[FallbackBestTunnel] = Field(
52
+ default=None, serialization_alias="fallbackBestTunnel", validation_alias="fallbackBestTunnel"
53
+ )
54
+
55
+
56
+ class SLAClassList(PolicyListBase):
57
+ type: Literal["sla"] = "sla"
58
+ entries: List[SLAClassListEntry] = []
59
+
60
+ def assign_app_probe_class(
61
+ self,
62
+ app_probe_class_id: UUID,
63
+ latency: Optional[int] = None,
64
+ loss: Optional[int] = None,
65
+ jitter: Optional[int] = None,
66
+ ) -> SLAClassListEntry:
67
+ entry = SLAClassListEntry(latency=latency, loss=loss, jitter=jitter, app_probe_class=app_probe_class_id)
68
+ self._add_entry(entry, single=True)
69
+ return entry
70
+
71
+
72
+ class SLAClassListEditPayload(SLAClassList, PolicyListId):
73
+ pass
74
+
75
+
76
+ class SLAClassListInfo(SLAClassList, PolicyListInfo):
77
+ pass
@@ -0,0 +1,62 @@
1
+ # Copyright 2024 Cisco Systems, Inc. and its affiliates
2
+
3
+ from typing import List, Literal, Union
4
+
5
+ from pydantic import BaseModel, ConfigDict, Field
6
+ from typing_extensions import Annotated
7
+
8
+ from catalystwan.models.common import IntStr, SpaceSeparatedCustomCadenceRanges
9
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
10
+
11
+
12
+ class DualToneModeEntry(BaseModel):
13
+ model_config = ConfigDict(populate_by_name=True)
14
+ mode: Literal["dualtone_mode"] = "dualtone_mode"
15
+ cadence_variable: IntStr = Field(
16
+ ge=0, le=200, serialization_alias="cadenceVariable", validation_alias="cadenceVariable"
17
+ )
18
+ frequency_max_delay: IntStr = Field(
19
+ ge=10, le=100, serialization_alias="frequencyMaxDelay", validation_alias="frequencyMaxDelay"
20
+ )
21
+ frequency_max_deviation: IntStr = Field(
22
+ ge=10, le=125, serialization_alias="frequencyMaxDeviation", validation_alias="frequencyMaxDeviation"
23
+ )
24
+ frequency_max_power: IntStr = Field(
25
+ ge=0, le=20, serialization_alias="frequencyMaxPower", validation_alias="frequencyMaxPower"
26
+ )
27
+ frequency_min_power: IntStr = Field(
28
+ ge=10, le=35, serialization_alias="frequencyMinPower", validation_alias="frequencyMinPower"
29
+ )
30
+ frequency_min_power_twist: IntStr = Field(
31
+ ge=0, le=15, serialization_alias="frequencyMinPowerTwist", validation_alias="frequencyMinPowerTwist"
32
+ )
33
+
34
+
35
+ class CustomModeEntry(BaseModel):
36
+ model_config = ConfigDict(populate_by_name=True)
37
+ mode: Literal["custom_mode"] = "custom_mode"
38
+ dualtone_type: str = Field(validation_alias="dualtoneType", serialization_alias="dualtoneType")
39
+ cadence: SpaceSeparatedCustomCadenceRanges
40
+ dualtone_frequency1: IntStr = Field(
41
+ ge=300, le=3600, validation_alias="dualtoneFrequency1", serialization_alias="dualtoneFrequency1"
42
+ )
43
+ dualtone_frequency2: IntStr = Field(
44
+ ge=300, le=3600, validation_alias="dualtoneFrequency2", serialization_alias="dualtoneFrequency2"
45
+ )
46
+
47
+
48
+ SupervisoryDisconnectListEntry = Annotated[Union[DualToneModeEntry, CustomModeEntry], Field(discriminator="mode")]
49
+
50
+
51
+ class SupervisoryDisconnectList(PolicyListBase):
52
+ model_config = ConfigDict(populate_by_name=True)
53
+ type: Literal["supervisoryDisc", "supervisorydisc"] = "supervisoryDisc"
54
+ entries: List[SupervisoryDisconnectListEntry] = Field(default_factory=list)
55
+
56
+
57
+ class SupervisoryDisconnectListEditPayload(SupervisoryDisconnectList, PolicyListId):
58
+ pass
59
+
60
+
61
+ class SupervisoryDisconnectListInfo(SupervisoryDisconnectList, PolicyListInfo):
62
+ pass
@@ -0,0 +1,32 @@
1
+ # Copyright 2024 Cisco Systems, Inc. and its affiliates
2
+
3
+ from typing import List, Literal
4
+
5
+ from pydantic import BaseModel, ConfigDict, Field
6
+
7
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
8
+
9
+ ServerRegion = Literal["nam", "eur"]
10
+
11
+
12
+ class ThreatGridApiKeyEntry(BaseModel):
13
+ model_config = ConfigDict(populate_by_name=True)
14
+ region: ServerRegion
15
+ api_key: str = Field(validation_alias="apikey", serialization_alias="apikey")
16
+
17
+
18
+ class ThreatGridApiKeyList(PolicyListBase):
19
+ type: Literal["threatGridApiKey"] = "threatGridApiKey"
20
+ entries: List[ThreatGridApiKeyEntry] = []
21
+
22
+ def add_entry(self, api_key: str, region: ServerRegion) -> None:
23
+ entry = ThreatGridApiKeyEntry(api_key=api_key, region=region)
24
+ self.entries.append(entry)
25
+
26
+
27
+ class ThreatGridApiKeyListEditPayload(ThreatGridApiKeyList, PolicyListId):
28
+ pass
29
+
30
+
31
+ class ThreatGridApiKeyListInfo(ThreatGridApiKeyList, PolicyListInfo):
32
+ pass
@@ -0,0 +1,32 @@
1
+ # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
+
3
+ from ipaddress import IPv4Address
4
+ from typing import List, Literal, Optional
5
+
6
+ from pydantic import BaseModel, Field
7
+
8
+ from catalystwan.models.common import EncapType, IntStr, TLOCColor
9
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
10
+
11
+
12
+ class TLOCListEntry(BaseModel):
13
+ tloc: IPv4Address
14
+ color: TLOCColor
15
+ encap: EncapType
16
+ preference: Optional[IntStr] = Field(default=None, ge=0, le=2**32 - 1)
17
+
18
+
19
+ class TLOCList(PolicyListBase):
20
+ type: Literal["tloc"] = "tloc"
21
+ entries: List[TLOCListEntry] = []
22
+
23
+ def add_tloc(self, tloc: IPv4Address, color: TLOCColor, encap: EncapType, preference: Optional[int] = None) -> None:
24
+ self.entries.append(TLOCListEntry(tloc=tloc, color=color, encap=encap, preference=preference))
25
+
26
+
27
+ class TLOCListEditPayload(TLOCList, PolicyListId):
28
+ pass
29
+
30
+
31
+ class TLOCListInfo(TLOCList, PolicyListInfo):
32
+ pass
@@ -0,0 +1,32 @@
1
+ # Copyright 2024 Cisco Systems, Inc. and its affiliates
2
+
3
+ from typing import List, Literal
4
+
5
+ from pydantic import BaseModel, ConfigDict, Field
6
+
7
+ from catalystwan.models.common import IntStr
8
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
9
+
10
+ CallType = Literal["called", "calling"]
11
+
12
+
13
+ class TranslationProfileEntry(BaseModel):
14
+ model_config = ConfigDict(populate_by_name=True)
15
+ translation_rule: IntStr = Field(
16
+ ge=1, le=1073741823, validation_alias="translationRule", serialization_alias="translationRule"
17
+ )
18
+ call_type: CallType = Field(validation_alias="callType", serialization_alias="callType")
19
+
20
+
21
+ class TranslationProfileList(PolicyListBase):
22
+ model_config = ConfigDict(populate_by_name=True)
23
+ type: Literal["translationProfile", "translationprofile"] = "translationProfile"
24
+ entries: List[TranslationProfileEntry] = Field(default_factory=list)
25
+
26
+
27
+ class TranslationProfileListEditPayload(TranslationProfileList, PolicyListId):
28
+ pass
29
+
30
+
31
+ class TranslationProfileListInfo(TranslationProfileList, PolicyListInfo):
32
+ pass
@@ -0,0 +1,29 @@
1
+ # Copyright 2024 Cisco Systems, Inc. and its affiliates
2
+
3
+ from typing import List, Literal
4
+
5
+ from pydantic import BaseModel, ConfigDict, Field
6
+
7
+ from catalystwan.models.common import IntStr
8
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
9
+
10
+
11
+ class TranslationRulesEntry(BaseModel):
12
+ model_config = ConfigDict(populate_by_name=True)
13
+ rule_num: IntStr = Field(ge=1, validation_alias="ruleNum", serialization_alias="ruleNum")
14
+ match: str = Field(pattern=r"^/.*/$")
15
+ replace: str = Field(pattern=r"^/.*/$|^reject$")
16
+
17
+
18
+ class TranslationRulesList(PolicyListBase):
19
+ model_config = ConfigDict(populate_by_name=True)
20
+ type: Literal["translationRules", "translationrules"] = "translationRules"
21
+ entries: List[TranslationRulesEntry] = Field(default_factory=list)
22
+
23
+
24
+ class TranslationRulesListEditPayload(TranslationRulesList, PolicyListId):
25
+ pass
26
+
27
+
28
+ class TranslationRulesListInfo(TranslationRulesList, PolicyListInfo):
29
+ pass
@@ -0,0 +1,56 @@
1
+ # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
+
3
+ from typing import List, Literal, Optional
4
+
5
+ from pydantic import BaseModel, ConfigDict, Field
6
+
7
+ from catalystwan.models.common import HuntSchemeChannel as HuntSchemeMethodPrecedence
8
+ from catalystwan.models.common import HuntSchemeMethod
9
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
10
+
11
+
12
+ class TrunkGroupListEntry(BaseModel):
13
+ model_config = ConfigDict(populate_by_name=True)
14
+ hunt_scheme_method: HuntSchemeMethod = Field(
15
+ validation_alias="huntSchemeMethod", serialization_alias="huntSchemeMethod"
16
+ )
17
+ hunt_scheme_precedence: Optional[HuntSchemeMethodPrecedence] = Field(
18
+ default=None, validation_alias="huntSchemePrecedence", serialization_alias="huntSchemePrecedence"
19
+ )
20
+ max_calls_in: Optional[int] = Field(
21
+ default=None, validation_alias="maxCallsIn", serialization_alias="maxCallsIn", ge=0, le=1000
22
+ )
23
+ max_calls_out: Optional[int] = Field(
24
+ default=None, validation_alias="maxCallsOut", serialization_alias="maxCallsOut", ge=0, le=1000
25
+ )
26
+ max_retries: int = Field(validation_alias="maxRetries", serialization_alias="maxRetries", ge=1, le=5)
27
+
28
+
29
+ class TrunkGroupList(PolicyListBase):
30
+ type: Literal["trunkGroup"] = "trunkGroup"
31
+ entries: List[TrunkGroupListEntry] = []
32
+
33
+ def add_entry(
34
+ self,
35
+ hunt_scheme_method: HuntSchemeMethod,
36
+ hunt_scheme_precedence: Optional[HuntSchemeMethodPrecedence],
37
+ max_retries: int,
38
+ max_calls_in: Optional[int] = None,
39
+ max_calls_out: Optional[int] = None,
40
+ ) -> None:
41
+ entry = TrunkGroupListEntry(
42
+ hunt_scheme_method=hunt_scheme_method,
43
+ hunt_scheme_precedence=hunt_scheme_precedence,
44
+ max_retries=max_retries,
45
+ max_calls_in=max_calls_in,
46
+ max_calls_out=max_calls_out,
47
+ )
48
+ self.entries.append(entry)
49
+
50
+
51
+ class TrunkGroupListEditPayload(TrunkGroupList, PolicyListId):
52
+ pass
53
+
54
+
55
+ class TrunkGroupListInfo(TrunkGroupList, PolicyListInfo):
56
+ pass
@@ -0,0 +1,30 @@
1
+ # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
+
3
+ from typing import List, Literal, Optional
4
+
5
+ from pydantic import BaseModel, ConfigDict, Field
6
+
7
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
8
+
9
+
10
+ class UmbrellaDataListEntry(BaseModel):
11
+ model_config = ConfigDict(populate_by_name=True)
12
+ api_key: Optional[str] = Field(default=None, validation_alias="apiKey", serialization_alias="apiKey")
13
+ secret: Optional[str] = Field(default=None)
14
+ api_key_v2: Optional[str] = Field(default=None, validation_alias="apiKeyV2", serialization_alias="apiKeyV2")
15
+ secret_v2: Optional[str] = Field(default=None, validation_alias="secretV2", serialization_alias="secretV2")
16
+ token: str
17
+ umb_org_id: str = Field(validation_alias="umbOrgId", serialization_alias="umbOrgId")
18
+
19
+
20
+ class UmbrellaDataList(PolicyListBase):
21
+ type: Literal["umbrellaData"] = "umbrellaData"
22
+ entries: List[UmbrellaDataListEntry] = Field(default_factory=list)
23
+
24
+
25
+ class UmbrellaDataListEditPayload(UmbrellaDataList, PolicyListId):
26
+ pass
27
+
28
+
29
+ class UmbrellaDataListInfo(UmbrellaDataList, PolicyListInfo):
30
+ pass
@@ -0,0 +1,39 @@
1
+ # Copyright 2024 Cisco Systems, Inc. and its affiliates
2
+
3
+ from typing import List, Literal
4
+
5
+ from pydantic import BaseModel, ConfigDict
6
+
7
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
8
+
9
+
10
+ class URLListEntry(BaseModel):
11
+ model_config = ConfigDict(populate_by_name=True)
12
+
13
+ pattern: str
14
+
15
+
16
+ class URLAllowList(PolicyListBase):
17
+ type: Literal["urlWhiteList"] = "urlWhiteList"
18
+ entries: List[URLListEntry] = []
19
+
20
+
21
+ class URLAllowListEditPayload(URLAllowList, PolicyListId):
22
+ pass
23
+
24
+
25
+ class URLAllowListInfo(URLAllowList, PolicyListInfo):
26
+ pass
27
+
28
+
29
+ class URLBlockList(PolicyListBase):
30
+ type: Literal["urlBlackList"] = "urlBlackList"
31
+ entries: List[URLListEntry] = []
32
+
33
+
34
+ class URLBlockListEditPayload(URLBlockList, PolicyListId):
35
+ pass
36
+
37
+
38
+ class URLBlockListInfo(URLBlockList, PolicyListInfo):
39
+ pass
@@ -0,0 +1,40 @@
1
+ # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
+
3
+ from typing import List, Literal, Set, Tuple
4
+
5
+ from pydantic import BaseModel, Field, field_validator
6
+
7
+ from catalystwan.models.common import IntRangeStr
8
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
9
+
10
+
11
+ class VPNListEntry(BaseModel):
12
+ vpn: IntRangeStr = Field(description="0-65530 range or single number")
13
+
14
+ @field_validator("vpn")
15
+ @classmethod
16
+ def check_vpn_range(cls, vpn: IntRangeStr):
17
+ for i in vpn:
18
+ if i is not None:
19
+ assert 0 <= i <= 65_530
20
+ return vpn
21
+
22
+
23
+ class VPNList(PolicyListBase):
24
+ type: Literal["vpn"] = "vpn"
25
+ entries: List[VPNListEntry] = []
26
+
27
+ def add_vpns(self, vpns: Set[int]):
28
+ for vpn in vpns:
29
+ self._add_entry(VPNListEntry(vpn=(vpn, None)))
30
+
31
+ def add_vpn_range(self, vpn_range: Tuple[int, int]):
32
+ self._add_entry(VPNListEntry(vpn=vpn_range))
33
+
34
+
35
+ class VPNListEditPayload(VPNList, PolicyListId):
36
+ pass
37
+
38
+
39
+ class VPNListInfo(VPNList, PolicyListInfo):
40
+ pass
@@ -0,0 +1,46 @@
1
+ # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
+
3
+ from typing import List, Literal, Optional, Set
4
+
5
+ from pydantic import BaseModel, Field, field_validator, model_validator
6
+
7
+ from catalystwan.models.common import IntRangeStr, check_fields_exclusive
8
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
9
+
10
+
11
+ class ZoneListEntry(BaseModel):
12
+ vpn: Optional[IntRangeStr] = Field(default=None, description="0-65530 hypenated range or single number")
13
+ interface: Optional[str] = None
14
+
15
+ @field_validator("vpn")
16
+ @classmethod
17
+ def check_vpn_range(cls, vpn: Optional[IntRangeStr]):
18
+ if vpn is not None:
19
+ for i in vpn:
20
+ if i is not None:
21
+ assert 0 <= i <= 65_530
22
+ return vpn
23
+
24
+ @model_validator(mode="after")
25
+ def check_vpn_xor_interface(self):
26
+ check_fields_exclusive(self.__dict__, {"vpn", "interface"}, True)
27
+ return self
28
+
29
+
30
+ class ZoneList(PolicyListBase):
31
+ type: Literal["zone"] = "zone"
32
+ entries: List[ZoneListEntry] = []
33
+
34
+ def assign_vpns(self, vpns: Set[int]) -> None:
35
+ self.entries = [ZoneListEntry(vpn=(vpn, None)) for vpn in vpns]
36
+
37
+ def assign_interfaces(self, ifs: Set[str]) -> None:
38
+ self.entries = [ZoneListEntry(interface=interface) for interface in ifs]
39
+
40
+
41
+ class ZoneListEditPayload(ZoneList, PolicyListId):
42
+ pass
43
+
44
+
45
+ class ZoneListInfo(ZoneList, PolicyListInfo):
46
+ pass
@@ -1,15 +1,16 @@
1
- # Copyright 2023 Cisco Systems, Inc. and its affiliates
1
+ # Copyright 2024 Cisco Systems, Inc. and its affiliates
2
2
 
3
- from typing import List, Literal, Optional
3
+ from typing import Any, List, Literal, Optional, Union
4
4
  from uuid import UUID
5
5
 
6
- from pydantic import BaseModel, ConfigDict, Field, IPvAnyAddress, field_validator
6
+ from pydantic import BaseModel, ConfigDict, Field, IPvAnyAddress, model_validator
7
7
 
8
8
  from catalystwan.models.policy.policy import AssemblyItemBase, PolicyCreationPayload, PolicyDefinition, PolicyInfo
9
9
 
10
10
  LocalizedPolicySupportedItemType = Literal[
11
11
  "qosMap",
12
12
  "rewriteRule",
13
+ "vpnQosMap",
13
14
  "vpnQoSMap",
14
15
  "acl",
15
16
  "aclv6",
@@ -18,9 +19,15 @@ LocalizedPolicySupportedItemType = Literal[
18
19
  "deviceaccesspolicyv6",
19
20
  "deviceAccessPolicyv6",
20
21
  "vedgeRoute",
22
+ "vedgeroute",
21
23
  ]
22
24
 
23
25
 
26
+ def assert_feature_defintion(definition: Any) -> "LocalizedPolicyDefinition":
27
+ assert isinstance(definition, LocalizedPolicyDefinition)
28
+ return definition
29
+
30
+
24
31
  class LocalizedPolicySettings(BaseModel):
25
32
  flow_visibility: Optional[bool] = Field(
26
33
  default=None, serialization_alias="flowVisibility", validation_alias="flowVisibility"
@@ -68,20 +75,25 @@ class LocalizedPolicyAssemblyItem(AssemblyItemBase):
68
75
 
69
76
 
70
77
  class LocalizedPolicyDefinition(PolicyDefinition):
71
- assembly: List[LocalizedPolicyAssemblyItem]
72
- settings: LocalizedPolicySettings
78
+ assembly: List[LocalizedPolicyAssemblyItem] = []
79
+ settings: Optional[LocalizedPolicySettings] = None
73
80
 
74
81
 
75
82
  class LocalizedPolicy(PolicyCreationPayload):
76
- policy_definition: LocalizedPolicyDefinition = Field(
83
+ policy_definition: Union[LocalizedPolicyDefinition, str] = Field(
77
84
  default=LocalizedPolicyDefinition(assembly=[], settings=LocalizedPolicySettings()),
78
85
  serialization_alias="policyDefinition",
79
86
  validation_alias="policyDefinition",
80
87
  )
81
- policy_type: str = Field(default="feature", serialization_alias="policyType", validation_alias="policyType")
88
+ policy_type: Literal["feature", "cli"] = Field(
89
+ default="feature", serialization_alias="policyType", validation_alias="policyType"
90
+ )
82
91
 
83
- def _add_item(self, type: LocalizedPolicySupportedItemType, id: UUID) -> None:
84
- self.policy_definition.assembly.append(LocalizedPolicyAssemblyItem(type=type, definition_id=id))
92
+ def _add_item(self, type: LocalizedPolicySupportedItemType, id: UUID) -> LocalizedPolicyAssemblyItem:
93
+ policy_definition = assert_feature_defintion(self.policy_definition)
94
+ item = LocalizedPolicyAssemblyItem(type=type, definition_id=id)
95
+ policy_definition.assembly.append(item)
96
+ return item
85
97
 
86
98
  def add_qos_map(self, definition_id: UUID) -> None:
87
99
  self._add_item("qosMap", definition_id)
@@ -90,7 +102,7 @@ class LocalizedPolicy(PolicyCreationPayload):
90
102
  self._add_item("rewriteRule", definition_id)
91
103
 
92
104
  def add_vpn_qos_map(self, definition_id: UUID) -> None:
93
- self._add_item("vpnQoSMap", definition_id)
105
+ self._add_item("vpnQosMap", definition_id)
94
106
 
95
107
  def add_access_control_list(self, definition_id: UUID) -> None:
96
108
  self._add_item("acl", definition_id)
@@ -107,15 +119,21 @@ class LocalizedPolicy(PolicyCreationPayload):
107
119
  def add_route_policy(self, definition_id: UUID) -> None:
108
120
  self._add_item("vedgeRoute", definition_id)
109
121
 
110
- @field_validator("policy_definition", mode="before")
122
+ def set_definition(self, assembly: List[LocalizedPolicyAssemblyItem], settings: LocalizedPolicySettings) -> None:
123
+ self.policy_definition = LocalizedPolicyDefinition(assembly=assembly, settings=settings)
124
+
125
+ @model_validator(mode="before")
111
126
  @classmethod
112
- def try_parse(cls, policy_definition):
127
+ def try_parse_policy_definition_string(cls, values):
113
128
  # this is needed because GET /template/policy/vedge contains string in policyDefinition field
114
129
  # while POST /template/policy/vedge requires a regular object
115
130
  # it makes sense to reuse that model for both requests and present parsed data to the user
116
- if isinstance(policy_definition, str):
117
- return LocalizedPolicyDefinition.model_validate_json(policy_definition)
118
- return policy_definition
131
+ if not isinstance(values, dict):
132
+ return values
133
+ if (policy_definition := values.get("policyDefinition")) and values.get("policyType") != "cli":
134
+ if isinstance(policy_definition, str):
135
+ values["policyDefinition"] = LocalizedPolicyDefinition.model_validate_json(policy_definition)
136
+ return values
119
137
 
120
138
 
121
139
  class LocalizedPolicyInfo(PolicyInfo, LocalizedPolicy):
@@ -124,7 +142,7 @@ class LocalizedPolicyInfo(PolicyInfo, LocalizedPolicy):
124
142
 
125
143
  class LocalizedPolicyEditResponse(BaseModel):
126
144
  master_templates_affected: List[str] = Field(
127
- default=[], serialization_alias="masterTemplatesAffected", validation_alias="masterTemplatesAffected"
145
+ default_factory=list, serialization_alias="masterTemplatesAffected", validation_alias="masterTemplatesAffected"
128
146
  )
129
147
 
130
148
 
@@ -1,19 +1,21 @@
1
1
  # Copyright 2023 Cisco Systems, Inc. and its affiliates
2
2
 
3
3
  import datetime
4
- from typing import List, Literal, Optional, Sequence, Union
4
+ from typing import Any, List, Literal, Optional, Sequence, Union
5
5
  from uuid import UUID
6
6
 
7
7
  from pydantic import BaseModel, ConfigDict, Field
8
8
 
9
+ ZoneListId = Union[UUID, Literal["self", "default"]]
10
+
9
11
 
10
12
  class PolicyId(BaseModel):
11
13
  policy_id: UUID = Field(serialization_alias="policyId", validation_alias="policyId")
12
14
 
13
15
 
14
16
  class NGFirewallZoneListEntry(BaseModel):
15
- src_zone_list_id: UUID = Field(serialization_alias="srcZoneListId", validation_alias="srcZoneListId")
16
- dst_zone_list_id: UUID = Field(serialization_alias="dstZoneListId", validation_alias="dstZoneListId")
17
+ src_zone_list_id: ZoneListId = Field(serialization_alias="srcZoneListId", validation_alias="srcZoneListId")
18
+ dst_zone_list_id: ZoneListId = Field(serialization_alias="dstZoneListId", validation_alias="dstZoneListId")
17
19
  model_config = ConfigDict(populate_by_name=True)
18
20
 
19
21
 
@@ -25,13 +27,14 @@ class AssemblyItemBase(BaseModel):
25
27
 
26
28
  class ZoneBasedFWAssemblyItem(AssemblyItemBase):
27
29
  type: Literal["zoneBasedFW"] = "zoneBasedFW"
30
+ entries: Optional[List[NGFirewallZoneListEntry]] = None
28
31
 
29
32
 
30
33
  class NGFirewallAssemblyItem(AssemblyItemBase):
31
34
  type: Literal["zoneBasedFW"] = "zoneBasedFW"
32
35
  entries: List[NGFirewallZoneListEntry] = []
33
36
 
34
- def add_zone_pair(self, src_zone_id: UUID, dst_zone_id: UUID):
37
+ def add_zone_pair(self, src_zone_id: ZoneListId, dst_zone_id: ZoneListId):
35
38
  self.entries.append(NGFirewallZoneListEntry(src_zone_list_id=src_zone_id, dst_zone_list_id=dst_zone_id))
36
39
 
37
40
 
@@ -47,6 +50,10 @@ class URLFilteringAssemblyItem(AssemblyItemBase):
47
50
  type: Literal["urlFiltering"] = "urlFiltering"
48
51
 
49
52
 
53
+ class AdvancedInspectionProfileAssemblyItem(AssemblyItemBase):
54
+ type: Literal["advancedInspectionProfile"] = "advancedInspectionProfile"
55
+
56
+
50
57
  class AdvancedMalwareProtectionAssemblyItem(AssemblyItemBase):
51
58
  type: Literal["advancedMalwareProtection"] = "advancedMalwareProtection"
52
59
 
@@ -57,23 +64,20 @@ class SSLDecryptionAssemblyItem(AssemblyItemBase):
57
64
 
58
65
  class PolicyDefinition(BaseModel):
59
66
  assembly: Sequence[AssemblyItemBase] = []
67
+ settings: Optional[Any] = None
60
68
 
61
69
 
62
70
  class PolicyCreationPayload(BaseModel):
63
71
  policy_name: str = Field(
64
72
  serialization_alias="policyName",
65
73
  validation_alias="policyName",
66
- pattern="^[a-zA-Z0-9_-]{1,127}$",
74
+ pattern="^[a-zA-Z0-9_-]{0,127}$",
67
75
  description="Can include only alpha-numeric characters, hyphen '-' or underscore '_'; maximum 127 characters",
68
76
  )
69
77
  policy_description: str = Field(
70
78
  default="default description", serialization_alias="policyDescription", validation_alias="policyDescription"
71
79
  )
72
80
  policy_type: str = Field(serialization_alias="policyType", validation_alias="policyType")
73
- policy_definition: Union[PolicyDefinition, str] = Field(
74
- serialization_alias="policyDefinition",
75
- validation_alias="policyDefinition",
76
- )
77
81
  is_policy_activated: bool = Field(
78
82
  default=False, serialization_alias="isPolicyActivated", validation_alias="isPolicyActivated"
79
83
  )