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,256 +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 catalystwan.api.builders.feature_profiles.mixins import TrackerMixin
10
- from catalystwan.api.builders.feature_profiles.report import (
11
- FeatureProfileBuildReport,
12
- hande_failed_sub_parcel,
13
- handle_association_request,
14
- handle_create_parcel,
15
- )
16
- from catalystwan.api.feature_profile_api import TransportFeatureProfileAPI
17
- from catalystwan.endpoints.configuration.feature_profile.sdwan.transport import TransportFeatureProfile
18
- from catalystwan.models.configuration.feature_profile.common import FeatureProfileCreationPayload
19
- from catalystwan.models.configuration.feature_profile.parcel import ParcelAssociationPayload
20
- from catalystwan.models.configuration.feature_profile.sdwan.routing import AnyRoutingParcel
21
- from catalystwan.models.configuration.feature_profile.sdwan.trackers import Tracker, TrackerGroup
22
- from catalystwan.models.configuration.feature_profile.sdwan.transport import (
23
- AnyTransportParcel,
24
- AnyTransportSuperParcel,
25
- AnyTransportVpnParcel,
26
- AnyTransportVpnSubParcel,
27
- )
28
- from catalystwan.models.configuration.feature_profile.sdwan.transport.cellular_controller import (
29
- CellularControllerParcel,
30
- )
31
- from catalystwan.models.configuration.feature_profile.sdwan.transport.cellular_profile import CellularProfileParcel
32
- from catalystwan.models.configuration.feature_profile.sdwan.transport.gps import GpsParcel
33
-
34
- logger = logging.getLogger(__name__)
35
-
36
- if TYPE_CHECKING:
37
- from catalystwan.session import ManagerSession
38
-
39
-
40
- class TransportAndManagementProfileBuilder(TrackerMixin):
41
- """
42
- A class for building system feature profiles.
43
- """
44
-
45
- def __init__(self, session: ManagerSession) -> None:
46
- """
47
- Initialize a new instance of the Service class.
48
-
49
- Args:
50
- session (ManagerSession): The ManagerSession object used for API communication.
51
- profile_uuid (UUID): The UUID of the profile.
52
- """
53
- self._profile: FeatureProfileCreationPayload
54
- self._api = TransportFeatureProfileAPI(session)
55
- self._endpoints = TransportFeatureProfile(session)
56
- self._independent_items: List[AnyTransportSuperParcel] = []
57
- self._independent_items_vpns: Dict[UUID, AnyTransportVpnParcel] = {}
58
- self._independent_items_cellular_controllers: Dict[UUID, CellularControllerParcel] = {}
59
- self._dependent_items_on_vpns: Dict[UUID, List[Tuple[UUID, AnyTransportVpnSubParcel]]] = defaultdict(list)
60
- self._dependent_routing_items_on_vpns: Dict[UUID, List[AnyRoutingParcel]] = defaultdict(list)
61
- self._dependent_items_on_cellular_controllers: Dict[
62
- UUID, List[Union[CellularProfileParcel, GpsParcel]]
63
- ] = defaultdict(list)
64
- # Trackers
65
- self.init_tracker()
66
-
67
- def add_profile_name_and_description(self, feature_profile: FeatureProfileCreationPayload) -> None:
68
- """
69
- Adds a name and description to the feature profile.
70
-
71
- Args:
72
- name (str): The name of the feature profile.
73
- description (str): The description of the feature profile.
74
-
75
- Returns:
76
- None
77
- """
78
- self._profile = feature_profile
79
-
80
- def add_parcel(self, parcel: AnyTransportSuperParcel) -> None:
81
- """
82
- Adds a parcel to the feature profile.
83
-
84
- Args:
85
- parcel (AnyTransportSuperParcel): The parcel to add.
86
-
87
- Returns:
88
- None
89
- """
90
- self._independent_items.append(parcel)
91
-
92
- def add_parcel_routing_attached(self, vpn_tag: UUID, parcel: AnyRoutingParcel) -> None:
93
- """
94
- Adds a routing parcel to the feature profile.
95
-
96
- Args:
97
- parcel (AnyRoutingParcel): The parcel to add.
98
-
99
- Returns:
100
- None
101
- """
102
- logger.debug(f"Attaching routing {parcel.parcel_name} with to VPN with tag {vpn_tag}")
103
- self._dependent_routing_items_on_vpns[vpn_tag].append(parcel)
104
-
105
- def add_parcel_vpn(self, parcel: AnyTransportVpnParcel) -> UUID:
106
- """
107
- Adds a VPN parcel to the builder.
108
-
109
- Args:
110
- parcel (LanVpnParcel): The VPN parcel to add.
111
-
112
- Returns:
113
- UUID: The UUID tag of the added VPN parcel.
114
- """
115
- vpn_tag = uuid4()
116
- logger.debug(f"Adding VPN parcel {parcel.parcel_name} with tag {vpn_tag}")
117
- self._independent_items_vpns[vpn_tag] = parcel
118
- return vpn_tag
119
-
120
- def add_parcel_cellular_controller(self, parcel: CellularControllerParcel) -> UUID:
121
- """
122
- Adds a cellular controller parcel to the builder.
123
-
124
- Args:
125
- parcel (CellularControllerParcel): The cellular controller parcel to add.
126
-
127
- Returns:
128
- UUID: The UUID tag of the added cellular controller parcel.
129
- """
130
- cellular_controller_tag = uuid4()
131
- logger.debug(f"Adding cellular controller parcel {parcel.parcel_name} with tag {cellular_controller_tag}")
132
- self._independent_items_cellular_controllers[cellular_controller_tag] = parcel
133
- return cellular_controller_tag
134
-
135
- def add_cellular_controller_subparcel(
136
- self, cellular_controller_tag: UUID, parcel: Union[CellularProfileParcel, GpsParcel]
137
- ) -> None:
138
- """
139
- Adds a subparcel to the cellular controller parcel.
140
-
141
- Args:
142
- cellular_controller_tag (UUID): The UUID of the cellular controller.
143
- parcel (Union[CellularProfileParcel, GpsParcel]): The subparcel to add.
144
-
145
- Returns:
146
- None
147
- """
148
- self._dependent_items_on_cellular_controllers[cellular_controller_tag].append(parcel)
149
-
150
- def add_vpn_subparcel(self, vpn_tag: UUID, parcel: AnyTransportVpnSubParcel) -> UUID:
151
- """
152
- Adds a parcel to the feature profile.
153
-
154
- Args:
155
- parcel (AnyTransportVpnSubParcel): The parcel to add.
156
-
157
- Returns:
158
- None
159
- """
160
- subparcel_tag = uuid4()
161
- logger.debug(f"Adding vpn sub-parcel {parcel.parcel_name} with tag {vpn_tag}")
162
- self._dependent_items_on_vpns[vpn_tag].append((subparcel_tag, parcel))
163
- return subparcel_tag
164
-
165
- def add_tracker(self, associate_tags: Set[UUID], tracker: Tracker) -> None:
166
- """
167
- Adds a tracker parcel to the feature profile.
168
-
169
- Args:
170
- associate_tags (Set[UUID]): The UUIDs of the interfaces to which the tracker should be added.
171
- tracker (Tracker): The tracker parcel to add.
172
-
173
- Returns:
174
- None
175
- """
176
- self._trackers.append((associate_tags, tracker))
177
-
178
- def add_tracker_group(self, associate_tags: Set[UUID], group: TrackerGroup, trackers: List[Tracker]) -> None:
179
- self._tracker_groups.append((associate_tags, group, trackers))
180
-
181
- def build(self) -> FeatureProfileBuildReport:
182
- """
183
- Builds the feature profile.
184
-
185
- Returns:
186
- UUID: The UUID of the created feature profile.
187
- """
188
-
189
- profile_uuid = self._endpoints.create_transport_feature_profile(self._profile).id
190
- self.build_report = FeatureProfileBuildReport(profile_uuid=profile_uuid, profile_name=self._profile.name)
191
- for parcel in self._independent_items:
192
- self._create_parcel(profile_uuid, parcel)
193
-
194
- self.create_trackers(profile_uuid=profile_uuid)
195
-
196
- for vpn_tag, vpn_parcel in self._independent_items_vpns.items():
197
- vpn_uuid = self._create_parcel(profile_uuid, vpn_parcel)
198
- for vpn_subparcel_tag, vpn_subparcel in self._dependent_items_on_vpns[vpn_tag]:
199
- if vpn_uuid is None:
200
- hande_failed_sub_parcel(self.build_report, vpn_parcel, vpn_subparcel)
201
- else:
202
- vpn_subparcel_uuid = self._create_parcel(profile_uuid, vpn_subparcel, vpn_uuid)
203
-
204
- # Associate tracker with VPN interface if it exists
205
- if vpn_subparcel_tag in self._interface_tag_to_existing_tracker and vpn_subparcel_uuid:
206
- tracker_uuid, tracker_type = self._interface_tag_to_existing_tracker[vpn_subparcel_tag]
207
- vpn_subparcel_type = (
208
- vpn_subparcel._get_parcel_type().replace("wan/vpn/", "").replace("management/vpn/", "")
209
- )
210
- with handle_association_request(self.build_report, vpn_subparcel):
211
- self._endpoints.associate_tracker_with_vpn_interface(
212
- profile_uuid,
213
- vpn_uuid,
214
- vpn_subparcel_type,
215
- vpn_subparcel_uuid,
216
- tracker_type,
217
- ParcelAssociationPayload(parcel_id=tracker_uuid),
218
- )
219
-
220
- for routing_parcel in self._dependent_routing_items_on_vpns[vpn_tag]:
221
- if vpn_uuid is None:
222
- hande_failed_sub_parcel(self.build_report, vpn_parcel, routing_parcel)
223
- else:
224
- routing_uuid = self._create_parcel(profile_uuid, routing_parcel)
225
- if not routing_uuid:
226
- continue
227
- with handle_association_request(self.build_report, routing_parcel):
228
- self._endpoints.associate_with_vpn(
229
- profile_uuid,
230
- vpn_uuid,
231
- routing_parcel._get_parcel_type(),
232
- payload=ParcelAssociationPayload(parcel_id=routing_uuid),
233
- )
234
-
235
- for cellular_controller_tag, cellular_controller_parcel in self._independent_items_cellular_controllers.items():
236
- controller_uuid = self._create_parcel(profile_uuid, cellular_controller_parcel)
237
- for cellular_subparcel in self._dependent_items_on_cellular_controllers[cellular_controller_tag]:
238
- if controller_uuid is None:
239
- hande_failed_sub_parcel(self.build_report, cellular_controller_parcel, cellular_subparcel)
240
- else:
241
- parcel_uuid = self._create_parcel(profile_uuid, cellular_subparcel)
242
- if not parcel_uuid:
243
- continue
244
- with handle_association_request(self.build_report, cellular_subparcel):
245
- self._endpoints.associate_with_cellular_controller(
246
- profile_uuid,
247
- controller_uuid,
248
- cellular_subparcel._get_parcel_type(),
249
- ParcelAssociationPayload(parcel_id=parcel_uuid),
250
- )
251
-
252
- return self.build_report
253
-
254
- @handle_create_parcel
255
- def _create_parcel(self, profile_uuid: UUID, parcel: AnyTransportParcel, vpn_uuid: Optional[None] = None) -> UUID:
256
- return self._api.create_parcel(profile_uuid, parcel, vpn_uuid).id
@@ -1,287 +0,0 @@
1
- # Copyright 2024 Cisco Systems, Inc. and its affiliates
2
- from __future__ import annotations
3
-
4
- import logging
5
- from dataclasses import dataclass
6
- from typing import TYPE_CHECKING, Dict, List, Optional, Union
7
- from uuid import UUID
8
-
9
- from catalystwan.api.builders.feature_profiles.report import FeatureProfileBuildReport, handle_create_parcel
10
- from catalystwan.api.configuration_groups.parcel import as_default
11
- from catalystwan.api.feature_profile_api import UcVoiceFeatureProfileAPI
12
- from catalystwan.endpoints.configuration.feature_profile.sdwan.uc_voice import UcVoiceFeatureProfile
13
- from catalystwan.models.configuration.feature_profile.common import FeatureProfileCreationPayload, RefIdItem
14
- from catalystwan.models.configuration.feature_profile.sdwan.uc_voice import (
15
- AnalogInterfaceParcel,
16
- AnyUcVoiceParcel,
17
- CallRoutingParcel,
18
- DigitalInterfaceParcel,
19
- MediaProfileParcel,
20
- ServerGroupParcel,
21
- SrstParcel,
22
- TranslationProfileParcel,
23
- TranslationRuleParcel,
24
- TrunkGroupParcel,
25
- VoiceGlobalParcel,
26
- VoiceTenantParcel,
27
- )
28
- from catalystwan.models.configuration.feature_profile.sdwan.uc_voice.analog_interface import (
29
- Association as AnalogInterfaceAssociation,
30
- )
31
- from catalystwan.models.configuration.feature_profile.sdwan.uc_voice.call_routing import (
32
- Association as CallRoutingAssociation,
33
- )
34
- from catalystwan.models.configuration.feature_profile.sdwan.uc_voice.digital_interface import (
35
- Association as DigitalInterfaceAssociation,
36
- )
37
- from catalystwan.models.configuration.feature_profile.sdwan.uc_voice.srst import Association as SrstAssociation
38
- from catalystwan.models.configuration.feature_profile.sdwan.uc_voice.translation_profile import CallType
39
-
40
- logger = logging.getLogger(__name__)
41
-
42
- if TYPE_CHECKING:
43
- from catalystwan.session import ManagerSession
44
-
45
-
46
- ParcelWithAssociations = Union[CallRoutingParcel, DigitalInterfaceParcel, AnalogInterfaceParcel, SrstParcel]
47
- Association = Union[
48
- List[DigitalInterfaceAssociation],
49
- List[AnalogInterfaceAssociation],
50
- List[CallRoutingAssociation],
51
- List[SrstAssociation],
52
- ]
53
- AssociableParcel = Union[
54
- MediaProfileParcel,
55
- ServerGroupParcel,
56
- SrstParcel,
57
- TranslationProfileParcel,
58
- TranslationRuleParcel,
59
- TrunkGroupParcel,
60
- VoiceGlobalParcel,
61
- VoiceTenantParcel,
62
- ]
63
-
64
-
65
- @dataclass
66
- class TranslationProfile:
67
- tpp: TranslationProfileParcel
68
- calling: Optional[TranslationRuleParcel] = None
69
- called: Optional[TranslationRuleParcel] = None
70
-
71
-
72
- def is_uuid(uuid: Optional[Union[str, UUID]]) -> bool:
73
- if isinstance(uuid, UUID) or uuid is None:
74
- return True
75
- try:
76
- UUID(uuid)
77
- return True
78
- except ValueError:
79
- return False
80
-
81
-
82
- class UcVoiceFeatureProfileBuilder:
83
- """
84
- A class for building UC Voice feature profiles with a modular approach.
85
-
86
- This class provides methods to construct, associate, and manage various parcels and
87
- configurations required for UC Voice feature profiles.
88
- """
89
-
90
- ASSOCIABLE_PARCELS = (
91
- MediaProfileParcel,
92
- ServerGroupParcel,
93
- SrstParcel,
94
- TranslationProfileParcel,
95
- TranslationRuleParcel,
96
- TrunkGroupParcel,
97
- VoiceGlobalParcel,
98
- VoiceTenantParcel,
99
- )
100
-
101
- ASSOCIATON_FIELDS = {
102
- "media_profile",
103
- "server_group",
104
- "translation_profile",
105
- "trunk_group",
106
- "voice_tenant",
107
- "supervisory_disconnect",
108
- }
109
-
110
- def __init__(self, session: ManagerSession) -> None:
111
- """
112
- Initializes a new instance of the UC Voice Feature Profile Builder.
113
-
114
- Args:
115
- session (ManagerSession): The session object used for API communication.
116
- """
117
- self._profile: FeatureProfileCreationPayload
118
- self._api = UcVoiceFeatureProfileAPI(session)
119
- self._endpoints = UcVoiceFeatureProfile(session)
120
- self._independent_parcels: List[AnyUcVoiceParcel] = []
121
- self._associable_parcles: List[AssociableParcel] = []
122
- self._translation_profiles: Dict[str, TranslationProfile] = dict()
123
- self._pushed_associable_parcels: Dict[str, UUID] = {} # Maps parcel names to their created UUIDs.
124
- self._parcels_with_associations: List[ParcelWithAssociations] = []
125
-
126
- def add_profile_name_and_description(self, feature_profile: FeatureProfileCreationPayload) -> None:
127
- """
128
- Adds a name and description to the feature profile being built.
129
-
130
- Args:
131
- feature_profile (FeatureProfileCreationPayload): The feature profile payload containing
132
- the name and description.
133
- """
134
- self._profile = feature_profile
135
-
136
- def add_independent_parcel(self, parcel: AnyUcVoiceParcel) -> None:
137
- """
138
- Adds an independent parcel to the feature profile.
139
-
140
- Args:
141
- parcel (AnyUcVoiceParcel): The parcel to be added. Parcels are independent configurations
142
- that do not require associations with other parcels.
143
- """
144
- self._independent_parcels.append(parcel)
145
-
146
- def add_associable_parcel(self, parcel: AssociableParcel) -> None:
147
- self._associable_parcles.append(parcel)
148
-
149
- def add_translation_profile(
150
- self,
151
- tpp: TranslationProfileParcel,
152
- calling: Optional[TranslationRuleParcel] = None,
153
- called: Optional[TranslationRuleParcel] = None,
154
- ) -> None:
155
- """
156
- Adds a translation profile to the feature profile.
157
-
158
- Args:
159
- tpp (TranslationProfileParcel): The main translation profile parcel.
160
- calling (Optional[TranslationRuleParcel]): The calling rule parcel. Optional.
161
- called (Optional[TranslationRuleParcel]): The called rule parcel. Optional.
162
-
163
- Raises:
164
- ValueError: If neither a calling nor a called rule is provided.
165
- """
166
- if not calling and not called:
167
- raise ValueError("There must be at least one translation rule to create a translation profile.")
168
- if tpp.parcel_name in self._translation_profiles:
169
- logger.warning(f"Translation profile {tpp.parcel_name} was already added.")
170
- else:
171
- self._translation_profiles[tpp.parcel_name] = TranslationProfile(tpp=tpp, called=called, calling=calling)
172
-
173
- def add_parcel_with_associations(self, parcel: ParcelWithAssociations) -> None:
174
- """
175
- Adds a parcel with associations to the feature profile.
176
-
177
- Args:
178
- parcel (ParcelWithAssociations): A parcel that includes associations with other entities.
179
- Associations are relationships between parcels and other resources.
180
- """
181
- self._parcels_with_associations.append(parcel)
182
-
183
- def build(self) -> FeatureProfileBuildReport:
184
- """
185
- Builds the complete UC Voice feature profile.
186
-
187
- This method creates the feature profile on the system and processes all added parcels
188
- and translation profiles, resolving associations as needed.
189
-
190
- Returns:
191
- FeatureProfileBuildReport: A report containing the details of the created feature profile.
192
- """
193
- profile_uuid = self._endpoints.create_uc_voice_feature_profile(self._profile).id
194
- self.build_report = FeatureProfileBuildReport(profile_uuid=profile_uuid, profile_name=self._profile.name)
195
-
196
- # Create independent parcels
197
- for ip in self._independent_parcels:
198
- self._create_parcel(profile_uuid, ip)
199
-
200
- # Create translation profiles
201
- for _, tp in self._translation_profiles.items():
202
- tp_parcel_uuid = self._create_translation_profile(profile_uuid, tp)
203
- if tp_parcel_uuid:
204
- self._pushed_associable_parcels[tp.tpp.parcel_name] = tp_parcel_uuid
205
-
206
- for ap in self._associable_parcles:
207
- ap_parcel_uuid = self._create_parcel(profile_uuid, ap)
208
- if ap_parcel_uuid:
209
- self._pushed_associable_parcels[ap.parcel_name] = ap_parcel_uuid
210
-
211
- # Create parcels with associations
212
- for pwa in self._parcels_with_associations:
213
- if pwa.association:
214
- self._populate_association(pwa.association)
215
- self._create_parcel(profile_uuid, pwa)
216
-
217
- return self.build_report
218
-
219
- @handle_create_parcel
220
- def _create_parcel(self, profile_uuid: UUID, parcel: AnyUcVoiceParcel) -> UUID:
221
- """
222
- Internal method to create a parcel.
223
-
224
- Args:
225
- profile_uuid (UUID): The UUID of the feature profile being built.
226
- parcel (AnyUcVoiceParcel): The parcel to create.
227
-
228
- Returns:
229
- UUID: The UUID of the created parcel.
230
- """
231
- return self._api.create_parcel(profile_uuid, parcel).id
232
-
233
- def _create_translation_profile(self, profile_uuid: UUID, tp: TranslationProfile) -> UUID:
234
- """
235
- Internal method to create a translation profile.
236
-
237
- Args:
238
- profile_uuid (UUID): The UUID of the feature profile being built.
239
- tp (TranslationProfile): The translation profile to create.
240
-
241
- Returns:
242
- UUID: The UUID of the created translation profile parcel.
243
- """
244
-
245
- def process_parcel(parcel: Optional[TranslationRuleParcel], parcel_type: CallType):
246
- if not parcel:
247
- return
248
- parcel_name = parcel.parcel_name
249
- if parcel_name in self._pushed_associable_parcels:
250
- logger.debug(f"Translation rule {parcel_name} was already referenced in other profile.")
251
- tp.tpp.set_ref_by_call_type(self._pushed_associable_parcels[parcel_name], parcel_type)
252
- else:
253
- parcel_uuid = self._create_parcel(profile_uuid, parcel)
254
- if parcel_uuid:
255
- tp.tpp.set_ref_by_call_type(parcel_uuid, parcel_type)
256
- self._pushed_associable_parcels[parcel_name] = parcel_uuid
257
-
258
- process_parcel(tp.called, "called")
259
- process_parcel(tp.calling, "calling")
260
-
261
- return self._create_parcel(profile_uuid, tp.tpp)
262
-
263
- def _populate_association(self, association: Association) -> None:
264
- """
265
- Resolves associations for a parcel.
266
-
267
- Updates references in the parcel's associations to use the actual UUIDs of previously
268
- created parcels.
269
-
270
- Args:
271
- association (Association): A list of associations to resolve.
272
- """
273
- for model in association:
274
- for field_name in self.ASSOCIATON_FIELDS.intersection(model.model_fields_set):
275
- attr = getattr(model, field_name)
276
- if isinstance(attr, RefIdItem):
277
- if is_uuid(attr.ref_id.value) or attr.ref_id.value is None:
278
- continue
279
- resolved_uuid = self._pushed_associable_parcels.get(attr.ref_id.value)
280
- if resolved_uuid:
281
- attr.ref_id.value = str(resolved_uuid)
282
- else:
283
- logger.warning(
284
- f"Unresolved reference in field '{field_name}' with value '{attr.ref_id.value}' "
285
- f"for model '{model.__class__.__name__}'. Setting to Default[None]."
286
- )
287
- attr.ref_id = as_default(None)