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
@@ -2,7 +2,8 @@
2
2
 
3
3
  # mypy: disable-error-code="empty-body"
4
4
  from datetime import datetime
5
- from typing import List, Optional
5
+ from typing import Any, List, Optional, Union
6
+ from uuid import UUID
6
7
 
7
8
  from pydantic import BaseModel, ConfigDict, Field
8
9
 
@@ -13,7 +14,7 @@ from catalystwan.typed_list import DataSequence
13
14
 
14
15
 
15
16
  class ProfileId(BaseModel):
16
- id: str
17
+ id: UUID
17
18
 
18
19
 
19
20
  # TODO Get mode from schema
@@ -38,10 +39,29 @@ class FeatureProfile(BaseModel):
38
39
 
39
40
 
40
41
  class ConfigGroup(BaseModel):
42
+ model_config = ConfigDict(populate_by_name=True)
43
+ id: UUID
41
44
  name: str
42
45
  description: Optional[str]
43
46
  solution: Solution
44
47
  profiles: Optional[List[FeatureProfile]]
48
+ source: Optional[str] = None
49
+ state: Optional[str] = None
50
+ devices: Optional[List] = Field(default=[])
51
+ created_by: Optional[str] = Field(serialization_alias="createdBy", validation_alias="createdBy")
52
+ last_updated_by: Optional[str] = Field(serialization_alias="lastUpdatedBy", validation_alias="lastUpdatedBy")
53
+ created_on: Optional[datetime] = Field(serialization_alias="createdOn", validation_alias="createdOn")
54
+ last_updated_on: Optional[datetime] = Field(serialization_alias="lastUpdatedOn", validation_alias="lastUpdatedOn")
55
+ version: int
56
+ number_of_devices: int = Field(serialization_alias="numberOfDevices", validation_alias="numberOfDevices")
57
+ number_of_devices_up_to_date: int = Field(
58
+ serialization_alias="numberOfDevicesUpToDate", validation_alias="numberOfDevicesUpToDate"
59
+ )
60
+ origin: Optional[str] = None
61
+ topology: Any = None
62
+ full_config_cli: Optional[bool] = Field(
63
+ default=None, serialization_alias="fullConfigCli", validation_alias="fullConfigCli"
64
+ )
45
65
 
46
66
 
47
67
  class ConfigGroupResponsePayload(BaseModel):
@@ -68,9 +88,12 @@ class ConfigGroupVariablesCreatePayload(BaseModel):
68
88
  suggestions: bool = True
69
89
 
70
90
 
91
+ VariableType = Union[str, int, bool, List[Union[str, int, bool]]]
92
+
93
+
71
94
  class VariableData(BaseModel):
72
95
  name: str
73
- value: str
96
+ value: Optional[VariableType] = None
74
97
 
75
98
 
76
99
  class DeviceVariables(BaseModel):
@@ -111,7 +134,7 @@ class ConfigGroupDisassociateResponse(BaseModel):
111
134
 
112
135
 
113
136
  class ConfigGroupCreationResponse(BaseModel):
114
- id: str
137
+ id: UUID
115
138
 
116
139
 
117
140
  class EditedProfileId(BaseModel):
@@ -143,7 +166,7 @@ class ConfigurationGroup(APIEndpoints):
143
166
 
144
167
  @versions(supported_versions=(">=20.9"), raises=False)
145
168
  @delete("/v1/config-group/{config_group_id}")
146
- def delete_config_group(self, config_group_id: str) -> None:
169
+ def delete_config_group(self, config_group_id: UUID) -> None:
147
170
  ...
148
171
 
149
172
  @versions(supported_versions=(">=20.9"), raises=False)
@@ -1,4 +1,4 @@
1
- # Copyright 2023 Cisco Systems, Inc. and its affiliates
1
+ # Copyright 2024 Cisco Systems, Inc. and its affiliates
2
2
 
3
3
  # mypy: disable-error-code="empty-body"
4
4
  import datetime
@@ -7,6 +7,7 @@ from typing import List, Literal, Optional, Union
7
7
  from pydantic import BaseModel, ConfigDict, Field, IPvAnyAddress, field_validator
8
8
 
9
9
  from catalystwan.endpoints import JSON, APIEndpoints, get, post, put, view
10
+ from catalystwan.models.settings import ThreatGridApi
10
11
  from catalystwan.typed_list import DataSequence
11
12
  from catalystwan.utils.session_type import ProviderView, SingleTenantView
12
13
 
@@ -60,6 +61,18 @@ class Certificate(BaseModel):
60
61
  email: Optional[str] = Field(default=None)
61
62
 
62
63
 
64
+ class EnterpriseRootCA(BaseModel):
65
+ model_config = ConfigDict(populate_by_name=True)
66
+ enterprise_root_ca: Optional[str] = Field(
67
+ default=None,
68
+ serialization_alias="enterpriseRootCA",
69
+ validation_alias="enterpriseRootCA"
70
+ )
71
+ control_connection_up: Optional[bool] = Field(
72
+ default=False, serialization_alias="controlConnectionUp", validation_alias="controlConnectionUp"
73
+ )
74
+
75
+
63
76
  class VEdgeCloud(BaseModel):
64
77
  certificateauthority: Optional[str] = None
65
78
 
@@ -339,6 +352,52 @@ class CRLSettings(BaseModel):
339
352
  return vpn_str
340
353
 
341
354
 
355
+ class CloudCredentials(BaseModel):
356
+ model_config = ConfigDict(populate_by_name=True)
357
+
358
+ umbrella_org_id: Optional[str] = Field(
359
+ default=None, validation_alias="umbrellaOrgId", serialization_alias="umbrellaOrgId"
360
+ )
361
+ umbrella_sig_auth_key: Optional[str] = Field(
362
+ default=None, validation_alias="umbrellaSIGAuthKey", serialization_alias="umbrellaSIGAuthKey"
363
+ )
364
+ umbrella_sig_auth_secret: Optional[str] = Field(
365
+ default=None, validation_alias="umbrellaSIGAuthSecret", serialization_alias="umbrellaSIGAuthSecret"
366
+ )
367
+ umbrella_dns_auth_key: Optional[str] = Field(
368
+ default=None, validation_alias="umbrellaDNSAuthKey", serialization_alias="umbrellaDNSAuthKey"
369
+ )
370
+ umbrella_dns_auth_secret: Optional[str] = Field(
371
+ default=None, validation_alias="umbrellaDNSAuthSecret", serialization_alias="umbrellaDNSAuthSecret"
372
+ )
373
+
374
+ zscaler_organization: Optional[str] = Field(
375
+ default=None, validation_alias="zscalerOrganization", serialization_alias="zscalerOrganization"
376
+ )
377
+ zscaler_partner_base_uri: Optional[str] = Field(
378
+ default=None, validation_alias="zscalerPartnerBaseUri", serialization_alias="zscalerPartnerBaseUri"
379
+ )
380
+ zscaler_partner_key: Optional[str] = Field(
381
+ default=None, validation_alias="zscalerPartnerKey", serialization_alias="zscalerPartnerKey"
382
+ )
383
+ zscaler_username: Optional[str] = Field(
384
+ default=None, validation_alias="zscalerUsername", serialization_alias="zscalerUsername"
385
+ )
386
+ zscaler_password: Optional[str] = Field(
387
+ default=None, validation_alias="zscalerPassword", serialization_alias="zscalerPassword"
388
+ )
389
+
390
+ cisco_sse_org_id: Optional[str] = Field(
391
+ default=None, validation_alias="ciscoSSEOrgId", serialization_alias="ciscoSSEOrgId"
392
+ )
393
+ cisco_sse_auth_key: Optional[str] = Field(
394
+ default=None, validation_alias="ciscoSSEAuthKey", serialization_alias="ciscoSSEAuthKey"
395
+ )
396
+ cisco_sse_auth_secret: Optional[str] = Field(
397
+ default=None, validation_alias="ciscoSSEAuthSecret", serialization_alias="ciscoSSEAuthSecret"
398
+ )
399
+
400
+
342
401
  class ConfigurationSettings(APIEndpoints):
343
402
  def create_analytics_data_file(self):
344
403
  # POST /settings/configuration/analytics/dca
@@ -383,6 +442,11 @@ class ConfigurationSettings(APIEndpoints):
383
442
  def get_certificates(self) -> DataSequence[Certificate]:
384
443
  ...
385
444
 
445
+ @view({SingleTenantView, ProviderView})
446
+ @get("/settings/configuration/certificate/enterpriserootca", "data")
447
+ def get_enterprise_root_ca(self) -> DataSequence[EnterpriseRootCA]:
448
+ ...
449
+
386
450
  @view({SingleTenantView, ProviderView})
387
451
  @get("/settings/configuration/vedgecloud", "data")
388
452
  def get_vedge_cloud(self) -> DataSequence[VEdgeCloud]:
@@ -506,6 +570,10 @@ class ConfigurationSettings(APIEndpoints):
506
570
  def get_smart_licensing_settings(self) -> DataSequence[SmartLicensingSetting]:
507
571
  ...
508
572
 
573
+ @get("/settings/configuration/cloudProviderSetting", "data")
574
+ def get_cloud_credentials(self) -> DataSequence[CloudCredentials]:
575
+ ...
576
+
509
577
  def new_cert_configuration(self):
510
578
  # POST /settings/configuration/certificate/{settingType}
511
579
  ...
@@ -543,6 +611,11 @@ class ConfigurationSettings(APIEndpoints):
543
611
  def edit_certificates(self, payload: Certificate) -> DataSequence[Certificate]:
544
612
  ...
545
613
 
614
+ @view({SingleTenantView, ProviderView})
615
+ @put("/settings/configuration/certificate/enterpriserootca", "data")
616
+ def edit_enterprise_root_ca(self, payload: EnterpriseRootCA) -> DataSequence[EnterpriseRootCA]:
617
+ ...
618
+
546
619
  @view({SingleTenantView, ProviderView})
547
620
  @put("/settings/configuration/vedgecloud", "data")
548
621
  def edit_vedge_cloud(self, payload: VEdgeCloud) -> DataSequence[VEdgeCloud]:
@@ -662,3 +735,19 @@ class ConfigurationSettings(APIEndpoints):
662
735
  @put("/settings/configuration/smartLicensing", "data")
663
736
  def edit_smart_licensing_settings(self, payload: SmartLicensingSetting) -> DataSequence[SmartLicensingSetting]:
664
737
  ...
738
+
739
+ @put("/settings/configuration/cloudProviderSetting", "data")
740
+ def edit_cloud_credentials(self, payload: CloudCredentials) -> DataSequence[CloudCredentials]:
741
+ ...
742
+
743
+ @post("/settings/configuration/cloudProviderSetting", "data")
744
+ def create_cloud_credentials(self, payload: CloudCredentials) -> DataSequence[CloudCredentials]:
745
+ ...
746
+
747
+ @put("/settings/configuration/threatGridApiKey")
748
+ def edit_threat_grid_api_key(self, payload: ThreatGridApi) -> ThreatGridApi:
749
+ ...
750
+
751
+ @post("/settings/configuration/threatGridApiKey")
752
+ def create_threat_grid_api_key(self, payload: ThreatGridApi) -> ThreatGridApi:
753
+ ...
@@ -0,0 +1,48 @@
1
+ # Copyright 2023 Cisco Systems, Inc. and its affiliates
2
+
3
+ # mypy: disable-error-code="empty-body"
4
+
5
+ from typing import List, Optional
6
+ from uuid import UUID
7
+
8
+ from pydantic import BaseModel, ConfigDict, Field
9
+
10
+ from catalystwan.endpoints import JSON, APIEndpoints, get, post, put
11
+ from catalystwan.models.templates import DeviceTemplateInformation, FeatureType
12
+ from catalystwan.typed_list import DataSequence
13
+
14
+
15
+ class TemplateID(BaseModel):
16
+ model_config = ConfigDict(populate_by_name=True)
17
+
18
+ template_id: UUID = Field(serialization_alias="templateId", validation_alias="templateId")
19
+
20
+
21
+ class AttachedDevices(BaseModel):
22
+ model_config = ConfigDict(populate_by_name=True)
23
+
24
+ attached_devices: Optional[List] = Field(
25
+ default=[], serialization_alias="AttachedDevices", validation_alias="AttachedDevices"
26
+ )
27
+
28
+
29
+ class FeatureQueryParams(BaseModel):
30
+ model_config = ConfigDict(populate_by_name=True)
31
+
32
+ feature: FeatureType = Field(default="all")
33
+
34
+
35
+ class ConfigurationTemplateMaster(APIEndpoints):
36
+ @get("/template/device", "data")
37
+ def get_device_template_list(
38
+ self, params: FeatureQueryParams = FeatureQueryParams()
39
+ ) -> DataSequence[DeviceTemplateInformation]:
40
+ ...
41
+
42
+ @post("/template/device/feature")
43
+ def create_device_template_from_feature_templates(self, payload: JSON) -> TemplateID:
44
+ ...
45
+
46
+ @put("/template/device/{template_id}", "data")
47
+ def edit_template(self, template_id: str, payload: JSON) -> AttachedDevices:
48
+ ...
@@ -11,12 +11,21 @@ from catalystwan.endpoints.client import Client
11
11
  from catalystwan.endpoints.cluster_management import ClusterManagement
12
12
  from catalystwan.endpoints.configuration.device.software_update import ConfigurationDeviceSoftwareUpdate
13
13
  from catalystwan.endpoints.configuration.disaster_recovery import ConfigurationDisasterRecovery
14
+ from catalystwan.endpoints.configuration.feature_profile.sdwan.cli import CliFeatureProfile
15
+ from catalystwan.endpoints.configuration.feature_profile.sdwan.embedded_security import EmbeddedSecurityFeatureProfile
16
+ from catalystwan.endpoints.configuration.feature_profile.sdwan.policy_object import PolicyObjectFeatureProfile
17
+ from catalystwan.endpoints.configuration.feature_profile.sdwan.sig_security import SIGSecurity
14
18
  from catalystwan.endpoints.configuration.feature_profile.sdwan.system import SystemFeatureProfile
19
+ from catalystwan.endpoints.configuration.feature_profile.sdwan.topology import TopologyFeatureProfile
15
20
  from catalystwan.endpoints.configuration.feature_profile.sdwan.transport import TransportFeatureProfile
21
+ from catalystwan.endpoints.configuration.network_hierarchy import NetworkHierarchy
16
22
  from catalystwan.endpoints.configuration.policy.definition.access_control_list import ConfigurationPolicyAclDefinition
17
23
  from catalystwan.endpoints.configuration.policy.definition.access_control_list_ipv6 import (
18
24
  ConfigurationPolicyAclIPv6Definition,
19
25
  )
26
+ from catalystwan.endpoints.configuration.policy.definition.aip import ConfigurationPolicyAIPDefinition
27
+ from catalystwan.endpoints.configuration.policy.definition.amp import ConfigurationPolicyAMPDefinition
28
+ from catalystwan.endpoints.configuration.policy.definition.app_route import ConfigurationPolicyAppRouteDefinition
20
29
  from catalystwan.endpoints.configuration.policy.definition.control import ConfigurationPolicyControlDefinition
21
30
  from catalystwan.endpoints.configuration.policy.definition.device_access import (
22
31
  ConfigurationPolicyDeviceAccessDefinition,
@@ -24,18 +33,27 @@ from catalystwan.endpoints.configuration.policy.definition.device_access import
24
33
  from catalystwan.endpoints.configuration.policy.definition.device_access_ipv6 import (
25
34
  ConfigurationPolicyDeviceAccessIPv6Definition,
26
35
  )
36
+ from catalystwan.endpoints.configuration.policy.definition.dial_peer import ConfigurationPolicyDialPeerDefinition
37
+ from catalystwan.endpoints.configuration.policy.definition.fxo_port import ConfigurationPolicyFxoPortDefinition
38
+ from catalystwan.endpoints.configuration.policy.definition.fxs_did_port import ConfigurationPolicyFxsDidPortDefinition
39
+ from catalystwan.endpoints.configuration.policy.definition.fxs_port import ConfigurationPolicyFxsPortDefinition
27
40
  from catalystwan.endpoints.configuration.policy.definition.hub_and_spoke import ConfigurationPolicyHubAndSpokeDefinition
28
41
  from catalystwan.endpoints.configuration.policy.definition.mesh import ConfigurationPolicyMeshDefinition
42
+ from catalystwan.endpoints.configuration.policy.definition.pri_isdn_port import ConfigurationPolicyPriIsdnPortDefinition
29
43
  from catalystwan.endpoints.configuration.policy.definition.qos_map import ConfigurationPolicyQoSMapDefinition
30
44
  from catalystwan.endpoints.configuration.policy.definition.rewrite import ConfigurationPolicyRewriteRuleDefinition
31
45
  from catalystwan.endpoints.configuration.policy.definition.rule_set import ConfigurationPolicyRuleSetDefinition
32
46
  from catalystwan.endpoints.configuration.policy.definition.security_group import (
33
47
  ConfigurationPolicySecurityGroupDefinition,
34
48
  )
49
+ from catalystwan.endpoints.configuration.policy.definition.srst_phone_profile import (
50
+ ConfigurationPolicySrstPhoneProfileDefinition,
51
+ )
35
52
  from catalystwan.endpoints.configuration.policy.definition.traffic_data import ConfigurationPolicyDataDefinition
36
53
  from catalystwan.endpoints.configuration.policy.definition.vpn_membership import (
37
54
  ConfigurationPolicyVPNMembershipGroupDefinition,
38
55
  )
56
+ from catalystwan.endpoints.configuration.policy.definition.vpn_qos_map import ConfigurationPolicyVPNQoSMapDefinition
39
57
  from catalystwan.endpoints.configuration.policy.definition.zone_based_firewall import (
40
58
  ConfigurationPolicyZoneBasedFirewallDefinition,
41
59
  )
@@ -48,13 +66,17 @@ from catalystwan.endpoints.configuration.policy.list.community import Configurat
48
66
  from catalystwan.endpoints.configuration.policy.list.data_ipv6_prefix import ConfigurationPolicyDataIPv6PrefixList
49
67
  from catalystwan.endpoints.configuration.policy.list.data_prefix import ConfigurationPolicyDataPrefixList
50
68
  from catalystwan.endpoints.configuration.policy.list.expanded_community import ConfigurationPolicyExpandedCommunityList
69
+ from catalystwan.endpoints.configuration.policy.list.extended_community import ConfigurationPolicyExtendedCommunityList
70
+ from catalystwan.endpoints.configuration.policy.list.fax_protocol import ConfigurationPolicyFaxProtocolList
51
71
  from catalystwan.endpoints.configuration.policy.list.fqdn import ConfigurationPolicyFQDNList
52
72
  from catalystwan.endpoints.configuration.policy.list.geo_location import ConfigurationPolicyGeoLocationList
53
73
  from catalystwan.endpoints.configuration.policy.list.ips_signature import ConfigurationPolicyIPSSignatureList
54
74
  from catalystwan.endpoints.configuration.policy.list.ipv6_prefix import ConfigurationPolicyIPv6PrefixList
55
75
  from catalystwan.endpoints.configuration.policy.list.local_app import ConfigurationPolicyLocalAppList
56
76
  from catalystwan.endpoints.configuration.policy.list.local_domain import ConfigurationPolicyLocalDomainList
77
+ from catalystwan.endpoints.configuration.policy.list.media_profile import ConfigurationPolicyMediaProfileList
57
78
  from catalystwan.endpoints.configuration.policy.list.mirror import ConfigurationPolicyMirrorList
79
+ from catalystwan.endpoints.configuration.policy.list.modem_pass_through import ConfigurationPolicyModemPassThroughList
58
80
  from catalystwan.endpoints.configuration.policy.list.policer import ConfigurationPolicyPolicerClassList
59
81
  from catalystwan.endpoints.configuration.policy.list.port import ConfigurationPolicyPortList
60
82
  from catalystwan.endpoints.configuration.policy.list.preferred_color_group import ConfigurationPreferredColorGroupList
@@ -63,15 +85,26 @@ from catalystwan.endpoints.configuration.policy.list.protocol_name import Config
63
85
  from catalystwan.endpoints.configuration.policy.list.region import ConfigurationPolicyRegionList
64
86
  from catalystwan.endpoints.configuration.policy.list.site import ConfigurationPolicySiteList
65
87
  from catalystwan.endpoints.configuration.policy.list.sla import ConfigurationPolicySLAClassList
88
+ from catalystwan.endpoints.configuration.policy.list.supervisory_disconnect import (
89
+ ConfigurationPolicySupervisoryDisconnectList,
90
+ )
66
91
  from catalystwan.endpoints.configuration.policy.list.tloc import ConfigurationPolicyTLOCList
92
+ from catalystwan.endpoints.configuration.policy.list.translation_profile import (
93
+ ConfigurationPolicyTranslationProfileList,
94
+ )
95
+ from catalystwan.endpoints.configuration.policy.list.translation_rules import ConfigurationPolicyTranslationRulesList
96
+ from catalystwan.endpoints.configuration.policy.list.trunkgroup import ConfigurationPolicyTrunkGroupList
67
97
  from catalystwan.endpoints.configuration.policy.list.url_allow_list import ConfigurationPolicyURLAllowList
68
98
  from catalystwan.endpoints.configuration.policy.list.url_block_list import ConfigurationPolicyURLBlockList
69
99
  from catalystwan.endpoints.configuration.policy.list.vpn import ConfigurationPolicyVPNList
70
100
  from catalystwan.endpoints.configuration.policy.list.zone import ConfigurationPolicyZoneList
71
101
  from catalystwan.endpoints.configuration.policy.security_template import ConfigurationSecurityTemplatePolicy
72
102
  from catalystwan.endpoints.configuration.policy.vedge_template import ConfigurationVEdgeTemplatePolicy
103
+ from catalystwan.endpoints.configuration.policy.voice_template import ConfigurationVoiceTemplatePolicy
73
104
  from catalystwan.endpoints.configuration.policy.vsmart_template import ConfigurationVSmartTemplatePolicy
105
+ from catalystwan.endpoints.configuration.policy_group import PolicyGroupEndpoints
74
106
  from catalystwan.endpoints.configuration.software_actions import ConfigurationSoftwareActions
107
+ from catalystwan.endpoints.configuration.topology_group import TopologyGroupEndpoints
75
108
  from catalystwan.endpoints.configuration_dashboard_status import ConfigurationDashboardStatus
76
109
  from catalystwan.endpoints.configuration_device_actions import ConfigurationDeviceActions
77
110
  from catalystwan.endpoints.configuration_device_inventory import ConfigurationDeviceInventory
@@ -80,11 +113,12 @@ from catalystwan.endpoints.configuration_feature_profile import (
80
113
  ConfigurationFeatureProfile,
81
114
  SDRoutingConfigurationFeatureProfile,
82
115
  )
116
+ from catalystwan.endpoints.configuration_general_template import ConfigurationGeneralTemplate
83
117
  from catalystwan.endpoints.configuration_group import ConfigurationGroup
84
118
  from catalystwan.endpoints.configuration_settings import ConfigurationSettings
119
+ from catalystwan.endpoints.configuration_template_master import ConfigurationTemplateMaster
85
120
  from catalystwan.endpoints.misc import MiscellaneousEndpoints
86
121
  from catalystwan.endpoints.monitoring.device_details import MonitoringDeviceDetails
87
- from catalystwan.endpoints.monitoring.security_policy import MonitoringSecurityPolicy
88
122
  from catalystwan.endpoints.monitoring.server_info import ServerInfo
89
123
  from catalystwan.endpoints.monitoring.status import MonitoringStatus
90
124
  from catalystwan.endpoints.real_time_monitoring.reboot_history import RealTimeMonitoringRebootHistory
@@ -93,7 +127,6 @@ from catalystwan.endpoints.tenant_backup_restore import TenantBackupRestore
93
127
  from catalystwan.endpoints.tenant_management import TenantManagement
94
128
  from catalystwan.endpoints.tenant_migration import TenantMigration
95
129
  from catalystwan.endpoints.troubleshooting_tools.device_connectivity import TroubleshootingToolsDeviceConnectivity
96
- from catalystwan.endpoints.url_monitoring import UrlMonitoring
97
130
 
98
131
  if TYPE_CHECKING:
99
132
  from catalystwan.session import ManagerSession
@@ -110,13 +143,17 @@ class ConfigurationPolicyListContainer:
110
143
  self.data_ipv6_prefix = ConfigurationPolicyDataIPv6PrefixList(session)
111
144
  self.data_prefix = ConfigurationPolicyDataPrefixList(session)
112
145
  self.expanded_community = ConfigurationPolicyExpandedCommunityList(session)
146
+ self.extended_community = ConfigurationPolicyExtendedCommunityList(session)
147
+ self.fax_protocol = ConfigurationPolicyFaxProtocolList(session)
113
148
  self.fqdn = ConfigurationPolicyFQDNList(session)
114
149
  self.geo_location = ConfigurationPolicyGeoLocationList(session)
115
150
  self.ips_signature = ConfigurationPolicyIPSSignatureList(session)
116
151
  self.ipv6_prefix = ConfigurationPolicyIPv6PrefixList(session)
117
152
  self.local_app = ConfigurationPolicyLocalAppList(session)
118
153
  self.local_domain = ConfigurationPolicyLocalDomainList(session)
154
+ self.media_profile = ConfigurationPolicyMediaProfileList(session)
119
155
  self.mirror = ConfigurationPolicyMirrorList(session)
156
+ self.modem_pass_through = ConfigurationPolicyModemPassThroughList(session)
120
157
  self.policer = ConfigurationPolicyPolicerClassList(session)
121
158
  self.port = ConfigurationPolicyPortList(session)
122
159
  self.preferred_color_group = ConfigurationPreferredColorGroupList(session)
@@ -125,44 +162,63 @@ class ConfigurationPolicyListContainer:
125
162
  self.region = ConfigurationPolicyRegionList(session)
126
163
  self.site = ConfigurationPolicySiteList(session)
127
164
  self.sla = ConfigurationPolicySLAClassList(session)
165
+ self.supervisory_disconnect = ConfigurationPolicySupervisoryDisconnectList(session)
128
166
  self.tloc = ConfigurationPolicyTLOCList(session)
129
- self.url_block_list = ConfigurationPolicyURLBlockList(session)
167
+ self.translation_profile = ConfigurationPolicyTranslationProfileList(session)
168
+ self.translation_rules = ConfigurationPolicyTranslationRulesList(session)
169
+ self.trunkgroup = ConfigurationPolicyTrunkGroupList(session)
130
170
  self.url_allow_list = ConfigurationPolicyURLAllowList(session)
171
+ self.url_block_list = ConfigurationPolicyURLBlockList(session)
131
172
  self.vpn = ConfigurationPolicyVPNList(session)
132
173
  self.zone = ConfigurationPolicyZoneList(session)
133
174
 
134
175
 
135
176
  class ConfigurationPolicyDefinitionContainer:
136
177
  def __init__(self, session: ManagerSession):
137
- self.data = ConfigurationPolicyDataDefinition(session)
138
- self.rule_set = ConfigurationPolicyRuleSetDefinition(session)
139
- self.security_group = ConfigurationPolicySecurityGroupDefinition(session)
140
- self.zone_based_firewall = ConfigurationPolicyZoneBasedFirewallDefinition(session)
141
- self.qos_map = ConfigurationPolicyQoSMapDefinition(session)
142
- self.rewrite = ConfigurationPolicyRewriteRuleDefinition(session)
143
- self.control = ConfigurationPolicyControlDefinition(session)
144
- self.vpn_membership = ConfigurationPolicyVPNMembershipGroupDefinition(session)
145
- self.hub_and_spoke = ConfigurationPolicyHubAndSpokeDefinition(session)
146
- self.mesh = ConfigurationPolicyMeshDefinition(session)
147
178
  self.acl = ConfigurationPolicyAclDefinition(session)
148
179
  self.acl_ipv6 = ConfigurationPolicyAclIPv6Definition(session)
180
+ self.advanced_inspection_profile = ConfigurationPolicyAIPDefinition(session)
181
+ self.advanced_malware_protection = ConfigurationPolicyAMPDefinition(session)
182
+ self.app_route = ConfigurationPolicyAppRouteDefinition(session)
183
+ self.control = ConfigurationPolicyControlDefinition(session)
184
+ self.data = ConfigurationPolicyDataDefinition(session)
149
185
  self.device_access = ConfigurationPolicyDeviceAccessDefinition(session)
150
186
  self.device_access_ipv6 = ConfigurationPolicyDeviceAccessIPv6Definition(session)
187
+ self.dial_peer = ConfigurationPolicyDialPeerDefinition(session)
188
+ self.fxo_port = ConfigurationPolicyFxoPortDefinition(session)
189
+ self.fxs_port = ConfigurationPolicyFxsPortDefinition(session)
190
+ self.fxs_did_port = ConfigurationPolicyFxsDidPortDefinition(session)
191
+ self.hub_and_spoke = ConfigurationPolicyHubAndSpokeDefinition(session)
192
+ self.mesh = ConfigurationPolicyMeshDefinition(session)
193
+ self.pri_isdn_port = ConfigurationPolicyPriIsdnPortDefinition(session)
194
+ self.qos_map = ConfigurationPolicyQoSMapDefinition(session)
195
+ self.rewrite = ConfigurationPolicyRewriteRuleDefinition(session)
196
+ self.rule_set = ConfigurationPolicyRuleSetDefinition(session)
197
+ self.security_group = ConfigurationPolicySecurityGroupDefinition(session)
198
+ self.srst_phone_profile = ConfigurationPolicySrstPhoneProfileDefinition(session)
199
+ self.vpn_membership = ConfigurationPolicyVPNMembershipGroupDefinition(session)
200
+ self.vpn_qos_map = ConfigurationPolicyVPNQoSMapDefinition(session)
201
+ self.zone_based_firewall = ConfigurationPolicyZoneBasedFirewallDefinition(session)
151
202
 
152
203
 
153
204
  class ConfigurationPolicyContainer:
154
205
  def __init__(self, session: ManagerSession):
155
- self.list = ConfigurationPolicyListContainer(session)
156
206
  self.definition = ConfigurationPolicyDefinitionContainer(session)
157
- self.vsmart_template = ConfigurationVSmartTemplatePolicy(session)
158
- self.vedge_template = ConfigurationVEdgeTemplatePolicy(session)
207
+ self.list = ConfigurationPolicyListContainer(session)
159
208
  self.security_template = ConfigurationSecurityTemplatePolicy(session)
209
+ self.vedge_template = ConfigurationVEdgeTemplatePolicy(session)
210
+ self.voice_template = ConfigurationVoiceTemplatePolicy(session)
211
+ self.vsmart_template = ConfigurationVSmartTemplatePolicy(session)
160
212
 
161
213
 
162
214
  class ConfigurationSDWANFeatureProfileContainer:
163
215
  def __init__(self, session: ManagerSession):
164
216
  self.transport = TransportFeatureProfile(client=session)
165
217
  self.system = SystemFeatureProfile(client=session)
218
+ self.cli = CliFeatureProfile(client=session)
219
+ self.topology = TopologyFeatureProfile(client=session)
220
+ self.policy = PolicyObjectFeatureProfile(client=session)
221
+ self.embedded_security = EmbeddedSecurityFeatureProfile(client=session)
166
222
 
167
223
 
168
224
  class ConfigurationFeatureProfileContainer:
@@ -173,7 +229,9 @@ class ConfigurationFeatureProfileContainer:
173
229
  class ConfigurationContainer:
174
230
  def __init__(self, session: ManagerSession):
175
231
  self.policy = ConfigurationPolicyContainer(session)
176
- self.feature_profile = ConfigurationFeatureProfileContainer(session=session)
232
+ self.feature_profile = ConfigurationFeatureProfileContainer(session)
233
+ self.topology_group = TopologyGroupEndpoints(session)
234
+ self.policy_group = PolicyGroupEndpoints(session)
177
235
 
178
236
 
179
237
  class TroubleshootingToolsContainer:
@@ -201,9 +259,9 @@ class APIEndpointContainter:
201
259
  self.configuration_software_actions = ConfigurationSoftwareActions(session)
202
260
  self.configuration_disaster_recovery = ConfigurationDisasterRecovery(session)
203
261
  self.monitoring_device_details = MonitoringDeviceDetails(session)
204
- self.monitoring_security_policy = MonitoringSecurityPolicy(session)
205
262
  self.monitoring_server_info = ServerInfo(session)
206
263
  self.monitoring_status = MonitoringStatus(session)
264
+ self.network_hierarchy = NetworkHierarchy(session)
207
265
  self.sdavc_cloud_connector = SDAVCCloudConnector(session)
208
266
  self.tenant_backup_restore = TenantBackupRestore(session)
209
267
  self.tenant_management = TenantManagement(session)
@@ -216,4 +274,6 @@ class APIEndpointContainter:
216
274
  self.misc = MiscellaneousEndpoints(session)
217
275
  self.real_time_monitoring = RealTimeMonitoringContainer(session)
218
276
  self.certificate_management_device = CertificateManagementDevice(session)
219
- self.url_monitoring = UrlMonitoring(session)
277
+ self.sig_security = SIGSecurity(session)
278
+ self.configuration_general_template = ConfigurationGeneralTemplate(session)
279
+ self.configuration_template_master = ConfigurationTemplateMaster(session)
@@ -15,9 +15,7 @@ class RebootEntry(BaseModel):
15
15
  reason: Optional[str] = Field(default=None, validation_alias=AliasChoices("reboot_reason", "reload-desc"))
16
16
  severity: Optional[str] = Field(default=None, validation_alias="reload-severity", description=">=17.13 only")
17
17
  category: Optional[str] = Field(default=None, validation_alias="reload-category", description=">=17.13 only")
18
- date_time: datetime = Field(
19
- validation_alias=AliasChoices("reboot_date_time-date", "reboot_date_time", "reload-time-date", "reload-time")
20
- )
18
+ date_time: datetime = Field(validation_alias=AliasChoices("reboot_date_time-date", "reload-time-date"))
21
19
  last_updated: datetime = Field(validation_alias="lastupdated")
22
20
  vdevice_name: str = Field(validation_alias="vdevice-name")
23
21
  vdevice_host_name: str = Field(validation_alias="vdevice-host-name")
@@ -19,6 +19,8 @@ class MigrationTokenQueryParams(BaseModel):
19
19
  @model_validator(mode="before")
20
20
  @classmethod
21
21
  def single_migration_id_required(cls, values: Any):
22
+ if not isinstance(values, dict):
23
+ return values
22
24
  migration_id = values.get("migrationId")
23
25
  if isinstance(migration_id, list) and len(migration_id) == 1:
24
26
  values["migrationId"] = migration_id[0]
catalystwan/exceptions.py CHANGED
@@ -32,6 +32,17 @@ class ManagerHTTPError(HTTPError, ManagerRequestException):
32
32
  _args = (str(_args[0]) + "\n" + info_str,) + _args[1:]
33
33
  super().__init__(*_args, **kwargs)
34
34
 
35
+ def details(self):
36
+ error_info_str = str(self.info) if self.info else "No error information"
37
+ request_str = (
38
+ f"Request: Method: {self.request.method}, URL: {self.request.url},"
39
+ f"Headers: {self.request.headers}, Body: {self.request.body}"
40
+ )
41
+ response_str = (
42
+ f"Response: {str(self.response.json())}" if self.response else "Response: No response information"
43
+ )
44
+ return f"{error_info_str}\n\n {request_str}\n\n {response_str}"
45
+
35
46
 
36
47
  class DefaultPasswordError(CatalystwanException):
37
48
  """Default password for SDWAN Manager user was detected and needs to be changed."""
@@ -178,6 +189,12 @@ class ManagerReadyTimeout(CatalystwanException):
178
189
  pass
179
190
 
180
191
 
192
+ class ApiGwAuthTimeout(CatalystwanException):
193
+ """Raised when waiting for API gateway authentication took longer than expected"""
194
+
195
+ pass
196
+
197
+
181
198
  class CatalystwanDeprecationWarning(DeprecationWarning):
182
199
  """Warning issued when using deprecated features or functionality in the Catalystwan SDK.
183
200
 
@@ -0,0 +1,81 @@
1
+ # Copyright 2024 Cisco Systems, Inc. and its affiliates
2
+ import logging
3
+ import os
4
+ import unittest
5
+ from typing import Union
6
+ from uuid import UUID, uuid4
7
+
8
+ from packaging.version import Version # type: ignore
9
+
10
+ from catalystwan.api.builders.feature_profiles.uc_voice import UcVoiceFeatureProfileAPI
11
+ from catalystwan.api.feature_profile_api import (
12
+ ApplicationPriorityFeatureProfileAPI,
13
+ CliFeatureProfileAPI,
14
+ DnsSecurityFeatureProfileAPI,
15
+ OtherFeatureProfileAPI,
16
+ ServiceFeatureProfileAPI,
17
+ SIGSecurityAPI,
18
+ SystemFeatureProfileAPI,
19
+ TransportFeatureProfileAPI,
20
+ )
21
+ from catalystwan.exceptions import CatalystwanException
22
+ from catalystwan.session import ManagerSession, create_manager_session
23
+
24
+ logger = logging.getLogger(__name__)
25
+
26
+ RUN_ID: str = str(uuid4())[:4]
27
+
28
+
29
+ def load_config() -> dict:
30
+ """Load the configuration from the environment variables"""
31
+ url = os.environ.get("VMANAGE_URL")
32
+ port = os.environ.get("VMANAGE_PORT")
33
+ username = os.environ.get("VMANAGE_USERNAME")
34
+ password = os.environ.get("VMANAGE_PASSWORD")
35
+ if url is None or port is None or username is None or password is None:
36
+ raise CatalystwanException("Missing environment variables")
37
+ return dict(
38
+ url=url,
39
+ username=username,
40
+ password=password,
41
+ port=port,
42
+ )
43
+
44
+
45
+ def create_session() -> ManagerSession:
46
+ """Try to create a session with the environment variables, if it fails, raise an exception"""
47
+ try:
48
+ session = create_manager_session(**load_config())
49
+ return session
50
+ except Exception:
51
+ raise CatalystwanException("Failed to create session")
52
+
53
+
54
+ SESSION = create_session()
55
+ IS_API_20_12: bool = SESSION.api_version == Version("20.12")
56
+
57
+
58
+ def create_name_with_run_id(name: str) -> str:
59
+ """Prevent collisions when running on the same resource"""
60
+ return f"{RUN_ID}_{name}"
61
+
62
+
63
+ class TestCaseBase(unittest.TestCase):
64
+ session: ManagerSession
65
+ profile_uuid: UUID
66
+
67
+ api: Union[
68
+ ApplicationPriorityFeatureProfileAPI,
69
+ CliFeatureProfileAPI,
70
+ DnsSecurityFeatureProfileAPI,
71
+ OtherFeatureProfileAPI,
72
+ ServiceFeatureProfileAPI,
73
+ SIGSecurityAPI,
74
+ SystemFeatureProfileAPI,
75
+ TransportFeatureProfileAPI,
76
+ UcVoiceFeatureProfileAPI,
77
+ ]
78
+
79
+ @classmethod
80
+ def setUpClass(cls) -> None:
81
+ cls.session = SESSION