catalystwan 0.41.2.dev9__py3-none-any.whl → 0.41.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (509) hide show
  1. catalystwan/ENDPOINTS.md +611 -0
  2. catalystwan/__init__.py +2 -3
  3. catalystwan/api/administration.py +2 -13
  4. catalystwan/api/api_container.py +1 -4
  5. catalystwan/api/config_group_api.py +16 -41
  6. catalystwan/api/configuration_groups/parcel.py +30 -100
  7. catalystwan/api/configuration_groups/parcels/cellular_controller.py +33 -0
  8. catalystwan/api/feature_profile_api.py +237 -2016
  9. catalystwan/api/policy_api.py +116 -470
  10. catalystwan/api/template_api.py +44 -113
  11. catalystwan/api/templates/README.md +47 -61
  12. catalystwan/api/templates/cli_template.py +7 -17
  13. catalystwan/api/templates/device_template/device_template.py +32 -127
  14. catalystwan/api/templates/device_template/device_template_payload.json.j2 +19 -0
  15. catalystwan/api/templates/feature_template.py +3 -3
  16. catalystwan/api/templates/models/cisco_aaa_model.py +42 -289
  17. catalystwan/api/templates/models/cisco_banner_model.py +2 -11
  18. catalystwan/api/templates/models/cisco_bfd_model.py +36 -31
  19. catalystwan/api/templates/models/cisco_bgp_model.py +131 -382
  20. catalystwan/api/templates/models/cisco_logging_model.py +43 -80
  21. catalystwan/api/templates/models/cisco_ntp_model.py +15 -34
  22. catalystwan/api/templates/models/cisco_omp_model.py +60 -70
  23. catalystwan/api/templates/models/cisco_ospf.py +74 -143
  24. catalystwan/api/templates/models/cisco_ospfv3.py +95 -217
  25. catalystwan/api/templates/models/cisco_secure_internet_gateway.py +142 -304
  26. catalystwan/api/templates/models/cisco_snmp_model.py +52 -66
  27. catalystwan/api/templates/models/cisco_system.py +129 -238
  28. catalystwan/api/templates/models/cisco_vpn_interface_model.py +275 -632
  29. catalystwan/api/templates/models/cisco_vpn_model.py +270 -433
  30. catalystwan/api/templates/models/cli_template.py +2 -3
  31. catalystwan/api/templates/models/omp_vsmart_model.py +10 -46
  32. catalystwan/api/templates/models/security_vsmart_model.py +8 -11
  33. catalystwan/api/templates/models/supported.py +4 -10
  34. catalystwan/api/templates/models/system_vsmart_model.py +27 -164
  35. catalystwan/apigw_auth.py +2 -6
  36. catalystwan/dataclasses.py +53 -2
  37. catalystwan/endpoints/__init__.py +41 -41
  38. catalystwan/endpoints/certificate_management_device.py +0 -4
  39. catalystwan/endpoints/cluster_management.py +9 -30
  40. catalystwan/endpoints/configuration/feature_profile/sdwan/policy_object.py +12 -35
  41. catalystwan/endpoints/configuration/feature_profile/sdwan/system.py +11 -164
  42. catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py +26 -144
  43. catalystwan/endpoints/configuration/policy/definition/access_control_list.py +11 -6
  44. catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py +11 -6
  45. catalystwan/endpoints/configuration/policy/definition/control.py +11 -6
  46. catalystwan/endpoints/configuration/policy/definition/device_access.py +11 -6
  47. catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py +11 -6
  48. catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py +11 -6
  49. catalystwan/endpoints/configuration/policy/definition/mesh.py +11 -2
  50. catalystwan/endpoints/configuration/policy/definition/qos_map.py +11 -2
  51. catalystwan/endpoints/configuration/policy/definition/rewrite.py +11 -6
  52. catalystwan/endpoints/configuration/policy/definition/rule_set.py +11 -2
  53. catalystwan/endpoints/configuration/policy/definition/security_group.py +11 -6
  54. catalystwan/endpoints/configuration/policy/definition/traffic_data.py +11 -6
  55. catalystwan/endpoints/configuration/policy/definition/vpn_membership.py +11 -6
  56. catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py +11 -6
  57. catalystwan/endpoints/configuration/policy/list/app.py +16 -3
  58. catalystwan/endpoints/configuration/policy/list/app_probe.py +15 -6
  59. catalystwan/endpoints/configuration/policy/list/as_path.py +16 -3
  60. catalystwan/endpoints/configuration/policy/list/class_map.py +16 -3
  61. catalystwan/endpoints/configuration/policy/list/color.py +16 -3
  62. catalystwan/endpoints/configuration/policy/list/community.py +16 -3
  63. catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py +15 -6
  64. catalystwan/endpoints/configuration/policy/list/data_prefix.py +16 -3
  65. catalystwan/endpoints/configuration/policy/list/expanded_community.py +15 -6
  66. catalystwan/endpoints/configuration/policy/list/fqdn.py +16 -3
  67. catalystwan/endpoints/configuration/policy/list/geo_location.py +16 -3
  68. catalystwan/endpoints/configuration/policy/list/ips_signature.py +15 -6
  69. catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py +16 -3
  70. catalystwan/endpoints/configuration/policy/list/local_app.py +16 -3
  71. catalystwan/endpoints/configuration/policy/list/local_domain.py +16 -3
  72. catalystwan/endpoints/configuration/policy/list/mirror.py +16 -3
  73. catalystwan/endpoints/configuration/policy/list/policer.py +16 -3
  74. catalystwan/endpoints/configuration/policy/list/port.py +16 -3
  75. catalystwan/endpoints/configuration/policy/list/preferred_color_group.py +15 -6
  76. catalystwan/endpoints/configuration/policy/list/prefix.py +16 -4
  77. catalystwan/endpoints/configuration/policy/list/protocol_name.py +15 -6
  78. catalystwan/endpoints/configuration/policy/list/region.py +10 -2
  79. catalystwan/endpoints/configuration/policy/list/site.py +16 -3
  80. catalystwan/endpoints/configuration/policy/list/sla.py +16 -3
  81. catalystwan/endpoints/configuration/policy/list/tloc.py +16 -3
  82. catalystwan/endpoints/configuration/policy/list/url_allow_list.py +16 -3
  83. catalystwan/endpoints/configuration/policy/list/url_block_list.py +16 -3
  84. catalystwan/endpoints/configuration/policy/list/vpn.py +16 -3
  85. catalystwan/endpoints/configuration/policy/list/zone.py +16 -3
  86. catalystwan/endpoints/configuration/policy/security_template.py +3 -2
  87. catalystwan/endpoints/configuration/software_actions.py +4 -2
  88. catalystwan/endpoints/configuration_dashboard_status.py +2 -2
  89. catalystwan/endpoints/configuration_device_template.py +1 -15
  90. catalystwan/endpoints/configuration_feature_profile.py +11 -8
  91. catalystwan/endpoints/configuration_group.py +5 -28
  92. catalystwan/endpoints/configuration_settings.py +1 -90
  93. catalystwan/endpoints/endpoints_container.py +18 -82
  94. catalystwan/endpoints/real_time_monitoring/reboot_history.py +3 -1
  95. catalystwan/endpoints/tenant_migration.py +0 -2
  96. catalystwan/exceptions.py +0 -24
  97. catalystwan/integration_tests/test_find_template_values.py +18 -7
  98. catalystwan/models/common.py +2 -1898
  99. catalystwan/models/configuration/common.py +0 -1
  100. catalystwan/models/configuration/config_migration.py +36 -0
  101. catalystwan/models/configuration/feature_profile/common.py +149 -634
  102. catalystwan/models/configuration/feature_profile/sdwan/management/vpn.py +26 -0
  103. catalystwan/models/configuration/feature_profile/sdwan/policy_object/__init__.py +60 -69
  104. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/app_probe.py +20 -34
  105. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/application_list.py +6 -8
  106. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/color_list.py +5 -7
  107. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/data_prefix.py +4 -13
  108. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/expanded_community_list.py +7 -9
  109. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/fowarding_class.py +5 -7
  110. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_data_prefix.py +9 -11
  111. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_prefix_list.py +10 -25
  112. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/{policer.py → policier.py} +10 -12
  113. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefered_group_color.py +10 -29
  114. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefix_list.py +8 -23
  115. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/sla_class.py +31 -12
  116. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/standard_community.py +10 -16
  117. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/tloc_list.py +7 -8
  118. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/application_list.py +6 -8
  119. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/data_prefix.py +5 -7
  120. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/fqdn.py +5 -7
  121. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/geolocation_list.py +5 -7
  122. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ips_signature.py +5 -7
  123. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/local_domain.py +5 -7
  124. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/protocol_list.py +5 -7
  125. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/security_port.py +11 -21
  126. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url.py +15 -36
  127. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/zone.py +18 -14
  128. catalystwan/models/configuration/feature_profile/sdwan/service/acl.py +409 -0
  129. catalystwan/models/configuration/feature_profile/sdwan/service/appqoe.py +42 -77
  130. catalystwan/models/configuration/feature_profile/sdwan/service/bgp.py +288 -0
  131. catalystwan/models/configuration/feature_profile/sdwan/service/dhcp_server.py +64 -107
  132. catalystwan/models/configuration/feature_profile/sdwan/service/eigrp.py +42 -39
  133. catalystwan/models/configuration/feature_profile/sdwan/service/lan/common.py +88 -7
  134. catalystwan/models/configuration/feature_profile/sdwan/service/lan/ethernet.py +156 -232
  135. catalystwan/models/configuration/feature_profile/sdwan/service/lan/gre.py +108 -38
  136. catalystwan/models/configuration/feature_profile/sdwan/service/lan/ipsec.py +84 -77
  137. catalystwan/models/configuration/feature_profile/sdwan/service/lan/svi.py +56 -62
  138. catalystwan/models/configuration/feature_profile/sdwan/service/lan/vpn.py +121 -112
  139. catalystwan/models/configuration/feature_profile/sdwan/service/multicast.py +57 -56
  140. catalystwan/models/configuration/feature_profile/sdwan/service/object_tracker.py +21 -15
  141. catalystwan/models/configuration/feature_profile/sdwan/{routing → service}/ospf.py +47 -55
  142. catalystwan/models/configuration/feature_profile/sdwan/{routing → service}/ospfv3.py +72 -74
  143. catalystwan/models/configuration/feature_profile/sdwan/service/route_policy.py +110 -358
  144. catalystwan/models/configuration/feature_profile/sdwan/service/service_insertion_attachment.py +25 -17
  145. catalystwan/models/configuration/feature_profile/sdwan/service/switchport.py +58 -50
  146. catalystwan/models/configuration/feature_profile/sdwan/service/tracker.py +21 -12
  147. catalystwan/models/configuration/feature_profile/sdwan/service/wireless_lan.py +31 -27
  148. catalystwan/models/configuration/feature_profile/sdwan/system/aaa.py +10 -58
  149. catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_controller.py +23 -26
  150. catalystwan/models/configuration/profile_type.py +6 -1
  151. catalystwan/models/policy/__init__.py +69 -282
  152. catalystwan/models/policy/centralized.py +29 -26
  153. catalystwan/models/policy/{definition → definitions}/access_control_list.py +17 -47
  154. catalystwan/models/policy/{definition → definitions}/access_control_list_ipv6.py +18 -42
  155. catalystwan/models/policy/{definition → definitions}/control.py +25 -48
  156. catalystwan/models/policy/{definition → definitions}/device_access.py +11 -22
  157. catalystwan/models/policy/{definition → definitions}/device_access_ipv6.py +11 -20
  158. catalystwan/models/policy/{definition → definitions}/hub_and_spoke.py +4 -18
  159. catalystwan/models/policy/{definition → definitions}/mesh.py +1 -13
  160. catalystwan/models/policy/{definition → definitions}/qos_map.py +32 -39
  161. catalystwan/models/policy/{definition → definitions}/rewrite.py +2 -12
  162. catalystwan/models/policy/{definition → definitions}/rule_set.py +48 -66
  163. catalystwan/models/policy/{definition → definitions}/security_group.py +14 -38
  164. catalystwan/models/policy/{definition → definitions}/traffic_data.py +61 -184
  165. catalystwan/models/policy/{definition → definitions}/vpn_membership.py +1 -13
  166. catalystwan/models/policy/{definition → definitions}/zone_based_firewall.py +32 -93
  167. catalystwan/models/policy/lists.py +330 -0
  168. catalystwan/models/policy/lists_entries.py +444 -0
  169. catalystwan/models/policy/localized.py +16 -34
  170. catalystwan/models/policy/policy.py +10 -14
  171. catalystwan/models/policy/policy_definition.py +173 -673
  172. catalystwan/models/policy/policy_list.py +27 -38
  173. catalystwan/models/policy/security.py +46 -145
  174. catalystwan/response.py +2 -6
  175. catalystwan/session.py +1 -1
  176. catalystwan/tests/templates/definitions/{cisco_vpn_basic.json → Basic_Cisco_VPN_Model.json} +2 -2
  177. catalystwan/tests/templates/definitions/complex_aaa.json +277 -0
  178. catalystwan/tests/templates/definitions/{cisco_vpn_complex.json → complex_cisco_vpn.json} +12 -27
  179. catalystwan/tests/templates/definitions/{cisco_aaa.json → iuo.json} +15 -44
  180. catalystwan/tests/templates/definitions/omp_1.json +11 -0
  181. catalystwan/tests/templates/definitions/{omp_vsmart_2.json → omp_2.json} +2 -16
  182. catalystwan/tests/templates/definitions/{omp_vsmart_3.json → omp_3.json} +2 -16
  183. catalystwan/tests/templates/models/__init__.py +13 -46
  184. catalystwan/tests/templates/models/cisco_aaa.py +48 -81
  185. catalystwan/tests/templates/models/cisco_banner.py +2 -2
  186. catalystwan/tests/templates/models/cisco_bfd.py +6 -4
  187. catalystwan/tests/templates/models/cisco_system.py +3 -108
  188. catalystwan/tests/templates/models/cisco_vpn.py +72 -42
  189. catalystwan/tests/templates/models/omp_vsmart.py +8 -28
  190. catalystwan/tests/templates/schemas/cedge_aaa.json +1 -1
  191. catalystwan/tests/templates/schemas/cisco_system.json +0 -242
  192. catalystwan/tests/templates/schemas/cisco_vpn.json +1 -53
  193. catalystwan/tests/templates/schemas/omp-vsmart.json +0 -20
  194. catalystwan/tests/templates/test_chose_model.py +10 -6
  195. catalystwan/tests/templates/test_deserialize_model.py +4 -4
  196. catalystwan/tests/templates/test_find_template_values.py +0 -229
  197. catalystwan/tests/templates/test_serialize_model.py +2 -1
  198. catalystwan/tests/test_cli_template.py +9 -8
  199. catalystwan/tests/test_endpoints.py +11 -42
  200. catalystwan/tests/test_templates.py +19 -16
  201. catalystwan/utils/feature_template/find_template_values.py +9 -22
  202. catalystwan/utils/timezone.py +422 -0
  203. catalystwan/workflows/tenant_migration.py +1 -1
  204. {catalystwan-0.41.2.dev9.dist-info → catalystwan-0.41.3.dist-info}/METADATA +1 -20
  205. catalystwan-0.41.3.dist-info/RECORD +353 -0
  206. catalystwan/api/builders/__init__.py +0 -14
  207. catalystwan/api/builders/feature_profiles/__init__.py +0 -0
  208. catalystwan/api/builders/feature_profiles/application_priority.py +0 -58
  209. catalystwan/api/builders/feature_profiles/builder_factory.py +0 -59
  210. catalystwan/api/builders/feature_profiles/cli.py +0 -76
  211. catalystwan/api/builders/feature_profiles/mixins.py +0 -44
  212. catalystwan/api/builders/feature_profiles/other.py +0 -79
  213. catalystwan/api/builders/feature_profiles/report.py +0 -155
  214. catalystwan/api/builders/feature_profiles/service.py +0 -248
  215. catalystwan/api/builders/feature_profiles/system.py +0 -80
  216. catalystwan/api/builders/feature_profiles/transport.py +0 -256
  217. catalystwan/api/builders/feature_profiles/uc_voice.py +0 -287
  218. catalystwan/api/templates/models/aaa_model.py +0 -387
  219. catalystwan/api/templates/models/vpn_vsmart_interface_model.py +0 -198
  220. catalystwan/api/templates/models/vpn_vsmart_model.py +0 -124
  221. catalystwan/endpoints/configuration/feature_profile/sdwan/application_priority.py +0 -107
  222. catalystwan/endpoints/configuration/feature_profile/sdwan/cli.py +0 -60
  223. catalystwan/endpoints/configuration/feature_profile/sdwan/dns_security.py +0 -83
  224. catalystwan/endpoints/configuration/feature_profile/sdwan/embedded_security.py +0 -88
  225. catalystwan/endpoints/configuration/feature_profile/sdwan/other.py +0 -62
  226. catalystwan/endpoints/configuration/feature_profile/sdwan/service.py +0 -154
  227. catalystwan/endpoints/configuration/feature_profile/sdwan/sig_security.py +0 -88
  228. catalystwan/endpoints/configuration/feature_profile/sdwan/topology.py +0 -93
  229. catalystwan/endpoints/configuration/feature_profile/sdwan/uc_voice.py +0 -77
  230. catalystwan/endpoints/configuration/network_hierarchy.py +0 -47
  231. catalystwan/endpoints/configuration/packages.py +0 -36
  232. catalystwan/endpoints/configuration/policy/abstractions.py +0 -49
  233. catalystwan/endpoints/configuration/policy/definition/aip.py +0 -52
  234. catalystwan/endpoints/configuration/policy/definition/amp.py +0 -52
  235. catalystwan/endpoints/configuration/policy/definition/app_route.py +0 -50
  236. catalystwan/endpoints/configuration/policy/definition/cflowd.py +0 -46
  237. catalystwan/endpoints/configuration/policy/definition/dial_peer.py +0 -57
  238. catalystwan/endpoints/configuration/policy/definition/dns_security.py +0 -50
  239. catalystwan/endpoints/configuration/policy/definition/fxo_port.py +0 -57
  240. catalystwan/endpoints/configuration/policy/definition/fxs_did_port.py +0 -57
  241. catalystwan/endpoints/configuration/policy/definition/fxs_port.py +0 -57
  242. catalystwan/endpoints/configuration/policy/definition/intrusion_prevention.py +0 -52
  243. catalystwan/endpoints/configuration/policy/definition/pri_isdn_port.py +0 -57
  244. catalystwan/endpoints/configuration/policy/definition/route_policy.py +0 -50
  245. catalystwan/endpoints/configuration/policy/definition/srst_phone_profile.py +0 -59
  246. catalystwan/endpoints/configuration/policy/definition/ssl_decryption.py +0 -50
  247. catalystwan/endpoints/configuration/policy/definition/ssl_decryption_utd_profile.py +0 -52
  248. catalystwan/endpoints/configuration/policy/definition/url_filtering.py +0 -50
  249. catalystwan/endpoints/configuration/policy/definition/vpn_qos_map.py +0 -50
  250. catalystwan/endpoints/configuration/policy/list/extended_community.py +0 -52
  251. catalystwan/endpoints/configuration/policy/list/fax_protocol.py +0 -48
  252. catalystwan/endpoints/configuration/policy/list/identity.py +0 -48
  253. catalystwan/endpoints/configuration/policy/list/media_profile.py +0 -52
  254. catalystwan/endpoints/configuration/policy/list/modem_pass_through.py +0 -52
  255. catalystwan/endpoints/configuration/policy/list/scalable_group_tag.py +0 -52
  256. catalystwan/endpoints/configuration/policy/list/supervisory_disconnect.py +0 -52
  257. catalystwan/endpoints/configuration/policy/list/threat_grid_api_key.py +0 -52
  258. catalystwan/endpoints/configuration/policy/list/translation_profile.py +0 -52
  259. catalystwan/endpoints/configuration/policy/list/translation_rules.py +0 -52
  260. catalystwan/endpoints/configuration/policy/list/trunkgroup.py +0 -48
  261. catalystwan/endpoints/configuration/policy/list/umbrella_data.py +0 -52
  262. catalystwan/endpoints/configuration/policy/voice_template.py +0 -39
  263. catalystwan/endpoints/configuration/policy_group.py +0 -30
  264. catalystwan/endpoints/configuration/topology_group.py +0 -51
  265. catalystwan/endpoints/configuration_general_template.py +0 -31
  266. catalystwan/endpoints/configuration_template_master.py +0 -48
  267. catalystwan/integration_tests/base.py +0 -81
  268. catalystwan/integration_tests/feature_profile/sdwan/__init__.py +0 -0
  269. catalystwan/integration_tests/feature_profile/sdwan/policy/__init__.py +0 -0
  270. catalystwan/integration_tests/feature_profile/sdwan/policy/base.py +0 -33
  271. catalystwan/integration_tests/feature_profile/sdwan/policy/test_extended_community.py +0 -33
  272. catalystwan/integration_tests/feature_profile/sdwan/policy/test_security_app_list.py +0 -32
  273. catalystwan/integration_tests/feature_profile/sdwan/test_application_priority.py +0 -433
  274. catalystwan/integration_tests/feature_profile/sdwan/test_cli.py +0 -54
  275. catalystwan/integration_tests/feature_profile/sdwan/test_dns_security.py +0 -106
  276. catalystwan/integration_tests/feature_profile/sdwan/test_other.py +0 -49
  277. catalystwan/integration_tests/feature_profile/sdwan/test_service.py +0 -1078
  278. catalystwan/integration_tests/feature_profile/sdwan/test_sig_security.py +0 -322
  279. catalystwan/integration_tests/feature_profile/sdwan/test_ssl_decryption.py +0 -85
  280. catalystwan/integration_tests/feature_profile/sdwan/test_system.py +0 -368
  281. catalystwan/integration_tests/feature_profile/sdwan/test_tracker.py +0 -127
  282. catalystwan/integration_tests/feature_profile/sdwan/test_transport.py +0 -1698
  283. catalystwan/integration_tests/feature_profile/sdwan/topology/test_topology.py +0 -93
  284. catalystwan/integration_tests/feature_profile/test_parcel.py +0 -54
  285. catalystwan/integration_tests/profile_builder/__init__.py +0 -0
  286. catalystwan/integration_tests/profile_builder/test_pb_service.py +0 -197
  287. catalystwan/integration_tests/profile_builder/test_pb_transport.py +0 -226
  288. catalystwan/integration_tests/profile_builder/test_pb_uc_voice.py +0 -277
  289. catalystwan/integration_tests/test_data/__init__.py +0 -117
  290. catalystwan/integration_tests/test_network_hierarchy.py +0 -82
  291. catalystwan/integration_tests/test_settings.py +0 -30
  292. catalystwan/models/configuration/feature_profile/parcel.py +0 -245
  293. catalystwan/models/configuration/feature_profile/sdwan/acl/__init__.py +0 -13
  294. catalystwan/models/configuration/feature_profile/sdwan/acl/ipv4acl.py +0 -298
  295. catalystwan/models/configuration/feature_profile/sdwan/acl/ipv6acl.py +0 -344
  296. catalystwan/models/configuration/feature_profile/sdwan/application_priority/__init__.py +0 -218
  297. catalystwan/models/configuration/feature_profile/sdwan/application_priority/cloud_probe.py +0 -61
  298. catalystwan/models/configuration/feature_profile/sdwan/application_priority/policy_settings.py +0 -31
  299. catalystwan/models/configuration/feature_profile/sdwan/application_priority/qos_policy.py +0 -102
  300. catalystwan/models/configuration/feature_profile/sdwan/application_priority/traffic_policy.py +0 -1057
  301. catalystwan/models/configuration/feature_profile/sdwan/cli/__init__.py +0 -23
  302. catalystwan/models/configuration/feature_profile/sdwan/cli/config.py +0 -18
  303. catalystwan/models/configuration/feature_profile/sdwan/cli/full_config.py +0 -15
  304. catalystwan/models/configuration/feature_profile/sdwan/dns_security/__init__.py +0 -13
  305. catalystwan/models/configuration/feature_profile/sdwan/dns_security/dns.py +0 -110
  306. catalystwan/models/configuration/feature_profile/sdwan/embedded_security/__init__.py +0 -23
  307. catalystwan/models/configuration/feature_profile/sdwan/embedded_security/ngfirewall.py +0 -493
  308. catalystwan/models/configuration/feature_profile/sdwan/embedded_security/policy.py +0 -171
  309. catalystwan/models/configuration/feature_profile/sdwan/other/__init__.py +0 -25
  310. catalystwan/models/configuration/feature_profile/sdwan/other/cybervision.py +0 -44
  311. catalystwan/models/configuration/feature_profile/sdwan/other/thousandeyes.py +0 -147
  312. catalystwan/models/configuration/feature_profile/sdwan/other/ucse.py +0 -110
  313. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/as_path.py +0 -22
  314. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/extended_community.py +0 -34
  315. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv4_network_object.py +0 -15
  316. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv4_service_object.py +0 -254
  317. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/mirror.py +0 -27
  318. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/network_object_group.py +0 -15
  319. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/object_group.py +0 -15
  320. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/service_object_group.py +0 -21
  321. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/aip.py +0 -64
  322. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/amp.py +0 -79
  323. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/identity.py +0 -30
  324. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/intrusion_prevention.py +0 -58
  325. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/object_group.py +0 -72
  326. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/rule_set.py +0 -137
  327. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/scalable_group_tag.py +0 -26
  328. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption.py +0 -126
  329. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption_profile.py +0 -165
  330. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url_filtering.py +0 -148
  331. catalystwan/models/configuration/feature_profile/sdwan/routing/__init__.py +0 -26
  332. catalystwan/models/configuration/feature_profile/sdwan/routing/bgp.py +0 -609
  333. catalystwan/models/configuration/feature_profile/sdwan/service/__init__.py +0 -91
  334. catalystwan/models/configuration/feature_profile/sdwan/service/dual_router_ha.py +0 -26
  335. catalystwan/models/configuration/feature_profile/sdwan/service/lan/multilink.py +0 -101
  336. catalystwan/models/configuration/feature_profile/sdwan/service/service_chain.py +0 -38
  337. catalystwan/models/configuration/feature_profile/sdwan/sig_security/__init__.py +0 -19
  338. catalystwan/models/configuration/feature_profile/sdwan/sig_security/sig_security.py +0 -379
  339. catalystwan/models/configuration/feature_profile/sdwan/system/__init__.py +0 -59
  340. catalystwan/models/configuration/feature_profile/sdwan/system/banner.py +0 -30
  341. catalystwan/models/configuration/feature_profile/sdwan/system/basic.py +0 -290
  342. catalystwan/models/configuration/feature_profile/sdwan/system/bfd.py +0 -69
  343. catalystwan/models/configuration/feature_profile/sdwan/system/device_access.py +0 -157
  344. catalystwan/models/configuration/feature_profile/sdwan/system/device_access_ipv6.py +0 -157
  345. catalystwan/models/configuration/feature_profile/sdwan/system/global_parcel.py +0 -163
  346. catalystwan/models/configuration/feature_profile/sdwan/system/logging_parcel.py +0 -162
  347. catalystwan/models/configuration/feature_profile/sdwan/system/mrf.py +0 -75
  348. catalystwan/models/configuration/feature_profile/sdwan/system/ntp.py +0 -103
  349. catalystwan/models/configuration/feature_profile/sdwan/system/omp.py +0 -120
  350. catalystwan/models/configuration/feature_profile/sdwan/system/security.py +0 -179
  351. catalystwan/models/configuration/feature_profile/sdwan/system/snmp.py +0 -173
  352. catalystwan/models/configuration/feature_profile/sdwan/topology/__init__.py +0 -29
  353. catalystwan/models/configuration/feature_profile/sdwan/topology/custom_control.py +0 -425
  354. catalystwan/models/configuration/feature_profile/sdwan/topology/hubspoke.py +0 -60
  355. catalystwan/models/configuration/feature_profile/sdwan/topology/mesh.py +0 -23
  356. catalystwan/models/configuration/feature_profile/sdwan/trackers/__init__.py +0 -36
  357. catalystwan/models/configuration/feature_profile/sdwan/trackers/tracker.py +0 -96
  358. catalystwan/models/configuration/feature_profile/sdwan/trackers/tracker_group.py +0 -63
  359. catalystwan/models/configuration/feature_profile/sdwan/transport/__init__.py +0 -93
  360. catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_profile.py +0 -71
  361. catalystwan/models/configuration/feature_profile/sdwan/transport/gps.py +0 -37
  362. catalystwan/models/configuration/feature_profile/sdwan/transport/management/ethernet.py +0 -121
  363. catalystwan/models/configuration/feature_profile/sdwan/transport/t1e1controller.py +0 -124
  364. catalystwan/models/configuration/feature_profile/sdwan/transport/vpn.py +0 -285
  365. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/cellular.py +0 -173
  366. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ethernet.py +0 -389
  367. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/gre.py +0 -46
  368. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ipsec.py +0 -137
  369. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/multilink.py +0 -219
  370. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/protocol_over.py +0 -405
  371. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/t1e1serial.py +0 -195
  372. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/__init__.py +0 -62
  373. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/analog_interface.py +0 -436
  374. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/call_routing.py +0 -179
  375. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/digital_interface.py +0 -380
  376. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/dsp_farm.py +0 -193
  377. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/media_profile.py +0 -17
  378. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/server_group.py +0 -51
  379. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/srst.py +0 -86
  380. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/supervisory_disconnect.py +0 -69
  381. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_profile.py +0 -42
  382. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_rule.py +0 -31
  383. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/trunk_group.py +0 -26
  384. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_global.py +0 -57
  385. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_tenant.py +0 -40
  386. catalystwan/models/configuration/network_hierarchy/__init__.py +0 -24
  387. catalystwan/models/configuration/network_hierarchy/cflowd.py +0 -128
  388. catalystwan/models/configuration/network_hierarchy/node.py +0 -88
  389. catalystwan/models/configuration/network_hierarchy/security_logging.py +0 -91
  390. catalystwan/models/configuration/packages.py +0 -57
  391. catalystwan/models/configuration/policy_group.py +0 -74
  392. catalystwan/models/configuration/topology_group.py +0 -52
  393. catalystwan/models/policy/definition/aip.py +0 -60
  394. catalystwan/models/policy/definition/amp.py +0 -65
  395. catalystwan/models/policy/definition/app_route.py +0 -246
  396. catalystwan/models/policy/definition/cflowd.py +0 -95
  397. catalystwan/models/policy/definition/dial_peer.py +0 -60
  398. catalystwan/models/policy/definition/dns_security.py +0 -130
  399. catalystwan/models/policy/definition/fxo_port.py +0 -63
  400. catalystwan/models/policy/definition/fxs_did_port.py +0 -58
  401. catalystwan/models/policy/definition/fxs_port.py +0 -56
  402. catalystwan/models/policy/definition/intrusion_prevention.py +0 -55
  403. catalystwan/models/policy/definition/pri_isdn_port.py +0 -48
  404. catalystwan/models/policy/definition/route_policy.py +0 -187
  405. catalystwan/models/policy/definition/srst_phone_profile.py +0 -37
  406. catalystwan/models/policy/definition/ssl_decryption.py +0 -209
  407. catalystwan/models/policy/definition/ssl_decryption_utd_profile.py +0 -88
  408. catalystwan/models/policy/definition/url_filtering.py +0 -70
  409. catalystwan/models/policy/definition/vpn_qos_map.py +0 -46
  410. catalystwan/models/policy/list/app.py +0 -44
  411. catalystwan/models/policy/list/app_probe.py +0 -42
  412. catalystwan/models/policy/list/as_path.py +0 -30
  413. catalystwan/models/policy/list/class_map.py +0 -30
  414. catalystwan/models/policy/list/color.py +0 -28
  415. catalystwan/models/policy/list/communities.py +0 -83
  416. catalystwan/models/policy/list/data_ipv6_prefix.py +0 -30
  417. catalystwan/models/policy/list/data_prefix.py +0 -30
  418. catalystwan/models/policy/list/fax_protocol.py +0 -45
  419. catalystwan/models/policy/list/fqdn.py +0 -24
  420. catalystwan/models/policy/list/geo_location.py +0 -33
  421. catalystwan/models/policy/list/identity.py +0 -29
  422. catalystwan/models/policy/list/ips_signature.py +0 -27
  423. catalystwan/models/policy/list/ipv6_prefix.py +0 -33
  424. catalystwan/models/policy/list/local_app.py +0 -45
  425. catalystwan/models/policy/list/local_domain.py +0 -36
  426. catalystwan/models/policy/list/media_profile.py +0 -44
  427. catalystwan/models/policy/list/mirror.py +0 -27
  428. catalystwan/models/policy/list/modem_pass_through.py +0 -27
  429. catalystwan/models/policy/list/policer.py +0 -39
  430. catalystwan/models/policy/list/port.py +0 -33
  431. catalystwan/models/policy/list/preferred_color_group.py +0 -82
  432. catalystwan/models/policy/list/prefix.py +0 -33
  433. catalystwan/models/policy/list/protocol_name.py +0 -26
  434. catalystwan/models/policy/list/region.py +0 -45
  435. catalystwan/models/policy/list/scalable_group_tag.py +0 -30
  436. catalystwan/models/policy/list/site.py +0 -34
  437. catalystwan/models/policy/list/sla.py +0 -77
  438. catalystwan/models/policy/list/supervisory_disconnect.py +0 -62
  439. catalystwan/models/policy/list/threat_grid_api_key.py +0 -32
  440. catalystwan/models/policy/list/tloc.py +0 -32
  441. catalystwan/models/policy/list/translation_profile.py +0 -32
  442. catalystwan/models/policy/list/translation_rules.py +0 -29
  443. catalystwan/models/policy/list/trunkgroup.py +0 -56
  444. catalystwan/models/policy/list/umbrella_data.py +0 -30
  445. catalystwan/models/policy/list/url.py +0 -39
  446. catalystwan/models/policy/list/vpn.py +0 -40
  447. catalystwan/models/policy/list/zone.py +0 -46
  448. catalystwan/models/policy/voice.py +0 -77
  449. catalystwan/models/settings.py +0 -41
  450. catalystwan/models/templates.py +0 -79
  451. catalystwan/tests/builders/test_report.py +0 -60
  452. catalystwan/tests/builders/uc_voice.py +0 -85
  453. catalystwan/tests/models/__init__.py +0 -0
  454. catalystwan/tests/models/configuration/feature_profile/sdwan/policy_object/security/test_url.py +0 -73
  455. catalystwan/tests/models/test_digital_interface.py +0 -56
  456. catalystwan/tests/templates/definitions/aaa_basic.json +0 -96
  457. catalystwan/tests/templates/definitions/aaa_complex.json +0 -464
  458. catalystwan/tests/templates/definitions/cisco_aaa_complex.json +0 -361
  459. catalystwan/tests/templates/definitions/cisco_logging_complex.json +0 -268
  460. catalystwan/tests/templates/definitions/cisco_ntp_complex.json +0 -143
  461. catalystwan/tests/templates/definitions/cisco_omp_complex.json +0 -175
  462. catalystwan/tests/templates/definitions/cisco_ospf_complex.json +0 -302
  463. catalystwan/tests/templates/definitions/cisco_sig.json +0 -405
  464. catalystwan/tests/templates/definitions/cisco_snmp_complex.json +0 -258
  465. catalystwan/tests/templates/definitions/cisco_system_complex.json +0 -502
  466. catalystwan/tests/templates/definitions/cisco_vpn_interface_complex.json +0 -821
  467. catalystwan/tests/templates/definitions/omp_vsmart_1.json +0 -26
  468. catalystwan/tests/templates/definitions/omp_vsmart_complex.json +0 -73
  469. catalystwan/tests/templates/definitions/security_vsmart_complex.json +0 -24
  470. catalystwan/tests/templates/definitions/system_vsmart_complex.json +0 -193
  471. catalystwan/tests/templates/definitions/vpn_vsmart_basic.json +0 -17
  472. catalystwan/tests/templates/definitions/vpn_vsmart_complex.json +0 -179
  473. catalystwan/tests/templates/definitions/vpn_vsmart_interface_basic.json +0 -42
  474. catalystwan/tests/templates/definitions/vpn_vsmart_interface_complex.json +0 -208
  475. catalystwan/tests/templates/models/aaa.py +0 -106
  476. catalystwan/tests/templates/models/cisco_logging.py +0 -65
  477. catalystwan/tests/templates/models/cisco_ntp.py +0 -17
  478. catalystwan/tests/templates/models/cisco_omp.py +0 -37
  479. catalystwan/tests/templates/models/cisco_ospf.py +0 -60
  480. catalystwan/tests/templates/models/cisco_secure_internet_gateway.py +0 -95
  481. catalystwan/tests/templates/models/cisco_snmp.py +0 -40
  482. catalystwan/tests/templates/models/cisco_vpn_interface.py +0 -200
  483. catalystwan/tests/templates/models/security_vsmart.py +0 -11
  484. catalystwan/tests/templates/models/system_vsmart.py +0 -37
  485. catalystwan/tests/templates/models/vpn_vsmart.py +0 -32
  486. catalystwan/tests/templates/models/vpn_vsmart_interface.py +0 -54
  487. catalystwan/tests/templates/schemas/aaa.json +0 -1096
  488. catalystwan/tests/templates/schemas/cisco_logging.json +0 -577
  489. catalystwan/tests/templates/schemas/cisco_ntp.json +0 -265
  490. catalystwan/tests/templates/schemas/cisco_omp.json +0 -479
  491. catalystwan/tests/templates/schemas/cisco_ospf.json +0 -908
  492. catalystwan/tests/templates/schemas/cisco_secure_internet_gateway.json +0 -1520
  493. catalystwan/tests/templates/schemas/cisco_snmp.json +0 -561
  494. catalystwan/tests/templates/schemas/cisco_vpn_interface.json +0 -3348
  495. catalystwan/tests/templates/schemas/security-vsmart.json +0 -58
  496. catalystwan/tests/templates/schemas/system-vsmart.json +0 -2585
  497. catalystwan/tests/templates/schemas/vpn-vsmart-interface.json +0 -859
  498. catalystwan/tests/templates/schemas/vpn-vsmart.json +0 -445
  499. catalystwan/tests/templates/test_find_template_values_2.py +0 -193
  500. catalystwan/tests/test_feature_profile_api.py +0 -282
  501. catalystwan/tests/test_models_common.py +0 -53
  502. catalystwan/utils/model.py +0 -48
  503. catalystwan/utils/persona.py +0 -5
  504. catalystwan/utils/type_check.py +0 -22
  505. catalystwan/workflows/backup_restore_device_templates.py +0 -467
  506. catalystwan-0.41.2.dev9.dist-info/RECORD +0 -641
  507. /catalystwan/tests/templates/definitions/{cisco_banner.json → banner_1.json} +0 -0
  508. {catalystwan-0.41.2.dev9.dist-info → catalystwan-0.41.3.dist-info}/LICENSE +0 -0
  509. {catalystwan-0.41.2.dev9.dist-info → catalystwan-0.41.3.dist-info}/WHEEL +0 -0
@@ -1,79 +0,0 @@
1
- # Copyright 2024 Cisco Systems, Inc. and its affiliates
2
- from __future__ import annotations
3
-
4
- import logging
5
- from typing import TYPE_CHECKING, List
6
- from uuid import UUID
7
-
8
- from catalystwan.api.builders.feature_profiles.report import FeatureProfileBuildReport, handle_create_parcel
9
- from catalystwan.api.feature_profile_api import OtherFeatureProfileAPI
10
- from catalystwan.endpoints.configuration.feature_profile.sdwan.other import OtherFeatureProfile
11
- from catalystwan.models.configuration.feature_profile.common import FeatureProfileCreationPayload
12
- from catalystwan.models.configuration.feature_profile.sdwan.other import AnyOtherParcel
13
-
14
- logger = logging.getLogger(__name__)
15
-
16
- if TYPE_CHECKING:
17
- from catalystwan.session import ManagerSession
18
-
19
-
20
- class OtherFeatureProfileBuilder:
21
- """
22
- A class for building Other feature profiles.
23
- """
24
-
25
- def __init__(self, session: ManagerSession) -> None:
26
- """
27
- Initialize a new instance of the Service class.
28
-
29
- Args:
30
- session (ManagerSession): The ManagerSession object used for API communication.
31
- profile_uuid (UUID): The UUID of the profile.
32
- """
33
- self._profile: FeatureProfileCreationPayload
34
- self._api = OtherFeatureProfileAPI(session)
35
- self._endpoints = OtherFeatureProfile(session)
36
- self._independent_items: List[AnyOtherParcel] = []
37
-
38
- def add_profile_name_and_description(self, feature_profile: FeatureProfileCreationPayload) -> None:
39
- """
40
- Adds a name and description to the feature profile.
41
-
42
- Args:
43
- name (str): The name of the feature profile.
44
- description (str): The description of the feature profile.
45
-
46
- Returns:
47
- None
48
- """
49
- self._profile = feature_profile
50
-
51
- def add_parcel(self, parcel: AnyOtherParcel) -> None:
52
- """
53
- Adds a parcel to the feature profile.
54
-
55
- Args:
56
- parcel (AnySystemParcel): The parcel to add.
57
-
58
- Returns:
59
- None
60
- """
61
- self._independent_items.append(parcel)
62
-
63
- def build(self) -> FeatureProfileBuildReport:
64
- """
65
- Builds the feature profile.
66
-
67
- Returns:
68
- UUID: The UUID of the created feature profile.
69
- """
70
-
71
- profile_uuid = self._endpoints.create_sdwan_other_feature_profile(self._profile).id
72
- self.build_report = FeatureProfileBuildReport(profile_uuid=profile_uuid, profile_name=self._profile.name)
73
- for parcel in self._independent_items:
74
- self._create_parcel(profile_uuid, parcel)
75
- return self.build_report
76
-
77
- @handle_create_parcel
78
- def _create_parcel(self, profile_uuid: UUID, parcel: AnyOtherParcel) -> UUID:
79
- return self._api.create_parcel(profile_uuid, parcel).id
@@ -1,155 +0,0 @@
1
- # Copyright 2023 Cisco Systems, Inc. and its affiliates
2
- import functools
3
- import logging
4
- from typing import Any, List, Optional, Tuple, Union
5
- from uuid import UUID
6
-
7
- from pydantic import BaseModel, ConfigDict, Field
8
- from requests import PreparedRequest, Request, Response
9
-
10
- from catalystwan.exceptions import ManagerErrorInfo, ManagerHTTPError
11
- from catalystwan.models.configuration.feature_profile.parcel import AnyParcel
12
-
13
- logger = logging.getLogger(__name__)
14
-
15
-
16
- def handle_create_parcel(func):
17
- @functools.wraps(func)
18
- def wrapper(self, profile_uuid: UUID, parcel: AnyParcel, *args, **kwargs) -> Optional[UUID]:
19
- try:
20
- uuid = func(self, profile_uuid, parcel, *args, **kwargs)
21
- self.build_report.add_created_parcel(parcel.parcel_name, uuid)
22
- return uuid
23
- except ManagerHTTPError as e:
24
- self.build_report.add_failed_parcel(
25
- parcel_name=parcel.parcel_name,
26
- parcel_type=parcel._get_parcel_type(),
27
- error=e,
28
- )
29
- return None
30
-
31
- return wrapper
32
-
33
-
34
- class FailedRequestDetails(BaseModel):
35
- method: str
36
- url: str
37
- body: str
38
-
39
- @classmethod
40
- def from_request(cls, request: Union[Request, PreparedRequest, Any]) -> "FailedRequestDetails":
41
- if isinstance(request, (Request, PreparedRequest)):
42
- return cls(
43
- method=str(request.method),
44
- url=str(request.url),
45
- body=str(request.body if hasattr(request, "body") else ""),
46
- )
47
- return cls.as_empty()
48
-
49
- @classmethod
50
- def as_empty(cls) -> "FailedRequestDetails":
51
- return cls(method="", url="", body="")
52
-
53
-
54
- class ResponseDetails(BaseModel):
55
- status_code: int
56
- reason: str
57
-
58
- @classmethod
59
- def from_response(cls, response: Union[Response, Any]) -> "ResponseDetails":
60
- if isinstance(response, Response):
61
- return cls(status_code=response.status_code, reason=response.reason)
62
- return cls.as_empty()
63
-
64
- @classmethod
65
- def as_empty(cls) -> "ResponseDetails":
66
- return cls(status_code=-1, reason="")
67
-
68
-
69
- class FailedParcel(BaseModel):
70
- model_config = ConfigDict(populate_by_name=True)
71
- parcel_name: str = Field(serialization_alias="parcelName", validation_alias="parcelName")
72
- parcel_type: str = Field(serialization_alias="parcelType", validation_alias="parcelType")
73
- error_info: Union[ManagerErrorInfo, str] = Field(serialization_alias="errorInfo", validation_alias="errorInfo")
74
- request_details: Optional[FailedRequestDetails] = Field(
75
- default=None, serialization_alias="requestDetails", validation_alias="requestDetails"
76
- )
77
- response_details: Optional[ResponseDetails] = Field(
78
- default=None, serialization_alias="responseDetails", validation_alias="responseDetails"
79
- )
80
-
81
- @classmethod
82
- def from_error(
83
- cls,
84
- parcel_name: str,
85
- parcel_type: str,
86
- error: ManagerHTTPError,
87
- ):
88
- return cls(
89
- parcel_name=parcel_name,
90
- parcel_type=parcel_type,
91
- error_info=error.info,
92
- request_details=FailedRequestDetails.from_request(error.request),
93
- response_details=ResponseDetails.from_response(error.response),
94
- )
95
-
96
-
97
- class FeatureProfileBuildReport(BaseModel):
98
- model_config = ConfigDict(populate_by_name=True)
99
- profile_name: str = Field(serialization_alias="profileName", validation_alias="profileName")
100
- profile_uuid: UUID = Field(serialization_alias="profileUuid", validation_alias="profileUuid")
101
- created_parcels: List[Tuple[str, UUID]] = Field(
102
- default_factory=list, serialization_alias="createdParcels", validation_alias="createdParcels"
103
- )
104
- failed_parcels: List[FailedParcel] = Field(
105
- default_factory=list, serialization_alias="failedParcels", validation_alias="failedParcels"
106
- )
107
-
108
- def add_created_parcel(self, parcel_name: str, parcel_uuid: UUID) -> None:
109
- self.created_parcels.append((parcel_name, parcel_uuid))
110
-
111
- def add_failed_parcel(
112
- self,
113
- parcel_name: str,
114
- parcel_type: str,
115
- error: ManagerHTTPError,
116
- ) -> None:
117
- self.failed_parcels.append(
118
- FailedParcel.from_error(
119
- parcel_name=parcel_name,
120
- parcel_type=parcel_type,
121
- error=error,
122
- )
123
- )
124
-
125
-
126
- def hande_failed_sub_parcel(build_report: FeatureProfileBuildReport, parent: AnyParcel, subparcel: AnyParcel) -> None:
127
- parent_failed_to_create_message = (
128
- f"Parent parcel: {parent.parcel_name} failed to create. This subparcel is dependent on it."
129
- )
130
- build_report.failed_parcels.append(
131
- FailedParcel(
132
- parcel_name=subparcel.parcel_name,
133
- parcel_type=subparcel._get_parcel_type(),
134
- error_info=parent_failed_to_create_message,
135
- ),
136
- )
137
-
138
-
139
- class handle_association_request:
140
- def __init__(self, build_report: FeatureProfileBuildReport, parcel: AnyParcel) -> None:
141
- self.build_report = build_report
142
- self.parcel = parcel
143
-
144
- def __enter__(self) -> "handle_association_request":
145
- return self
146
-
147
- def __exit__(self, exc_type, exc_val, exc_tb):
148
- if exc_type is not None:
149
- if issubclass(exc_type, ManagerHTTPError):
150
- self.build_report.add_failed_parcel(
151
- parcel_name=self.parcel.parcel_name, parcel_type=self.parcel._get_parcel_type(), error=exc_val
152
- )
153
- else:
154
- logger.exception(exc_val)
155
- return True
@@ -1,248 +0,0 @@
1
- # Copyright 2023 Cisco Systems, Inc. and its affiliates
2
- from __future__ import annotations
3
-
4
- import logging
5
- from collections import defaultdict
6
- from typing import TYPE_CHECKING, Dict, List, Optional, Set, Tuple, Union
7
- from uuid import UUID, uuid4
8
-
9
- from pydantic import Field
10
- from typing_extensions import Annotated
11
-
12
- from catalystwan.api.builders.feature_profiles.mixins import TrackerMixin
13
- from catalystwan.api.builders.feature_profiles.report import (
14
- FeatureProfileBuildReport,
15
- hande_failed_sub_parcel,
16
- handle_association_request,
17
- handle_create_parcel,
18
- )
19
- from catalystwan.api.feature_profile_api import ServiceFeatureProfileAPI
20
- from catalystwan.endpoints.configuration.feature_profile.sdwan.service import ServiceFeatureProfile
21
- from catalystwan.models.configuration.feature_profile.common import FeatureProfileCreationPayload
22
- from catalystwan.models.configuration.feature_profile.parcel import ParcelAssociationPayload
23
- from catalystwan.models.configuration.feature_profile.sdwan.routing import AnyRoutingParcel
24
- from catalystwan.models.configuration.feature_profile.sdwan.service import (
25
- AnyServiceParcel,
26
- AppqoeParcel,
27
- InterfaceEthernetParcel,
28
- InterfaceGreParcel,
29
- InterfaceIpsecParcel,
30
- InterfaceSviParcel,
31
- LanVpnDhcpServerParcel,
32
- LanVpnParcel,
33
- )
34
- from catalystwan.models.configuration.feature_profile.sdwan.service.multicast import MulticastParcel
35
- from catalystwan.models.configuration.feature_profile.sdwan.trackers import Tracker, TrackerGroup
36
-
37
- if TYPE_CHECKING:
38
- from catalystwan.session import ManagerSession
39
-
40
- logger = logging.getLogger(__name__)
41
-
42
- IndependedParcels = Annotated[Union[AppqoeParcel, LanVpnDhcpServerParcel], Field(discriminator="type_")]
43
- DependedVpnSubparcels = Annotated[
44
- Union[InterfaceGreParcel, InterfaceSviParcel, InterfaceEthernetParcel, InterfaceIpsecParcel, MulticastParcel],
45
- Field(discriminator="type_"),
46
- ]
47
-
48
-
49
- class ServiceFeatureProfileBuilder(TrackerMixin):
50
- """
51
- A class for building service feature profiles.
52
- """
53
-
54
- def __init__(self, session: ManagerSession):
55
- """
56
- Initialize a new instance of the Service class.
57
-
58
- Args:
59
- session (ManagerSession): The ManagerSession object used for API communication.
60
- profile_uuid (UUID): The UUID of the profile.
61
- """
62
- self._profile: FeatureProfileCreationPayload
63
- self._api = ServiceFeatureProfileAPI(session)
64
- self._endpoints = ServiceFeatureProfile(session)
65
- self._independent_items: List[IndependedParcels] = []
66
- self._independent_items_vpns: Dict[UUID, LanVpnParcel] = {}
67
- self._dependent_items_on_vpns: Dict[UUID, List[Tuple[UUID, DependedVpnSubparcels]]] = defaultdict(list)
68
- self._dependent_routing_items_on_vpns: Dict[UUID, List[AnyRoutingParcel]] = defaultdict(list)
69
- self._interfaces_with_attached_dhcp_server: Dict[str, LanVpnDhcpServerParcel] = {}
70
- # Trackers
71
- self.init_tracker()
72
-
73
- def add_profile_name_and_description(self, feature_profile: FeatureProfileCreationPayload) -> None:
74
- """
75
- Adds a name and description to the feature profile.
76
-
77
- Args:
78
- name (str): The name of the feature profile.
79
- description (str): The description of the feature profile.
80
-
81
- Returns:
82
- None
83
- """
84
- self._profile = feature_profile
85
-
86
- def add_parcel(self, parcel: IndependedParcels) -> None:
87
- """
88
- Adds an independent parcel to the builder.
89
-
90
- Args:
91
- parcel (IndependedParcels): The independent parcel to add.
92
-
93
- Returns:
94
- None
95
- """
96
- self._independent_items.append(parcel)
97
-
98
- def add_parcel_vpn(self, parcel: LanVpnParcel) -> UUID:
99
- """
100
- Adds a VPN parcel to the builder.
101
-
102
- Args:
103
- parcel (LanVpnParcel): The VPN parcel to add.
104
-
105
- Returns:
106
- UUID: The UUID tag of the added VPN parcel.
107
- """
108
- vpn_tag = uuid4()
109
- logger.debug(f"Adding VPN parcel {parcel.parcel_name} with tag {vpn_tag}")
110
- self._independent_items_vpns[vpn_tag] = parcel
111
- return vpn_tag
112
-
113
- def add_parcel_routing_attached(self, vpn_tag: UUID, parcel: AnyRoutingParcel) -> None:
114
- """
115
- Adds a routing parcel to the builder.
116
-
117
- Args:
118
- vpn_tag (UUID): The UUID of the VPN.
119
- parcel (AnyServiceParcel): The routing parcel to add.
120
-
121
- Returns:
122
- None
123
- """
124
- logger.debug(f"Adding routing parcel {parcel.parcel_name} to VPN {vpn_tag}")
125
- self._dependent_routing_items_on_vpns[vpn_tag].append(parcel)
126
-
127
- def add_parcel_vpn_subparcel(self, vpn_tag: UUID, parcel: DependedVpnSubparcels) -> UUID:
128
- """
129
- Adds an subparcel parcel dependent on a VPN to the builder.
130
-
131
- Args:
132
- vpn_tag (UUID): The UUID of the VPN.
133
- parcel (DependedVpnSubparcels): The interface parcel to add.
134
-
135
- Returns:
136
- None
137
- """
138
-
139
- subparcel_tag = uuid4()
140
- logger.debug(f"Adding vpn sub-parcel {parcel.parcel_name} with tag {subparcel_tag}")
141
- self._dependent_items_on_vpns[vpn_tag].append((subparcel_tag, parcel))
142
- return subparcel_tag
143
-
144
- def add_parcel_dhcp_server(self, interface_parcel_name: str, parcel: LanVpnDhcpServerParcel) -> None:
145
- """
146
- Adds a DHCP server parcel to the builder.
147
-
148
- Args:
149
- interface_tag (UUID): The UUID of the interface.
150
- parcel (LanVpnDhcpServerParcel): The DHCP server parcel to add.
151
-
152
- Returns:
153
- UUID: The UUID tag of the added DHCP server parcel.
154
- """
155
- logger.debug(f"Adding DHCP server parcel {parcel.parcel_name} to interface {interface_parcel_name}")
156
- self._interfaces_with_attached_dhcp_server[interface_parcel_name] = parcel
157
-
158
- def add_tracker(self, associate_tags: Set[UUID], tracker: Tracker) -> None:
159
- """
160
- Adds a tracker parcel to the feature profile.
161
-
162
- Args:
163
- associate_tags (Set[UUID]): The UUIDs of the interfaces to which the tracker should be added.
164
- tracker (Tracker): The tracker parcel to add.
165
-
166
- Returns:
167
- None
168
- """
169
- self._trackers.append((associate_tags, tracker))
170
-
171
- def add_tracker_group(self, associate_tags: Set[UUID], group: TrackerGroup, trackers: List[Tracker]) -> None:
172
- self._tracker_groups.append((associate_tags, group, trackers))
173
-
174
- def build(self) -> FeatureProfileBuildReport:
175
- """
176
- Builds the feature profile by creating parcels for independent items,
177
- VPNs, and sub-parcels dependent on VPNs.
178
-
179
- Returns:
180
- Service feature profile UUID
181
- """
182
- profile_uuid = self._endpoints.create_sdwan_service_feature_profile(self._profile).id
183
- self.build_report = FeatureProfileBuildReport(profile_uuid=profile_uuid, profile_name=self._profile.name)
184
- for parcel in self._independent_items:
185
- self._create_parcel(profile_uuid, parcel)
186
-
187
- self.create_trackers(profile_uuid=profile_uuid)
188
-
189
- for vpn_tag, vpn_parcel in self._independent_items_vpns.items():
190
- vpn_uuid = self._create_parcel(profile_uuid, vpn_parcel)
191
-
192
- for routing_parcel in self._dependent_routing_items_on_vpns[vpn_tag]:
193
- if vpn_uuid is None:
194
- hande_failed_sub_parcel(self.build_report, vpn_parcel, routing_parcel)
195
- else:
196
- routing_uuid = self._create_parcel(profile_uuid, routing_parcel)
197
- if not routing_uuid:
198
- continue
199
- with handle_association_request(self.build_report, routing_parcel):
200
- self._endpoints.associate_with_vpn(
201
- profile_uuid,
202
- vpn_uuid,
203
- routing_parcel._get_parcel_type(),
204
- payload=ParcelAssociationPayload(parcel_id=routing_uuid),
205
- )
206
-
207
- for subparcel_tag, sub_parcel in self._dependent_items_on_vpns[vpn_tag]:
208
- if vpn_uuid is None:
209
- hande_failed_sub_parcel(self.build_report, vpn_parcel, sub_parcel)
210
- else:
211
- parcel_uuid = self._create_parcel(profile_uuid, sub_parcel, vpn_uuid)
212
- dhcp_server = self._interfaces_with_attached_dhcp_server.get(sub_parcel.parcel_name)
213
- if parcel_uuid is None and dhcp_server:
214
- # The parent could not be created
215
- hande_failed_sub_parcel(self.build_report, sub_parcel, dhcp_server)
216
- continue
217
-
218
- if dhcp_server:
219
- dhcp_server_uuid = self._create_parcel(profile_uuid, dhcp_server)
220
- if dhcp_server_uuid is not None:
221
- with handle_association_request(self.build_report, sub_parcel):
222
- self._endpoints.associate_dhcp_server_with_vpn_interface(
223
- profile_uuid=profile_uuid,
224
- vpn_uuid=vpn_uuid,
225
- interface_parcel_type=sub_parcel._get_parcel_type().replace("lan/vpn/", ""),
226
- interface_uuid=parcel_uuid,
227
- payload=ParcelAssociationPayload(parcel_id=dhcp_server_uuid),
228
- )
229
-
230
- # Associate tracker with VPN interface if it exists
231
- if subparcel_tag in self._interface_tag_to_existing_tracker and parcel_uuid:
232
- tracker_uuid, tracker_type = self._interface_tag_to_existing_tracker[subparcel_tag]
233
- sub_parcel_type = sub_parcel._get_parcel_type().replace("lan/vpn/", "")
234
- with handle_association_request(self.build_report, sub_parcel):
235
- self._endpoints.associate_tracker_with_vpn_interface(
236
- profile_uuid,
237
- vpn_uuid,
238
- sub_parcel_type,
239
- parcel_uuid,
240
- tracker_type,
241
- ParcelAssociationPayload(parcel_id=tracker_uuid),
242
- )
243
-
244
- return self.build_report
245
-
246
- @handle_create_parcel
247
- def _create_parcel(self, profile_uuid: UUID, parcel: AnyServiceParcel, vpn_uuid: Optional[None] = None) -> UUID:
248
- return self._api.create_parcel(profile_uuid, parcel, vpn_uuid).id
@@ -1,80 +0,0 @@
1
- # Copyright 2023 Cisco Systems, Inc. and its affiliates
2
- from __future__ import annotations
3
-
4
- import logging
5
- from typing import TYPE_CHECKING, List
6
- from uuid import UUID
7
-
8
- from catalystwan.api.builders.feature_profiles.report import FeatureProfileBuildReport, handle_create_parcel
9
- from catalystwan.api.feature_profile_api import SystemFeatureProfileAPI
10
- from catalystwan.endpoints.configuration.feature_profile.sdwan.system import SystemFeatureProfile
11
- from catalystwan.models.configuration.feature_profile.common import FeatureProfileCreationPayload
12
- from catalystwan.models.configuration.feature_profile.sdwan.system import AnySystemParcel
13
-
14
- logger = logging.getLogger(__name__)
15
-
16
- if TYPE_CHECKING:
17
- from catalystwan.session import ManagerSession
18
-
19
-
20
- class SystemFeatureProfileBuilder:
21
- """
22
- A class for building system feature profiles.
23
- """
24
-
25
- def __init__(self, session: ManagerSession) -> None:
26
- """
27
- Initialize a new instance of the Service class.
28
-
29
- Args:
30
- session (ManagerSession): The ManagerSession object used for API communication.
31
- profile_uuid (UUID): The UUID of the profile.
32
- """
33
-
34
- self._profile: FeatureProfileCreationPayload
35
- self._api = SystemFeatureProfileAPI(session)
36
- self._endpoints = SystemFeatureProfile(session)
37
- self._independent_items: List[AnySystemParcel] = []
38
-
39
- def add_profile_name_and_description(self, feature_profile: FeatureProfileCreationPayload) -> None:
40
- """
41
- Adds a name and description to the feature profile.
42
-
43
- Args:
44
- name (str): The name of the feature profile.
45
- description (str): The description of the feature profile.
46
-
47
- Returns:
48
- None
49
- """
50
- self._profile = feature_profile
51
-
52
- def add_parcel(self, parcel: AnySystemParcel) -> None:
53
- """
54
- Adds a parcel to the feature profile.
55
-
56
- Args:
57
- parcel (AnySystemParcel): The parcel to add.
58
-
59
- Returns:
60
- None
61
- """
62
- self._independent_items.append(parcel)
63
-
64
- def build(self) -> FeatureProfileBuildReport:
65
- """
66
- Builds the feature profile.
67
-
68
- Returns:
69
- UUID: The UUID of the created feature profile.
70
- """
71
-
72
- profile_uuid = self._endpoints.create_sdwan_system_feature_profile(self._profile).id
73
- self.build_report = FeatureProfileBuildReport(profile_uuid=profile_uuid, profile_name=self._profile.name)
74
- for parcel in self._independent_items:
75
- self._create_parcels(profile_uuid, parcel)
76
- return self.build_report
77
-
78
- @handle_create_parcel
79
- def _create_parcels(self, profile_uuid: UUID, parcel: AnySystemParcel) -> UUID:
80
- return self._api.create_parcel(profile_uuid, parcel).id