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
@@ -7,25 +7,35 @@ 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
10
11
  from catalystwan.models.misc.application_protocols import ApplicationProtocol
11
12
  from catalystwan.models.policy.policy_definition import (
13
+ AdvancedInspectionProfileAction,
12
14
  AppListEntry,
15
+ AppListFlatEntry,
16
+ ConnectionEventsAction,
13
17
  DefinitionWithSequencesCommonBase,
14
18
  DestinationDataPrefixListEntry,
15
19
  DestinationFQDNEntry,
20
+ DestinationFQDNListEntry,
16
21
  DestinationGeoLocationEntry,
17
22
  DestinationGeoLocationListEntry,
18
23
  DestinationIPEntry,
19
24
  DestinationPortEntry,
20
25
  DestinationPortListEntry,
26
+ DestinationScalableGroupTagListEntry,
27
+ DestinationSecurityGroupEntry,
21
28
  LogAction,
22
29
  Match,
23
- PolicyActionType,
30
+ PolicyActionBase,
24
31
  PolicyDefinitionBase,
32
+ PolicyDefinitionGetResponse,
33
+ PolicyDefinitionId,
25
34
  PolicyDefinitionSequenceBase,
26
35
  ProtocolEntry,
27
36
  ProtocolNameEntry,
28
37
  ProtocolNameListEntry,
38
+ ReferenceWithId,
29
39
  RuleSetListEntry,
30
40
  SourceDataPrefixListEntry,
31
41
  SourceFQDNEntry,
@@ -35,18 +45,24 @@ from catalystwan.models.policy.policy_definition import (
35
45
  SourceIPEntry,
36
46
  SourcePortEntry,
37
47
  SourcePortListEntry,
48
+ SourceScalableGroupTagListEntry,
49
+ SourceSecurityGroupEntry,
38
50
  )
39
51
 
40
52
  ZoneBasedFWPolicySequenceEntry = Annotated[
41
53
  Union[
42
54
  AppListEntry,
55
+ AppListFlatEntry,
43
56
  DestinationDataPrefixListEntry,
44
57
  DestinationFQDNEntry,
58
+ DestinationFQDNListEntry,
45
59
  DestinationGeoLocationEntry,
46
60
  DestinationGeoLocationListEntry,
47
61
  DestinationIPEntry,
48
62
  DestinationPortEntry,
49
63
  DestinationPortListEntry,
64
+ DestinationScalableGroupTagListEntry,
65
+ DestinationSecurityGroupEntry,
50
66
  ProtocolEntry,
51
67
  ProtocolNameEntry,
52
68
  ProtocolNameListEntry,
@@ -59,10 +75,14 @@ ZoneBasedFWPolicySequenceEntry = Annotated[
59
75
  SourceIPEntry,
60
76
  SourcePortEntry,
61
77
  SourcePortListEntry,
78
+ SourceScalableGroupTagListEntry,
79
+ SourceSecurityGroupEntry,
62
80
  ],
63
81
  Field(discriminator="field"),
64
82
  ]
65
83
 
84
+ ZonePair = Literal["self", "default"]
85
+
66
86
  ZoneBasedFWPolicySequenceEntryWithRuleSets = Annotated[
67
87
  Union[
68
88
  AppListEntry,
@@ -71,6 +91,22 @@ ZoneBasedFWPolicySequenceEntryWithRuleSets = Annotated[
71
91
  Field(discriminator="field"),
72
92
  ]
73
93
 
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
+
74
110
 
75
111
  class ZoneBasedFWPolicyMatches(Match):
76
112
  entries: List[ZoneBasedFWPolicySequenceEntry] = []
@@ -82,13 +118,13 @@ class ZoneBasedFWPolicySequenceWithRuleSets(PolicyDefinitionSequenceBase):
82
118
  )
83
119
  match: ZoneBasedFWPolicyMatches
84
120
  ruleset: bool = True
85
- actions: List[LogAction] = []
121
+ actions: List[ZoneBasedFWPolicyActions] = []
86
122
  model_config = ConfigDict(populate_by_name=True)
87
123
 
88
124
  def match_rule_set_lists(self, rule_set_ids: Set[UUID]) -> None:
89
- self._insert_match(RuleSetListEntry.from_rule_set_ids(rule_set_ids))
125
+ self._insert_match(RuleSetListEntry(ref=list(rule_set_ids)))
90
126
 
91
- def match_app_list(self, app_list_id: UUID) -> None:
127
+ def match_app_list(self, app_list_id: List[UUID]) -> None:
92
128
  if self.base_action != "inspect":
93
129
  raise ValueError("Action must be inspect when Application/Application Family List is selected.")
94
130
  self._insert_match(AppListEntry(ref=app_list_id))
@@ -99,16 +135,25 @@ class ZoneBasedFWPolicySequence(PolicyDefinitionSequenceBase):
99
135
  default="zoneBasedFW", serialization_alias="sequenceType", validation_alias="sequenceType"
100
136
  )
101
137
  match: ZoneBasedFWPolicyMatches
102
- actions: List[LogAction] = []
138
+ actions: List[Union[LogAction, AdvancedInspectionProfileAction, ConnectionEventsAction]] = []
103
139
  model_config = ConfigDict(populate_by_name=True)
104
140
 
105
- def match_app_list(self, app_list_id: UUID) -> None:
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:
106
151
  if self.base_action != "inspect":
107
152
  raise ValueError("Action must be inspect when Application/Application Family List is selected.")
108
153
  self._insert_match(AppListEntry(ref=app_list_id))
109
154
 
110
- def match_destination_data_prefix_list(self, data_prefix_list_id: UUID) -> None:
111
- self._insert_match(DestinationDataPrefixListEntry(ref=data_prefix_list_id))
155
+ def match_destination_data_prefix_list(self, data_prefix_lists: List[UUID]) -> None:
156
+ self._insert_match(DestinationDataPrefixListEntry(ref=data_prefix_lists))
112
157
 
113
158
  def match_destination_fqdn(self, fqdn: str) -> None:
114
159
  self._insert_match(DestinationFQDNEntry(value=fqdn))
@@ -116,7 +161,7 @@ class ZoneBasedFWPolicySequence(PolicyDefinitionSequenceBase):
116
161
  def match_destination_geo_location(self, geo_location: str) -> None:
117
162
  self._insert_match(DestinationGeoLocationEntry(value=geo_location))
118
163
 
119
- def match_destination_geo_location_list(self, geo_location_list_id: UUID) -> None:
164
+ def match_destination_geo_location_list(self, geo_location_list_id: List[UUID]) -> None:
120
165
  self._insert_match(DestinationGeoLocationListEntry(ref=geo_location_list_id))
121
166
 
122
167
  def match_destination_ip(self, networks: List[IPv4Network]) -> None:
@@ -125,8 +170,11 @@ class ZoneBasedFWPolicySequence(PolicyDefinitionSequenceBase):
125
170
  def match_destination_ports(self, ports: Set[int] = set(), port_ranges: List[Tuple[int, int]] = []) -> None:
126
171
  self._insert_match(DestinationPortEntry.from_port_set_and_ranges(ports, port_ranges))
127
172
 
128
- def match_destination_port_list(self, port_list_id: UUID) -> None:
129
- self._insert_match(DestinationPortListEntry(ref=port_list_id))
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))
130
178
 
131
179
  def match_protocols(self, protocols: Set[int]) -> None:
132
180
  self._insert_match(ProtocolEntry.from_protocol_set(protocols))
@@ -136,17 +184,17 @@ class ZoneBasedFWPolicySequence(PolicyDefinitionSequenceBase):
136
184
  for name in names:
137
185
  app_protocol = protocol_map.get(name, None)
138
186
  if app_protocol is None:
139
- raise ValueError(f"{name} not found in protocol map keys: {protocol_map.keys()}")
187
+ raise ValueError(f"{name} not found in protocol map keys: {protocol_map.keys()}") # noqa: E713
140
188
  app_protocols.append(app_protocol)
141
189
  self._insert_match(ProtocolNameEntry.from_application_protocols(app_protocols))
142
190
  self._insert_match(DestinationPortEntry.from_application_protocols(app_protocols), False)
143
191
  self._insert_match(ProtocolEntry.from_application_protocols(app_protocols), False)
144
192
 
145
- def match_protocol_name_list(self, protocol_name_list_id: UUID) -> None:
193
+ def match_protocol_name_list(self, protocol_name_list_id: List[UUID]) -> None:
146
194
  self._insert_match(ProtocolNameListEntry(ref=protocol_name_list_id))
147
195
 
148
- def match_source_data_prefix_list(self, data_prefix_list_id: UUID) -> None:
149
- self._insert_match(SourceDataPrefixListEntry(ref=data_prefix_list_id))
196
+ def match_source_data_prefix_list(self, data_prefix_lists: List[UUID]) -> None:
197
+ self._insert_match(SourceDataPrefixListEntry(ref=data_prefix_lists))
150
198
 
151
199
  def match_source_fqdn(self, fqdn: str) -> None:
152
200
  self._insert_match(SourceFQDNEntry(value=fqdn))
@@ -157,7 +205,7 @@ class ZoneBasedFWPolicySequence(PolicyDefinitionSequenceBase):
157
205
  def match_source_geo_location(self, geo_location: str) -> None:
158
206
  self._insert_match(SourceGeoLocationEntry(value=geo_location))
159
207
 
160
- def match_source_geo_location_list(self, geo_location_list_id: UUID) -> None:
208
+ def match_source_geo_location_list(self, geo_location_list_id: List[UUID]) -> None:
161
209
  self._insert_match(SourceGeoLocationListEntry(ref=geo_location_list_id))
162
210
 
163
211
  def match_source_ip(self, networks: List[IPv4Network]) -> None:
@@ -166,36 +214,41 @@ class ZoneBasedFWPolicySequence(PolicyDefinitionSequenceBase):
166
214
  def match_source_port(self, ports: Set[int] = set(), port_ranges: List[Tuple[int, int]] = []) -> None:
167
215
  self._insert_match(SourcePortEntry.from_port_set_and_ranges(ports, port_ranges))
168
216
 
169
- def match_source_port_list(self, port_list_id: UUID) -> None:
217
+ def match_source_port_list(self, port_list_id: List[UUID]) -> None:
170
218
  self._insert_match(SourcePortListEntry(ref=port_list_id))
171
219
 
220
+ def match_source_security_group_list(self, security_group_list: List[UUID]) -> None:
221
+ self._insert_match(SourceSecurityGroupEntry(ref=security_group_list))
222
+
172
223
 
173
224
  class ZoneBasedFWPolicyEntry(BaseModel):
174
- source_zone_id: Union[UUID, Literal["self"]] = Field(
225
+ source_zone_id: Union[UUID, ZonePair] = Field(
175
226
  default="self", serialization_alias="sourceZone", validation_alias="sourceZone"
176
227
  )
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")
228
+ destination_zone_id: Union[UUID, ZonePair] = Field(
229
+ serialization_alias="destinationZone", validation_alias="destinationZone"
230
+ )
184
231
  model_config = ConfigDict(populate_by_name=True)
185
232
 
186
233
 
187
234
  class ZoneBasedFWPolicyDefinition(DefinitionWithSequencesCommonBase):
235
+ default_action: ZoneBasedFirewallDefaultAction = Field(
236
+ default=ZoneBasedFirewallDefaultAction(type="drop"),
237
+ serialization_alias="defaultAction",
238
+ validation_alias="defaultAction",
239
+ )
188
240
  sequences: List[Union[ZoneBasedFWPolicySequence, ZoneBasedFWPolicySequenceWithRuleSets]] = []
189
241
  entries: List[ZoneBasedFWPolicyEntry] = []
190
242
 
191
243
 
192
- class ZoneBasedFWPolicy(ZoneBasedFWPolicyHeader):
244
+ class ZoneBasedFWPolicy(PolicyDefinitionBase):
245
+ model_config = ConfigDict(populate_by_name=True)
193
246
  type: Literal["zoneBasedFW"] = "zoneBasedFW"
194
- mode: Literal["security"] = "security"
247
+ mode: PolicyModeType = "security"
195
248
  definition: ZoneBasedFWPolicyDefinition = ZoneBasedFWPolicyDefinition()
196
249
 
197
250
  def add_ipv4_rule(
198
- self, name: str, base_action: PolicyActionType = "drop", log: bool = False
251
+ self, name: str, base_action: ZoneBasedFirewallBaseActionType = "drop", log: bool = False
199
252
  ) -> ZoneBasedFWPolicySequence:
200
253
  """Adds new IPv4 Rule to Zone Based Firewall Policy
201
254
 
@@ -219,7 +272,7 @@ class ZoneBasedFWPolicy(ZoneBasedFWPolicyHeader):
219
272
  return sequence
220
273
 
221
274
  def add_ipv4_rule_sets(
222
- self, name: str, base_action: PolicyActionType = "drop", log: bool = False
275
+ self, name: str, base_action: ZoneBasedFirewallBaseActionType = "drop", log: bool = False
223
276
  ) -> ZoneBasedFWPolicySequenceWithRuleSets:
224
277
  sequence = ZoneBasedFWPolicySequenceWithRuleSets(
225
278
  sequence_name=name,
@@ -232,9 +285,17 @@ class ZoneBasedFWPolicy(ZoneBasedFWPolicyHeader):
232
285
  self.definition.add(sequence)
233
286
  return sequence
234
287
 
235
- def add_zone_pair(self, source_zone_id: UUID, destination_zone_id: UUID) -> None:
288
+ def add_zone_pair(self, source_zone: Union[UUID, ZonePair], destination_zone: Union[UUID, ZonePair]) -> None:
236
289
  entry = ZoneBasedFWPolicyEntry(
237
- source_zone_id=source_zone_id,
238
- destination_zone_id=destination_zone_id,
290
+ source_zone_id=source_zone,
291
+ destination_zone_id=destination_zone,
239
292
  )
240
293
  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,44 @@
1
+ # Copyright 2024 Cisco Systems, Inc. and its affiliates
2
+ from typing import List, Literal, Optional
3
+
4
+ from pydantic import BaseModel, ConfigDict, Field, model_validator
5
+
6
+ from catalystwan.models.common import check_fields_exclusive
7
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
8
+
9
+
10
+ class AppListEntry(BaseModel):
11
+ model_config = ConfigDict(populate_by_name=True)
12
+
13
+ app_family: Optional[str] = Field(default=None, serialization_alias="appFamily", validation_alias="appFamily")
14
+ app: Optional[str] = None
15
+
16
+ @model_validator(mode="after")
17
+ def check_app_xor_appfamily(self):
18
+ check_fields_exclusive(self.__dict__, {"app", "app_family"}, True)
19
+ return self
20
+
21
+
22
+ class AppList(PolicyListBase):
23
+ type: Literal["app"] = "app"
24
+ entries: List[AppListEntry] = []
25
+
26
+ def add_app(self, app: str) -> None:
27
+ self._add_entry(AppListEntry(app=app))
28
+
29
+ def add_app_family(self, app_family: str) -> None:
30
+ self._add_entry(AppListEntry(app_family=app_family))
31
+
32
+ def list_all_app(self) -> List[str]:
33
+ return [e.app for e in self.entries if e.app is not None]
34
+
35
+ def list_all_app_family(self) -> List[str]:
36
+ return [e.app_family for e in self.entries if e.app_family is not None]
37
+
38
+
39
+ class AppListEditPayload(AppList, PolicyListId):
40
+ pass
41
+
42
+
43
+ class AppListInfo(AppList, PolicyListInfo):
44
+ pass
@@ -0,0 +1,42 @@
1
+ # Copyright 2024 Cisco Systems, Inc. and its affiliates
2
+
3
+ from typing import List, Literal, Optional
4
+
5
+ from pydantic import BaseModel, ConfigDict, Field
6
+
7
+ from catalystwan.models.common import TLOCColor
8
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
9
+
10
+
11
+ class ColorDSCPMap(BaseModel):
12
+ color: TLOCColor
13
+ dscp: Optional[int] = Field(default=None, ge=0, le=63)
14
+
15
+
16
+ class AppProbeClassListEntry(BaseModel):
17
+ model_config = ConfigDict(populate_by_name=True)
18
+
19
+ forwarding_class: str = Field(serialization_alias="forwardingClass", validation_alias="forwardingClass")
20
+ map: List[ColorDSCPMap] = []
21
+
22
+ def add_color_mapping(self, color: TLOCColor, dscp: Optional[int] = None) -> None:
23
+ self.map.append(ColorDSCPMap(color=color, dscp=dscp))
24
+
25
+
26
+ class AppProbeClassList(PolicyListBase):
27
+ type: Literal["appProbe"] = "appProbe"
28
+ entries: List[AppProbeClassListEntry] = []
29
+
30
+ def assign_forwarding_class(self, name: str) -> AppProbeClassListEntry:
31
+ # App probe class list must have only one entry!
32
+ entry = AppProbeClassListEntry(forwarding_class=name)
33
+ self._add_entry(entry, single=True)
34
+ return entry
35
+
36
+
37
+ class AppProbeClassListEditPayload(AppProbeClassList, PolicyListId):
38
+ pass
39
+
40
+
41
+ class AppProbeClassListInfo(AppProbeClassList, PolicyListInfo):
42
+ 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 ASPathListEntry(BaseModel):
11
+ model_config = ConfigDict(populate_by_name=True)
12
+
13
+ as_path: str = Field(serialization_alias="asPath", validation_alias="asPath")
14
+
15
+
16
+ class ASPathList(PolicyListBase):
17
+ type: Literal["asPath"] = "asPath"
18
+ entries: List[ASPathListEntry] = []
19
+
20
+ def add_as_path(self, as_path: str):
21
+ as_path_entry = ASPathListEntry(as_path=as_path)
22
+ self._add_entry(entry=as_path_entry)
23
+
24
+
25
+ class ASPathListEditPayload(ASPathList, PolicyListId):
26
+ pass
27
+
28
+
29
+ class ASPathListInfo(ASPathList, PolicyListInfo):
30
+ 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, Field
6
+
7
+ from catalystwan.models.common import IntStr
8
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
9
+
10
+
11
+ class ClassMapListEntry(BaseModel):
12
+ queue: IntStr = Field(ge=0, le=7)
13
+
14
+
15
+ class ClassMapList(PolicyListBase):
16
+ type: Literal["class"] = "class"
17
+ entries: List[ClassMapListEntry] = []
18
+
19
+ def assign_queue(self, queue: int) -> None:
20
+ # Class map list must have only one entry!
21
+ entry = ClassMapListEntry(queue=queue)
22
+ self._add_entry(entry, single=True)
23
+
24
+
25
+ class ClassMapListEditPayload(ClassMapList, PolicyListId):
26
+ pass
27
+
28
+
29
+ class ClassMapListInfo(ClassMapList, PolicyListInfo):
30
+ pass
@@ -0,0 +1,28 @@
1
+ # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
+
3
+ from typing import List, Literal
4
+
5
+ from pydantic import BaseModel
6
+
7
+ from catalystwan.models.common import TLOCColor
8
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
9
+
10
+
11
+ class ColorListEntry(BaseModel):
12
+ color: TLOCColor
13
+
14
+
15
+ class ColorList(PolicyListBase):
16
+ type: Literal["color"] = "color"
17
+ entries: List[ColorListEntry] = []
18
+
19
+ def add_color(self, color: TLOCColor) -> None:
20
+ self._add_entry(ColorListEntry(color=color))
21
+
22
+
23
+ class ColorListEditPayload(ColorList, PolicyListId):
24
+ pass
25
+
26
+
27
+ class ColorListInfo(ColorList, PolicyListInfo):
28
+ pass
@@ -0,0 +1,83 @@
1
+ # Copyright 2024 Cisco Systems, Inc. and its affiliates
2
+
3
+ from ipaddress import IPv4Address, IPv6Address
4
+ from typing import List, Literal, Optional, Union
5
+
6
+ from pydantic import BaseModel, ConfigDict, Field
7
+
8
+ from catalystwan.models.common import WellKnownBGPCommunities
9
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
10
+
11
+
12
+ class CommunityListEntry(BaseModel):
13
+ model_config = ConfigDict(populate_by_name=True)
14
+
15
+ community: str = Field(examples=["1000:10000", "internet", "local-AS"])
16
+
17
+
18
+ class ExtendedCommunityListEntry(BaseModel):
19
+ model_config = ConfigDict(populate_by_name=True)
20
+ community: str = Field(examples=["soo 1.2.3.4:1000", "rt 10:100"])
21
+
22
+
23
+ class CommunityListBase(PolicyListBase):
24
+ entries: List[CommunityListEntry] = []
25
+
26
+ def add_well_known_community(self, community: WellKnownBGPCommunities) -> None:
27
+ self._add_entry(CommunityListEntry(community=community))
28
+
29
+ def add_community(self, as_number: int, community_number: int) -> None:
30
+ self._add_entry(CommunityListEntry(community=f"{as_number}:{community_number}"))
31
+
32
+
33
+ class CommunityList(CommunityListBase):
34
+ type: Literal["community"] = "community"
35
+
36
+
37
+ class CommunityListEditPayload(CommunityList, PolicyListId):
38
+ pass
39
+
40
+
41
+ class CommunityListInfo(CommunityList, PolicyListInfo):
42
+ pass
43
+
44
+
45
+ class ExpandedCommunityList(CommunityListBase):
46
+ type: Literal["expandedCommunity"] = "expandedCommunity"
47
+
48
+
49
+ class ExpandedCommunityListEditPayload(ExpandedCommunityList, PolicyListId):
50
+ pass
51
+
52
+
53
+ class ExpandedCommunityListInfo(ExpandedCommunityList, PolicyListInfo):
54
+ pass
55
+
56
+
57
+ class ExtendedCommunityList(PolicyListBase):
58
+ entries: List[ExtendedCommunityListEntry] = []
59
+ type: Literal["extCommunity"] = "extCommunity"
60
+
61
+ def add_site_of_origin_community(
62
+ self, ip_address: Union[IPv4Address, IPv6Address], port: int, name: Optional[str] = None
63
+ ):
64
+ entry = f"soo {ip_address}:{port}"
65
+ self.entries.append(ExtendedCommunityListEntry(community=self._append_name(entry, name)))
66
+
67
+ def add_route_target_community(self, as_number: int, community_number: int, name: Optional[str] = None):
68
+ entry = f"rt {as_number}:{community_number}"
69
+ self.entries.append(ExtendedCommunityListEntry(community=self._append_name(entry, name)))
70
+
71
+ def _append_name(self, entry: str, name: Optional[str] = None) -> str:
72
+ if not name:
73
+ return entry
74
+
75
+ return f"{name} {entry}"
76
+
77
+
78
+ class ExtendedCommunityListEditPayload(ExtendedCommunityList, PolicyListId):
79
+ pass
80
+
81
+
82
+ class ExtendedCommunityListInfo(ExtendedCommunityList, PolicyListInfo):
83
+ pass
@@ -0,0 +1,30 @@
1
+ # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
+
3
+ from ipaddress import IPv6Interface
4
+ from typing import List, Literal
5
+
6
+ from pydantic import BaseModel, ConfigDict, Field
7
+
8
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
9
+
10
+
11
+ class DataIPv6PrefixListEntry(BaseModel):
12
+ model_config = ConfigDict(populate_by_name=True)
13
+
14
+ ipv6_prefix: IPv6Interface = Field(serialization_alias="ipv6Prefix", validation_alias="ipv6Prefix")
15
+
16
+
17
+ class DataIPv6PrefixList(PolicyListBase):
18
+ type: Literal["dataIpv6Prefix"] = "dataIpv6Prefix"
19
+ entries: List[DataIPv6PrefixListEntry] = []
20
+
21
+ def add_prefix(self, ipv6_prefix: IPv6Interface) -> None:
22
+ self._add_entry(DataIPv6PrefixListEntry(ipv6_prefix=ipv6_prefix))
23
+
24
+
25
+ class DataIPv6PrefixListEditPayload(DataIPv6PrefixList, PolicyListId):
26
+ pass
27
+
28
+
29
+ class DataIPv6PrefixListInfo(DataIPv6PrefixList, PolicyListInfo):
30
+ pass
@@ -0,0 +1,30 @@
1
+ # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
+
3
+ from ipaddress import IPv4Network
4
+ from typing import List, Literal
5
+
6
+ from pydantic import BaseModel, ConfigDict, Field
7
+
8
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
9
+
10
+
11
+ class DataPrefixListEntry(BaseModel):
12
+ model_config = ConfigDict(populate_by_name=True)
13
+
14
+ ip_prefix: IPv4Network = Field(serialization_alias="ipPrefix", validation_alias="ipPrefix")
15
+
16
+
17
+ class DataPrefixList(PolicyListBase):
18
+ type: Literal["dataPrefix"] = "dataPrefix"
19
+ entries: List[DataPrefixListEntry] = []
20
+
21
+ def add_prefix(self, ip_prefix: IPv4Network) -> None:
22
+ self._add_entry(DataPrefixListEntry(ip_prefix=ip_prefix))
23
+
24
+
25
+ class DataPrefixListEditPayload(DataPrefixList, PolicyListId):
26
+ pass
27
+
28
+
29
+ class DataPrefixListInfo(DataPrefixList, PolicyListInfo):
30
+ pass
@@ -0,0 +1,45 @@
1
+ # Copyright 2024 Cisco Systems, Inc. and its affiliates
2
+
3
+ from typing import List, Literal, Optional
4
+
5
+ from pydantic import BaseModel, ConfigDict, Field
6
+
7
+ from catalystwan.models.common import FaxFallBackProtocols, FaxPrimaryProtocols
8
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
9
+
10
+
11
+ class T38Options(BaseModel):
12
+ model_config = ConfigDict(populate_by_name=True)
13
+ version: int = Field(ge=0)
14
+ rate: str
15
+ nse: str
16
+ lowSpeed: int = Field(ge=0, validation_alias="lowSpeed", serialization_alias="lowSpeed")
17
+ highSpeed: int = Field(ge=0, validation_alias="highSpeed", serialization_alias="highSpeed")
18
+ fallbackProtocol: FaxFallBackProtocols = Field(
19
+ validation_alias="fallbackProtocol", serialization_alias="fallbackProtocol"
20
+ )
21
+
22
+
23
+ class FaxProtocolListEntry(BaseModel):
24
+ model_config = ConfigDict(populate_by_name=True)
25
+ primary_protocol: FaxPrimaryProtocols = Field(
26
+ validation_alias="primaryProtocol", serialization_alias="primaryProtocol"
27
+ )
28
+ ecm: bool = Field(default=False)
29
+ t38_options: Optional[T38Options] = Field(
30
+ default=None, serialization_alias="t38Options", validation_alias="t38Options"
31
+ )
32
+
33
+
34
+ class FaxProtocolList(PolicyListBase):
35
+ model_config = ConfigDict(populate_by_name=True)
36
+ type: Literal["faxProtocol", "faxprotocol"] = "faxProtocol"
37
+ entries: List[FaxProtocolListEntry] = Field(default_factory=list)
38
+
39
+
40
+ class FaxProtocolListEditPayload(FaxProtocolList, PolicyListId):
41
+ pass
42
+
43
+
44
+ class FaxProtocolListInfo(FaxProtocolList, PolicyListInfo):
45
+ pass
@@ -0,0 +1,24 @@
1
+ # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
+
3
+ from typing import List, Literal
4
+
5
+ from pydantic import BaseModel
6
+
7
+ from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
8
+
9
+
10
+ class FQDNListEntry(BaseModel):
11
+ pattern: str
12
+
13
+
14
+ class FQDNList(PolicyListBase):
15
+ type: Literal["fqdn"] = "fqdn"
16
+ entries: List[FQDNListEntry] = []
17
+
18
+
19
+ class FQDNListEditPayload(FQDNList, PolicyListId):
20
+ pass
21
+
22
+
23
+ class FQDNListInfo(FQDNList, PolicyListInfo):
24
+ pass