catalystwan 0.40.1.dev6__py3-none-any.whl → 2.0.0a0__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 (630) hide show
  1. catalystwan/core/__init__.py +2 -0
  2. catalystwan/core/abstractions.py +26 -0
  3. catalystwan/{apigw_auth.py → core/apigw_auth.py} +29 -14
  4. catalystwan/core/client.py +71 -0
  5. catalystwan/core/encoder.py +12 -0
  6. catalystwan/{exceptions.py → core/exceptions.py} +29 -9
  7. catalystwan/core/loader.py +37 -0
  8. catalystwan/{__init__.py → core/metadata.py} +9 -22
  9. catalystwan/core/models/deserialize.py +203 -0
  10. catalystwan/core/models/serialize.py +137 -0
  11. catalystwan/core/request_adapter.py +246 -0
  12. catalystwan/{request_limiter.py → core/request_limiter.py} +1 -2
  13. catalystwan/{response.py → core/response.py} +38 -85
  14. catalystwan/{session.py → core/session.py} +84 -101
  15. catalystwan/core/types.py +33 -0
  16. catalystwan/{version.py → core/version.py} +3 -5
  17. catalystwan/{vmanage_auth.py → core/vmanage_auth.py} +46 -21
  18. catalystwan-2.0.0a0.dist-info/METADATA +327 -0
  19. catalystwan-2.0.0a0.dist-info/RECORD +24 -0
  20. {catalystwan-0.40.1.dev6.dist-info → catalystwan-2.0.0a0.dist-info}/WHEEL +2 -1
  21. catalystwan-2.0.0a0.dist-info/top_level.txt +1 -0
  22. catalystwan/abstractions.py +0 -77
  23. catalystwan/api/admin_tech_api.py +0 -176
  24. catalystwan/api/administration.py +0 -434
  25. catalystwan/api/alarms_api.py +0 -186
  26. catalystwan/api/api_container.py +0 -73
  27. catalystwan/api/basic_api.py +0 -338
  28. catalystwan/api/builders/__init__.py +0 -14
  29. catalystwan/api/builders/feature_profiles/application_priority.py +0 -58
  30. catalystwan/api/builders/feature_profiles/builder_factory.py +0 -59
  31. catalystwan/api/builders/feature_profiles/cli.py +0 -76
  32. catalystwan/api/builders/feature_profiles/other.py +0 -79
  33. catalystwan/api/builders/feature_profiles/report.py +0 -137
  34. catalystwan/api/builders/feature_profiles/service.py +0 -213
  35. catalystwan/api/builders/feature_profiles/system.py +0 -80
  36. catalystwan/api/builders/feature_profiles/transport.py +0 -214
  37. catalystwan/api/builders/feature_profiles/uc_voice.py +0 -287
  38. catalystwan/api/config_device_inventory_api.py +0 -58
  39. catalystwan/api/config_group_api.py +0 -150
  40. catalystwan/api/configuration_groups/parcel.py +0 -206
  41. catalystwan/api/dashboard_api.py +0 -215
  42. catalystwan/api/device_action_api.py +0 -216
  43. catalystwan/api/feature_profile_api.py +0 -2401
  44. catalystwan/api/logs_api.py +0 -63
  45. catalystwan/api/monitoring_status_api.py +0 -76
  46. catalystwan/api/mtt_aaa_api.py +0 -197
  47. catalystwan/api/omp_api.py +0 -124
  48. catalystwan/api/packet_capture_api.py +0 -152
  49. catalystwan/api/parcel_api.py +0 -42
  50. catalystwan/api/partition_manager_api.py +0 -143
  51. catalystwan/api/policy_api.py +0 -1163
  52. catalystwan/api/resource_pool_api.py +0 -74
  53. catalystwan/api/software_action_api.py +0 -269
  54. catalystwan/api/speedtest_api.py +0 -153
  55. catalystwan/api/task_status_api.py +0 -171
  56. catalystwan/api/template_api.py +0 -761
  57. catalystwan/api/templates/README.md +0 -101
  58. catalystwan/api/templates/bool_str.py +0 -6
  59. catalystwan/api/templates/cli_template.py +0 -236
  60. catalystwan/api/templates/device_template/device_template.py +0 -181
  61. catalystwan/api/templates/device_variable.py +0 -7
  62. catalystwan/api/templates/feature_template.py +0 -133
  63. catalystwan/api/templates/feature_template_field.py +0 -175
  64. catalystwan/api/templates/feature_template_payload.py +0 -17
  65. catalystwan/api/templates/models/aaa_model.py +0 -387
  66. catalystwan/api/templates/models/cisco_aaa_model.py +0 -331
  67. catalystwan/api/templates/models/cisco_banner_model.py +0 -27
  68. catalystwan/api/templates/models/cisco_bfd_model.py +0 -61
  69. catalystwan/api/templates/models/cisco_bgp_model.py +0 -510
  70. catalystwan/api/templates/models/cisco_logging_model.py +0 -122
  71. catalystwan/api/templates/models/cisco_ntp_model.py +0 -60
  72. catalystwan/api/templates/models/cisco_omp_model.py +0 -121
  73. catalystwan/api/templates/models/cisco_ospf.py +0 -241
  74. catalystwan/api/templates/models/cisco_ospfv3.py +0 -498
  75. catalystwan/api/templates/models/cisco_secure_internet_gateway.py +0 -385
  76. catalystwan/api/templates/models/cisco_snmp_model.py +0 -102
  77. catalystwan/api/templates/models/cisco_system.py +0 -318
  78. catalystwan/api/templates/models/cisco_vpn_interface_model.py +0 -822
  79. catalystwan/api/templates/models/cisco_vpn_model.py +0 -603
  80. catalystwan/api/templates/models/cli_template.py +0 -18
  81. catalystwan/api/templates/models/omp_vsmart_model.py +0 -73
  82. catalystwan/api/templates/models/security_vsmart_model.py +0 -28
  83. catalystwan/api/templates/models/supported.py +0 -42
  84. catalystwan/api/templates/models/system_vsmart_model.py +0 -182
  85. catalystwan/api/templates/models/vpn_vsmart_interface_model.py +0 -198
  86. catalystwan/api/templates/models/vpn_vsmart_model.py +0 -124
  87. catalystwan/api/templates/payloads/aaa/aaa_model.py +0 -91
  88. catalystwan/api/templates/payloads/aaa/feature/aaa.json.j2 +0 -373
  89. catalystwan/api/templates/payloads/aaa/feature/accounting.json.j2 +0 -40
  90. catalystwan/api/templates/payloads/aaa/feature/radius.json.j2 +0 -107
  91. catalystwan/api/templates/payloads/aaa/feature/tacacs.json.j2 +0 -95
  92. catalystwan/api/templates/payloads/aaa/feature/user.json.j2 +0 -60
  93. catalystwan/api/templates/payloads/cisco_vpn/cisco_vpn_model.py +0 -92
  94. catalystwan/api/templates/payloads/cisco_vpn/feature/cisco_vpn.json.j2 +0 -224
  95. catalystwan/api/templates/payloads/cisco_vpn/feature/dns.json.j2 +0 -86
  96. catalystwan/api/templates/payloads/cisco_vpn/feature/ipv4route.json.j2 +0 -59
  97. catalystwan/api/templates/payloads/cisco_vpn/feature/ipv6route.json.j2 +0 -58
  98. catalystwan/api/templates/payloads/cisco_vpn/feature/mapping.json.j2 +0 -24
  99. catalystwan/api/templates/payloads/tenant/tenant.json.j2 +0 -127
  100. catalystwan/api/templates/payloads/tenant/tenant_model.py +0 -43
  101. catalystwan/api/tenant_backup_restore_api.py +0 -154
  102. catalystwan/api/tenant_management_api.py +0 -127
  103. catalystwan/api/tenant_migration_api.py +0 -121
  104. catalystwan/api/versions_utils.py +0 -414
  105. catalystwan/api/virtual_image_action_api.py +0 -200
  106. catalystwan/dataclasses.py +0 -493
  107. catalystwan/endpoints/__init__.py +0 -606
  108. catalystwan/endpoints/administration_user_and_group.py +0 -341
  109. catalystwan/endpoints/api_gateway.py +0 -24
  110. catalystwan/endpoints/certificate_management_device.py +0 -137
  111. catalystwan/endpoints/certificate_management_vmanage.py +0 -48
  112. catalystwan/endpoints/client.py +0 -96
  113. catalystwan/endpoints/cluster_management.py +0 -130
  114. catalystwan/endpoints/configuration/device/software_update.py +0 -31
  115. catalystwan/endpoints/configuration/disaster_recovery.py +0 -305
  116. catalystwan/endpoints/configuration/feature_profile/sdwan/application_priority.py +0 -107
  117. catalystwan/endpoints/configuration/feature_profile/sdwan/cli.py +0 -60
  118. catalystwan/endpoints/configuration/feature_profile/sdwan/dns_security.py +0 -83
  119. catalystwan/endpoints/configuration/feature_profile/sdwan/embedded_security.py +0 -88
  120. catalystwan/endpoints/configuration/feature_profile/sdwan/other.py +0 -62
  121. catalystwan/endpoints/configuration/feature_profile/sdwan/policy_object.py +0 -105
  122. catalystwan/endpoints/configuration/feature_profile/sdwan/service.py +0 -137
  123. catalystwan/endpoints/configuration/feature_profile/sdwan/sig_security.py +0 -88
  124. catalystwan/endpoints/configuration/feature_profile/sdwan/system.py +0 -205
  125. catalystwan/endpoints/configuration/feature_profile/sdwan/topology.py +0 -93
  126. catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py +0 -214
  127. catalystwan/endpoints/configuration/feature_profile/sdwan/uc_voice.py +0 -77
  128. catalystwan/endpoints/configuration/network_hierarchy.py +0 -32
  129. catalystwan/endpoints/configuration/policy/abstractions.py +0 -49
  130. catalystwan/endpoints/configuration/policy/definition/access_control_list.py +0 -57
  131. catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py +0 -57
  132. catalystwan/endpoints/configuration/policy/definition/aip.py +0 -52
  133. catalystwan/endpoints/configuration/policy/definition/amp.py +0 -52
  134. catalystwan/endpoints/configuration/policy/definition/app_route.py +0 -50
  135. catalystwan/endpoints/configuration/policy/definition/cflowd.py +0 -46
  136. catalystwan/endpoints/configuration/policy/definition/control.py +0 -57
  137. catalystwan/endpoints/configuration/policy/definition/device_access.py +0 -57
  138. catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py +0 -59
  139. catalystwan/endpoints/configuration/policy/definition/dial_peer.py +0 -57
  140. catalystwan/endpoints/configuration/policy/definition/dns_security.py +0 -50
  141. catalystwan/endpoints/configuration/policy/definition/fxo_port.py +0 -57
  142. catalystwan/endpoints/configuration/policy/definition/fxs_did_port.py +0 -57
  143. catalystwan/endpoints/configuration/policy/definition/fxs_port.py +0 -57
  144. catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py +0 -57
  145. catalystwan/endpoints/configuration/policy/definition/intrusion_prevention.py +0 -52
  146. catalystwan/endpoints/configuration/policy/definition/mesh.py +0 -53
  147. catalystwan/endpoints/configuration/policy/definition/pri_isdn_port.py +0 -57
  148. catalystwan/endpoints/configuration/policy/definition/qos_map.py +0 -53
  149. catalystwan/endpoints/configuration/policy/definition/rewrite.py +0 -57
  150. catalystwan/endpoints/configuration/policy/definition/route_policy.py +0 -50
  151. catalystwan/endpoints/configuration/policy/definition/rule_set.py +0 -53
  152. catalystwan/endpoints/configuration/policy/definition/security_group.py +0 -57
  153. catalystwan/endpoints/configuration/policy/definition/srst_phone_profile.py +0 -59
  154. catalystwan/endpoints/configuration/policy/definition/ssl_decryption.py +0 -50
  155. catalystwan/endpoints/configuration/policy/definition/ssl_decryption_utd_profile.py +0 -52
  156. catalystwan/endpoints/configuration/policy/definition/traffic_data.py +0 -58
  157. catalystwan/endpoints/configuration/policy/definition/url_filtering.py +0 -50
  158. catalystwan/endpoints/configuration/policy/definition/vpn_membership.py +0 -57
  159. catalystwan/endpoints/configuration/policy/definition/vpn_qos_map.py +0 -50
  160. catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py +0 -57
  161. catalystwan/endpoints/configuration/policy/list/app.py +0 -48
  162. catalystwan/endpoints/configuration/policy/list/app_probe.py +0 -52
  163. catalystwan/endpoints/configuration/policy/list/as_path.py +0 -48
  164. catalystwan/endpoints/configuration/policy/list/class_map.py +0 -48
  165. catalystwan/endpoints/configuration/policy/list/color.py +0 -48
  166. catalystwan/endpoints/configuration/policy/list/community.py +0 -48
  167. catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py +0 -52
  168. catalystwan/endpoints/configuration/policy/list/data_prefix.py +0 -48
  169. catalystwan/endpoints/configuration/policy/list/expanded_community.py +0 -52
  170. catalystwan/endpoints/configuration/policy/list/extended_community.py +0 -52
  171. catalystwan/endpoints/configuration/policy/list/fax_protocol.py +0 -48
  172. catalystwan/endpoints/configuration/policy/list/fqdn.py +0 -48
  173. catalystwan/endpoints/configuration/policy/list/geo_location.py +0 -48
  174. catalystwan/endpoints/configuration/policy/list/identity.py +0 -48
  175. catalystwan/endpoints/configuration/policy/list/ips_signature.py +0 -52
  176. catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py +0 -48
  177. catalystwan/endpoints/configuration/policy/list/local_app.py +0 -48
  178. catalystwan/endpoints/configuration/policy/list/local_domain.py +0 -48
  179. catalystwan/endpoints/configuration/policy/list/media_profile.py +0 -52
  180. catalystwan/endpoints/configuration/policy/list/mirror.py +0 -48
  181. catalystwan/endpoints/configuration/policy/list/modem_pass_through.py +0 -52
  182. catalystwan/endpoints/configuration/policy/list/policer.py +0 -48
  183. catalystwan/endpoints/configuration/policy/list/port.py +0 -48
  184. catalystwan/endpoints/configuration/policy/list/preferred_color_group.py +0 -52
  185. catalystwan/endpoints/configuration/policy/list/prefix.py +0 -49
  186. catalystwan/endpoints/configuration/policy/list/protocol_name.py +0 -52
  187. catalystwan/endpoints/configuration/policy/list/region.py +0 -47
  188. catalystwan/endpoints/configuration/policy/list/scalable_group_tag.py +0 -52
  189. catalystwan/endpoints/configuration/policy/list/site.py +0 -52
  190. catalystwan/endpoints/configuration/policy/list/sla.py +0 -48
  191. catalystwan/endpoints/configuration/policy/list/supervisory_disconnect.py +0 -52
  192. catalystwan/endpoints/configuration/policy/list/threat_grid_api_key.py +0 -52
  193. catalystwan/endpoints/configuration/policy/list/tloc.py +0 -48
  194. catalystwan/endpoints/configuration/policy/list/translation_profile.py +0 -52
  195. catalystwan/endpoints/configuration/policy/list/translation_rules.py +0 -52
  196. catalystwan/endpoints/configuration/policy/list/trunkgroup.py +0 -48
  197. catalystwan/endpoints/configuration/policy/list/umbrella_data.py +0 -52
  198. catalystwan/endpoints/configuration/policy/list/url_allow_list.py +0 -48
  199. catalystwan/endpoints/configuration/policy/list/url_block_list.py +0 -48
  200. catalystwan/endpoints/configuration/policy/list/vpn.py +0 -50
  201. catalystwan/endpoints/configuration/policy/list/zone.py +0 -48
  202. catalystwan/endpoints/configuration/policy/security_template.py +0 -55
  203. catalystwan/endpoints/configuration/policy/vedge_template.py +0 -52
  204. catalystwan/endpoints/configuration/policy/voice_template.py +0 -39
  205. catalystwan/endpoints/configuration/policy/vsmart_template.py +0 -79
  206. catalystwan/endpoints/configuration/policy_group.py +0 -30
  207. catalystwan/endpoints/configuration/software_actions.py +0 -201
  208. catalystwan/endpoints/configuration/topology_group.py +0 -51
  209. catalystwan/endpoints/configuration_dashboard_status.py +0 -127
  210. catalystwan/endpoints/configuration_device_actions.py +0 -385
  211. catalystwan/endpoints/configuration_device_inventory.py +0 -309
  212. catalystwan/endpoints/configuration_device_template.py +0 -39
  213. catalystwan/endpoints/configuration_feature_profile.py +0 -135
  214. catalystwan/endpoints/configuration_general_template.py +0 -31
  215. catalystwan/endpoints/configuration_group.py +0 -197
  216. catalystwan/endpoints/configuration_settings.py +0 -749
  217. catalystwan/endpoints/configuration_template_master.py +0 -48
  218. catalystwan/endpoints/endpoints_container.py +0 -279
  219. catalystwan/endpoints/misc.py +0 -21
  220. catalystwan/endpoints/monitoring/device_details.py +0 -246
  221. catalystwan/endpoints/monitoring/security_policy.py +0 -12
  222. catalystwan/endpoints/monitoring/server_info.py +0 -12
  223. catalystwan/endpoints/monitoring/status.py +0 -76
  224. catalystwan/endpoints/real_time_monitoring/reboot_history.py +0 -35
  225. catalystwan/endpoints/sdavc_cloud_connector.py +0 -43
  226. catalystwan/endpoints/tenant_backup_restore.py +0 -40
  227. catalystwan/endpoints/tenant_management.py +0 -215
  228. catalystwan/endpoints/tenant_migration.py +0 -102
  229. catalystwan/endpoints/troubleshooting_tools/device_connectivity.py +0 -128
  230. catalystwan/endpoints/url_monitoring.py +0 -26
  231. catalystwan/integration_tests/__init__.py +0 -0
  232. catalystwan/integration_tests/base.py +0 -81
  233. catalystwan/integration_tests/feature_profile/sdwan/__init__.py +0 -0
  234. catalystwan/integration_tests/feature_profile/sdwan/policy/__init__.py +0 -0
  235. catalystwan/integration_tests/feature_profile/sdwan/policy/base.py +0 -33
  236. catalystwan/integration_tests/feature_profile/sdwan/policy/test_extended_community.py +0 -33
  237. catalystwan/integration_tests/feature_profile/sdwan/policy/test_security_app_list.py +0 -32
  238. catalystwan/integration_tests/feature_profile/sdwan/test_application_priority.py +0 -433
  239. catalystwan/integration_tests/feature_profile/sdwan/test_cli.py +0 -54
  240. catalystwan/integration_tests/feature_profile/sdwan/test_dns_security.py +0 -106
  241. catalystwan/integration_tests/feature_profile/sdwan/test_other.py +0 -49
  242. catalystwan/integration_tests/feature_profile/sdwan/test_service.py +0 -1078
  243. catalystwan/integration_tests/feature_profile/sdwan/test_sig_security.py +0 -322
  244. catalystwan/integration_tests/feature_profile/sdwan/test_ssl_decryption.py +0 -85
  245. catalystwan/integration_tests/feature_profile/sdwan/test_system.py +0 -368
  246. catalystwan/integration_tests/feature_profile/sdwan/test_transport.py +0 -1700
  247. catalystwan/integration_tests/feature_profile/sdwan/topology/test_topology.py +0 -93
  248. catalystwan/integration_tests/profile_builder/__init__.py +0 -0
  249. catalystwan/integration_tests/profile_builder/test_pb_service.py +0 -78
  250. catalystwan/integration_tests/profile_builder/test_pb_transport.py +0 -56
  251. catalystwan/integration_tests/profile_builder/test_pb_uc_voice.py +0 -277
  252. catalystwan/integration_tests/test_data/__init__.py +0 -117
  253. catalystwan/integration_tests/test_find_template_values.py +0 -38
  254. catalystwan/integration_tests/test_network_hierarchy.py +0 -82
  255. catalystwan/integration_tests/test_settings.py +0 -30
  256. catalystwan/logging.conf +0 -37
  257. catalystwan/models/common.py +0 -1508
  258. catalystwan/models/configuration/common.py +0 -11
  259. catalystwan/models/configuration/feature_profile/README.md +0 -344
  260. catalystwan/models/configuration/feature_profile/builder.py +0 -22
  261. catalystwan/models/configuration/feature_profile/common.py +0 -749
  262. catalystwan/models/configuration/feature_profile/parcel.py +0 -232
  263. catalystwan/models/configuration/feature_profile/sdwan/acl/__init__.py +0 -13
  264. catalystwan/models/configuration/feature_profile/sdwan/acl/ipv4acl.py +0 -298
  265. catalystwan/models/configuration/feature_profile/sdwan/acl/ipv6acl.py +0 -344
  266. catalystwan/models/configuration/feature_profile/sdwan/application_priority/__init__.py +0 -215
  267. catalystwan/models/configuration/feature_profile/sdwan/application_priority/policy_settings.py +0 -31
  268. catalystwan/models/configuration/feature_profile/sdwan/application_priority/qos_policy.py +0 -102
  269. catalystwan/models/configuration/feature_profile/sdwan/application_priority/traffic_policy.py +0 -1054
  270. catalystwan/models/configuration/feature_profile/sdwan/cli/__init__.py +0 -23
  271. catalystwan/models/configuration/feature_profile/sdwan/cli/config.py +0 -18
  272. catalystwan/models/configuration/feature_profile/sdwan/cli/full_config.py +0 -15
  273. catalystwan/models/configuration/feature_profile/sdwan/dns_security/__init__.py +0 -13
  274. catalystwan/models/configuration/feature_profile/sdwan/dns_security/dns.py +0 -107
  275. catalystwan/models/configuration/feature_profile/sdwan/embedded_security/__init__.py +0 -23
  276. catalystwan/models/configuration/feature_profile/sdwan/embedded_security/ngfirewall.py +0 -915
  277. catalystwan/models/configuration/feature_profile/sdwan/embedded_security/policy.py +0 -171
  278. catalystwan/models/configuration/feature_profile/sdwan/other/__init__.py +0 -23
  279. catalystwan/models/configuration/feature_profile/sdwan/other/thousandeyes.py +0 -147
  280. catalystwan/models/configuration/feature_profile/sdwan/other/ucse.py +0 -110
  281. catalystwan/models/configuration/feature_profile/sdwan/policy_object/__init__.py +0 -175
  282. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/app_probe.py +0 -56
  283. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/application_list.py +0 -31
  284. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/as_path.py +0 -22
  285. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/color_list.py +0 -21
  286. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/data_prefix.py +0 -35
  287. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/expanded_community_list.py +0 -25
  288. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/extended_community.py +0 -34
  289. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/fowarding_class.py +0 -26
  290. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_data_prefix.py +0 -28
  291. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_prefix_list.py +0 -38
  292. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/mirror.py +0 -27
  293. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/policer.py +0 -42
  294. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefered_group_color.py +0 -83
  295. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefix_list.py +0 -28
  296. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/sla_class.py +0 -130
  297. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/standard_community.py +0 -30
  298. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/tloc_list.py +0 -44
  299. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/aip.py +0 -64
  300. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/amp.py +0 -79
  301. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/application_list.py +0 -31
  302. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/data_prefix.py +0 -22
  303. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/fqdn.py +0 -24
  304. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/geolocation_list.py +0 -32
  305. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/identity.py +0 -30
  306. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/intrusion_prevention.py +0 -58
  307. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ips_signature.py +0 -44
  308. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/local_domain.py +0 -24
  309. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/protocol_list.py +0 -21
  310. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/scalable_group_tag.py +0 -26
  311. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/security_port.py +0 -45
  312. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption.py +0 -126
  313. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption_profile.py +0 -165
  314. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url.py +0 -32
  315. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url_filtering.py +0 -148
  316. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/zone.py +0 -44
  317. catalystwan/models/configuration/feature_profile/sdwan/routing/__init__.py +0 -26
  318. catalystwan/models/configuration/feature_profile/sdwan/routing/bgp.py +0 -594
  319. catalystwan/models/configuration/feature_profile/sdwan/routing/ospf.py +0 -170
  320. catalystwan/models/configuration/feature_profile/sdwan/routing/ospfv3.py +0 -298
  321. catalystwan/models/configuration/feature_profile/sdwan/service/__init__.py +0 -85
  322. catalystwan/models/configuration/feature_profile/sdwan/service/appqoe.py +0 -270
  323. catalystwan/models/configuration/feature_profile/sdwan/service/dhcp_server.py +0 -127
  324. catalystwan/models/configuration/feature_profile/sdwan/service/eigrp.py +0 -103
  325. catalystwan/models/configuration/feature_profile/sdwan/service/lan/common.py +0 -33
  326. catalystwan/models/configuration/feature_profile/sdwan/service/lan/ethernet.py +0 -275
  327. catalystwan/models/configuration/feature_profile/sdwan/service/lan/gre.py +0 -136
  328. catalystwan/models/configuration/feature_profile/sdwan/service/lan/ipsec.py +0 -119
  329. catalystwan/models/configuration/feature_profile/sdwan/service/lan/multilink.py +0 -101
  330. catalystwan/models/configuration/feature_profile/sdwan/service/lan/svi.py +0 -172
  331. catalystwan/models/configuration/feature_profile/sdwan/service/lan/vpn.py +0 -624
  332. catalystwan/models/configuration/feature_profile/sdwan/service/multicast.py +0 -242
  333. catalystwan/models/configuration/feature_profile/sdwan/service/object_tracker.py +0 -84
  334. catalystwan/models/configuration/feature_profile/sdwan/service/route_policy.py +0 -419
  335. catalystwan/models/configuration/feature_profile/sdwan/service/service_insertion_attachment.py +0 -184
  336. catalystwan/models/configuration/feature_profile/sdwan/service/switchport.py +0 -112
  337. catalystwan/models/configuration/feature_profile/sdwan/service/tracker.py +0 -92
  338. catalystwan/models/configuration/feature_profile/sdwan/service/wireless_lan.py +0 -216
  339. catalystwan/models/configuration/feature_profile/sdwan/sig_security/__init__.py +0 -19
  340. catalystwan/models/configuration/feature_profile/sdwan/sig_security/sig_security.py +0 -379
  341. catalystwan/models/configuration/feature_profile/sdwan/system/__init__.py +0 -59
  342. catalystwan/models/configuration/feature_profile/sdwan/system/aaa.py +0 -406
  343. catalystwan/models/configuration/feature_profile/sdwan/system/banner.py +0 -30
  344. catalystwan/models/configuration/feature_profile/sdwan/system/basic.py +0 -290
  345. catalystwan/models/configuration/feature_profile/sdwan/system/bfd.py +0 -69
  346. catalystwan/models/configuration/feature_profile/sdwan/system/device_access.py +0 -157
  347. catalystwan/models/configuration/feature_profile/sdwan/system/device_access_ipv6.py +0 -157
  348. catalystwan/models/configuration/feature_profile/sdwan/system/global_parcel.py +0 -149
  349. catalystwan/models/configuration/feature_profile/sdwan/system/logging_parcel.py +0 -162
  350. catalystwan/models/configuration/feature_profile/sdwan/system/mrf.py +0 -75
  351. catalystwan/models/configuration/feature_profile/sdwan/system/ntp.py +0 -103
  352. catalystwan/models/configuration/feature_profile/sdwan/system/omp.py +0 -111
  353. catalystwan/models/configuration/feature_profile/sdwan/system/security.py +0 -179
  354. catalystwan/models/configuration/feature_profile/sdwan/system/snmp.py +0 -173
  355. catalystwan/models/configuration/feature_profile/sdwan/topology/__init__.py +0 -29
  356. catalystwan/models/configuration/feature_profile/sdwan/topology/custom_control.py +0 -425
  357. catalystwan/models/configuration/feature_profile/sdwan/topology/hubspoke.py +0 -60
  358. catalystwan/models/configuration/feature_profile/sdwan/topology/mesh.py +0 -23
  359. catalystwan/models/configuration/feature_profile/sdwan/transport/__init__.py +0 -93
  360. catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_controller.py +0 -58
  361. catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_profile.py +0 -71
  362. catalystwan/models/configuration/feature_profile/sdwan/transport/gps.py +0 -37
  363. catalystwan/models/configuration/feature_profile/sdwan/transport/management/ethernet.py +0 -121
  364. catalystwan/models/configuration/feature_profile/sdwan/transport/t1e1controller.py +0 -124
  365. catalystwan/models/configuration/feature_profile/sdwan/transport/vpn.py +0 -285
  366. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/cellular.py +0 -166
  367. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ethernet.py +0 -281
  368. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/gre.py +0 -46
  369. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ipsec.py +0 -98
  370. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/multilink.py +0 -219
  371. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/protocol_over.py +0 -405
  372. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/t1e1serial.py +0 -195
  373. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/__init__.py +0 -62
  374. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/analog_interface.py +0 -436
  375. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/call_routing.py +0 -179
  376. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/digital_interface.py +0 -329
  377. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/dsp_farm.py +0 -193
  378. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/media_profile.py +0 -25
  379. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/server_group.py +0 -51
  380. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/srst.py +0 -86
  381. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/supervisory_disconnect.py +0 -68
  382. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_profile.py +0 -42
  383. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_rule.py +0 -31
  384. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/trunk_group.py +0 -26
  385. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_global.py +0 -55
  386. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_tenant.py +0 -40
  387. catalystwan/models/configuration/network_hierarchy/__init__.py +0 -22
  388. catalystwan/models/configuration/network_hierarchy/cflowd.py +0 -120
  389. catalystwan/models/configuration/network_hierarchy/node.py +0 -88
  390. catalystwan/models/configuration/policy_group.py +0 -74
  391. catalystwan/models/configuration/profile_type.py +0 -5
  392. catalystwan/models/configuration/topology_group.py +0 -52
  393. catalystwan/models/device_inventory.py +0 -30
  394. catalystwan/models/feature_profile_parcel.py +0 -15
  395. catalystwan/models/misc/application_protocols.py +0 -29
  396. catalystwan/models/monitoring/security_policy.py +0 -16
  397. catalystwan/models/monitoring/server_info.py +0 -12
  398. catalystwan/models/policy/__init__.py +0 -392
  399. catalystwan/models/policy/centralized.py +0 -265
  400. catalystwan/models/policy/definition/access_control_list.py +0 -193
  401. catalystwan/models/policy/definition/access_control_list_ipv6.py +0 -187
  402. catalystwan/models/policy/definition/aip.py +0 -60
  403. catalystwan/models/policy/definition/amp.py +0 -65
  404. catalystwan/models/policy/definition/app_route.py +0 -246
  405. catalystwan/models/policy/definition/cflowd.py +0 -95
  406. catalystwan/models/policy/definition/control.py +0 -366
  407. catalystwan/models/policy/definition/device_access.py +0 -117
  408. catalystwan/models/policy/definition/device_access_ipv6.py +0 -115
  409. catalystwan/models/policy/definition/dial_peer.py +0 -60
  410. catalystwan/models/policy/definition/dns_security.py +0 -130
  411. catalystwan/models/policy/definition/fxo_port.py +0 -63
  412. catalystwan/models/policy/definition/fxs_did_port.py +0 -58
  413. catalystwan/models/policy/definition/fxs_port.py +0 -56
  414. catalystwan/models/policy/definition/hub_and_spoke.py +0 -87
  415. catalystwan/models/policy/definition/intrusion_prevention.py +0 -55
  416. catalystwan/models/policy/definition/mesh.py +0 -47
  417. catalystwan/models/policy/definition/pri_isdn_port.py +0 -48
  418. catalystwan/models/policy/definition/qos_map.py +0 -111
  419. catalystwan/models/policy/definition/rewrite.py +0 -47
  420. catalystwan/models/policy/definition/route_policy.py +0 -187
  421. catalystwan/models/policy/definition/rule_set.py +0 -270
  422. catalystwan/models/policy/definition/security_group.py +0 -93
  423. catalystwan/models/policy/definition/srst_phone_profile.py +0 -37
  424. catalystwan/models/policy/definition/ssl_decryption.py +0 -209
  425. catalystwan/models/policy/definition/ssl_decryption_utd_profile.py +0 -87
  426. catalystwan/models/policy/definition/traffic_data.py +0 -496
  427. catalystwan/models/policy/definition/url_filtering.py +0 -70
  428. catalystwan/models/policy/definition/vpn_membership.py +0 -42
  429. catalystwan/models/policy/definition/vpn_qos_map.py +0 -46
  430. catalystwan/models/policy/definition/zone_based_firewall.py +0 -301
  431. catalystwan/models/policy/list/app.py +0 -44
  432. catalystwan/models/policy/list/app_probe.py +0 -42
  433. catalystwan/models/policy/list/as_path.py +0 -30
  434. catalystwan/models/policy/list/class_map.py +0 -30
  435. catalystwan/models/policy/list/color.py +0 -28
  436. catalystwan/models/policy/list/communities.py +0 -83
  437. catalystwan/models/policy/list/data_ipv6_prefix.py +0 -30
  438. catalystwan/models/policy/list/data_prefix.py +0 -30
  439. catalystwan/models/policy/list/fax_protocol.py +0 -45
  440. catalystwan/models/policy/list/fqdn.py +0 -24
  441. catalystwan/models/policy/list/geo_location.py +0 -33
  442. catalystwan/models/policy/list/identity.py +0 -29
  443. catalystwan/models/policy/list/ips_signature.py +0 -27
  444. catalystwan/models/policy/list/ipv6_prefix.py +0 -33
  445. catalystwan/models/policy/list/local_app.py +0 -45
  446. catalystwan/models/policy/list/local_domain.py +0 -36
  447. catalystwan/models/policy/list/media_profile.py +0 -44
  448. catalystwan/models/policy/list/mirror.py +0 -27
  449. catalystwan/models/policy/list/modem_pass_through.py +0 -27
  450. catalystwan/models/policy/list/policer.py +0 -39
  451. catalystwan/models/policy/list/port.py +0 -33
  452. catalystwan/models/policy/list/preferred_color_group.py +0 -82
  453. catalystwan/models/policy/list/prefix.py +0 -33
  454. catalystwan/models/policy/list/protocol_name.py +0 -26
  455. catalystwan/models/policy/list/region.py +0 -45
  456. catalystwan/models/policy/list/scalable_group_tag.py +0 -30
  457. catalystwan/models/policy/list/site.py +0 -34
  458. catalystwan/models/policy/list/sla.py +0 -77
  459. catalystwan/models/policy/list/supervisory_disconnect.py +0 -62
  460. catalystwan/models/policy/list/threat_grid_api_key.py +0 -32
  461. catalystwan/models/policy/list/tloc.py +0 -32
  462. catalystwan/models/policy/list/translation_profile.py +0 -32
  463. catalystwan/models/policy/list/translation_rules.py +0 -29
  464. catalystwan/models/policy/list/trunkgroup.py +0 -56
  465. catalystwan/models/policy/list/umbrella_data.py +0 -30
  466. catalystwan/models/policy/list/url.py +0 -39
  467. catalystwan/models/policy/list/vpn.py +0 -40
  468. catalystwan/models/policy/list/zone.py +0 -45
  469. catalystwan/models/policy/localized.py +0 -154
  470. catalystwan/models/policy/policy.py +0 -100
  471. catalystwan/models/policy/policy_definition.py +0 -1624
  472. catalystwan/models/policy/policy_list.py +0 -47
  473. catalystwan/models/policy/security.py +0 -279
  474. catalystwan/models/policy/voice.py +0 -71
  475. catalystwan/models/settings.py +0 -41
  476. catalystwan/models/templates.py +0 -79
  477. catalystwan/models/tenant.py +0 -105
  478. catalystwan/models/url_monitoring.py +0 -28
  479. catalystwan/tests/__init__.py +0 -0
  480. catalystwan/tests/builders/uc_voice.py +0 -85
  481. catalystwan/tests/models/__init__.py +0 -0
  482. catalystwan/tests/templates/__init__.py +0 -0
  483. catalystwan/tests/templates/definitions/__init__.py +0 -0
  484. catalystwan/tests/templates/definitions/aaa_basic.json +0 -96
  485. catalystwan/tests/templates/definitions/aaa_complex.json +0 -464
  486. catalystwan/tests/templates/definitions/basic/__init__.py +0 -0
  487. catalystwan/tests/templates/definitions/basic/alias.json +0 -7
  488. catalystwan/tests/templates/definitions/basic/basic.json +0 -7
  489. catalystwan/tests/templates/definitions/basic/basic_no_value.json +0 -7
  490. catalystwan/tests/templates/definitions/basic/children.json +0 -39
  491. catalystwan/tests/templates/definitions/basic/children_nested.json +0 -72
  492. catalystwan/tests/templates/definitions/basic/children_nested_datapath.json +0 -72
  493. catalystwan/tests/templates/definitions/basic/data_path.json +0 -13
  494. catalystwan/tests/templates/definitions/cisco_aaa.json +0 -178
  495. catalystwan/tests/templates/definitions/cisco_aaa_complex.json +0 -361
  496. catalystwan/tests/templates/definitions/cisco_banner.json +0 -20
  497. catalystwan/tests/templates/definitions/cisco_bfd.json +0 -90
  498. catalystwan/tests/templates/definitions/cisco_logging_complex.json +0 -268
  499. catalystwan/tests/templates/definitions/cisco_ntp_complex.json +0 -143
  500. catalystwan/tests/templates/definitions/cisco_omp_complex.json +0 -175
  501. catalystwan/tests/templates/definitions/cisco_ospf_complex.json +0 -302
  502. catalystwan/tests/templates/definitions/cisco_sig.json +0 -405
  503. catalystwan/tests/templates/definitions/cisco_snmp_complex.json +0 -258
  504. catalystwan/tests/templates/definitions/cisco_system_complex.json +0 -502
  505. catalystwan/tests/templates/definitions/cisco_vpn_basic.json +0 -17
  506. catalystwan/tests/templates/definitions/cisco_vpn_complex.json +0 -1081
  507. catalystwan/tests/templates/definitions/cisco_vpn_interface_complex.json +0 -821
  508. catalystwan/tests/templates/definitions/default_cisco_system.json +0 -184
  509. catalystwan/tests/templates/definitions/omp_vsmart_1.json +0 -26
  510. catalystwan/tests/templates/definitions/omp_vsmart_2.json +0 -48
  511. catalystwan/tests/templates/definitions/omp_vsmart_3.json +0 -71
  512. catalystwan/tests/templates/definitions/omp_vsmart_complex.json +0 -73
  513. catalystwan/tests/templates/definitions/security_vsmart_complex.json +0 -24
  514. catalystwan/tests/templates/definitions/system_vsmart_complex.json +0 -193
  515. catalystwan/tests/templates/definitions/vpn_vsmart_basic.json +0 -17
  516. catalystwan/tests/templates/definitions/vpn_vsmart_complex.json +0 -179
  517. catalystwan/tests/templates/definitions/vpn_vsmart_interface_basic.json +0 -42
  518. catalystwan/tests/templates/definitions/vpn_vsmart_interface_complex.json +0 -208
  519. catalystwan/tests/templates/models/__init__.py +0 -53
  520. catalystwan/tests/templates/models/aaa.py +0 -106
  521. catalystwan/tests/templates/models/cisco_aaa.py +0 -124
  522. catalystwan/tests/templates/models/cisco_banner.py +0 -7
  523. catalystwan/tests/templates/models/cisco_bfd.py +0 -15
  524. catalystwan/tests/templates/models/cisco_logging.py +0 -65
  525. catalystwan/tests/templates/models/cisco_ntp.py +0 -17
  526. catalystwan/tests/templates/models/cisco_omp.py +0 -37
  527. catalystwan/tests/templates/models/cisco_ospf.py +0 -60
  528. catalystwan/tests/templates/models/cisco_secure_internet_gateway.py +0 -95
  529. catalystwan/tests/templates/models/cisco_snmp.py +0 -40
  530. catalystwan/tests/templates/models/cisco_system.py +0 -113
  531. catalystwan/tests/templates/models/cisco_vpn.py +0 -240
  532. catalystwan/tests/templates/models/cisco_vpn_interface.py +0 -200
  533. catalystwan/tests/templates/models/omp_vsmart.py +0 -53
  534. catalystwan/tests/templates/models/security_vsmart.py +0 -11
  535. catalystwan/tests/templates/models/system_vsmart.py +0 -37
  536. catalystwan/tests/templates/models/vpn_vsmart.py +0 -32
  537. catalystwan/tests/templates/models/vpn_vsmart_interface.py +0 -54
  538. catalystwan/tests/templates/schemas/aaa.json +0 -1096
  539. catalystwan/tests/templates/schemas/basic/alias.json +0 -24
  540. catalystwan/tests/templates/schemas/basic/basic.json +0 -23
  541. catalystwan/tests/templates/schemas/basic/children.json +0 -59
  542. catalystwan/tests/templates/schemas/basic/children_nested.json +0 -112
  543. catalystwan/tests/templates/schemas/basic/children_nested_datapath.json +0 -112
  544. catalystwan/tests/templates/schemas/basic/data_path.json +0 -29
  545. catalystwan/tests/templates/schemas/cedge_aaa.json +0 -1185
  546. catalystwan/tests/templates/schemas/cisco_banner.json +0 -44
  547. catalystwan/tests/templates/schemas/cisco_bfd.json +0 -266
  548. catalystwan/tests/templates/schemas/cisco_logging.json +0 -577
  549. catalystwan/tests/templates/schemas/cisco_ntp.json +0 -265
  550. catalystwan/tests/templates/schemas/cisco_omp.json +0 -479
  551. catalystwan/tests/templates/schemas/cisco_ospf.json +0 -908
  552. catalystwan/tests/templates/schemas/cisco_secure_internet_gateway.json +0 -1520
  553. catalystwan/tests/templates/schemas/cisco_snmp.json +0 -561
  554. catalystwan/tests/templates/schemas/cisco_system.json +0 -3099
  555. catalystwan/tests/templates/schemas/cisco_vpn.json +0 -2504
  556. catalystwan/tests/templates/schemas/cisco_vpn_interface.json +0 -3348
  557. catalystwan/tests/templates/schemas/omp-vsmart.json +0 -222
  558. catalystwan/tests/templates/schemas/security-vsmart.json +0 -58
  559. catalystwan/tests/templates/schemas/system-vsmart.json +0 -2585
  560. catalystwan/tests/templates/schemas/vpn-vsmart-interface.json +0 -859
  561. catalystwan/tests/templates/schemas/vpn-vsmart.json +0 -445
  562. catalystwan/tests/templates/test_chose_model.py +0 -32
  563. catalystwan/tests/templates/test_deserialize_model.py +0 -69
  564. catalystwan/tests/templates/test_find_template_values.py +0 -193
  565. catalystwan/tests/templates/test_find_template_values_2.py +0 -193
  566. catalystwan/tests/templates/test_generate_payload.py +0 -137
  567. catalystwan/tests/templates/test_serialize_model.py +0 -52
  568. catalystwan/tests/test_admin_tech_api.py +0 -198
  569. catalystwan/tests/test_administration.py +0 -470
  570. catalystwan/tests/test_alarms_api.py +0 -251
  571. catalystwan/tests/test_cli_template.py +0 -218
  572. catalystwan/tests/test_creation_tools.py +0 -155
  573. catalystwan/tests/test_device_action_api.py +0 -117
  574. catalystwan/tests/test_devices_api.py +0 -674
  575. catalystwan/tests/test_endpoints.py +0 -907
  576. catalystwan/tests/test_feature_profile_api.py +0 -282
  577. catalystwan/tests/test_feature_template_field.py +0 -33
  578. catalystwan/tests/test_logs_api.py +0 -40
  579. catalystwan/tests/test_models_common.py +0 -53
  580. catalystwan/tests/test_monitoring_security_policy.py +0 -65
  581. catalystwan/tests/test_monitoring_server_info.py +0 -49
  582. catalystwan/tests/test_monitoring_status_api.py +0 -118
  583. catalystwan/tests/test_mtt_aaa_api.py +0 -293
  584. catalystwan/tests/test_omp_api.py +0 -438
  585. catalystwan/tests/test_packet_capture.py +0 -125
  586. catalystwan/tests/test_partition_manager_api.py +0 -121
  587. catalystwan/tests/test_response.py +0 -183
  588. catalystwan/tests/test_session.py +0 -102
  589. catalystwan/tests/test_software_action_api.py +0 -154
  590. catalystwan/tests/test_speed_test_api.py +0 -143
  591. catalystwan/tests/test_task_status_api.py +0 -381
  592. catalystwan/tests/test_templates.py +0 -405
  593. catalystwan/tests/test_tenant_backup_restore_api.py +0 -88
  594. catalystwan/tests/test_tenant_management_api.py +0 -153
  595. catalystwan/tests/test_tenant_migration_api.py +0 -102
  596. catalystwan/tests/test_typed_list.py +0 -426
  597. catalystwan/tests/test_url_monitoring.py +0 -80
  598. catalystwan/tests/test_version.py +0 -99
  599. catalystwan/tests/test_version_utils.py +0 -240
  600. catalystwan/tests/test_vmanage_auth.py +0 -149
  601. catalystwan/typed_list.py +0 -288
  602. catalystwan/utils/__init__.py +0 -0
  603. catalystwan/utils/alarm_status.py +0 -16
  604. catalystwan/utils/certificate_status.py +0 -13
  605. catalystwan/utils/colors.py +0 -12
  606. catalystwan/utils/config_status.py +0 -8
  607. catalystwan/utils/creation_tools.py +0 -136
  608. catalystwan/utils/dashboard.py +0 -255
  609. catalystwan/utils/device_model.py +0 -322
  610. catalystwan/utils/dict.py +0 -61
  611. catalystwan/utils/feature_template/choose_model.py +0 -30
  612. catalystwan/utils/feature_template/find_template_values.py +0 -111
  613. catalystwan/utils/model.py +0 -45
  614. catalystwan/utils/operation_status.py +0 -22
  615. catalystwan/utils/persona.py +0 -5
  616. catalystwan/utils/personality.py +0 -10
  617. catalystwan/utils/pydantic_field.py +0 -12
  618. catalystwan/utils/reachability.py +0 -14
  619. catalystwan/utils/session_type.py +0 -17
  620. catalystwan/utils/template_type.py +0 -8
  621. catalystwan/utils/type_check.py +0 -22
  622. catalystwan/utils/upgrades_helper.py +0 -95
  623. catalystwan/utils/validate_status.py +0 -8
  624. catalystwan/workflows/backup_restore_device_templates.py +0 -467
  625. catalystwan/workflows/tenant_migration.py +0 -203
  626. catalystwan-0.40.1.dev6.dist-info/METADATA +0 -539
  627. catalystwan-0.40.1.dev6.dist-info/RECORD +0 -618
  628. /catalystwan/{api → core/models}/__init__.py +0 -0
  629. /catalystwan/{api/builders/feature_profiles/__init__.py → core/py.typed} +0 -0
  630. {catalystwan-0.40.1.dev6.dist-info → catalystwan-2.0.0a0.dist-info}/LICENSE +0 -0
@@ -1,1624 +0,0 @@
1
- # Copyright 2023 Cisco Systems, Inc. and its affiliates
2
-
3
- import datetime
4
- from dataclasses import dataclass, field
5
- from functools import wraps
6
- from ipaddress import IPv4Address, IPv4Interface, IPv4Network, IPv6Address, IPv6Interface, IPv6Network
7
- from typing import Any, Dict, List, MutableSequence, Optional, Sequence, Set, Tuple, Union, overload
8
- from uuid import UUID
9
-
10
- from pydantic import BaseModel, ConfigDict, Field, PlainSerializer, RootModel, field_validator, model_validator
11
- from typing_extensions import Annotated, Literal
12
-
13
- from catalystwan.models.common import (
14
- AcceptDropActionType,
15
- AcceptRejectActionType,
16
- CarrierType,
17
- ControlPathType,
18
- DestinationRegion,
19
- DNSEntryType,
20
- DNSTypeEntryType,
21
- EncapType,
22
- IcmpMsgType,
23
- IntStr,
24
- LossProtectionType,
25
- MultiRegionRole,
26
- OriginProtocol,
27
- SequenceIpType,
28
- ServiceChainNumber,
29
- ServiceType,
30
- SpaceSeparatedInterfaceStr,
31
- SpaceSeparatedIPv4,
32
- SpaceSeparatedIPv6,
33
- SpaceSeparatedNonNegativeIntList,
34
- SpaceSeparatedServiceAreaList,
35
- SpaceSeparatedTLOCColorStr,
36
- SpaceSeparatedUUIDList,
37
- TLOCActionType,
38
- TLOCColor,
39
- TrafficCategory,
40
- TrafficTargetType,
41
- check_fields_exclusive,
42
- str_as_str_list,
43
- )
44
- from catalystwan.models.misc.application_protocols import ApplicationProtocol
45
-
46
-
47
- def port_set_and_ranges_to_str(ports: Set[int] = set(), port_ranges: List[Tuple[int, int]] = []) -> str:
48
- assert ports or port_ranges
49
- ports_str = " ".join(f"{port_begin}-{port_end}" for port_begin, port_end in port_ranges)
50
- ports_str += " " if ports_str else ""
51
- ports_str += " ".join(str(p) for p in ports)
52
- return ports_str
53
-
54
-
55
- def networks_to_str(networks: Sequence[Union[IPv4Network, IPv6Network]]) -> str:
56
- return " ".join(str(net) for net in networks)
57
-
58
-
59
- PLPEntryType = Literal[
60
- "low",
61
- "high",
62
- ]
63
-
64
-
65
- PathType = Literal[
66
- "hierarchical-path",
67
- "direct-path",
68
- "transport-gateway-path",
69
- ]
70
-
71
-
72
- SequenceType = Literal[
73
- "applicationFirewall",
74
- "data",
75
- "serviceChaining",
76
- "trafficEngineering",
77
- "qos",
78
- "zoneBasedFW",
79
- "tloc",
80
- "route",
81
- "acl",
82
- "aclv6",
83
- "deviceaccesspolicy",
84
- "deviceaccesspolicyv6",
85
- "sslDecryption",
86
- "vedgeRoute",
87
- "vedgeroute",
88
- "appRoute",
89
- ]
90
-
91
-
92
- Optimized = Literal[
93
- "true",
94
- "false",
95
- ]
96
-
97
- AdvancedCommunityMatchFlag = Literal["or", "and", "exact"]
98
-
99
- MetricType = Literal["type1", "type2"]
100
-
101
- SlaNotMetAction = Literal["strict", "fallbackToBestPath"]
102
-
103
- VoicePortType = Literal[
104
- "potsDialPeer",
105
- "sipDialPeer",
106
- "srstPhone",
107
- "voicePort",
108
- ]
109
-
110
-
111
- class Reference(BaseModel):
112
- ref: UUID
113
-
114
-
115
- class ReferenceWithId(BaseModel):
116
- field: Literal["id"] = "id"
117
- ref: UUID
118
-
119
-
120
- class ReferenceList(BaseModel):
121
- ref: SpaceSeparatedUUIDList
122
-
123
-
124
- class VariableName(BaseModel):
125
- vip_variable_name: str = Field(serialization_alias="vipVariableName", validation_alias="vipVariableName")
126
-
127
-
128
- class CommonStation(BaseModel):
129
- model_config = ConfigDict(populate_by_name=True)
130
- name: str
131
- number: str
132
-
133
-
134
- class MediaProfileRef(BaseModel):
135
- name: int
136
- ref: UUID
137
-
138
-
139
- class LineParams(BaseModel):
140
- model_config = ConfigDict(populate_by_name=True)
141
- gain: IntStr
142
- attenuation: IntStr
143
- echo_cancellor: bool = Field(validation_alias="echoCancellor", serialization_alias="echoCancellor")
144
- vad: bool
145
- compand_type: str = Field(serialization_alias="compandType", validation_alias="compandType")
146
- cptone: str
147
- impedance: Optional[str] = Field(default=None)
148
-
149
-
150
- class DidTimers(BaseModel):
151
- model_config = ConfigDict(populate_by_name=True)
152
- answer_winkwidth: IntStr = Field(
153
- ge=110, le=290, serialization_alias="answerWinkwidth", validation_alias="answerWinkwidth"
154
- )
155
- clear_wait: IntStr = Field(ge=200, le=2000, serialization_alias="clearWait", validation_alias="clearWait")
156
- wait_wink: IntStr = Field(ge=100, le=6500, serialization_alias="waitWink", validation_alias="waitWink")
157
- wink_duration: IntStr = Field(ge=50, le=3000, serialization_alias="winkDuration", validation_alias="winkDuration")
158
- dial_pulse_min_delay: IntStr = Field(
159
- ge=0, le=5000, serialization_alias="dialPulseMinDelay", validation_alias="dialPulseMinDelay"
160
- )
161
-
162
-
163
- class FxoTuningParams(BaseModel):
164
- model_config = ConfigDict(populate_by_name=True)
165
- pre_dial_delay: int = Field(ge=0, serialization_alias="preDialDelay", validation_alias="preDialDelay")
166
- timing_sup_disc: IntStr = Field(serialization_alias="timingSupDisc", validation_alias="timingSupDisc")
167
- supervisory_disconnect: str = Field(
168
- serialization_alias="supervisoryDisconnect", validation_alias="supervisoryDisconnect"
169
- )
170
- dial_type: str = Field(serialization_alias="dialType", validation_alias="dialType")
171
- timing_hookflash_out: IntStr = Field(
172
- serialization_alias="timingHookflashOut", validation_alias="timingHookflashOut"
173
- )
174
- timing_guard_out: IntStr = Field(serialization_alias="timingGuardOut", validation_alias="timingGuardOut")
175
- battery_reversal_det_delay: IntStr = Field(
176
- serialization_alias="batteryReversalDetDelay", validation_alias="batteryReversalDetDelay"
177
- )
178
-
179
-
180
- class FxsTuningParams(BaseModel):
181
- model_config = ConfigDict(populate_by_name=True)
182
- timing_hookflash_in_min: IntStr = Field(
183
- ge=0, le=400, serialization_alias="timingHookflashInMin", validation_alias="timingHookflashInMin"
184
- )
185
- timing_hookflash_in_max: IntStr = Field(
186
- ge=50, le=1500, serialization_alias="timingHookflashInMax", validation_alias="timingHookflashInMax"
187
- )
188
- loop_length: str = Field(serialization_alias="loopLength", validation_alias="loopLength")
189
- ring_frequency: IntStr = Field(serialization_alias="ringFrequency", validation_alias="ringFrequency")
190
- ring_dc_offset: Optional[str] = Field(
191
- default=None, serialization_alias="ringDcOffset", validation_alias="ringDcOffset"
192
- )
193
- pulse_digit_detection: bool = Field(
194
- serialization_alias="pulseDigitDetection", validation_alias="pulseDigitDetection"
195
- )
196
- ren: IntStr = Field(ge=1, le=5)
197
-
198
-
199
- class TrunkGroupPreference(BaseModel):
200
- model_config = ConfigDict(populate_by_name=True)
201
- ref: UUID
202
- preference: int
203
-
204
-
205
- class TranslationRuleEntry(BaseModel):
206
- model_config = ConfigDict(populate_by_name=True)
207
- ref: UUID
208
- name: str
209
-
210
-
211
- class TranslationProfileEntry(BaseModel):
212
- model_config = ConfigDict(populate_by_name=True)
213
- ref: UUID
214
- name: str
215
- calling_translation_rule: Optional[TranslationRuleEntry] = Field(
216
- default=None, serialization_alias="callingTranslationRule", validation_alias="callingTranslationRule"
217
- )
218
- called_translation_rule: Optional[TranslationRuleEntry] = Field(
219
- default=None, serialization_alias="calledTranslationRule", validation_alias="calledTranslationRule"
220
- )
221
-
222
-
223
- class SupervisoryDisconnectEntry(BaseModel):
224
- model_config = ConfigDict(populate_by_name=True)
225
- ref: UUID
226
- name: str
227
-
228
-
229
- class LocalTLOCListEntryValue(BaseModel):
230
- color: SpaceSeparatedTLOCColorStr
231
- encap: Optional[EncapType] = None
232
- restrict: Optional[str] = None
233
-
234
-
235
- class TLOCEntryValue(BaseModel):
236
- ip: IPv4Address
237
- color: TLOCColor
238
- encap: EncapType
239
-
240
-
241
- class ServiceChainEntryValue(BaseModel):
242
- type: ServiceChainNumber = Field(default="SC1")
243
- vpn: str
244
- restrict: Optional[str] = None
245
- local: Optional[str] = None
246
- tloc: Optional[TLOCEntryValue] = None
247
-
248
-
249
- class PacketLengthEntry(BaseModel):
250
- field: Literal["packetLength"] = "packetLength"
251
- value: str = Field(description="0-65536 range or single number")
252
-
253
- @staticmethod
254
- def from_range(packet_lengths: Tuple[int, int]) -> "PacketLengthEntry":
255
- if packet_lengths[0] == packet_lengths[1]:
256
- return PacketLengthEntry(value=str(packet_lengths[0]))
257
- return PacketLengthEntry(value=f"{packet_lengths[0]}-{packet_lengths[1]}")
258
-
259
-
260
- class PLPEntry(BaseModel):
261
- field: Literal["plp"] = "plp"
262
- value: PLPEntryType
263
-
264
-
265
- class ProtocolEntry(BaseModel):
266
- field: Literal["protocol"] = "protocol"
267
- value: str = Field(description="0-255 single numbers separate by space")
268
- app: Optional[str] = None
269
-
270
- @staticmethod
271
- def from_protocol_set(protocols: Set[int]) -> "ProtocolEntry":
272
- return ProtocolEntry(value=" ".join(str(p) for p in protocols))
273
-
274
- @staticmethod
275
- def from_application_protocols(app_prots: List[ApplicationProtocol]) -> "ProtocolEntry":
276
- return ProtocolEntry(
277
- value=" ".join(p.protocol_as_string_of_numbers() for p in app_prots),
278
- app=" ".join(p.name for p in app_prots),
279
- )
280
-
281
-
282
- class DSCPEntry(BaseModel):
283
- field: Literal["dscp"] = "dscp"
284
- value: SpaceSeparatedNonNegativeIntList = Field(description="0-63 single numbers separate by space")
285
-
286
-
287
- class SourceIPEntry(BaseModel):
288
- model_config = ConfigDict(populate_by_name=True)
289
-
290
- field: Literal["sourceIp"] = "sourceIp"
291
- value: Optional[SpaceSeparatedIPv4] = Field(default=None, description="IP network specifiers separate by space")
292
- vip_variable_name: Optional[str] = Field(
293
- default=None, serialization_alias="vipVariableName", validation_alias="vipVariableName"
294
- )
295
-
296
- @staticmethod
297
- def from_ipv4_networks(networks: List[IPv4Network]) -> "SourceIPEntry":
298
- return SourceIPEntry(value=[IPv4Interface(ip) for ip in networks])
299
-
300
- def as_ipv4_networks(self) -> List[IPv4Network]:
301
- return [] if not self.value else [IPv4Network(val) for val in self.value]
302
-
303
-
304
- class SourceIPv6Entry(BaseModel):
305
- field: Literal["sourceIpv6"] = "sourceIpv6"
306
- value: SpaceSeparatedIPv6
307
-
308
- @staticmethod
309
- def from_ipv6_networks(networks: List[IPv6Network]) -> "SourceIPv6Entry":
310
- return SourceIPv6Entry(value=[IPv6Interface(ip) for ip in networks])
311
-
312
- def as_ipv6_networks(self) -> List[IPv6Network]:
313
- return [] if not self.value else [IPv6Network(val) for val in self.value]
314
-
315
-
316
- class IPAddressEntry(BaseModel):
317
- field: Literal["ipAddress"] = "ipAddress"
318
- value: IPv4Address
319
-
320
-
321
- class SourcePortEntry(BaseModel):
322
- field: Literal["sourcePort"] = "sourcePort"
323
- value: str = Field(description="0-65535 range or separate by space")
324
-
325
- @staticmethod
326
- def from_port_set_and_ranges(ports: Set[int] = set(), port_ranges: List[Tuple[int, int]] = []) -> "SourcePortEntry":
327
- return SourcePortEntry(value=port_set_and_ranges_to_str(ports, port_ranges))
328
-
329
-
330
- class DestinationIPEntry(BaseModel):
331
- model_config = ConfigDict(populate_by_name=True)
332
-
333
- field: Literal["destinationIp"] = "destinationIp"
334
- value: Optional[SpaceSeparatedIPv4] = Field(default=None)
335
- vip_variable_name: Optional[str] = Field(
336
- default=None, serialization_alias="vipVariableName", validation_alias="vipVariableName"
337
- )
338
-
339
- @staticmethod
340
- def from_ipv4_networks(networks: List[IPv4Network]) -> "DestinationIPEntry":
341
- return DestinationIPEntry(value=[IPv4Interface(ip) for ip in networks])
342
-
343
- def as_ipv4_networks(self) -> List[IPv4Network]:
344
- return [] if not self.value else [IPv4Network(val) for val in self.value]
345
-
346
-
347
- class DestinationIPv6Entry(BaseModel):
348
- field: Literal["destinationIpv6"] = "destinationIpv6"
349
- value: SpaceSeparatedIPv6
350
-
351
- @staticmethod
352
- def from_ipv6_networks(networks: List[IPv6Network]) -> "DestinationIPv6Entry":
353
- return DestinationIPv6Entry(value=[IPv6Interface(ip) for ip in networks])
354
-
355
- def as_ipv6_networks(self) -> List[IPv6Network]:
356
- return [] if not self.value else [IPv6Network(val) for val in self.value]
357
-
358
-
359
- class DestinationPortEntry(BaseModel):
360
- field: Literal["destinationPort"] = "destinationPort"
361
- value: str = Field(description="0-65535 range or separate by space")
362
- app: Optional[str] = None
363
-
364
- @staticmethod
365
- def from_port_set_and_ranges(
366
- ports: Set[int] = set(), port_ranges: List[Tuple[int, int]] = []
367
- ) -> "DestinationPortEntry":
368
- return DestinationPortEntry(value=port_set_and_ranges_to_str(ports, port_ranges))
369
-
370
- @staticmethod
371
- def from_application_protocols(app_prots: List[ApplicationProtocol]) -> "DestinationPortEntry":
372
- return DestinationPortEntry(
373
- value=" ".join(p.port for p in app_prots if p.port),
374
- app=" ".join(p.name for p in app_prots),
375
- )
376
-
377
-
378
- class TCPEntry(BaseModel):
379
- field: Literal["tcp"] = "tcp"
380
- value: Literal["syn"] = "syn"
381
-
382
-
383
- class DNSEntry(BaseModel):
384
- field: Literal["dns"] = "dns"
385
- value: DNSEntryType
386
-
387
-
388
- class TrafficToEntry(BaseModel):
389
- field: Literal["trafficTo"] = "trafficTo"
390
- value: TrafficTargetType
391
-
392
-
393
- class DestinationRegionEntry(BaseModel):
394
- field: Literal["destinationRegion"] = "destinationRegion"
395
- value: DestinationRegion
396
-
397
-
398
- class AddressEntry(BaseModel):
399
- field: Literal["address"] = "address"
400
- ref: UUID
401
-
402
-
403
- class AsPathListMatchEntry(BaseModel):
404
- field: Literal["asPath"] = "asPath"
405
- ref: UUID
406
-
407
-
408
- class AsPathActionEntryValue(BaseModel):
409
- prepend: Optional[SpaceSeparatedNonNegativeIntList] = None
410
- exclude: Optional[SpaceSeparatedNonNegativeIntList] = None
411
-
412
-
413
- class AsPathActionEntry(BaseModel):
414
- field: Literal["asPath"] = "asPath"
415
- value: AsPathActionEntryValue
416
-
417
-
418
- class SourceFQDNEntry(BaseModel):
419
- field: Literal["sourceFqdn"] = "sourceFqdn"
420
- value: str = Field(max_length=120)
421
-
422
-
423
- class DestinationFQDNEntry(BaseModel):
424
- field: Literal["destinationFqdn"] = "destinationFqdn"
425
- value: str = Field(max_length=120)
426
-
427
-
428
- class SourceGeoLocationEntry(BaseModel):
429
- field: Literal["sourceGeoLocation"] = "sourceGeoLocation"
430
- value: str = Field(description="Space separated list of ISO3166 country codes")
431
-
432
-
433
- class DestinationGeoLocationEntry(BaseModel):
434
- field: Literal["destinationGeoLocation"] = "destinationGeoLocation"
435
- value: str = Field(description="Space separated list of ISO3166 country codes")
436
-
437
-
438
- class ProtocolNameEntry(BaseModel):
439
- field: Literal["protocolName"] = "protocolName"
440
- value: str
441
-
442
- @staticmethod
443
- def from_application_protocols(app_prots: List[ApplicationProtocol]) -> "ProtocolNameEntry":
444
- return ProtocolNameEntry(value=" ".join(p.name for p in app_prots))
445
-
446
-
447
- class ForwardingClassEntry(BaseModel):
448
- field: Literal["forwardingClass"] = "forwardingClass"
449
- value: str = Field(max_length=32)
450
-
451
-
452
- class NATPoolEntry(BaseModel):
453
- field: Literal["pool"] = "pool"
454
- value: str
455
-
456
-
457
- class UseVPNEntry(BaseModel):
458
- field: Literal["useVpn"] = "useVpn"
459
- value: str = "0"
460
-
461
-
462
- class FallBackEntry(BaseModel):
463
- field: Literal["fallback"] = "fallback"
464
- value: Literal["", "true"]
465
-
466
- @property
467
- def as_bool(self) -> bool:
468
- return True if self.value == "true" else False
469
-
470
-
471
- class DiaPoolEntry(BaseModel):
472
- field: Literal["diaPool"] = "diaPool"
473
- value: SpaceSeparatedNonNegativeIntList
474
-
475
-
476
- class DiaInterfaceEntry(BaseModel):
477
- field: Literal["diaInterface"] = "diaInterface"
478
- value: SpaceSeparatedInterfaceStr
479
-
480
-
481
- class BypassEntry(BaseModel):
482
- field: Literal["bypass"] = "bypass"
483
- value: Literal["", "true"]
484
-
485
- @property
486
- def as_bool(self) -> bool:
487
- return True if self.value == "true" else False
488
-
489
-
490
- class NextHopActionEntry(BaseModel):
491
- field: Literal["nextHop"] = "nextHop"
492
- value: Union[IPv4Address, IPv6Address]
493
-
494
-
495
- class NextHopIpv6ActionEntry(BaseModel):
496
- field: Literal["nextHopIpv6"] = "nextHopIpv6"
497
- value: IPv6Address
498
-
499
-
500
- class NextHopMatchEntry(BaseModel):
501
- field: Literal["nextHop"] = "nextHop"
502
- ref: UUID
503
-
504
-
505
- class NextHopLooseEntry(BaseModel):
506
- field: Literal["nextHopLoose"] = "nextHopLoose"
507
- value: Annotated[bool, PlainSerializer(lambda x: str(x).lower(), return_type=str, when_used="json-unless-none")]
508
-
509
-
510
- class OMPTagEntry(BaseModel):
511
- field: Literal["ompTag"] = "ompTag"
512
- value: IntStr = Field(description="Number in range 0-4294967295", ge=0, le=4294967295)
513
-
514
-
515
- class OriginEntry(BaseModel):
516
- field: Literal["origin"] = "origin"
517
- value: OriginProtocol
518
-
519
-
520
- class OriginatorEntry(BaseModel):
521
- field: Literal["originator"] = "originator"
522
- value: IPv4Address
523
-
524
-
525
- class PreferenceEntry(BaseModel):
526
- field: Literal["preference"] = "preference"
527
- value: str = Field(description="Number in range 0-4294967295")
528
-
529
-
530
- class PathTypeEntry(BaseModel):
531
- field: Literal["pathType"] = "pathType"
532
- value: ControlPathType
533
-
534
-
535
- class RegionEntry(BaseModel):
536
- field: Literal["regionId"] = "regionId"
537
- value: str
538
-
539
-
540
- class RoleEntry(BaseModel):
541
- field: Literal["role"] = "role"
542
- value: MultiRegionRole
543
-
544
-
545
- class SiteEntry(BaseModel):
546
- field: Literal["siteId"] = "siteId"
547
- value: str = Field(description="Site ID numeric value")
548
-
549
-
550
- class LocalTLOCListEntry(BaseModel):
551
- field: Literal["localTlocList"] = "localTlocList"
552
- value: LocalTLOCListEntryValue
553
-
554
-
555
- class DNSTypeEntry(BaseModel):
556
- field: Literal["dnsType"] = "dnsType"
557
- value: DNSTypeEntryType
558
-
559
-
560
- class ServiceChainEntry(BaseModel):
561
- field: Literal["serviceChain"] = "serviceChain"
562
- value: ServiceChainEntryValue
563
-
564
-
565
- class VPNEntry(BaseModel):
566
- field: Literal["vpn"] = "vpn"
567
- value: str
568
-
569
-
570
- class TLOCEntry(BaseModel):
571
- field: Literal["tloc"] = "tloc"
572
- value: TLOCEntryValue
573
-
574
-
575
- class CommunityEntry(BaseModel):
576
- model_config = ConfigDict(populate_by_name=True)
577
- field: Literal["community"] = "community"
578
- value: Optional[str] = Field(
579
- default=None, description="Example: 1000:10000 or internet or local-AS or no advertise or no-export"
580
- )
581
- vip_variable_name: Optional[str] = Field(
582
- default=None,
583
- serialization_alias="vipVariableName",
584
- validation_alias="vipVariableName",
585
- description="Example: 1000:10000 or internet or local-AS or no advertise or no-export",
586
- )
587
-
588
-
589
- class CommunityAdditiveEntry(BaseModel):
590
- field: Literal["communityAdditive"] = "communityAdditive"
591
- value: Literal["true"] = "true"
592
-
593
-
594
- class CarrierEntry(BaseModel):
595
- field: Literal["carrier"] = "carrier"
596
- value: CarrierType
597
-
598
-
599
- class DomainIDEntry(BaseModel):
600
- field: Literal["domainId"] = "domainId"
601
- value: str = Field(description="Number in range 1-4294967295")
602
-
603
-
604
- class GroupIDEntry(BaseModel):
605
- field: Literal["groupId"] = "groupId"
606
- value: str = Field(description="Number in range 0-4294967295")
607
-
608
-
609
- class NextHeaderEntry(BaseModel):
610
- field: Literal["nextHeader"] = "nextHeader"
611
- value: str = Field(description="0-63 single numbers separate by space")
612
-
613
-
614
- class AggregatorActionEntryValue(BaseModel):
615
- model_config = ConfigDict(populate_by_name=True)
616
- aggregator: IntStr = Field(description="Number in range 1-4294967295", ge=0, le=4294967295)
617
- ip_address: Union[IPv4Address, IPv6Address] = Field(serialization_alias="ipAddress", validation_alias="ipAddress")
618
-
619
-
620
- class AggregatorActionEntry(BaseModel):
621
- field: Literal["aggregator"] = "aggregator"
622
- value: AggregatorActionEntryValue
623
-
624
-
625
- class TrafficClassEntry(BaseModel):
626
- field: Literal["trafficClass"] = "trafficClass"
627
- value: str = Field(description="Number in range 0-63")
628
-
629
-
630
- class LocalPreferenceEntry(BaseModel):
631
- field: Literal["localPreference"] = "localPreference"
632
- value: IntStr = Field(ge=0, le=4294967295, description="Number in range 0-4294967295")
633
-
634
-
635
- class MetricEntry(BaseModel):
636
- field: Literal["metric"] = "metric"
637
- value: IntStr = Field(ge=0, le=4294967295, description="Number in range 0-4294967295")
638
-
639
-
640
- class MetricTypeEntry(BaseModel):
641
- field: Literal["metricType"] = "metricType"
642
- value: MetricType
643
-
644
-
645
- class OspfTagEntry(BaseModel):
646
- field: Literal["ospfTag"] = "ospfTag"
647
- value: IntStr = Field(ge=0, le=4294967295, description="Number in range 0-4294967295")
648
-
649
-
650
- class PeerEntry(BaseModel):
651
- field: Literal["peer"] = "peer"
652
- value: Union[IPv4Address, IPv6Address]
653
-
654
-
655
- class AtomicAggregateActionEntry(BaseModel):
656
- field: Literal["atomicAggregate"] = "atomicAggregate"
657
- value: Literal["true"] = "true"
658
-
659
-
660
- class WeightEntry(BaseModel):
661
- field: Literal["weight"] = "weight"
662
- value: IntStr = Field(ge=0, le=4294967295, description="Number in range 0-4294967295")
663
-
664
-
665
- class AdvancedCommunityEntry(BaseModel):
666
- model_config = ConfigDict(populate_by_name=True)
667
-
668
- field: Literal["advancedCommunity"] = "advancedCommunity"
669
-
670
- match_flag: AdvancedCommunityMatchFlag = Field(
671
- default="or",
672
- serialization_alias="matchFlag",
673
- validation_alias="matchFlag",
674
- description="The 'and' and 'exact' conditions are applicable to only one community list",
675
- )
676
-
677
- refs: List[UUID] = []
678
-
679
-
680
- class ExpandedCommunityInLineEntry(BaseModel):
681
- model_config = ConfigDict(populate_by_name=True)
682
-
683
- field: Literal["expandedCommunityInline"] = "expandedCommunityInline"
684
- vip_variable_name: str = Field(serialization_alias="vipVariableName", validation_alias="vipVariableName")
685
-
686
-
687
- class ExtendedCommunityEntry(BaseModel):
688
- field: Literal["extCommunity"] = "extCommunity"
689
- ref: UUID
690
-
691
-
692
- NATVPNEntries = Annotated[
693
- Union[
694
- BypassEntry,
695
- DiaPoolEntry,
696
- DiaInterfaceEntry,
697
- FallBackEntry,
698
- UseVPNEntry,
699
- ],
700
- Field(discriminator="field"),
701
- ]
702
-
703
-
704
- @dataclass
705
- class NATVPNParams:
706
- bypass: bool = False
707
- dia_pool: List[int] = field(default_factory=list)
708
- dia_interface: List[str] = field(default_factory=list)
709
- fallback: bool = False
710
- vpn: Optional[int] = None
711
-
712
- def as_entry_list(self) -> List[NATVPNEntries]:
713
- entries: List[NATVPNEntries] = []
714
- if self.bypass:
715
- entries.append(BypassEntry(value="true"))
716
- if self.dia_pool:
717
- entries.append(DiaPoolEntry(value=self.dia_pool))
718
- if self.dia_interface:
719
- entries.append(DiaInterfaceEntry(value=self.dia_interface))
720
- if self.fallback:
721
- entries.append(FallBackEntry(value="true"))
722
- if self.vpn is not None:
723
- entries.append(UseVPNEntry(value=str(self.vpn)))
724
- return entries
725
-
726
-
727
- class NATVPNEntry(RootModel):
728
- root: List[NATVPNEntries]
729
-
730
- @staticmethod
731
- def from_params(params: NATVPNParams) -> "NATVPNEntry":
732
- return NATVPNEntry(root=params.as_entry_list())
733
-
734
- def get_params(self) -> NATVPNParams:
735
- params = NATVPNParams()
736
- for param in self.root:
737
- if param.field == "bypass":
738
- params.bypass = param.as_bool
739
- elif param.field == "diaInterface":
740
- params.dia_interface = param.value
741
- elif param.field == "diaPool":
742
- params.dia_pool = param.value
743
- elif param.field == "fallback":
744
- params.fallback = param.as_bool
745
- elif param.field == "useVpn":
746
- params.vpn = int(param.value)
747
- return params
748
-
749
-
750
- class ICMPMessageEntry(BaseModel):
751
- field: Literal["icmpMessage"] = "icmpMessage"
752
- value: List[IcmpMsgType]
753
-
754
- _value = field_validator("value", mode="before")(str_as_str_list)
755
-
756
-
757
- class SourceDataPrefixListEntry(BaseModel):
758
- field: Literal["sourceDataPrefixList"] = "sourceDataPrefixList"
759
- ref: SpaceSeparatedUUIDList = Field(
760
- description="usually single id but zone based firewall can use multiple ids separated by space"
761
- )
762
-
763
-
764
- class SourceDataIPv6PrefixListEntry(BaseModel):
765
- field: Literal["sourceDataIpv6PrefixList"] = "sourceDataIpv6PrefixList"
766
- ref: SpaceSeparatedUUIDList = Field(
767
- description="usually single id but zone based firewall can use multiple ids separated by space"
768
- )
769
-
770
-
771
- class DestinationDataPrefixListEntry(BaseModel):
772
- field: Literal["destinationDataPrefixList"] = "destinationDataPrefixList"
773
- ref: SpaceSeparatedUUIDList = Field(
774
- description="usually single id but zone based firewall can use multiple ids separated by space"
775
- )
776
-
777
-
778
- class DestinationDataIPv6PrefixListEntry(BaseModel):
779
- field: Literal["destinationDataIpv6PrefixList"] = "destinationDataIpv6PrefixList"
780
- ref: SpaceSeparatedUUIDList = Field(
781
- description="usually single id but zone based firewall can use multiple ids separated by space"
782
- )
783
-
784
-
785
- class DNSAppListEntry(BaseModel):
786
- field: Literal["dnsAppList"] = "dnsAppList"
787
- ref: UUID
788
-
789
-
790
- class AppListEntry(BaseModel):
791
- field: Literal["appList"] = "appList"
792
- ref: SpaceSeparatedUUIDList
793
-
794
-
795
- class SaaSAppListEntry(BaseModel):
796
- field: Literal["saasAppList"] = "saasAppList"
797
- ref: UUID
798
-
799
-
800
- class AppListFlatEntry(BaseModel):
801
- field: Literal["appListFlat"] = "appListFlat"
802
- ref: SpaceSeparatedUUIDList
803
-
804
-
805
- class SourceFQDNListEntry(BaseModel):
806
- field: Literal["sourceFqdnList"] = "sourceFqdnList"
807
- ref: UUID
808
-
809
-
810
- class DestinationFQDNListEntry(BaseModel):
811
- field: Literal["destinationFqdnList"] = "destinationFqdnList"
812
- ref: SpaceSeparatedUUIDList
813
-
814
-
815
- class SourceGeoLocationListEntry(BaseModel):
816
- field: Literal["sourceGeoLocationList"] = "sourceGeoLocationList"
817
- ref: SpaceSeparatedUUIDList
818
-
819
-
820
- class DestinationGeoLocationListEntry(BaseModel):
821
- field: Literal["destinationGeoLocationList"] = "destinationGeoLocationList"
822
- ref: SpaceSeparatedUUIDList
823
-
824
-
825
- class ProtocolNameListEntry(BaseModel):
826
- field: Literal["protocolNameList"] = "protocolNameList"
827
- ref: SpaceSeparatedUUIDList
828
-
829
-
830
- class SourcePortListEntry(BaseModel):
831
- field: Literal["sourcePortList"] = "sourcePortList"
832
- ref: SpaceSeparatedUUIDList
833
-
834
-
835
- class SourceScalableGroupTagListEntry(BaseModel):
836
- field: Literal["sourceScalableGroupTagList"] = "sourceScalableGroupTagList"
837
- ref: SpaceSeparatedUUIDList
838
-
839
-
840
- class SourceSecurityGroupEntry(BaseModel):
841
- field: Literal["sourceSecurityGroup"] = "sourceSecurityGroup"
842
- ref: SpaceSeparatedUUIDList
843
-
844
-
845
- class DestinationPortListEntry(BaseModel):
846
- field: Literal["destinationPortList"] = "destinationPortList"
847
- ref: SpaceSeparatedUUIDList = Field(
848
- description="usually single id but zone based firewall can use multiple ids separated by space"
849
- )
850
-
851
-
852
- class DestinationScalableGroupTagListEntry(BaseModel):
853
- field: Literal["destinationScalableGroupTagList"] = "destinationScalableGroupTagList"
854
- ref: SpaceSeparatedUUIDList
855
-
856
-
857
- class DestinationSecurityGroupEntry(BaseModel):
858
- field: Literal["destinationSecurityGroup"] = "destinationSecurityGroup"
859
- ref: SpaceSeparatedUUIDList
860
-
861
-
862
- class RuleSetListEntry(BaseModel):
863
- field: Literal["ruleSetList"] = "ruleSetList"
864
- ref: SpaceSeparatedUUIDList
865
-
866
-
867
- class PolicerListEntry(BaseModel):
868
- field: Literal["policer"] = "policer"
869
- ref: UUID
870
-
871
-
872
- class TLOCListEntry(BaseModel):
873
- field: Literal["tlocList"] = "tlocList"
874
- ref: UUID
875
-
876
-
877
- class SourceVpnEntry(BaseModel):
878
- field: Literal["sourceVpn"] = "sourceVpn"
879
- value: str = Field(description="VPN ids numbers separated by space")
880
-
881
-
882
- class DestinationVpnEntry(BaseModel):
883
- field: Literal["destinationVpn"] = "destinationVpn"
884
- value: str = Field(description="VPN ids numbers separated by space")
885
-
886
-
887
- class PrefferedColorGroupListEntry(BaseModel):
888
- field: Literal["preferredColorGroup"] = "preferredColorGroup"
889
- ref: UUID
890
- color_restrict: bool = Field(False, serialization_alias="colorRestrict", validation_alias="colorRestrict")
891
- model_config = ConfigDict(populate_by_name=True)
892
-
893
-
894
- class ColorListEntry(BaseModel):
895
- field: Literal["colorList"] = "colorList"
896
- ref: UUID
897
-
898
-
899
- class CommunityListEntry(BaseModel):
900
- field: Literal["community"] = "community"
901
- ref: UUID
902
-
903
-
904
- class ExpandedCommunityListEntry(BaseModel):
905
- field: Literal["expandedCommunity"] = "expandedCommunity"
906
- ref: UUID
907
-
908
-
909
- class SiteListEntry(BaseModel):
910
- field: Literal["siteList"] = "siteList"
911
- ref: UUID
912
-
913
-
914
- class VPNListEntry(BaseModel):
915
- field: Literal["vpnList"] = "vpnList"
916
- ref: UUID
917
-
918
-
919
- class PrefixListEntry(BaseModel):
920
- field: Literal["prefixList"] = "prefixList"
921
- ref: UUID
922
-
923
-
924
- class Ipv6PrefixListEntry(BaseModel):
925
- field: Literal["ipv6prefixList"] = "ipv6prefixList"
926
- ref: UUID
927
-
928
-
929
- class RegionListEntry(BaseModel):
930
- field: Literal["regionList"] = "regionList"
931
- ref: UUID
932
-
933
-
934
- class ClassMapListEntry(BaseModel):
935
- field: Literal["class"] = "class"
936
- ref: UUID
937
-
938
-
939
- class ServiceEntryValue(BaseModel):
940
- model_config = ConfigDict(populate_by_name=True)
941
- type: ServiceType
942
- vpn: Optional[IntStr] = None
943
- tloc: Optional[TLOCEntryValue] = None
944
- tloc_list: Optional[TLOCListEntry] = Field(
945
- default=None, validation_alias="tlocList", serialization_alias="tlocList"
946
- )
947
- restrict: Optional[str] = None
948
- local: Optional[str] = None
949
-
950
- @model_validator(mode="after")
951
- def tloc_xor_tloc_list(self):
952
- check_fields_exclusive(self.__dict__, {"tloc", "tloc_list"}, False)
953
- return self
954
-
955
-
956
- class ServiceEntry(BaseModel):
957
- field: Literal["service"] = "service"
958
- value: ServiceEntryValue
959
-
960
-
961
- class TLOCActionEntry(BaseModel):
962
- field: Literal["tlocAction"] = "tlocAction"
963
- value: TLOCActionType
964
-
965
-
966
- class AffinityEntry(BaseModel):
967
- field: Literal["affinity"] = "affinity"
968
- value: str = Field(description="Number in range 0-63")
969
-
970
-
971
- RedirectDNSActionEntry = Union[IPAddressEntry, DNSTypeEntry]
972
-
973
-
974
- class ServiceAreaEntry(BaseModel):
975
- field: Literal["serviceArea"] = "serviceArea"
976
- value: SpaceSeparatedServiceAreaList
977
-
978
-
979
- class TrafficCategoryEntry(BaseModel):
980
- field: Literal["trafficCategory"] = "trafficCategory"
981
- value: TrafficCategory
982
-
983
-
984
- class LogAction(BaseModel):
985
- type: Literal["log"] = "log"
986
- parameter: str = ""
987
-
988
-
989
- class CountAction(BaseModel):
990
- type: Literal["count"] = "count"
991
- parameter: str
992
-
993
-
994
- class NATAction(BaseModel):
995
- type: Literal["nat"] = "nat"
996
- parameter: Union[NATPoolEntry, NATVPNEntry]
997
-
998
- @staticmethod
999
- def from_nat_pool(nat_pool: int) -> "NATAction":
1000
- return NATAction(parameter=NATPoolEntry(value=str(nat_pool)))
1001
-
1002
- @staticmethod
1003
- def from_nat_vpn(
1004
- use_vpn: int = 0,
1005
- *,
1006
- fallback: bool = False,
1007
- bypass: bool = False,
1008
- dia_pool: List[int] = [],
1009
- dia_interface: List[str] = [],
1010
- ) -> "NATAction":
1011
- params = NATVPNParams(
1012
- bypass=bypass,
1013
- dia_pool=dia_pool,
1014
- dia_interface=dia_interface,
1015
- fallback=fallback,
1016
- vpn=use_vpn,
1017
- )
1018
- return NATAction(parameter=NATVPNEntry.from_params(params))
1019
-
1020
- @property
1021
- def nat_pool(self) -> Optional[int]:
1022
- if isinstance(self.parameter, NATPoolEntry):
1023
- return int(self.parameter.value)
1024
- return None
1025
-
1026
- @property
1027
- def nat_vpn(self) -> Optional[NATVPNParams]:
1028
- if isinstance(self.parameter, NATVPNEntry):
1029
- return self.parameter.get_params()
1030
- return None
1031
-
1032
-
1033
- class CFlowDAction(BaseModel):
1034
- type: Literal["cflowd"] = "cflowd"
1035
-
1036
-
1037
- class RedirectDNSAction(BaseModel):
1038
- type: Literal["redirectDns"] = "redirectDns"
1039
- parameter: RedirectDNSActionEntry
1040
-
1041
- @staticmethod
1042
- def from_ip_address(ip: IPv4Address) -> "RedirectDNSAction":
1043
- return RedirectDNSAction(parameter=IPAddressEntry(value=ip))
1044
-
1045
- @staticmethod
1046
- def from_dns_type(dns_type: DNSTypeEntryType = "host") -> "RedirectDNSAction":
1047
- return RedirectDNSAction(parameter=DNSTypeEntry(value=dns_type))
1048
-
1049
- def get_ip(self) -> Optional[IPv4Address]:
1050
- if self.parameter.field == "ipAddress":
1051
- return self.parameter.value
1052
- return None
1053
-
1054
- def get_dns_type(self) -> Optional[DNSTypeEntryType]:
1055
- if self.parameter.field == "dnsType":
1056
- return self.parameter.value
1057
- return None
1058
-
1059
-
1060
- class TCPOptimizationAction(BaseModel):
1061
- type: Literal["tcpOptimization"] = "tcpOptimization"
1062
- parameter: str = ""
1063
-
1064
-
1065
- class DREOptimizationAction(BaseModel):
1066
- type: Literal["dreOptimization"] = "dreOptimization"
1067
- parameter: str = ""
1068
-
1069
-
1070
- class ServiceNodeGroupAction(BaseModel):
1071
- type: Literal["serviceNodeGroup"] = "serviceNodeGroup"
1072
- parameter: str = Field(default="", pattern=r"^(SNG-APPQOE(3[01]|[12][0-9]|[1-9])?)?$")
1073
-
1074
-
1075
- class LossProtectionAction(BaseModel):
1076
- type: Literal["lossProtect"] = "lossProtect"
1077
- parameter: LossProtectionType
1078
-
1079
-
1080
- class LossProtectionFECAction(BaseModel):
1081
- type: Literal["lossProtectFec"] = "lossProtectFec"
1082
- parameter: LossProtectionType = "fecAlways"
1083
- value: Optional[str] = Field(default=None, description="BETA number in range 1-5")
1084
-
1085
-
1086
- class LossProtectionPacketDuplicationAction(BaseModel):
1087
- type: Literal["lossProtectPktDup"] = "lossProtectPktDup"
1088
- parameter: LossProtectionType = "packetDuplication"
1089
-
1090
-
1091
- class SecureInternetGatewayAction(BaseModel):
1092
- type: Literal["sig"] = "sig"
1093
- parameter: str = ""
1094
-
1095
-
1096
- class FallBackToRoutingAction(BaseModel):
1097
- type: Literal["fallbackToRouting"] = "fallbackToRouting"
1098
- parameter: str = ""
1099
-
1100
-
1101
- class ExportToAction(BaseModel):
1102
- type: Literal["exportTo"] = "exportTo"
1103
- parameter: VPNListEntry
1104
-
1105
-
1106
- class MirrorAction(BaseModel):
1107
- type: Literal["mirror"] = "mirror"
1108
- parameter: Reference
1109
-
1110
-
1111
- class ClassMapAction(BaseModel):
1112
- type: Literal["class"] = "class"
1113
- parameter: Reference
1114
-
1115
-
1116
- class PolicerAction(BaseModel):
1117
- type: Literal["policer"] = "policer"
1118
- parameter: Reference
1119
-
1120
-
1121
- class ConnectionEventsAction(BaseModel):
1122
- type: Literal["connectionEvents"] = "connectionEvents"
1123
- parameter: str = ""
1124
-
1125
-
1126
- class AdvancedInspectionProfileAction(BaseModel):
1127
- type: Literal["advancedInspectionProfile"] = "advancedInspectionProfile"
1128
- parameter: ReferenceWithId
1129
-
1130
-
1131
- class BackupSlaPrefferedColorAction(BaseModel):
1132
- type: Literal["backupSlaPreferredColor"] = "backupSlaPreferredColor"
1133
- parameter: SpaceSeparatedTLOCColorStr
1134
-
1135
-
1136
- class SlaName(BaseModel):
1137
- field: Literal["name"] = "name"
1138
- ref: UUID
1139
-
1140
-
1141
- class SlaPreferredColor(BaseModel):
1142
- field: Literal["preferredColor"] = "preferredColor"
1143
- value: SpaceSeparatedTLOCColorStr
1144
-
1145
-
1146
- class SlaPreferredRemoteColor(BaseModel):
1147
- field: Literal["preferredRemoteColor"] = "preferredRemoteColor"
1148
- value: TLOCColor
1149
- remote_color_restrict: Optional[bool] = Field(
1150
- default=None, serialization_alias="remoteColorRestrict", validation_alias="remoteColorRestrict"
1151
- )
1152
-
1153
-
1154
- class SlaPreferredColorGroup(BaseModel):
1155
- field: Literal["preferredColorGroup"] = "preferredColorGroup"
1156
- ref: UUID
1157
-
1158
-
1159
- class SlaNotMet(BaseModel):
1160
- field: SlaNotMetAction
1161
-
1162
-
1163
- SlaClassActionParam = Annotated[
1164
- Union[
1165
- SlaName,
1166
- SlaPreferredColor,
1167
- SlaPreferredColorGroup,
1168
- SlaPreferredRemoteColor,
1169
- SlaNotMet,
1170
- ],
1171
- Field(discriminator="field"),
1172
- ]
1173
-
1174
-
1175
- class SlaClassAction(BaseModel):
1176
- type: Literal["slaClass"] = "slaClass"
1177
- parameter: List[SlaClassActionParam] = Field(default_factory=list)
1178
-
1179
- @overload
1180
- @staticmethod
1181
- def from_params(
1182
- sla_class: UUID, not_met_action: Optional[SlaNotMetAction] = None, *, preferred_color: List[TLOCColor]
1183
- ) -> "SlaClassAction":
1184
- ...
1185
-
1186
- @overload
1187
- @staticmethod
1188
- def from_params(
1189
- sla_class: UUID, not_met_action: Optional[SlaNotMetAction] = None, *, preferred_color_group: UUID
1190
- ) -> "SlaClassAction":
1191
- ...
1192
-
1193
- @staticmethod
1194
- def from_params(
1195
- sla_class: UUID,
1196
- not_met_action: Optional[SlaNotMetAction] = None,
1197
- *,
1198
- preferred_color: Optional[List[TLOCColor]] = None,
1199
- preferred_color_group: Optional[UUID] = None,
1200
- ) -> "SlaClassAction":
1201
- action = SlaClassAction()
1202
- action.parameter.append(SlaName(ref=sla_class))
1203
- if not_met_action:
1204
- action.parameter.append(SlaNotMet(field=not_met_action))
1205
- if preferred_color:
1206
- action.parameter.append(SlaPreferredColor(value=preferred_color))
1207
- if preferred_color_group:
1208
- action.parameter.append(SlaPreferredColorGroup(ref=preferred_color_group))
1209
- return action
1210
-
1211
-
1212
- class CloudSaaSAction(BaseModel):
1213
- type: Literal["cloudSaas"] = "cloudSaas"
1214
- parameter: str = Field(default="")
1215
-
1216
-
1217
- ActionSetEntry = Annotated[
1218
- Union[
1219
- AffinityEntry,
1220
- AggregatorActionEntry,
1221
- AsPathActionEntry,
1222
- AtomicAggregateActionEntry,
1223
- CommunityAdditiveEntry,
1224
- CommunityEntry,
1225
- DSCPEntry,
1226
- ForwardingClassEntry,
1227
- LocalPreferenceEntry,
1228
- LocalTLOCListEntry,
1229
- MetricEntry,
1230
- MetricTypeEntry,
1231
- NextHopActionEntry,
1232
- NextHopIpv6ActionEntry,
1233
- NextHopLooseEntry,
1234
- OMPTagEntry,
1235
- OriginatorEntry,
1236
- OriginEntry,
1237
- OspfTagEntry,
1238
- PolicerListEntry,
1239
- PreferenceEntry,
1240
- PrefferedColorGroupListEntry,
1241
- ServiceChainEntry,
1242
- ServiceEntry,
1243
- TLOCActionEntry,
1244
- TLOCEntry,
1245
- TLOCListEntry,
1246
- TrafficClassEntry,
1247
- VPNEntry,
1248
- WeightEntry,
1249
- ],
1250
- Field(discriminator="field"),
1251
- ]
1252
-
1253
-
1254
- class ActionSet(BaseModel):
1255
- type: Literal["set"] = "set"
1256
- parameter: List[ActionSetEntry] = Field(default_factory=list)
1257
-
1258
-
1259
- ActionEntry = Annotated[
1260
- Union[
1261
- ActionSet,
1262
- AdvancedInspectionProfileAction,
1263
- BackupSlaPrefferedColorAction,
1264
- CFlowDAction,
1265
- ClassMapAction,
1266
- CloudSaaSAction,
1267
- ConnectionEventsAction,
1268
- CountAction,
1269
- DREOptimizationAction,
1270
- ExportToAction,
1271
- FallBackToRoutingAction,
1272
- LogAction,
1273
- LossProtectionAction,
1274
- LossProtectionFECAction,
1275
- LossProtectionPacketDuplicationAction,
1276
- MirrorAction,
1277
- NATAction,
1278
- PolicerAction,
1279
- RedirectDNSAction,
1280
- SecureInternetGatewayAction,
1281
- ServiceNodeGroupAction,
1282
- SlaClassAction,
1283
- TCPOptimizationAction,
1284
- ],
1285
- Field(discriminator="type"),
1286
- ]
1287
-
1288
- MatchEntry = Annotated[
1289
- Union[
1290
- AddressEntry,
1291
- AdvancedCommunityEntry,
1292
- AppListEntry,
1293
- AppListFlatEntry,
1294
- AsPathListMatchEntry,
1295
- CarrierEntry,
1296
- ClassMapListEntry,
1297
- ColorListEntry,
1298
- CommunityListEntry,
1299
- DestinationDataIPv6PrefixListEntry,
1300
- DestinationDataPrefixListEntry,
1301
- DestinationFQDNEntry,
1302
- DestinationFQDNListEntry,
1303
- DestinationGeoLocationEntry,
1304
- DestinationGeoLocationListEntry,
1305
- DestinationIPEntry,
1306
- DestinationIPv6Entry,
1307
- DestinationPortEntry,
1308
- DestinationPortListEntry,
1309
- DestinationRegionEntry,
1310
- DestinationScalableGroupTagListEntry,
1311
- DestinationSecurityGroupEntry,
1312
- DestinationVpnEntry,
1313
- DNSAppListEntry,
1314
- DNSEntry,
1315
- DomainIDEntry,
1316
- DSCPEntry,
1317
- ExpandedCommunityInLineEntry,
1318
- ExpandedCommunityListEntry,
1319
- ExpandedCommunityListEntry,
1320
- ExtendedCommunityEntry,
1321
- GroupIDEntry,
1322
- ICMPMessageEntry,
1323
- Ipv6PrefixListEntry,
1324
- LocalPreferenceEntry,
1325
- MetricEntry,
1326
- NextHeaderEntry,
1327
- NextHopMatchEntry,
1328
- OMPTagEntry,
1329
- OriginatorEntry,
1330
- OriginEntry,
1331
- OspfTagEntry,
1332
- PacketLengthEntry,
1333
- PathTypeEntry,
1334
- PeerEntry,
1335
- PLPEntry,
1336
- PreferenceEntry,
1337
- PrefixListEntry,
1338
- ProtocolEntry,
1339
- ProtocolNameEntry,
1340
- ProtocolNameListEntry,
1341
- RegionEntry,
1342
- RegionListEntry,
1343
- RoleEntry,
1344
- RuleSetListEntry,
1345
- SaaSAppListEntry,
1346
- ServiceAreaEntry,
1347
- SiteEntry,
1348
- SiteListEntry,
1349
- SiteListEntry,
1350
- SourceDataIPv6PrefixListEntry,
1351
- SourceDataPrefixListEntry,
1352
- SourceFQDNEntry,
1353
- SourceFQDNListEntry,
1354
- SourceGeoLocationEntry,
1355
- SourceGeoLocationListEntry,
1356
- SourceIPEntry,
1357
- SourceIPv6Entry,
1358
- SourcePortEntry,
1359
- SourcePortListEntry,
1360
- SourceScalableGroupTagListEntry,
1361
- SourceSecurityGroupEntry,
1362
- SourceVpnEntry,
1363
- TCPEntry,
1364
- TLOCEntry,
1365
- TLOCListEntry,
1366
- TrafficCategoryEntry,
1367
- TrafficClassEntry,
1368
- TrafficToEntry,
1369
- VPNEntry,
1370
- VPNListEntry,
1371
- ],
1372
- Field(discriminator="field"),
1373
- ]
1374
-
1375
- MUTUALLY_EXCLUSIVE_FIELDS = [
1376
- {"destinationDataPrefixList", "destinationIp"},
1377
- {"destinationDataIpv6PrefixList", "destinationIpv6"},
1378
- {"sourceDataPrefixList", "sourceIp"},
1379
- {"sourceDataIpv6PrefixList", "sourceIpv6"},
1380
- {"protocolName", "protocolNameList", "protocol", "destinationPort", "destinationPortList"},
1381
- {"localTlocList", "preferredColorGroup"},
1382
- {"sig", "fallbackToRouting", "nat", "nextHop", "serviceChain"},
1383
- {"regionId", "regionList"},
1384
- {"siteId", "siteList"},
1385
- {"tloc", "tlocList"},
1386
- {"service", "tlocAction"},
1387
- ]
1388
-
1389
-
1390
- def _generate_field_name_check_lookup(spec: Sequence[Set[str]]) -> Dict[str, List[str]]:
1391
- lookup: Dict[str, List[str]] = {}
1392
- for exclusive_set in spec:
1393
- for fieldname in exclusive_set:
1394
- lookup[fieldname] = list(exclusive_set - {fieldname})
1395
- return lookup
1396
-
1397
-
1398
- MUTUALLY_EXCLUSIVE_FIELD_LOOKUP = _generate_field_name_check_lookup(MUTUALLY_EXCLUSIVE_FIELDS)
1399
-
1400
-
1401
- class Match(BaseModel):
1402
- entries: Sequence[MatchEntry]
1403
-
1404
-
1405
- class Action(BaseModel):
1406
- pass
1407
-
1408
-
1409
- class PolicyDefinitionSequenceBase(BaseModel):
1410
- sequence_id: int = Field(default=0, serialization_alias="sequenceId", validation_alias="sequenceId")
1411
- sequence_name: Optional[str] = Field(
1412
- default=None, serialization_alias="sequenceName", validation_alias="sequenceName"
1413
- )
1414
- base_action: Optional[str] = Field(default=None, serialization_alias="baseAction", validation_alias="baseAction")
1415
- sequence_type: SequenceType = Field(serialization_alias="sequenceType", validation_alias="sequenceType")
1416
- sequence_ip_type: Optional[SequenceIpType] = Field(
1417
- default="ipv4", serialization_alias="sequenceIpType", validation_alias="sequenceIpType"
1418
- )
1419
- ruleset: Optional[bool] = None
1420
- match: Match
1421
- actions: Optional[Sequence[ActionEntry]] = None
1422
-
1423
- @staticmethod
1424
- def _check_field_collision(field: str, fields: Sequence[str]) -> None:
1425
- existing_fields = set(fields)
1426
- forbidden_fields = set(MUTUALLY_EXCLUSIVE_FIELD_LOOKUP.get(field, []))
1427
- colliding_fields = set(existing_fields) & set(forbidden_fields)
1428
- assert not colliding_fields, f"{field} is mutually exclusive with {colliding_fields}"
1429
-
1430
- def _check_match_can_be_inserted(self, match: MatchEntry) -> None:
1431
- self._check_field_collision(
1432
- match.field,
1433
- [entry.field for entry in self.match.entries],
1434
- )
1435
-
1436
- def _check_action_can_be_inserted_in_set(
1437
- self, action: ActionSetEntry, action_set_param: List[ActionSetEntry]
1438
- ) -> None:
1439
- self._check_field_collision(
1440
- action.field,
1441
- [param.field for param in action_set_param],
1442
- )
1443
-
1444
- def _get_match_entries_by_field(self, field: str) -> Sequence[MatchEntry]:
1445
- return [entry for entry in self.match.entries if entry.field == field]
1446
-
1447
- def _remove_match(self, match_type: Any) -> None:
1448
- if isinstance(self.match.entries, MutableSequence):
1449
- self.match.entries[:] = [entry for entry in self.match.entries if type(entry) is match_type]
1450
-
1451
- def _insert_match(self, match: MatchEntry, insert_field_check: bool = True) -> int:
1452
- # inserts new item or replaces item with same field name if found
1453
- if insert_field_check:
1454
- self._check_match_can_be_inserted(match)
1455
- if isinstance(self.match.entries, MutableSequence):
1456
- for index, entry in enumerate(self.match.entries):
1457
- if match.field == entry.field:
1458
- self.match.entries[index] = match
1459
- return index
1460
- self.match.entries.append(match)
1461
- return len(self.match.entries) - 1
1462
- else:
1463
- raise TypeError("Match entries must be defined as MutableSequence (eg. List) to use _insert_match method")
1464
-
1465
- def _insert_action(self, action: ActionEntry) -> None:
1466
- if isinstance(self.actions, MutableSequence):
1467
- for index, entry in enumerate(self.actions):
1468
- if action.type == entry.type:
1469
- self.actions[index] = action
1470
- return
1471
- self.actions.append(action)
1472
- else:
1473
- raise TypeError("Action entries must be defined as MutableSequence (eg. List) to use _insert_match method")
1474
-
1475
- def _remove_action(self, action_type_name: str) -> None:
1476
- if isinstance(self.actions, MutableSequence):
1477
- self.actions[:] = [action for action in self.actions if action.type != action_type_name]
1478
-
1479
- def _insert_action_in_set(self, action: ActionSetEntry) -> None:
1480
- if isinstance(self.actions, MutableSequence):
1481
- # Check if ActionSet entry already exist
1482
- action_sets = [act for act in self.actions if isinstance(act, ActionSet)]
1483
- if len(action_sets) < 1:
1484
- # if not found insert new empty ActionSet
1485
- action_set = ActionSet()
1486
- self.actions.append(action_set)
1487
- else:
1488
- action_set = action_sets[0]
1489
- # Now we operate on action_set parameter list
1490
- self._check_action_can_be_inserted_in_set(action, action_set.parameter)
1491
- for index, param in enumerate(action_set.parameter):
1492
- if action.field == param.field:
1493
- action_set.parameter[index] = action
1494
- return
1495
- action_set.parameter.append(action)
1496
-
1497
- def _remove_action_from_set(self, field_name: str) -> None:
1498
- if isinstance(self.actions, MutableSequence):
1499
- for action in self.actions:
1500
- if isinstance(action, ActionSet):
1501
- action.parameter[:] = [param for param in action.parameter if param.field != field_name]
1502
-
1503
-
1504
- def accept_action(method):
1505
- @wraps(method)
1506
- def wrapper(self: PolicyDefinitionSequenceBase, *args, **kwargs):
1507
- assert self.base_action == "accept", f"{method.__name__} only allowed when base_action is accept"
1508
- return method(self, *args, **kwargs)
1509
-
1510
- return wrapper
1511
-
1512
-
1513
- class PolicyActionBase(BaseModel):
1514
- type: str
1515
-
1516
-
1517
- class PolicyAcceptRejectAction(PolicyActionBase):
1518
- type: AcceptRejectActionType
1519
-
1520
-
1521
- class PolicyAcceptDropAction(PolicyActionBase):
1522
- type: AcceptDropActionType
1523
-
1524
-
1525
- class InfoTag(BaseModel):
1526
- info_tag: Optional[str] = Field("", serialization_alias="infoTag", validation_alias="infoTag")
1527
-
1528
-
1529
- class PolicyDefinitionId(BaseModel):
1530
- model_config = ConfigDict(populate_by_name=True)
1531
- definition_id: UUID = Field(serialization_alias="definitionId", validation_alias="definitionId")
1532
-
1533
-
1534
- class PolicyReference(BaseModel):
1535
- id: UUID
1536
- property: str
1537
-
1538
-
1539
- class DefinitionWithSequencesCommonBase(BaseModel):
1540
- default_action: Optional[PolicyActionBase] = Field(
1541
- default=None,
1542
- serialization_alias="defaultAction",
1543
- validation_alias="defaultAction",
1544
- )
1545
- sequences: Optional[Sequence[PolicyDefinitionSequenceBase]] = None
1546
-
1547
- def _enumerate_sequences(self, from_index: int = 0) -> None:
1548
- """Updates sequence entries with appropriate index.
1549
-
1550
- Args:
1551
- from_index (int, optional): Only rules after that index in table will be updated. Defaults to 0.
1552
- """
1553
- if isinstance(self.sequences, MutableSequence):
1554
- start_index = from_index
1555
- sequence_count = len(self.sequences)
1556
- if from_index < 0:
1557
- start_index = sequence_count - start_index
1558
- for i in range(start_index, sequence_count):
1559
- self.sequences[i].sequence_id = i + 1
1560
- else:
1561
- raise TypeError("sequences be defined as MutableSequence (eg. List) to use _enumerate_sequences method")
1562
-
1563
- def pop(self, index: int = -1) -> None:
1564
- """Removes a sequence item at given index, consecutive sequence items will be enumarated again.
1565
-
1566
- Args:
1567
- index (int, optional): Defaults to -1.
1568
- """
1569
- if isinstance(self.sequences, MutableSequence):
1570
- self.sequences.pop(index)
1571
- self._enumerate_sequences(index)
1572
- else:
1573
- raise TypeError("sequences be defined as MutableSequence (eg. List) to use pop method")
1574
-
1575
- def add(self, item: PolicyDefinitionSequenceBase) -> int:
1576
- """Adds new sequence item as last in table, index will be autogenerated.
1577
-
1578
- Args:
1579
- item (DefinitionSequence): item to be added to sequences
1580
-
1581
- Returns:
1582
- int: index at which item was added
1583
- """
1584
- if isinstance(self.sequences, MutableSequence):
1585
- insert_index = len(self.sequences)
1586
- self.sequences.append(item)
1587
- self._enumerate_sequences(insert_index)
1588
- return insert_index
1589
- else:
1590
- raise TypeError("sequences be defined as MutableSequence (eg. List) to add method")
1591
-
1592
-
1593
- class PolicyDefinitionBase(BaseModel):
1594
- name: str = Field(
1595
- pattern="^[a-zA-Z0-9_-]{1,128}$",
1596
- description="Can include only alpha-numeric characters, hyphen '-' or underscore '_'; maximum 128 characters",
1597
- )
1598
- description: str = "default description"
1599
- type: str
1600
- mode: Optional[str] = None
1601
- optimized: Optional[Optimized] = "false"
1602
-
1603
-
1604
- class PolicyDefinitionInfo(PolicyDefinitionBase, PolicyDefinitionId):
1605
- last_updated: datetime.datetime = Field(serialization_alias="lastUpdated", validation_alias="lastUpdated")
1606
- owner: str
1607
- reference_count: int = Field(serialization_alias="referenceCount", validation_alias="referenceCount")
1608
- references: List[PolicyReference]
1609
-
1610
-
1611
- class PolicyDefinitionGetResponse(PolicyDefinitionInfo):
1612
- is_activated_by_vsmart: bool = Field(
1613
- serialization_alias="isActivatedByVsmart", validation_alias="isActivatedByVsmart"
1614
- )
1615
-
1616
-
1617
- class PolicyDefinitionEditResponse(BaseModel):
1618
- master_templates_affected: List[str] = Field(
1619
- default_factory=list, serialization_alias="masterTemplatesAffected", validation_alias="masterTemplatesAffected"
1620
- )
1621
-
1622
-
1623
- class PolicyDefinitionPreview(BaseModel):
1624
- preview: str