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,33 @@
1
+ # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
+
3
+ from typing import List, Literal, Optional
4
+
5
+ from pydantic import BaseModel, Field, model_validator
6
+
7
+ from catalystwan.models.common import check_fields_exclusive
8
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
9
+
10
+
11
+ class GeoLocationListEntry(BaseModel):
12
+ country: Optional[str] = Field(default=None, description="ISO-3166 alpha-3 country code eg: FRA")
13
+ continent: Optional[str] = Field(
14
+ default=None, description="One of 2-letter continent codes: AF, NA, OC, AN, AS, EU, SA"
15
+ )
16
+
17
+ @model_validator(mode="after")
18
+ def check_country_xor_continent(self):
19
+ check_fields_exclusive(self.__dict__, {"country", "continent"}, True)
20
+ return self
21
+
22
+
23
+ class GeoLocationList(PolicyListBase):
24
+ type: Literal["geoLocation"] = "geoLocation"
25
+ entries: List[GeoLocationListEntry] = []
26
+
27
+
28
+ class GeoLocationListEditPayload(GeoLocationList, PolicyListId):
29
+ pass
30
+
31
+
32
+ class GeoLocationListInfo(GeoLocationList, PolicyListInfo):
33
+ pass
@@ -0,0 +1,29 @@
1
+ # Copyright 2022 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
+
10
+ class IdentityListEntry(BaseModel):
11
+ model_config = ConfigDict(populate_by_name=True)
12
+ user: str
13
+ user_group: str = Field(validation_alias="userGroup", serialization_alias="userGroup")
14
+
15
+
16
+ class IdentityList(PolicyListBase):
17
+ type: Literal["identity"] = "identity"
18
+ entries: List[IdentityListEntry] = Field(default_factory=list)
19
+
20
+ def add_entry(self, user: str, user_group: str) -> None:
21
+ self._add_entry(IdentityListEntry(user=user, user_group=user_group))
22
+
23
+
24
+ class IdentityListEditPayload(IdentityList, PolicyListId):
25
+ pass
26
+
27
+
28
+ class IdentityListInfo(IdentityList, PolicyListInfo):
29
+ pass
@@ -0,0 +1,27 @@
1
+ # Copyright 2022 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
+
10
+ class IPSSignatureListEntry(BaseModel):
11
+ model_config = ConfigDict(populate_by_name=True)
12
+
13
+ generator_id: str = Field(serialization_alias="generatorId", validation_alias="generatorId")
14
+ signature_id: str = Field(serialization_alias="signatureId", validation_alias="signatureId")
15
+
16
+
17
+ class IPSSignatureList(PolicyListBase):
18
+ type: Literal["ipsSignature"] = "ipsSignature"
19
+ entries: List[IPSSignatureListEntry] = []
20
+
21
+
22
+ class IPSSignatureListEditPayload(IPSSignatureList, PolicyListId):
23
+ pass
24
+
25
+
26
+ class IPSSignatureListInfo(IPSSignatureList, PolicyListInfo):
27
+ pass
@@ -0,0 +1,33 @@
1
+ # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
+
3
+ from ipaddress import IPv6Interface
4
+ from typing import List, Literal, Optional
5
+
6
+ from pydantic import BaseModel, ConfigDict, Field
7
+
8
+ from catalystwan.models.common import IntStr
9
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
10
+
11
+
12
+ class IPv6PrefixListEntry(BaseModel):
13
+ model_config = ConfigDict(populate_by_name=True)
14
+
15
+ ipv6_prefix: IPv6Interface = Field(serialization_alias="ipv6Prefix", validation_alias="ipv6Prefix")
16
+ ge: Optional[IntStr] = Field(default=None, ge=0, le=128)
17
+ le: Optional[IntStr] = Field(default=None, ge=0, le=128)
18
+
19
+
20
+ class IPv6PrefixList(PolicyListBase):
21
+ type: Literal["ipv6prefix"] = "ipv6prefix"
22
+ entries: List[IPv6PrefixListEntry] = []
23
+
24
+ def add_prefix(self, prefix: IPv6Interface, ge: Optional[int] = None, le: Optional[int] = None) -> None:
25
+ self._add_entry(IPv6PrefixListEntry(ipv6_prefix=prefix, ge=ge, le=le))
26
+
27
+
28
+ class IPv6PrefixListEditPayload(IPv6PrefixList, PolicyListId):
29
+ pass
30
+
31
+
32
+ class IPv6PrefixListInfo(IPv6PrefixList, PolicyListInfo):
33
+ pass
@@ -0,0 +1,45 @@
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, model_validator
6
+
7
+ from catalystwan.models.common import check_fields_exclusive
8
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
9
+
10
+
11
+ class LocalAppListEntry(BaseModel):
12
+ model_config = ConfigDict(populate_by_name=True)
13
+
14
+ app_family: Optional[str] = Field(default=None, serialization_alias="appFamily", validation_alias="appFamily")
15
+ app: Optional[str] = None
16
+
17
+ @model_validator(mode="after")
18
+ def check_app_xor_appfamily(self):
19
+ check_fields_exclusive(self.__dict__, {"app", "app_family"}, True)
20
+ return self
21
+
22
+
23
+ class LocalAppList(PolicyListBase):
24
+ type: Literal["localApp"] = "localApp"
25
+ entries: List[LocalAppListEntry] = []
26
+
27
+ def add_app(self, app: str) -> None:
28
+ self._add_entry(LocalAppListEntry(app=app))
29
+
30
+ def add_app_family(self, app_family: str) -> None:
31
+ self._add_entry(LocalAppListEntry(app_family=app_family))
32
+
33
+ def list_all_app(self) -> List[str]:
34
+ return [e.app for e in self.entries if e.app is not None]
35
+
36
+ def list_all_app_family(self) -> List[str]:
37
+ return [e.app_family for e in self.entries if e.app_family is not None]
38
+
39
+
40
+ class LocalAppListEditPayload(LocalAppList, PolicyListId):
41
+ pass
42
+
43
+
44
+ class LocalAppListInfo(LocalAppList, PolicyListInfo):
45
+ pass
@@ -0,0 +1,36 @@
1
+ # Copyright 2022 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
+
10
+ class LocalDomainListEntry(BaseModel):
11
+ model_config = ConfigDict(populate_by_name=True)
12
+
13
+ name_server: str = Field(
14
+ pattern="^[^*+].*",
15
+ serialization_alias="nameServer",
16
+ validation_alias="nameServer",
17
+ max_length=240,
18
+ description="Must be valid std regex."
19
+ "String cannot start with a '*' or a '+', be empty, or be more than 240 characters",
20
+ )
21
+
22
+
23
+ class LocalDomainList(PolicyListBase):
24
+ type: Literal["localDomain"] = "localDomain"
25
+ entries: List[LocalDomainListEntry] = []
26
+
27
+ def add_domain(self, name_server: str) -> None:
28
+ self.entries.append(LocalDomainListEntry(name_server=name_server))
29
+
30
+
31
+ class LocalDomainListEditPayload(LocalDomainList, PolicyListId):
32
+ pass
33
+
34
+
35
+ class LocalDomainListInfo(LocalDomainList, PolicyListInfo):
36
+ pass
@@ -0,0 +1,44 @@
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, SpaceSeparatedMpDtmfList
9
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
10
+
11
+
12
+ class CodecEntry(BaseModel):
13
+ model_config = ConfigDict(populate_by_name=True)
14
+ type: Literal["codec"] = "codec"
15
+ pref_num: IntStr = Field(ge=1, serialization_alias="prefNum", validation_alias="prefNum")
16
+ value: str
17
+
18
+
19
+ class DtmfEntry(BaseModel):
20
+ model_config = ConfigDict(populate_by_name=True)
21
+ type: Literal["dtmf"] = "dtmf"
22
+ value: SpaceSeparatedMpDtmfList
23
+
24
+
25
+ AnyMediaProfileListEntry = Annotated[
26
+ Union[
27
+ CodecEntry,
28
+ DtmfEntry,
29
+ ],
30
+ Field(discriminator="type"),
31
+ ]
32
+
33
+
34
+ class MediaProfileList(PolicyListBase):
35
+ type: Literal["mediaProfile", "mediaprofile"] = "mediaProfile"
36
+ entries: List[AnyMediaProfileListEntry] = Field(default_factory=list)
37
+
38
+
39
+ class MediaProfileListEditPayload(MediaProfileList, PolicyListId):
40
+ pass
41
+
42
+
43
+ class MediaProfileListInfo(MediaProfileList, PolicyListInfo):
44
+ pass
@@ -0,0 +1,27 @@
1
+ # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
+
3
+ from typing import List, Literal
4
+
5
+ from pydantic import BaseModel, ConfigDict, Field, IPvAnyAddress
6
+
7
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
8
+
9
+
10
+ class MirrorListEntry(BaseModel):
11
+ model_config = ConfigDict(populate_by_name=True)
12
+
13
+ remote_dest: IPvAnyAddress = Field(serialization_alias="remoteDest", validation_alias="remoteDest")
14
+ source: IPvAnyAddress
15
+
16
+
17
+ class MirrorList(PolicyListBase):
18
+ type: Literal["mirror"] = "mirror"
19
+ entries: List[MirrorListEntry] = []
20
+
21
+
22
+ class MirrorListEditPayload(MirrorList, PolicyListId):
23
+ pass
24
+
25
+
26
+ class MirrorListInfo(MirrorList, PolicyListInfo):
27
+ pass
@@ -0,0 +1,27 @@
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 FaxFallBackProtocols
8
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
9
+
10
+
11
+ class ModemPassThroughListEntry(BaseModel):
12
+ model_config = ConfigDict(populate_by_name=True)
13
+ protocol: FaxFallBackProtocols
14
+
15
+
16
+ class ModemPassThroughList(PolicyListBase):
17
+ model_config = ConfigDict(populate_by_name=True)
18
+ type: Literal["modemPassthrough", "modempassthrough"] = "modemPassthrough"
19
+ entries: List[ModemPassThroughListEntry] = Field(default_factory=list, max_length=1)
20
+
21
+
22
+ class ModemPassThroughListEditPayload(ModemPassThroughList, PolicyListId):
23
+ pass
24
+
25
+
26
+ class ModemPassThroughListInfo(ModemPassThroughList, PolicyListInfo):
27
+ pass
@@ -0,0 +1,39 @@
1
+ # Copyright 2022 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
+ PolicerExceedAction = Literal[
11
+ "drop",
12
+ "remark",
13
+ ]
14
+
15
+
16
+ class PolicerListEntry(BaseModel):
17
+ model_config = ConfigDict(populate_by_name=True)
18
+
19
+ burst: IntStr = Field(description="bytes", ge=15_000, le=10_000_000)
20
+ exceed: PolicerExceedAction = "drop"
21
+ rate: IntStr = Field(description="bps", ge=8, le=100_000_000_000)
22
+
23
+
24
+ class PolicerList(PolicyListBase):
25
+ type: Literal["policer"] = "policer"
26
+ entries: List[PolicerListEntry] = []
27
+
28
+ def police(self, burst: int, rate: int, exceed: PolicerExceedAction = "drop") -> None:
29
+ # Policer list must have only single entry!
30
+ entry = PolicerListEntry(burst=burst, exceed=exceed, rate=rate)
31
+ self._add_entry(entry, single=True)
32
+
33
+
34
+ class PolicerListEditPayload(PolicerList, PolicyListId):
35
+ pass
36
+
37
+
38
+ class PolicerListInfo(PolicerList, PolicyListInfo):
39
+ pass
@@ -0,0 +1,33 @@
1
+ # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
+
3
+ from typing import List, Literal
4
+
5
+ from pydantic import BaseModel, 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 PortListEntry(BaseModel):
12
+ port: IntRangeStr
13
+
14
+ @field_validator("port")
15
+ @classmethod
16
+ def check_port(cls, port: IntRangeStr):
17
+ for i in port:
18
+ if i is not None:
19
+ assert 0 <= i <= 65_535
20
+ return port
21
+
22
+
23
+ class PortList(PolicyListBase):
24
+ type: Literal["port"] = "port"
25
+ entries: List[PortListEntry] = []
26
+
27
+
28
+ class PortListEditPayload(PortList, PolicyListId):
29
+ pass
30
+
31
+
32
+ class PortListInfo(PortList, PolicyListInfo):
33
+ pass
@@ -0,0 +1,82 @@
1
+ # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
+
3
+ from typing import List, Literal, Optional, Set, Tuple
4
+
5
+ from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
6
+
7
+ from catalystwan.models.common import TLOCColor, str_as_str_list
8
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
9
+
10
+ PathPreference = Literal[
11
+ "direct-path",
12
+ "multi-hop-path",
13
+ "all-paths",
14
+ ]
15
+
16
+
17
+ class ColorGroupPreference(BaseModel):
18
+ model_config = ConfigDict(populate_by_name=True)
19
+
20
+ color_preference: Set[TLOCColor] = Field(serialization_alias="colorPreference", validation_alias="colorPreference")
21
+ path_preference: Optional[PathPreference] = Field(
22
+ default=None, serialization_alias="pathPreference", validation_alias="pathPreference"
23
+ )
24
+
25
+ _color_pref = field_validator("color_preference", mode="before")(str_as_str_list)
26
+
27
+ @staticmethod
28
+ def from_color_set_and_path(
29
+ color_preference: Set[TLOCColor], path_preference: Optional[PathPreference] = None
30
+ ) -> "ColorGroupPreference":
31
+ return ColorGroupPreference(color_preference=color_preference, path_preference=path_preference)
32
+
33
+
34
+ class PreferredColorGroupListEntry(BaseModel):
35
+ model_config = ConfigDict(populate_by_name=True)
36
+
37
+ primary_preference: ColorGroupPreference = Field(
38
+ serialization_alias="primaryPreference", validation_alias="primaryPreference"
39
+ )
40
+ secondary_preference: Optional[ColorGroupPreference] = Field(
41
+ default=None, serialization_alias="secondaryPreference", validation_alias="secondaryPreference"
42
+ )
43
+ tertiary_preference: Optional[ColorGroupPreference] = Field(
44
+ default=None, serialization_alias="tertiaryPreference", validation_alias="tertiaryPreference"
45
+ )
46
+
47
+ @model_validator(mode="after")
48
+ def check_optional_preferences_order(self):
49
+ assert not (self.secondary_preference is None and self.tertiary_preference is not None)
50
+ return self
51
+
52
+
53
+ class PreferredColorGroupList(PolicyListBase):
54
+ type: Literal["preferredColorGroup"] = "preferredColorGroup"
55
+ entries: List[PreferredColorGroupListEntry] = []
56
+
57
+ def assign_color_groups(
58
+ self,
59
+ primary: Tuple[Set[TLOCColor], Optional[PathPreference]],
60
+ secondary: Optional[Tuple[Set[TLOCColor], Optional[PathPreference]]] = None,
61
+ tertiary: Optional[Tuple[Set[TLOCColor], Optional[PathPreference]]] = None,
62
+ ) -> PreferredColorGroupListEntry:
63
+ primary_preference = ColorGroupPreference.from_color_set_and_path(*primary)
64
+ secondary_preference = (
65
+ ColorGroupPreference.from_color_set_and_path(*secondary) if secondary is not None else None
66
+ )
67
+ tertiary_preference = ColorGroupPreference.from_color_set_and_path(*tertiary) if tertiary is not None else None
68
+ entry = PreferredColorGroupListEntry(
69
+ primary_preference=primary_preference,
70
+ secondary_preference=secondary_preference,
71
+ tertiary_preference=tertiary_preference,
72
+ )
73
+ self._add_entry(entry=entry, single=True)
74
+ return entry
75
+
76
+
77
+ class PreferredColorGroupListEditPayload(PreferredColorGroupList, PolicyListId):
78
+ pass
79
+
80
+
81
+ class PreferredColorGroupListInfo(PreferredColorGroupList, PolicyListInfo):
82
+ pass
@@ -0,0 +1,33 @@
1
+ # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
+
3
+ from ipaddress import IPv4Network
4
+ from typing import List, Literal, Optional
5
+
6
+ from pydantic import BaseModel, ConfigDict, Field
7
+
8
+ from catalystwan.models.common import IntStr
9
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
10
+
11
+
12
+ class PrefixListEntry(BaseModel):
13
+ model_config = ConfigDict(populate_by_name=True)
14
+
15
+ ip_prefix: IPv4Network = Field(serialization_alias="ipPrefix", validation_alias="ipPrefix")
16
+ ge: Optional[IntStr] = Field(default=None, ge=0, le=32)
17
+ le: Optional[IntStr] = Field(default=None, ge=0, le=32)
18
+
19
+
20
+ class PrefixList(PolicyListBase):
21
+ type: Literal["prefix"] = "prefix"
22
+ entries: List[PrefixListEntry] = []
23
+
24
+ def add_prefix(self, prefix: IPv4Network, ge: Optional[int] = None, le: Optional[int] = None) -> None:
25
+ self._add_entry(PrefixListEntry(ip_prefix=prefix, ge=ge, le=le))
26
+
27
+
28
+ class PrefixListEditPayload(PrefixList, PolicyListId):
29
+ pass
30
+
31
+
32
+ class PrefixListInfo(PrefixList, PolicyListInfo):
33
+ pass
@@ -0,0 +1,26 @@
1
+ # Copyright 2022 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
+
10
+ class ProtocolNameListEntry(BaseModel):
11
+ model_config = ConfigDict(populate_by_name=True)
12
+
13
+ protocol_name: str = Field(serialization_alias="protocolName", validation_alias="protocolName")
14
+
15
+
16
+ class ProtocolNameList(PolicyListBase):
17
+ type: Literal["protocolName"] = "protocolName"
18
+ entries: List[ProtocolNameListEntry] = []
19
+
20
+
21
+ class ProtocolNameListEditPayload(ProtocolNameList, PolicyListId):
22
+ pass
23
+
24
+
25
+ class ProtocolNameListInfo(ProtocolNameList, PolicyListInfo):
26
+ pass
@@ -0,0 +1,45 @@
1
+ # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
+
3
+ from typing import List, Literal, Set, Tuple
4
+
5
+ from pydantic import BaseModel, ConfigDict, 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 RegionListEntry(BaseModel):
12
+ model_config = ConfigDict(populate_by_name=True)
13
+
14
+ region_id: IntRangeStr = Field(
15
+ serialization_alias="regionId", validation_alias="regionId", description="Number in range 0-63"
16
+ )
17
+
18
+ @field_validator("region_id")
19
+ @classmethod
20
+ def check_region_range(cls, region_ids: IntRangeStr):
21
+ for i in region_ids:
22
+ if i is not None:
23
+ assert 0 <= i <= 63
24
+ return region_ids
25
+
26
+
27
+ class RegionList(PolicyListBase):
28
+ type: Literal["region"] = "region"
29
+ entries: List[RegionListEntry] = []
30
+
31
+ def add_regions(self, regions: Set[int]):
32
+ for region in regions:
33
+ self._add_entry(RegionListEntry(region_id=(region, None)))
34
+
35
+ def add_region_range(self, region_range: Tuple[int, int]):
36
+ entry = RegionListEntry(region_id=region_range)
37
+ self._add_entry(entry)
38
+
39
+
40
+ class RegionListEditPayload(RegionList, PolicyListId):
41
+ pass
42
+
43
+
44
+ class RegionListInfo(RegionList, PolicyListInfo):
45
+ pass
@@ -0,0 +1,30 @@
1
+ # Copyright 2022 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
+
10
+ class ScalableGroupTagListEntry(BaseModel):
11
+ model_config = ConfigDict(populate_by_name=True)
12
+
13
+ sgt_name: str = Field(serialization_alias="sgtName", validation_alias="sgtName")
14
+ tag: str = Field(serialization_alias="tag", validation_alias="tag")
15
+
16
+
17
+ class ScalableGroupTagList(PolicyListBase):
18
+ type: Literal["scalablegrouptag", "scalableGroupTag"] = "scalableGroupTag"
19
+ entries: List[ScalableGroupTagListEntry] = Field(default_factory=list)
20
+
21
+ def add_entry(self, sgt_name: str, tag: str) -> None:
22
+ self._add_entry(ScalableGroupTagListEntry(sgt_name=sgt_name, tag=tag))
23
+
24
+
25
+ class ScalableGroupTagListEditPayload(ScalableGroupTagList, PolicyListId):
26
+ pass
27
+
28
+
29
+ class ScalableGroupTagListInfo(ScalableGroupTagList, PolicyListInfo):
30
+ pass
@@ -0,0 +1,34 @@
1
+ # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
+
3
+ from typing import List, Literal, Set, Tuple
4
+
5
+ from pydantic import BaseModel, ConfigDict, Field
6
+
7
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
8
+
9
+
10
+ class SiteListEntry(BaseModel):
11
+ model_config = ConfigDict(populate_by_name=True)
12
+
13
+ site_id: str = Field(serialization_alias="siteId", validation_alias="siteId")
14
+
15
+
16
+ class SiteList(PolicyListBase):
17
+ type: Literal["site"] = "site"
18
+ entries: List[SiteListEntry] = []
19
+
20
+ def add_sites(self, sites: Set[int]):
21
+ for site in sites:
22
+ self._add_entry(SiteListEntry(site_id=str(site)))
23
+
24
+ def add_site_range(self, site_range: Tuple[int, int]):
25
+ entry = SiteListEntry(site_id=f"{site_range[0]}-{site_range[1]}")
26
+ self._add_entry(entry)
27
+
28
+
29
+ class SiteListEditPayload(SiteList, PolicyListId):
30
+ pass
31
+
32
+
33
+ class SiteListInfo(SiteList, PolicyListInfo):
34
+ pass