catalystwan 0.41.2.dev9__py3-none-any.whl → 0.41.3__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 (509) hide show
  1. catalystwan/ENDPOINTS.md +611 -0
  2. catalystwan/__init__.py +2 -3
  3. catalystwan/api/administration.py +2 -13
  4. catalystwan/api/api_container.py +1 -4
  5. catalystwan/api/config_group_api.py +16 -41
  6. catalystwan/api/configuration_groups/parcel.py +30 -100
  7. catalystwan/api/configuration_groups/parcels/cellular_controller.py +33 -0
  8. catalystwan/api/feature_profile_api.py +237 -2016
  9. catalystwan/api/policy_api.py +116 -470
  10. catalystwan/api/template_api.py +44 -113
  11. catalystwan/api/templates/README.md +47 -61
  12. catalystwan/api/templates/cli_template.py +7 -17
  13. catalystwan/api/templates/device_template/device_template.py +32 -127
  14. catalystwan/api/templates/device_template/device_template_payload.json.j2 +19 -0
  15. catalystwan/api/templates/feature_template.py +3 -3
  16. catalystwan/api/templates/models/cisco_aaa_model.py +42 -289
  17. catalystwan/api/templates/models/cisco_banner_model.py +2 -11
  18. catalystwan/api/templates/models/cisco_bfd_model.py +36 -31
  19. catalystwan/api/templates/models/cisco_bgp_model.py +131 -382
  20. catalystwan/api/templates/models/cisco_logging_model.py +43 -80
  21. catalystwan/api/templates/models/cisco_ntp_model.py +15 -34
  22. catalystwan/api/templates/models/cisco_omp_model.py +60 -70
  23. catalystwan/api/templates/models/cisco_ospf.py +74 -143
  24. catalystwan/api/templates/models/cisco_ospfv3.py +95 -217
  25. catalystwan/api/templates/models/cisco_secure_internet_gateway.py +142 -304
  26. catalystwan/api/templates/models/cisco_snmp_model.py +52 -66
  27. catalystwan/api/templates/models/cisco_system.py +129 -238
  28. catalystwan/api/templates/models/cisco_vpn_interface_model.py +275 -632
  29. catalystwan/api/templates/models/cisco_vpn_model.py +270 -433
  30. catalystwan/api/templates/models/cli_template.py +2 -3
  31. catalystwan/api/templates/models/omp_vsmart_model.py +10 -46
  32. catalystwan/api/templates/models/security_vsmart_model.py +8 -11
  33. catalystwan/api/templates/models/supported.py +4 -10
  34. catalystwan/api/templates/models/system_vsmart_model.py +27 -164
  35. catalystwan/apigw_auth.py +2 -6
  36. catalystwan/dataclasses.py +53 -2
  37. catalystwan/endpoints/__init__.py +41 -41
  38. catalystwan/endpoints/certificate_management_device.py +0 -4
  39. catalystwan/endpoints/cluster_management.py +9 -30
  40. catalystwan/endpoints/configuration/feature_profile/sdwan/policy_object.py +12 -35
  41. catalystwan/endpoints/configuration/feature_profile/sdwan/system.py +11 -164
  42. catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py +26 -144
  43. catalystwan/endpoints/configuration/policy/definition/access_control_list.py +11 -6
  44. catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py +11 -6
  45. catalystwan/endpoints/configuration/policy/definition/control.py +11 -6
  46. catalystwan/endpoints/configuration/policy/definition/device_access.py +11 -6
  47. catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py +11 -6
  48. catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py +11 -6
  49. catalystwan/endpoints/configuration/policy/definition/mesh.py +11 -2
  50. catalystwan/endpoints/configuration/policy/definition/qos_map.py +11 -2
  51. catalystwan/endpoints/configuration/policy/definition/rewrite.py +11 -6
  52. catalystwan/endpoints/configuration/policy/definition/rule_set.py +11 -2
  53. catalystwan/endpoints/configuration/policy/definition/security_group.py +11 -6
  54. catalystwan/endpoints/configuration/policy/definition/traffic_data.py +11 -6
  55. catalystwan/endpoints/configuration/policy/definition/vpn_membership.py +11 -6
  56. catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py +11 -6
  57. catalystwan/endpoints/configuration/policy/list/app.py +16 -3
  58. catalystwan/endpoints/configuration/policy/list/app_probe.py +15 -6
  59. catalystwan/endpoints/configuration/policy/list/as_path.py +16 -3
  60. catalystwan/endpoints/configuration/policy/list/class_map.py +16 -3
  61. catalystwan/endpoints/configuration/policy/list/color.py +16 -3
  62. catalystwan/endpoints/configuration/policy/list/community.py +16 -3
  63. catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py +15 -6
  64. catalystwan/endpoints/configuration/policy/list/data_prefix.py +16 -3
  65. catalystwan/endpoints/configuration/policy/list/expanded_community.py +15 -6
  66. catalystwan/endpoints/configuration/policy/list/fqdn.py +16 -3
  67. catalystwan/endpoints/configuration/policy/list/geo_location.py +16 -3
  68. catalystwan/endpoints/configuration/policy/list/ips_signature.py +15 -6
  69. catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py +16 -3
  70. catalystwan/endpoints/configuration/policy/list/local_app.py +16 -3
  71. catalystwan/endpoints/configuration/policy/list/local_domain.py +16 -3
  72. catalystwan/endpoints/configuration/policy/list/mirror.py +16 -3
  73. catalystwan/endpoints/configuration/policy/list/policer.py +16 -3
  74. catalystwan/endpoints/configuration/policy/list/port.py +16 -3
  75. catalystwan/endpoints/configuration/policy/list/preferred_color_group.py +15 -6
  76. catalystwan/endpoints/configuration/policy/list/prefix.py +16 -4
  77. catalystwan/endpoints/configuration/policy/list/protocol_name.py +15 -6
  78. catalystwan/endpoints/configuration/policy/list/region.py +10 -2
  79. catalystwan/endpoints/configuration/policy/list/site.py +16 -3
  80. catalystwan/endpoints/configuration/policy/list/sla.py +16 -3
  81. catalystwan/endpoints/configuration/policy/list/tloc.py +16 -3
  82. catalystwan/endpoints/configuration/policy/list/url_allow_list.py +16 -3
  83. catalystwan/endpoints/configuration/policy/list/url_block_list.py +16 -3
  84. catalystwan/endpoints/configuration/policy/list/vpn.py +16 -3
  85. catalystwan/endpoints/configuration/policy/list/zone.py +16 -3
  86. catalystwan/endpoints/configuration/policy/security_template.py +3 -2
  87. catalystwan/endpoints/configuration/software_actions.py +4 -2
  88. catalystwan/endpoints/configuration_dashboard_status.py +2 -2
  89. catalystwan/endpoints/configuration_device_template.py +1 -15
  90. catalystwan/endpoints/configuration_feature_profile.py +11 -8
  91. catalystwan/endpoints/configuration_group.py +5 -28
  92. catalystwan/endpoints/configuration_settings.py +1 -90
  93. catalystwan/endpoints/endpoints_container.py +18 -82
  94. catalystwan/endpoints/real_time_monitoring/reboot_history.py +3 -1
  95. catalystwan/endpoints/tenant_migration.py +0 -2
  96. catalystwan/exceptions.py +0 -24
  97. catalystwan/integration_tests/test_find_template_values.py +18 -7
  98. catalystwan/models/common.py +2 -1898
  99. catalystwan/models/configuration/common.py +0 -1
  100. catalystwan/models/configuration/config_migration.py +36 -0
  101. catalystwan/models/configuration/feature_profile/common.py +149 -634
  102. catalystwan/models/configuration/feature_profile/sdwan/management/vpn.py +26 -0
  103. catalystwan/models/configuration/feature_profile/sdwan/policy_object/__init__.py +60 -69
  104. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/app_probe.py +20 -34
  105. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/application_list.py +6 -8
  106. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/color_list.py +5 -7
  107. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/data_prefix.py +4 -13
  108. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/expanded_community_list.py +7 -9
  109. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/fowarding_class.py +5 -7
  110. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_data_prefix.py +9 -11
  111. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_prefix_list.py +10 -25
  112. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/{policer.py → policier.py} +10 -12
  113. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefered_group_color.py +10 -29
  114. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefix_list.py +8 -23
  115. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/sla_class.py +31 -12
  116. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/standard_community.py +10 -16
  117. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/tloc_list.py +7 -8
  118. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/application_list.py +6 -8
  119. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/data_prefix.py +5 -7
  120. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/fqdn.py +5 -7
  121. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/geolocation_list.py +5 -7
  122. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ips_signature.py +5 -7
  123. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/local_domain.py +5 -7
  124. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/protocol_list.py +5 -7
  125. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/security_port.py +11 -21
  126. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url.py +15 -36
  127. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/zone.py +18 -14
  128. catalystwan/models/configuration/feature_profile/sdwan/service/acl.py +409 -0
  129. catalystwan/models/configuration/feature_profile/sdwan/service/appqoe.py +42 -77
  130. catalystwan/models/configuration/feature_profile/sdwan/service/bgp.py +288 -0
  131. catalystwan/models/configuration/feature_profile/sdwan/service/dhcp_server.py +64 -107
  132. catalystwan/models/configuration/feature_profile/sdwan/service/eigrp.py +42 -39
  133. catalystwan/models/configuration/feature_profile/sdwan/service/lan/common.py +88 -7
  134. catalystwan/models/configuration/feature_profile/sdwan/service/lan/ethernet.py +156 -232
  135. catalystwan/models/configuration/feature_profile/sdwan/service/lan/gre.py +108 -38
  136. catalystwan/models/configuration/feature_profile/sdwan/service/lan/ipsec.py +84 -77
  137. catalystwan/models/configuration/feature_profile/sdwan/service/lan/svi.py +56 -62
  138. catalystwan/models/configuration/feature_profile/sdwan/service/lan/vpn.py +121 -112
  139. catalystwan/models/configuration/feature_profile/sdwan/service/multicast.py +57 -56
  140. catalystwan/models/configuration/feature_profile/sdwan/service/object_tracker.py +21 -15
  141. catalystwan/models/configuration/feature_profile/sdwan/{routing → service}/ospf.py +47 -55
  142. catalystwan/models/configuration/feature_profile/sdwan/{routing → service}/ospfv3.py +72 -74
  143. catalystwan/models/configuration/feature_profile/sdwan/service/route_policy.py +110 -358
  144. catalystwan/models/configuration/feature_profile/sdwan/service/service_insertion_attachment.py +25 -17
  145. catalystwan/models/configuration/feature_profile/sdwan/service/switchport.py +58 -50
  146. catalystwan/models/configuration/feature_profile/sdwan/service/tracker.py +21 -12
  147. catalystwan/models/configuration/feature_profile/sdwan/service/wireless_lan.py +31 -27
  148. catalystwan/models/configuration/feature_profile/sdwan/system/aaa.py +10 -58
  149. catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_controller.py +23 -26
  150. catalystwan/models/configuration/profile_type.py +6 -1
  151. catalystwan/models/policy/__init__.py +69 -282
  152. catalystwan/models/policy/centralized.py +29 -26
  153. catalystwan/models/policy/{definition → definitions}/access_control_list.py +17 -47
  154. catalystwan/models/policy/{definition → definitions}/access_control_list_ipv6.py +18 -42
  155. catalystwan/models/policy/{definition → definitions}/control.py +25 -48
  156. catalystwan/models/policy/{definition → definitions}/device_access.py +11 -22
  157. catalystwan/models/policy/{definition → definitions}/device_access_ipv6.py +11 -20
  158. catalystwan/models/policy/{definition → definitions}/hub_and_spoke.py +4 -18
  159. catalystwan/models/policy/{definition → definitions}/mesh.py +1 -13
  160. catalystwan/models/policy/{definition → definitions}/qos_map.py +32 -39
  161. catalystwan/models/policy/{definition → definitions}/rewrite.py +2 -12
  162. catalystwan/models/policy/{definition → definitions}/rule_set.py +48 -66
  163. catalystwan/models/policy/{definition → definitions}/security_group.py +14 -38
  164. catalystwan/models/policy/{definition → definitions}/traffic_data.py +61 -184
  165. catalystwan/models/policy/{definition → definitions}/vpn_membership.py +1 -13
  166. catalystwan/models/policy/{definition → definitions}/zone_based_firewall.py +32 -93
  167. catalystwan/models/policy/lists.py +330 -0
  168. catalystwan/models/policy/lists_entries.py +444 -0
  169. catalystwan/models/policy/localized.py +16 -34
  170. catalystwan/models/policy/policy.py +10 -14
  171. catalystwan/models/policy/policy_definition.py +173 -673
  172. catalystwan/models/policy/policy_list.py +27 -38
  173. catalystwan/models/policy/security.py +46 -145
  174. catalystwan/response.py +2 -6
  175. catalystwan/session.py +1 -1
  176. catalystwan/tests/templates/definitions/{cisco_vpn_basic.json → Basic_Cisco_VPN_Model.json} +2 -2
  177. catalystwan/tests/templates/definitions/complex_aaa.json +277 -0
  178. catalystwan/tests/templates/definitions/{cisco_vpn_complex.json → complex_cisco_vpn.json} +12 -27
  179. catalystwan/tests/templates/definitions/{cisco_aaa.json → iuo.json} +15 -44
  180. catalystwan/tests/templates/definitions/omp_1.json +11 -0
  181. catalystwan/tests/templates/definitions/{omp_vsmart_2.json → omp_2.json} +2 -16
  182. catalystwan/tests/templates/definitions/{omp_vsmart_3.json → omp_3.json} +2 -16
  183. catalystwan/tests/templates/models/__init__.py +13 -46
  184. catalystwan/tests/templates/models/cisco_aaa.py +48 -81
  185. catalystwan/tests/templates/models/cisco_banner.py +2 -2
  186. catalystwan/tests/templates/models/cisco_bfd.py +6 -4
  187. catalystwan/tests/templates/models/cisco_system.py +3 -108
  188. catalystwan/tests/templates/models/cisco_vpn.py +72 -42
  189. catalystwan/tests/templates/models/omp_vsmart.py +8 -28
  190. catalystwan/tests/templates/schemas/cedge_aaa.json +1 -1
  191. catalystwan/tests/templates/schemas/cisco_system.json +0 -242
  192. catalystwan/tests/templates/schemas/cisco_vpn.json +1 -53
  193. catalystwan/tests/templates/schemas/omp-vsmart.json +0 -20
  194. catalystwan/tests/templates/test_chose_model.py +10 -6
  195. catalystwan/tests/templates/test_deserialize_model.py +4 -4
  196. catalystwan/tests/templates/test_find_template_values.py +0 -229
  197. catalystwan/tests/templates/test_serialize_model.py +2 -1
  198. catalystwan/tests/test_cli_template.py +9 -8
  199. catalystwan/tests/test_endpoints.py +11 -42
  200. catalystwan/tests/test_templates.py +19 -16
  201. catalystwan/utils/feature_template/find_template_values.py +9 -22
  202. catalystwan/utils/timezone.py +422 -0
  203. catalystwan/workflows/tenant_migration.py +1 -1
  204. {catalystwan-0.41.2.dev9.dist-info → catalystwan-0.41.3.dist-info}/METADATA +1 -20
  205. catalystwan-0.41.3.dist-info/RECORD +353 -0
  206. catalystwan/api/builders/__init__.py +0 -14
  207. catalystwan/api/builders/feature_profiles/__init__.py +0 -0
  208. catalystwan/api/builders/feature_profiles/application_priority.py +0 -58
  209. catalystwan/api/builders/feature_profiles/builder_factory.py +0 -59
  210. catalystwan/api/builders/feature_profiles/cli.py +0 -76
  211. catalystwan/api/builders/feature_profiles/mixins.py +0 -44
  212. catalystwan/api/builders/feature_profiles/other.py +0 -79
  213. catalystwan/api/builders/feature_profiles/report.py +0 -155
  214. catalystwan/api/builders/feature_profiles/service.py +0 -248
  215. catalystwan/api/builders/feature_profiles/system.py +0 -80
  216. catalystwan/api/builders/feature_profiles/transport.py +0 -256
  217. catalystwan/api/builders/feature_profiles/uc_voice.py +0 -287
  218. catalystwan/api/templates/models/aaa_model.py +0 -387
  219. catalystwan/api/templates/models/vpn_vsmart_interface_model.py +0 -198
  220. catalystwan/api/templates/models/vpn_vsmart_model.py +0 -124
  221. catalystwan/endpoints/configuration/feature_profile/sdwan/application_priority.py +0 -107
  222. catalystwan/endpoints/configuration/feature_profile/sdwan/cli.py +0 -60
  223. catalystwan/endpoints/configuration/feature_profile/sdwan/dns_security.py +0 -83
  224. catalystwan/endpoints/configuration/feature_profile/sdwan/embedded_security.py +0 -88
  225. catalystwan/endpoints/configuration/feature_profile/sdwan/other.py +0 -62
  226. catalystwan/endpoints/configuration/feature_profile/sdwan/service.py +0 -154
  227. catalystwan/endpoints/configuration/feature_profile/sdwan/sig_security.py +0 -88
  228. catalystwan/endpoints/configuration/feature_profile/sdwan/topology.py +0 -93
  229. catalystwan/endpoints/configuration/feature_profile/sdwan/uc_voice.py +0 -77
  230. catalystwan/endpoints/configuration/network_hierarchy.py +0 -47
  231. catalystwan/endpoints/configuration/packages.py +0 -36
  232. catalystwan/endpoints/configuration/policy/abstractions.py +0 -49
  233. catalystwan/endpoints/configuration/policy/definition/aip.py +0 -52
  234. catalystwan/endpoints/configuration/policy/definition/amp.py +0 -52
  235. catalystwan/endpoints/configuration/policy/definition/app_route.py +0 -50
  236. catalystwan/endpoints/configuration/policy/definition/cflowd.py +0 -46
  237. catalystwan/endpoints/configuration/policy/definition/dial_peer.py +0 -57
  238. catalystwan/endpoints/configuration/policy/definition/dns_security.py +0 -50
  239. catalystwan/endpoints/configuration/policy/definition/fxo_port.py +0 -57
  240. catalystwan/endpoints/configuration/policy/definition/fxs_did_port.py +0 -57
  241. catalystwan/endpoints/configuration/policy/definition/fxs_port.py +0 -57
  242. catalystwan/endpoints/configuration/policy/definition/intrusion_prevention.py +0 -52
  243. catalystwan/endpoints/configuration/policy/definition/pri_isdn_port.py +0 -57
  244. catalystwan/endpoints/configuration/policy/definition/route_policy.py +0 -50
  245. catalystwan/endpoints/configuration/policy/definition/srst_phone_profile.py +0 -59
  246. catalystwan/endpoints/configuration/policy/definition/ssl_decryption.py +0 -50
  247. catalystwan/endpoints/configuration/policy/definition/ssl_decryption_utd_profile.py +0 -52
  248. catalystwan/endpoints/configuration/policy/definition/url_filtering.py +0 -50
  249. catalystwan/endpoints/configuration/policy/definition/vpn_qos_map.py +0 -50
  250. catalystwan/endpoints/configuration/policy/list/extended_community.py +0 -52
  251. catalystwan/endpoints/configuration/policy/list/fax_protocol.py +0 -48
  252. catalystwan/endpoints/configuration/policy/list/identity.py +0 -48
  253. catalystwan/endpoints/configuration/policy/list/media_profile.py +0 -52
  254. catalystwan/endpoints/configuration/policy/list/modem_pass_through.py +0 -52
  255. catalystwan/endpoints/configuration/policy/list/scalable_group_tag.py +0 -52
  256. catalystwan/endpoints/configuration/policy/list/supervisory_disconnect.py +0 -52
  257. catalystwan/endpoints/configuration/policy/list/threat_grid_api_key.py +0 -52
  258. catalystwan/endpoints/configuration/policy/list/translation_profile.py +0 -52
  259. catalystwan/endpoints/configuration/policy/list/translation_rules.py +0 -52
  260. catalystwan/endpoints/configuration/policy/list/trunkgroup.py +0 -48
  261. catalystwan/endpoints/configuration/policy/list/umbrella_data.py +0 -52
  262. catalystwan/endpoints/configuration/policy/voice_template.py +0 -39
  263. catalystwan/endpoints/configuration/policy_group.py +0 -30
  264. catalystwan/endpoints/configuration/topology_group.py +0 -51
  265. catalystwan/endpoints/configuration_general_template.py +0 -31
  266. catalystwan/endpoints/configuration_template_master.py +0 -48
  267. catalystwan/integration_tests/base.py +0 -81
  268. catalystwan/integration_tests/feature_profile/sdwan/__init__.py +0 -0
  269. catalystwan/integration_tests/feature_profile/sdwan/policy/__init__.py +0 -0
  270. catalystwan/integration_tests/feature_profile/sdwan/policy/base.py +0 -33
  271. catalystwan/integration_tests/feature_profile/sdwan/policy/test_extended_community.py +0 -33
  272. catalystwan/integration_tests/feature_profile/sdwan/policy/test_security_app_list.py +0 -32
  273. catalystwan/integration_tests/feature_profile/sdwan/test_application_priority.py +0 -433
  274. catalystwan/integration_tests/feature_profile/sdwan/test_cli.py +0 -54
  275. catalystwan/integration_tests/feature_profile/sdwan/test_dns_security.py +0 -106
  276. catalystwan/integration_tests/feature_profile/sdwan/test_other.py +0 -49
  277. catalystwan/integration_tests/feature_profile/sdwan/test_service.py +0 -1078
  278. catalystwan/integration_tests/feature_profile/sdwan/test_sig_security.py +0 -322
  279. catalystwan/integration_tests/feature_profile/sdwan/test_ssl_decryption.py +0 -85
  280. catalystwan/integration_tests/feature_profile/sdwan/test_system.py +0 -368
  281. catalystwan/integration_tests/feature_profile/sdwan/test_tracker.py +0 -127
  282. catalystwan/integration_tests/feature_profile/sdwan/test_transport.py +0 -1698
  283. catalystwan/integration_tests/feature_profile/sdwan/topology/test_topology.py +0 -93
  284. catalystwan/integration_tests/feature_profile/test_parcel.py +0 -54
  285. catalystwan/integration_tests/profile_builder/__init__.py +0 -0
  286. catalystwan/integration_tests/profile_builder/test_pb_service.py +0 -197
  287. catalystwan/integration_tests/profile_builder/test_pb_transport.py +0 -226
  288. catalystwan/integration_tests/profile_builder/test_pb_uc_voice.py +0 -277
  289. catalystwan/integration_tests/test_data/__init__.py +0 -117
  290. catalystwan/integration_tests/test_network_hierarchy.py +0 -82
  291. catalystwan/integration_tests/test_settings.py +0 -30
  292. catalystwan/models/configuration/feature_profile/parcel.py +0 -245
  293. catalystwan/models/configuration/feature_profile/sdwan/acl/__init__.py +0 -13
  294. catalystwan/models/configuration/feature_profile/sdwan/acl/ipv4acl.py +0 -298
  295. catalystwan/models/configuration/feature_profile/sdwan/acl/ipv6acl.py +0 -344
  296. catalystwan/models/configuration/feature_profile/sdwan/application_priority/__init__.py +0 -218
  297. catalystwan/models/configuration/feature_profile/sdwan/application_priority/cloud_probe.py +0 -61
  298. catalystwan/models/configuration/feature_profile/sdwan/application_priority/policy_settings.py +0 -31
  299. catalystwan/models/configuration/feature_profile/sdwan/application_priority/qos_policy.py +0 -102
  300. catalystwan/models/configuration/feature_profile/sdwan/application_priority/traffic_policy.py +0 -1057
  301. catalystwan/models/configuration/feature_profile/sdwan/cli/__init__.py +0 -23
  302. catalystwan/models/configuration/feature_profile/sdwan/cli/config.py +0 -18
  303. catalystwan/models/configuration/feature_profile/sdwan/cli/full_config.py +0 -15
  304. catalystwan/models/configuration/feature_profile/sdwan/dns_security/__init__.py +0 -13
  305. catalystwan/models/configuration/feature_profile/sdwan/dns_security/dns.py +0 -110
  306. catalystwan/models/configuration/feature_profile/sdwan/embedded_security/__init__.py +0 -23
  307. catalystwan/models/configuration/feature_profile/sdwan/embedded_security/ngfirewall.py +0 -493
  308. catalystwan/models/configuration/feature_profile/sdwan/embedded_security/policy.py +0 -171
  309. catalystwan/models/configuration/feature_profile/sdwan/other/__init__.py +0 -25
  310. catalystwan/models/configuration/feature_profile/sdwan/other/cybervision.py +0 -44
  311. catalystwan/models/configuration/feature_profile/sdwan/other/thousandeyes.py +0 -147
  312. catalystwan/models/configuration/feature_profile/sdwan/other/ucse.py +0 -110
  313. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/as_path.py +0 -22
  314. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/extended_community.py +0 -34
  315. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv4_network_object.py +0 -15
  316. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv4_service_object.py +0 -254
  317. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/mirror.py +0 -27
  318. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/network_object_group.py +0 -15
  319. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/object_group.py +0 -15
  320. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/service_object_group.py +0 -21
  321. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/aip.py +0 -64
  322. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/amp.py +0 -79
  323. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/identity.py +0 -30
  324. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/intrusion_prevention.py +0 -58
  325. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/object_group.py +0 -72
  326. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/rule_set.py +0 -137
  327. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/scalable_group_tag.py +0 -26
  328. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption.py +0 -126
  329. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption_profile.py +0 -165
  330. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url_filtering.py +0 -148
  331. catalystwan/models/configuration/feature_profile/sdwan/routing/__init__.py +0 -26
  332. catalystwan/models/configuration/feature_profile/sdwan/routing/bgp.py +0 -609
  333. catalystwan/models/configuration/feature_profile/sdwan/service/__init__.py +0 -91
  334. catalystwan/models/configuration/feature_profile/sdwan/service/dual_router_ha.py +0 -26
  335. catalystwan/models/configuration/feature_profile/sdwan/service/lan/multilink.py +0 -101
  336. catalystwan/models/configuration/feature_profile/sdwan/service/service_chain.py +0 -38
  337. catalystwan/models/configuration/feature_profile/sdwan/sig_security/__init__.py +0 -19
  338. catalystwan/models/configuration/feature_profile/sdwan/sig_security/sig_security.py +0 -379
  339. catalystwan/models/configuration/feature_profile/sdwan/system/__init__.py +0 -59
  340. catalystwan/models/configuration/feature_profile/sdwan/system/banner.py +0 -30
  341. catalystwan/models/configuration/feature_profile/sdwan/system/basic.py +0 -290
  342. catalystwan/models/configuration/feature_profile/sdwan/system/bfd.py +0 -69
  343. catalystwan/models/configuration/feature_profile/sdwan/system/device_access.py +0 -157
  344. catalystwan/models/configuration/feature_profile/sdwan/system/device_access_ipv6.py +0 -157
  345. catalystwan/models/configuration/feature_profile/sdwan/system/global_parcel.py +0 -163
  346. catalystwan/models/configuration/feature_profile/sdwan/system/logging_parcel.py +0 -162
  347. catalystwan/models/configuration/feature_profile/sdwan/system/mrf.py +0 -75
  348. catalystwan/models/configuration/feature_profile/sdwan/system/ntp.py +0 -103
  349. catalystwan/models/configuration/feature_profile/sdwan/system/omp.py +0 -120
  350. catalystwan/models/configuration/feature_profile/sdwan/system/security.py +0 -179
  351. catalystwan/models/configuration/feature_profile/sdwan/system/snmp.py +0 -173
  352. catalystwan/models/configuration/feature_profile/sdwan/topology/__init__.py +0 -29
  353. catalystwan/models/configuration/feature_profile/sdwan/topology/custom_control.py +0 -425
  354. catalystwan/models/configuration/feature_profile/sdwan/topology/hubspoke.py +0 -60
  355. catalystwan/models/configuration/feature_profile/sdwan/topology/mesh.py +0 -23
  356. catalystwan/models/configuration/feature_profile/sdwan/trackers/__init__.py +0 -36
  357. catalystwan/models/configuration/feature_profile/sdwan/trackers/tracker.py +0 -96
  358. catalystwan/models/configuration/feature_profile/sdwan/trackers/tracker_group.py +0 -63
  359. catalystwan/models/configuration/feature_profile/sdwan/transport/__init__.py +0 -93
  360. catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_profile.py +0 -71
  361. catalystwan/models/configuration/feature_profile/sdwan/transport/gps.py +0 -37
  362. catalystwan/models/configuration/feature_profile/sdwan/transport/management/ethernet.py +0 -121
  363. catalystwan/models/configuration/feature_profile/sdwan/transport/t1e1controller.py +0 -124
  364. catalystwan/models/configuration/feature_profile/sdwan/transport/vpn.py +0 -285
  365. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/cellular.py +0 -173
  366. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ethernet.py +0 -389
  367. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/gre.py +0 -46
  368. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ipsec.py +0 -137
  369. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/multilink.py +0 -219
  370. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/protocol_over.py +0 -405
  371. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/t1e1serial.py +0 -195
  372. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/__init__.py +0 -62
  373. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/analog_interface.py +0 -436
  374. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/call_routing.py +0 -179
  375. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/digital_interface.py +0 -380
  376. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/dsp_farm.py +0 -193
  377. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/media_profile.py +0 -17
  378. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/server_group.py +0 -51
  379. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/srst.py +0 -86
  380. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/supervisory_disconnect.py +0 -69
  381. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_profile.py +0 -42
  382. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_rule.py +0 -31
  383. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/trunk_group.py +0 -26
  384. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_global.py +0 -57
  385. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_tenant.py +0 -40
  386. catalystwan/models/configuration/network_hierarchy/__init__.py +0 -24
  387. catalystwan/models/configuration/network_hierarchy/cflowd.py +0 -128
  388. catalystwan/models/configuration/network_hierarchy/node.py +0 -88
  389. catalystwan/models/configuration/network_hierarchy/security_logging.py +0 -91
  390. catalystwan/models/configuration/packages.py +0 -57
  391. catalystwan/models/configuration/policy_group.py +0 -74
  392. catalystwan/models/configuration/topology_group.py +0 -52
  393. catalystwan/models/policy/definition/aip.py +0 -60
  394. catalystwan/models/policy/definition/amp.py +0 -65
  395. catalystwan/models/policy/definition/app_route.py +0 -246
  396. catalystwan/models/policy/definition/cflowd.py +0 -95
  397. catalystwan/models/policy/definition/dial_peer.py +0 -60
  398. catalystwan/models/policy/definition/dns_security.py +0 -130
  399. catalystwan/models/policy/definition/fxo_port.py +0 -63
  400. catalystwan/models/policy/definition/fxs_did_port.py +0 -58
  401. catalystwan/models/policy/definition/fxs_port.py +0 -56
  402. catalystwan/models/policy/definition/intrusion_prevention.py +0 -55
  403. catalystwan/models/policy/definition/pri_isdn_port.py +0 -48
  404. catalystwan/models/policy/definition/route_policy.py +0 -187
  405. catalystwan/models/policy/definition/srst_phone_profile.py +0 -37
  406. catalystwan/models/policy/definition/ssl_decryption.py +0 -209
  407. catalystwan/models/policy/definition/ssl_decryption_utd_profile.py +0 -88
  408. catalystwan/models/policy/definition/url_filtering.py +0 -70
  409. catalystwan/models/policy/definition/vpn_qos_map.py +0 -46
  410. catalystwan/models/policy/list/app.py +0 -44
  411. catalystwan/models/policy/list/app_probe.py +0 -42
  412. catalystwan/models/policy/list/as_path.py +0 -30
  413. catalystwan/models/policy/list/class_map.py +0 -30
  414. catalystwan/models/policy/list/color.py +0 -28
  415. catalystwan/models/policy/list/communities.py +0 -83
  416. catalystwan/models/policy/list/data_ipv6_prefix.py +0 -30
  417. catalystwan/models/policy/list/data_prefix.py +0 -30
  418. catalystwan/models/policy/list/fax_protocol.py +0 -45
  419. catalystwan/models/policy/list/fqdn.py +0 -24
  420. catalystwan/models/policy/list/geo_location.py +0 -33
  421. catalystwan/models/policy/list/identity.py +0 -29
  422. catalystwan/models/policy/list/ips_signature.py +0 -27
  423. catalystwan/models/policy/list/ipv6_prefix.py +0 -33
  424. catalystwan/models/policy/list/local_app.py +0 -45
  425. catalystwan/models/policy/list/local_domain.py +0 -36
  426. catalystwan/models/policy/list/media_profile.py +0 -44
  427. catalystwan/models/policy/list/mirror.py +0 -27
  428. catalystwan/models/policy/list/modem_pass_through.py +0 -27
  429. catalystwan/models/policy/list/policer.py +0 -39
  430. catalystwan/models/policy/list/port.py +0 -33
  431. catalystwan/models/policy/list/preferred_color_group.py +0 -82
  432. catalystwan/models/policy/list/prefix.py +0 -33
  433. catalystwan/models/policy/list/protocol_name.py +0 -26
  434. catalystwan/models/policy/list/region.py +0 -45
  435. catalystwan/models/policy/list/scalable_group_tag.py +0 -30
  436. catalystwan/models/policy/list/site.py +0 -34
  437. catalystwan/models/policy/list/sla.py +0 -77
  438. catalystwan/models/policy/list/supervisory_disconnect.py +0 -62
  439. catalystwan/models/policy/list/threat_grid_api_key.py +0 -32
  440. catalystwan/models/policy/list/tloc.py +0 -32
  441. catalystwan/models/policy/list/translation_profile.py +0 -32
  442. catalystwan/models/policy/list/translation_rules.py +0 -29
  443. catalystwan/models/policy/list/trunkgroup.py +0 -56
  444. catalystwan/models/policy/list/umbrella_data.py +0 -30
  445. catalystwan/models/policy/list/url.py +0 -39
  446. catalystwan/models/policy/list/vpn.py +0 -40
  447. catalystwan/models/policy/list/zone.py +0 -46
  448. catalystwan/models/policy/voice.py +0 -77
  449. catalystwan/models/settings.py +0 -41
  450. catalystwan/models/templates.py +0 -79
  451. catalystwan/tests/builders/test_report.py +0 -60
  452. catalystwan/tests/builders/uc_voice.py +0 -85
  453. catalystwan/tests/models/__init__.py +0 -0
  454. catalystwan/tests/models/configuration/feature_profile/sdwan/policy_object/security/test_url.py +0 -73
  455. catalystwan/tests/models/test_digital_interface.py +0 -56
  456. catalystwan/tests/templates/definitions/aaa_basic.json +0 -96
  457. catalystwan/tests/templates/definitions/aaa_complex.json +0 -464
  458. catalystwan/tests/templates/definitions/cisco_aaa_complex.json +0 -361
  459. catalystwan/tests/templates/definitions/cisco_logging_complex.json +0 -268
  460. catalystwan/tests/templates/definitions/cisco_ntp_complex.json +0 -143
  461. catalystwan/tests/templates/definitions/cisco_omp_complex.json +0 -175
  462. catalystwan/tests/templates/definitions/cisco_ospf_complex.json +0 -302
  463. catalystwan/tests/templates/definitions/cisco_sig.json +0 -405
  464. catalystwan/tests/templates/definitions/cisco_snmp_complex.json +0 -258
  465. catalystwan/tests/templates/definitions/cisco_system_complex.json +0 -502
  466. catalystwan/tests/templates/definitions/cisco_vpn_interface_complex.json +0 -821
  467. catalystwan/tests/templates/definitions/omp_vsmart_1.json +0 -26
  468. catalystwan/tests/templates/definitions/omp_vsmart_complex.json +0 -73
  469. catalystwan/tests/templates/definitions/security_vsmart_complex.json +0 -24
  470. catalystwan/tests/templates/definitions/system_vsmart_complex.json +0 -193
  471. catalystwan/tests/templates/definitions/vpn_vsmart_basic.json +0 -17
  472. catalystwan/tests/templates/definitions/vpn_vsmart_complex.json +0 -179
  473. catalystwan/tests/templates/definitions/vpn_vsmart_interface_basic.json +0 -42
  474. catalystwan/tests/templates/definitions/vpn_vsmart_interface_complex.json +0 -208
  475. catalystwan/tests/templates/models/aaa.py +0 -106
  476. catalystwan/tests/templates/models/cisco_logging.py +0 -65
  477. catalystwan/tests/templates/models/cisco_ntp.py +0 -17
  478. catalystwan/tests/templates/models/cisco_omp.py +0 -37
  479. catalystwan/tests/templates/models/cisco_ospf.py +0 -60
  480. catalystwan/tests/templates/models/cisco_secure_internet_gateway.py +0 -95
  481. catalystwan/tests/templates/models/cisco_snmp.py +0 -40
  482. catalystwan/tests/templates/models/cisco_vpn_interface.py +0 -200
  483. catalystwan/tests/templates/models/security_vsmart.py +0 -11
  484. catalystwan/tests/templates/models/system_vsmart.py +0 -37
  485. catalystwan/tests/templates/models/vpn_vsmart.py +0 -32
  486. catalystwan/tests/templates/models/vpn_vsmart_interface.py +0 -54
  487. catalystwan/tests/templates/schemas/aaa.json +0 -1096
  488. catalystwan/tests/templates/schemas/cisco_logging.json +0 -577
  489. catalystwan/tests/templates/schemas/cisco_ntp.json +0 -265
  490. catalystwan/tests/templates/schemas/cisco_omp.json +0 -479
  491. catalystwan/tests/templates/schemas/cisco_ospf.json +0 -908
  492. catalystwan/tests/templates/schemas/cisco_secure_internet_gateway.json +0 -1520
  493. catalystwan/tests/templates/schemas/cisco_snmp.json +0 -561
  494. catalystwan/tests/templates/schemas/cisco_vpn_interface.json +0 -3348
  495. catalystwan/tests/templates/schemas/security-vsmart.json +0 -58
  496. catalystwan/tests/templates/schemas/system-vsmart.json +0 -2585
  497. catalystwan/tests/templates/schemas/vpn-vsmart-interface.json +0 -859
  498. catalystwan/tests/templates/schemas/vpn-vsmart.json +0 -445
  499. catalystwan/tests/templates/test_find_template_values_2.py +0 -193
  500. catalystwan/tests/test_feature_profile_api.py +0 -282
  501. catalystwan/tests/test_models_common.py +0 -53
  502. catalystwan/utils/model.py +0 -48
  503. catalystwan/utils/persona.py +0 -5
  504. catalystwan/utils/type_check.py +0 -22
  505. catalystwan/workflows/backup_restore_device_templates.py +0 -467
  506. catalystwan-0.41.2.dev9.dist-info/RECORD +0 -641
  507. /catalystwan/tests/templates/definitions/{cisco_banner.json → banner_1.json} +0 -0
  508. {catalystwan-0.41.2.dev9.dist-info → catalystwan-0.41.3.dist-info}/LICENSE +0 -0
  509. {catalystwan-0.41.2.dev9.dist-info → catalystwan-0.41.3.dist-info}/WHEEL +0 -0
@@ -7,35 +7,25 @@ from uuid import UUID
7
7
  from pydantic import BaseModel, ConfigDict, Field
8
8
  from typing_extensions import Annotated
9
9
 
10
- from catalystwan.models.common import PolicyModeType
11
10
  from catalystwan.models.misc.application_protocols import ApplicationProtocol
12
11
  from catalystwan.models.policy.policy_definition import (
13
- AdvancedInspectionProfileAction,
14
12
  AppListEntry,
15
- AppListFlatEntry,
16
- ConnectionEventsAction,
17
13
  DefinitionWithSequencesCommonBase,
18
14
  DestinationDataPrefixListEntry,
19
15
  DestinationFQDNEntry,
20
- DestinationFQDNListEntry,
21
16
  DestinationGeoLocationEntry,
22
17
  DestinationGeoLocationListEntry,
23
18
  DestinationIPEntry,
24
19
  DestinationPortEntry,
25
20
  DestinationPortListEntry,
26
- DestinationScalableGroupTagListEntry,
27
- DestinationSecurityGroupEntry,
28
21
  LogAction,
29
22
  Match,
30
- PolicyActionBase,
23
+ PolicyActionType,
31
24
  PolicyDefinitionBase,
32
- PolicyDefinitionGetResponse,
33
- PolicyDefinitionId,
34
25
  PolicyDefinitionSequenceBase,
35
26
  ProtocolEntry,
36
27
  ProtocolNameEntry,
37
28
  ProtocolNameListEntry,
38
- ReferenceWithId,
39
29
  RuleSetListEntry,
40
30
  SourceDataPrefixListEntry,
41
31
  SourceFQDNEntry,
@@ -45,24 +35,18 @@ from catalystwan.models.policy.policy_definition import (
45
35
  SourceIPEntry,
46
36
  SourcePortEntry,
47
37
  SourcePortListEntry,
48
- SourceScalableGroupTagListEntry,
49
- SourceSecurityGroupEntry,
50
38
  )
51
39
 
52
40
  ZoneBasedFWPolicySequenceEntry = Annotated[
53
41
  Union[
54
42
  AppListEntry,
55
- AppListFlatEntry,
56
43
  DestinationDataPrefixListEntry,
57
44
  DestinationFQDNEntry,
58
- DestinationFQDNListEntry,
59
45
  DestinationGeoLocationEntry,
60
46
  DestinationGeoLocationListEntry,
61
47
  DestinationIPEntry,
62
48
  DestinationPortEntry,
63
49
  DestinationPortListEntry,
64
- DestinationScalableGroupTagListEntry,
65
- DestinationSecurityGroupEntry,
66
50
  ProtocolEntry,
67
51
  ProtocolNameEntry,
68
52
  ProtocolNameListEntry,
@@ -75,14 +59,10 @@ ZoneBasedFWPolicySequenceEntry = Annotated[
75
59
  SourceIPEntry,
76
60
  SourcePortEntry,
77
61
  SourcePortListEntry,
78
- SourceScalableGroupTagListEntry,
79
- SourceSecurityGroupEntry,
80
62
  ],
81
63
  Field(discriminator="field"),
82
64
  ]
83
65
 
84
- ZonePair = Literal["self", "default"]
85
-
86
66
  ZoneBasedFWPolicySequenceEntryWithRuleSets = Annotated[
87
67
  Union[
88
68
  AppListEntry,
@@ -91,22 +71,6 @@ ZoneBasedFWPolicySequenceEntryWithRuleSets = Annotated[
91
71
  Field(discriminator="field"),
92
72
  ]
93
73
 
94
- ZoneBasedFWPolicyActions = Annotated[
95
- Union[
96
- AdvancedInspectionProfileAction,
97
- ConnectionEventsAction,
98
- LogAction,
99
- ],
100
- Field(discriminator="type"),
101
- ]
102
-
103
- ZoneBasedFirewallDefaultActionType = Literal["drop", "pass"]
104
- ZoneBasedFirewallBaseActionType = Literal["drop", "pass", "inspect"]
105
-
106
-
107
- class ZoneBasedFirewallDefaultAction(PolicyActionBase):
108
- type: ZoneBasedFirewallDefaultActionType
109
-
110
74
 
111
75
  class ZoneBasedFWPolicyMatches(Match):
112
76
  entries: List[ZoneBasedFWPolicySequenceEntry] = []
@@ -118,13 +82,13 @@ class ZoneBasedFWPolicySequenceWithRuleSets(PolicyDefinitionSequenceBase):
118
82
  )
119
83
  match: ZoneBasedFWPolicyMatches
120
84
  ruleset: bool = True
121
- actions: List[ZoneBasedFWPolicyActions] = []
85
+ actions: List[LogAction] = []
122
86
  model_config = ConfigDict(populate_by_name=True)
123
87
 
124
88
  def match_rule_set_lists(self, rule_set_ids: Set[UUID]) -> None:
125
- self._insert_match(RuleSetListEntry(ref=list(rule_set_ids)))
89
+ self._insert_match(RuleSetListEntry.from_rule_set_ids(rule_set_ids))
126
90
 
127
- def match_app_list(self, app_list_id: List[UUID]) -> None:
91
+ def match_app_list(self, app_list_id: UUID) -> None:
128
92
  if self.base_action != "inspect":
129
93
  raise ValueError("Action must be inspect when Application/Application Family List is selected.")
130
94
  self._insert_match(AppListEntry(ref=app_list_id))
@@ -135,25 +99,16 @@ class ZoneBasedFWPolicySequence(PolicyDefinitionSequenceBase):
135
99
  default="zoneBasedFW", serialization_alias="sequenceType", validation_alias="sequenceType"
136
100
  )
137
101
  match: ZoneBasedFWPolicyMatches
138
- actions: List[Union[LogAction, AdvancedInspectionProfileAction, ConnectionEventsAction]] = []
102
+ actions: List[LogAction] = []
139
103
  model_config = ConfigDict(populate_by_name=True)
140
104
 
141
- def set_log_action(self):
142
- self.actions.append(LogAction())
143
-
144
- def set_advanced_inspection_profile_action(self, profile_id: UUID):
145
- self.actions.append(AdvancedInspectionProfileAction(parameter=ReferenceWithId(ref=profile_id)))
146
-
147
- def set_conection_events_action(self):
148
- self.actions.append(ConnectionEventsAction())
149
-
150
- def match_app_list(self, app_list_id: List[UUID]) -> None:
105
+ def match_app_list(self, app_list_id: UUID) -> None:
151
106
  if self.base_action != "inspect":
152
107
  raise ValueError("Action must be inspect when Application/Application Family List is selected.")
153
108
  self._insert_match(AppListEntry(ref=app_list_id))
154
109
 
155
- def match_destination_data_prefix_list(self, data_prefix_lists: List[UUID]) -> None:
156
- self._insert_match(DestinationDataPrefixListEntry(ref=data_prefix_lists))
110
+ def match_destination_data_prefix_list(self, data_prefix_list_id: UUID) -> None:
111
+ self._insert_match(DestinationDataPrefixListEntry(ref=data_prefix_list_id))
157
112
 
158
113
  def match_destination_fqdn(self, fqdn: str) -> None:
159
114
  self._insert_match(DestinationFQDNEntry(value=fqdn))
@@ -161,7 +116,7 @@ class ZoneBasedFWPolicySequence(PolicyDefinitionSequenceBase):
161
116
  def match_destination_geo_location(self, geo_location: str) -> None:
162
117
  self._insert_match(DestinationGeoLocationEntry(value=geo_location))
163
118
 
164
- def match_destination_geo_location_list(self, geo_location_list_id: List[UUID]) -> None:
119
+ def match_destination_geo_location_list(self, geo_location_list_id: UUID) -> None:
165
120
  self._insert_match(DestinationGeoLocationListEntry(ref=geo_location_list_id))
166
121
 
167
122
  def match_destination_ip(self, networks: List[IPv4Network]) -> None:
@@ -170,11 +125,8 @@ class ZoneBasedFWPolicySequence(PolicyDefinitionSequenceBase):
170
125
  def match_destination_ports(self, ports: Set[int] = set(), port_ranges: List[Tuple[int, int]] = []) -> None:
171
126
  self._insert_match(DestinationPortEntry.from_port_set_and_ranges(ports, port_ranges))
172
127
 
173
- def match_destination_port_list(self, data_prefix_lists: List[UUID]) -> None:
174
- self._insert_match(DestinationPortListEntry(ref=data_prefix_lists))
175
-
176
- def match_destination_security_group_list(self, security_group_list: List[UUID]) -> None:
177
- self._insert_match(DestinationSecurityGroupEntry(ref=security_group_list))
128
+ def match_destination_port_list(self, port_list_id: UUID) -> None:
129
+ self._insert_match(DestinationPortListEntry(ref=port_list_id))
178
130
 
179
131
  def match_protocols(self, protocols: Set[int]) -> None:
180
132
  self._insert_match(ProtocolEntry.from_protocol_set(protocols))
@@ -184,17 +136,17 @@ class ZoneBasedFWPolicySequence(PolicyDefinitionSequenceBase):
184
136
  for name in names:
185
137
  app_protocol = protocol_map.get(name, None)
186
138
  if app_protocol is None:
187
- raise ValueError(f"{name} not found in protocol map keys: {protocol_map.keys()}") # noqa: E713
139
+ raise ValueError(f"{name} not found in protocol map keys: {protocol_map.keys()}")
188
140
  app_protocols.append(app_protocol)
189
141
  self._insert_match(ProtocolNameEntry.from_application_protocols(app_protocols))
190
142
  self._insert_match(DestinationPortEntry.from_application_protocols(app_protocols), False)
191
143
  self._insert_match(ProtocolEntry.from_application_protocols(app_protocols), False)
192
144
 
193
- def match_protocol_name_list(self, protocol_name_list_id: List[UUID]) -> None:
145
+ def match_protocol_name_list(self, protocol_name_list_id: UUID) -> None:
194
146
  self._insert_match(ProtocolNameListEntry(ref=protocol_name_list_id))
195
147
 
196
- def match_source_data_prefix_list(self, data_prefix_lists: List[UUID]) -> None:
197
- self._insert_match(SourceDataPrefixListEntry(ref=data_prefix_lists))
148
+ def match_source_data_prefix_list(self, data_prefix_list_id: UUID) -> None:
149
+ self._insert_match(SourceDataPrefixListEntry(ref=data_prefix_list_id))
198
150
 
199
151
  def match_source_fqdn(self, fqdn: str) -> None:
200
152
  self._insert_match(SourceFQDNEntry(value=fqdn))
@@ -205,7 +157,7 @@ class ZoneBasedFWPolicySequence(PolicyDefinitionSequenceBase):
205
157
  def match_source_geo_location(self, geo_location: str) -> None:
206
158
  self._insert_match(SourceGeoLocationEntry(value=geo_location))
207
159
 
208
- def match_source_geo_location_list(self, geo_location_list_id: List[UUID]) -> None:
160
+ def match_source_geo_location_list(self, geo_location_list_id: UUID) -> None:
209
161
  self._insert_match(SourceGeoLocationListEntry(ref=geo_location_list_id))
210
162
 
211
163
  def match_source_ip(self, networks: List[IPv4Network]) -> None:
@@ -214,41 +166,36 @@ class ZoneBasedFWPolicySequence(PolicyDefinitionSequenceBase):
214
166
  def match_source_port(self, ports: Set[int] = set(), port_ranges: List[Tuple[int, int]] = []) -> None:
215
167
  self._insert_match(SourcePortEntry.from_port_set_and_ranges(ports, port_ranges))
216
168
 
217
- def match_source_port_list(self, port_list_id: List[UUID]) -> None:
169
+ def match_source_port_list(self, port_list_id: UUID) -> None:
218
170
  self._insert_match(SourcePortListEntry(ref=port_list_id))
219
171
 
220
- def match_source_security_group_list(self, security_group_list: List[UUID]) -> None:
221
- self._insert_match(SourceSecurityGroupEntry(ref=security_group_list))
222
-
223
172
 
224
173
  class ZoneBasedFWPolicyEntry(BaseModel):
225
- source_zone_id: Union[UUID, ZonePair] = Field(
174
+ source_zone_id: Union[UUID, Literal["self"]] = Field(
226
175
  default="self", serialization_alias="sourceZone", validation_alias="sourceZone"
227
176
  )
228
- destination_zone_id: Union[UUID, ZonePair] = Field(
229
- serialization_alias="destinationZone", validation_alias="destinationZone"
230
- )
177
+ destination_zone_id: UUID = Field(serialization_alias="destinationZone", validation_alias="destinationZone")
178
+ model_config = ConfigDict(populate_by_name=True)
179
+
180
+
181
+ class ZoneBasedFWPolicyHeader(PolicyDefinitionBase):
182
+ type: Literal["zoneBasedFW"] = "zoneBasedFW"
183
+ mode: str = Field(default="security")
231
184
  model_config = ConfigDict(populate_by_name=True)
232
185
 
233
186
 
234
187
  class ZoneBasedFWPolicyDefinition(DefinitionWithSequencesCommonBase):
235
- default_action: ZoneBasedFirewallDefaultAction = Field(
236
- default=ZoneBasedFirewallDefaultAction(type="drop"),
237
- serialization_alias="defaultAction",
238
- validation_alias="defaultAction",
239
- )
240
188
  sequences: List[Union[ZoneBasedFWPolicySequence, ZoneBasedFWPolicySequenceWithRuleSets]] = []
241
189
  entries: List[ZoneBasedFWPolicyEntry] = []
242
190
 
243
191
 
244
- class ZoneBasedFWPolicy(PolicyDefinitionBase):
245
- model_config = ConfigDict(populate_by_name=True)
192
+ class ZoneBasedFWPolicy(ZoneBasedFWPolicyHeader):
246
193
  type: Literal["zoneBasedFW"] = "zoneBasedFW"
247
- mode: PolicyModeType = "security"
194
+ mode: Literal["security"] = "security"
248
195
  definition: ZoneBasedFWPolicyDefinition = ZoneBasedFWPolicyDefinition()
249
196
 
250
197
  def add_ipv4_rule(
251
- self, name: str, base_action: ZoneBasedFirewallBaseActionType = "drop", log: bool = False
198
+ self, name: str, base_action: PolicyActionType = "drop", log: bool = False
252
199
  ) -> ZoneBasedFWPolicySequence:
253
200
  """Adds new IPv4 Rule to Zone Based Firewall Policy
254
201
 
@@ -272,7 +219,7 @@ class ZoneBasedFWPolicy(PolicyDefinitionBase):
272
219
  return sequence
273
220
 
274
221
  def add_ipv4_rule_sets(
275
- self, name: str, base_action: ZoneBasedFirewallBaseActionType = "drop", log: bool = False
222
+ self, name: str, base_action: PolicyActionType = "drop", log: bool = False
276
223
  ) -> ZoneBasedFWPolicySequenceWithRuleSets:
277
224
  sequence = ZoneBasedFWPolicySequenceWithRuleSets(
278
225
  sequence_name=name,
@@ -285,17 +232,9 @@ class ZoneBasedFWPolicy(PolicyDefinitionBase):
285
232
  self.definition.add(sequence)
286
233
  return sequence
287
234
 
288
- def add_zone_pair(self, source_zone: Union[UUID, ZonePair], destination_zone: Union[UUID, ZonePair]) -> None:
235
+ def add_zone_pair(self, source_zone_id: UUID, destination_zone_id: UUID) -> None:
289
236
  entry = ZoneBasedFWPolicyEntry(
290
- source_zone_id=source_zone,
291
- destination_zone_id=destination_zone,
237
+ source_zone_id=source_zone_id,
238
+ destination_zone_id=destination_zone_id,
292
239
  )
293
240
  self.definition.entries.append(entry)
294
-
295
-
296
- class ZoneBasedFWPolicyEditPayload(ZoneBasedFWPolicy, PolicyDefinitionId):
297
- pass
298
-
299
-
300
- class ZoneBasedFWPolicyGetResponse(ZoneBasedFWPolicy, PolicyDefinitionGetResponse):
301
- pass
@@ -0,0 +1,330 @@
1
+ # Copyright 2023 Cisco Systems, Inc. and its affiliates
2
+
3
+ from ipaddress import IPv4Address, IPv4Network, IPv6Network
4
+ from typing import Any, List, Literal, Optional, Set, Tuple
5
+ from uuid import UUID
6
+
7
+ from pydantic import BaseModel, Field
8
+
9
+ from catalystwan.models.common import InterfaceType, TLOCColor, WellKnownBGPCommunities
10
+ from catalystwan.models.policy.lists_entries import (
11
+ AppListEntry,
12
+ AppProbeClassListEntry,
13
+ ASPathListEntry,
14
+ ClassMapListEntry,
15
+ ColorGroupPreference,
16
+ ColorListEntry,
17
+ CommunityListEntry,
18
+ DataIPv6PrefixListEntry,
19
+ DataPrefixListEntry,
20
+ EncapType,
21
+ FQDNListEntry,
22
+ GeoLocationListEntry,
23
+ IPSSignatureListEntry,
24
+ IPv6PrefixListEntry,
25
+ LocalAppListEntry,
26
+ LocalDomainListEntry,
27
+ MirrorListEntry,
28
+ PathPreference,
29
+ PolicerExceedAction,
30
+ PolicerListEntry,
31
+ PortListEntry,
32
+ PreferredColorGroupListEntry,
33
+ PrefixListEntry,
34
+ ProtocolNameListEntry,
35
+ RegionListEntry,
36
+ SiteListEntry,
37
+ SLAClassListEntry,
38
+ TLOCListEntry,
39
+ URLListEntry,
40
+ VPNListEntry,
41
+ ZoneListEntry,
42
+ )
43
+
44
+
45
+ class PolicyListBase(BaseModel):
46
+ name: str = Field(
47
+ pattern="^[a-zA-Z0-9_-]{1,32}$",
48
+ description="Can include only alpha-numeric characters, hyphen '-' or underscore '_'; maximum 32 characters",
49
+ )
50
+ description: Optional[str] = "Desc Not Required"
51
+ entries: List[Any]
52
+
53
+ def _add_entry(self, entry: Any, single: bool = False) -> None:
54
+ if self.entries and single:
55
+ self.entries[0] = entry
56
+ del self.entries[1:]
57
+ else:
58
+ self.entries.append(entry)
59
+
60
+
61
+ class DataPrefixList(PolicyListBase):
62
+ type: Literal["dataPrefix"] = "dataPrefix"
63
+ entries: List[DataPrefixListEntry] = []
64
+
65
+ def add_prefix(self, ip_prefix: IPv4Network) -> None:
66
+ self._add_entry(DataPrefixListEntry(ip_prefix=ip_prefix))
67
+
68
+
69
+ class SiteList(PolicyListBase):
70
+ type: Literal["site"] = "site"
71
+ entries: List[SiteListEntry] = []
72
+
73
+ def add_sites(self, sites: Set[int]):
74
+ for site in sites:
75
+ self._add_entry(SiteListEntry(site_id=str(site)))
76
+
77
+ def add_site_range(self, site_range: Tuple[int, int]):
78
+ entry = SiteListEntry(site_id=f"{site_range[0]}-{site_range[1]}")
79
+ self._add_entry(entry)
80
+
81
+
82
+ class VPNList(PolicyListBase):
83
+ type: Literal["vpn"] = "vpn"
84
+ entries: List[VPNListEntry] = []
85
+
86
+ def add_vpns(self, vpns: Set[int]):
87
+ for vpn in vpns:
88
+ self._add_entry(VPNListEntry(vpn=str(vpn)))
89
+
90
+ def add_vpn_range(self, vpn_range: Tuple[int, int]):
91
+ entry = VPNListEntry(vpn=f"{vpn_range[0]}-{vpn_range[1]}")
92
+ self._add_entry(entry)
93
+
94
+
95
+ class ZoneList(PolicyListBase):
96
+ type: Literal["zone"] = "zone"
97
+ entries: List[ZoneListEntry] = []
98
+
99
+ def assign_vpns(self, vpns: Set[int]) -> None:
100
+ self.entries = [ZoneListEntry(vpn=str(vpn)) for vpn in vpns]
101
+
102
+ def assign_interfaces(self, ifs: Set[InterfaceType]) -> None:
103
+ self.entries = [ZoneListEntry(interface=interface) for interface in ifs]
104
+
105
+
106
+ class FQDNList(PolicyListBase):
107
+ type: Literal["fqdn"] = "fqdn"
108
+ entries: List[FQDNListEntry] = []
109
+
110
+
111
+ class GeoLocationList(PolicyListBase):
112
+ type: Literal["geoLocation"] = "geoLocation"
113
+ entries: List[GeoLocationListEntry] = []
114
+
115
+
116
+ class PortList(PolicyListBase):
117
+ type: Literal["port"] = "port"
118
+ entries: List[PortListEntry] = []
119
+
120
+
121
+ class ProtocolNameList(PolicyListBase):
122
+ type: Literal["protocolName"] = "protocolName"
123
+ entries: List[ProtocolNameListEntry] = []
124
+
125
+
126
+ class LocalAppList(PolicyListBase):
127
+ type: Literal["localApp"] = "localApp"
128
+ entries: List[LocalAppListEntry] = []
129
+
130
+
131
+ class AppList(PolicyListBase):
132
+ type: Literal["app"] = "app"
133
+ entries: List[AppListEntry] = []
134
+
135
+ def add_app(self, app: str) -> None:
136
+ self._add_entry(AppListEntry(app=app))
137
+
138
+ def add_app_family(self, app_family: str) -> None:
139
+ self._add_entry(AppListEntry(app_family=app_family))
140
+
141
+
142
+ class ColorList(PolicyListBase):
143
+ type: Literal["color"] = "color"
144
+ entries: List[ColorListEntry] = []
145
+
146
+ def add_color(self, color: TLOCColor) -> None:
147
+ self._add_entry(ColorListEntry(color=color))
148
+
149
+
150
+ class DataIPv6PrefixList(PolicyListBase):
151
+ type: Literal["dataIpv6Prefix"] = "dataIpv6Prefix"
152
+ entries: List[DataIPv6PrefixListEntry] = []
153
+
154
+ def add_prefix(self, ipv6_prefix: IPv6Network) -> None:
155
+ self._add_entry(DataIPv6PrefixListEntry(ipv6_prefix=ipv6_prefix))
156
+
157
+
158
+ class LocalDomainList(PolicyListBase):
159
+ type: Literal["localDomain"] = "localDomain"
160
+ entries: List[LocalDomainListEntry] = []
161
+
162
+
163
+ class IPSSignatureList(PolicyListBase):
164
+ type: Literal["ipsSignature"] = "ipsSignature"
165
+ entries: List[IPSSignatureListEntry] = []
166
+
167
+
168
+ class URLAllowList(PolicyListBase):
169
+ type: Literal["urlWhiteList"] = "urlWhiteList"
170
+ entries: List[URLListEntry] = []
171
+
172
+
173
+ class URLBlockList(PolicyListBase):
174
+ type: Literal["urlBlackList"] = "urlBlackList"
175
+ entries: List[URLListEntry] = []
176
+
177
+
178
+ class _CommunityListBase(PolicyListBase):
179
+ entries: List[CommunityListEntry] = []
180
+
181
+ def add_well_known_community(self, community: WellKnownBGPCommunities) -> None:
182
+ self._add_entry(CommunityListEntry(community=community))
183
+
184
+ def add_community(self, as_number: int, community_number: int) -> None:
185
+ self._add_entry(CommunityListEntry(community=f"{as_number}:{community_number}"))
186
+
187
+
188
+ class CommunityList(_CommunityListBase):
189
+ type: Literal["community"] = "community"
190
+
191
+
192
+ class ExpandedCommunityList(_CommunityListBase):
193
+ type: Literal["expandedCommunity"] = "expandedCommunity"
194
+
195
+
196
+ class PolicerList(PolicyListBase):
197
+ type: Literal["policer"] = "policer"
198
+ entries: List[PolicerListEntry] = []
199
+
200
+ def police(self, burst: int, rate: int, exceed: PolicerExceedAction = "drop") -> None:
201
+ # Policer list must have only single entry!
202
+ entry = PolicerListEntry(burst=str(burst), exceed=exceed, rate=str(rate))
203
+ self._add_entry(entry, single=True)
204
+
205
+
206
+ class ASPathList(PolicyListBase):
207
+ type: Literal["asPath"] = "asPath"
208
+ entries: List[ASPathListEntry] = []
209
+
210
+
211
+ class ClassMapList(PolicyListBase):
212
+ type: Literal["class"] = "class"
213
+ entries: List[ClassMapListEntry] = []
214
+
215
+ def assign_queue(self, queue: int) -> None:
216
+ # Class map list must have only one entry!
217
+ entry = ClassMapListEntry(queue=str(queue))
218
+ self._add_entry(entry, single=True)
219
+
220
+
221
+ class MirrorList(PolicyListBase):
222
+ type: Literal["mirror"] = "mirror"
223
+ entries: List[MirrorListEntry] = []
224
+
225
+
226
+ class AppProbeClassList(PolicyListBase):
227
+ type: Literal["appProbe"] = "appProbe"
228
+ entries: List[AppProbeClassListEntry] = []
229
+
230
+ def assign_forwarding_class(self, name: str) -> AppProbeClassListEntry:
231
+ # App probe class list must have only one entry!
232
+ entry = AppProbeClassListEntry(forwarding_class=name)
233
+ self._add_entry(entry, single=True)
234
+ return entry
235
+
236
+
237
+ class SLAClassList(PolicyListBase):
238
+ type: Literal["sla"] = "sla"
239
+ entries: List[SLAClassListEntry] = []
240
+
241
+ def assign_app_probe_class(
242
+ self,
243
+ app_probe_class_id: UUID,
244
+ latency: Optional[int] = None,
245
+ loss: Optional[int] = None,
246
+ jitter: Optional[int] = None,
247
+ ) -> SLAClassListEntry:
248
+ # SLA class list must have only one entry!
249
+ _latency = str(latency) if latency is not None else None
250
+ _loss = str(loss) if loss is not None else None
251
+ _jitter = str(jitter) if jitter is not None else None
252
+ entry = SLAClassListEntry(latency=_latency, loss=_loss, jitter=_jitter, app_probe_class=app_probe_class_id)
253
+ self._add_entry(entry, single=True)
254
+ return entry
255
+
256
+ def add_fallback_jitter_criteria(self, jitter_variance: int) -> None:
257
+ assert self.entries, "Assign app probe class before configuring best fallback tunnel"
258
+ self.entries[0].add_fallback_jitter_criteria(jitter_variance)
259
+
260
+ def add_fallback_latency_criteria(self, latency_variance: int) -> None:
261
+ assert self.entries, "Assign app probe class before configuring best fallback tunnel"
262
+ self.entries[0].add_fallback_latency_criteria(latency_variance)
263
+
264
+ def add_fallback_loss_criteria(self, loss_variance: int) -> None:
265
+ assert self.entries, "Assign app probe class before configuring best fallback tunnel"
266
+ self.entries[0].add_fallback_loss_criteria(loss_variance)
267
+
268
+
269
+ class TLOCList(PolicyListBase):
270
+ type: Literal["tloc"] = "tloc"
271
+ entries: List[TLOCListEntry] = []
272
+
273
+ def add_tloc(self, tloc: IPv4Address, color: TLOCColor, encap: EncapType, preference: Optional[int] = None) -> None:
274
+ _preference = str(preference) if preference is not None else None
275
+ self.entries.append(TLOCListEntry(tloc=tloc, color=color, encap=encap, preference=_preference))
276
+
277
+
278
+ class PreferredColorGroupList(PolicyListBase):
279
+ type: Literal["preferredColorGroup"] = "preferredColorGroup"
280
+ entries: List[PreferredColorGroupListEntry] = []
281
+
282
+ def assign_color_groups(
283
+ self,
284
+ primary: Tuple[Set[TLOCColor], PathPreference],
285
+ secondary: Optional[Tuple[Set[TLOCColor], PathPreference]] = None,
286
+ tertiary: Optional[Tuple[Set[TLOCColor], PathPreference]] = None,
287
+ ) -> PreferredColorGroupListEntry:
288
+ primary_preference = ColorGroupPreference.from_color_set_and_path(*primary)
289
+ secondary_preference = (
290
+ ColorGroupPreference.from_color_set_and_path(*secondary) if secondary is not None else None
291
+ )
292
+ tertiary_preference = ColorGroupPreference.from_color_set_and_path(*tertiary) if tertiary is not None else None
293
+ entry = PreferredColorGroupListEntry(
294
+ primary_preference=primary_preference,
295
+ secondary_preference=secondary_preference,
296
+ tertiary_preference=tertiary_preference,
297
+ )
298
+ if self.entries:
299
+ self.entries[0] = entry
300
+ else:
301
+ self.entries.append(entry)
302
+ return entry
303
+
304
+
305
+ class PrefixList(PolicyListBase):
306
+ type: Literal["prefix"] = "prefix"
307
+ entries: List[PrefixListEntry] = []
308
+
309
+ def add_prefix(self, prefix: IPv4Network, ge: Optional[int] = None, le: Optional[int] = None) -> None:
310
+ _ge = str(ge) if ge is not None else None
311
+ _le = str(le) if le is not None else None
312
+ self._add_entry(PrefixListEntry(ip_prefix=prefix, ge=_ge, le=_le))
313
+
314
+
315
+ class IPv6PrefixList(PolicyListBase):
316
+ type: Literal["ipv6prefix"] = "ipv6prefix"
317
+ entries: List[IPv6PrefixListEntry] = []
318
+
319
+
320
+ class RegionList(PolicyListBase):
321
+ type: Literal["region"] = "region"
322
+ entries: List[RegionListEntry] = []
323
+
324
+ def add_regions(self, regions: Set[int]):
325
+ for region in regions:
326
+ self._add_entry(RegionListEntry(region_id=str(region)))
327
+
328
+ def add_region_range(self, region_range: Tuple[int, int]):
329
+ entry = RegionListEntry(region_id=f"{region_range[0]}-{region_range[1]}")
330
+ self._add_entry(entry)