catalystwan 0.41.2__py3-none-any.whl → 0.41.2.dev1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (504) hide show
  1. catalystwan/__init__.py +3 -2
  2. catalystwan/api/administration.py +13 -2
  3. catalystwan/api/api_container.py +4 -1
  4. catalystwan/api/builders/__init__.py +14 -0
  5. catalystwan/api/builders/feature_profiles/__init__.py +0 -0
  6. catalystwan/api/builders/feature_profiles/application_priority.py +58 -0
  7. catalystwan/api/builders/feature_profiles/builder_factory.py +59 -0
  8. catalystwan/api/builders/feature_profiles/cli.py +76 -0
  9. catalystwan/api/builders/feature_profiles/mixins.py +44 -0
  10. catalystwan/api/builders/feature_profiles/other.py +79 -0
  11. catalystwan/api/builders/feature_profiles/report.py +155 -0
  12. catalystwan/api/builders/feature_profiles/service.py +248 -0
  13. catalystwan/api/builders/feature_profiles/system.py +80 -0
  14. catalystwan/api/builders/feature_profiles/transport.py +256 -0
  15. catalystwan/api/builders/feature_profiles/uc_voice.py +287 -0
  16. catalystwan/api/config_group_api.py +41 -16
  17. catalystwan/api/configuration_groups/parcel.py +100 -30
  18. catalystwan/api/feature_profile_api.py +2021 -242
  19. catalystwan/api/policy_api.py +470 -116
  20. catalystwan/api/template_api.py +113 -44
  21. catalystwan/api/templates/README.md +61 -47
  22. catalystwan/api/templates/cli_template.py +17 -7
  23. catalystwan/api/templates/device_template/device_template.py +127 -32
  24. catalystwan/api/templates/feature_template.py +3 -3
  25. catalystwan/api/templates/models/aaa_model.py +387 -0
  26. catalystwan/api/templates/models/cisco_aaa_model.py +289 -42
  27. catalystwan/api/templates/models/cisco_banner_model.py +11 -2
  28. catalystwan/api/templates/models/cisco_bfd_model.py +31 -36
  29. catalystwan/api/templates/models/cisco_bgp_model.py +382 -131
  30. catalystwan/api/templates/models/cisco_logging_model.py +80 -43
  31. catalystwan/api/templates/models/cisco_ntp_model.py +34 -15
  32. catalystwan/api/templates/models/cisco_omp_model.py +70 -60
  33. catalystwan/api/templates/models/cisco_ospf.py +143 -74
  34. catalystwan/api/templates/models/cisco_ospfv3.py +217 -95
  35. catalystwan/api/templates/models/cisco_secure_internet_gateway.py +304 -142
  36. catalystwan/api/templates/models/cisco_snmp_model.py +66 -52
  37. catalystwan/api/templates/models/cisco_system.py +238 -129
  38. catalystwan/api/templates/models/cisco_vpn_interface_model.py +632 -275
  39. catalystwan/api/templates/models/cisco_vpn_model.py +433 -270
  40. catalystwan/api/templates/models/cli_template.py +3 -2
  41. catalystwan/api/templates/models/omp_vsmart_model.py +46 -10
  42. catalystwan/api/templates/models/security_vsmart_model.py +11 -8
  43. catalystwan/api/templates/models/supported.py +10 -4
  44. catalystwan/api/templates/models/system_vsmart_model.py +164 -27
  45. catalystwan/api/templates/models/vpn_vsmart_interface_model.py +198 -0
  46. catalystwan/api/templates/models/vpn_vsmart_model.py +124 -0
  47. catalystwan/apigw_auth.py +6 -2
  48. catalystwan/dataclasses.py +2 -53
  49. catalystwan/endpoints/__init__.py +41 -41
  50. catalystwan/endpoints/certificate_management_device.py +4 -0
  51. catalystwan/endpoints/cluster_management.py +27 -7
  52. catalystwan/endpoints/configuration/feature_profile/sdwan/application_priority.py +107 -0
  53. catalystwan/endpoints/configuration/feature_profile/sdwan/cli.py +60 -0
  54. catalystwan/endpoints/configuration/feature_profile/sdwan/dns_security.py +83 -0
  55. catalystwan/endpoints/configuration/feature_profile/sdwan/embedded_security.py +88 -0
  56. catalystwan/endpoints/configuration/feature_profile/sdwan/other.py +62 -0
  57. catalystwan/endpoints/configuration/feature_profile/sdwan/policy_object.py +35 -12
  58. catalystwan/endpoints/configuration/feature_profile/sdwan/service.py +154 -0
  59. catalystwan/endpoints/configuration/feature_profile/sdwan/sig_security.py +88 -0
  60. catalystwan/endpoints/configuration/feature_profile/sdwan/system.py +164 -11
  61. catalystwan/endpoints/configuration/feature_profile/sdwan/topology.py +93 -0
  62. catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py +144 -26
  63. catalystwan/endpoints/configuration/feature_profile/sdwan/uc_voice.py +77 -0
  64. catalystwan/endpoints/configuration/network_hierarchy.py +32 -0
  65. catalystwan/endpoints/configuration/policy/abstractions.py +49 -0
  66. catalystwan/endpoints/configuration/policy/definition/access_control_list.py +6 -11
  67. catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py +6 -11
  68. catalystwan/endpoints/configuration/policy/definition/aip.py +52 -0
  69. catalystwan/endpoints/configuration/policy/definition/amp.py +52 -0
  70. catalystwan/endpoints/configuration/policy/definition/app_route.py +50 -0
  71. catalystwan/endpoints/configuration/policy/definition/cflowd.py +46 -0
  72. catalystwan/endpoints/configuration/policy/definition/control.py +6 -11
  73. catalystwan/endpoints/configuration/policy/definition/device_access.py +6 -11
  74. catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py +6 -11
  75. catalystwan/endpoints/configuration/policy/definition/dial_peer.py +57 -0
  76. catalystwan/endpoints/configuration/policy/definition/dns_security.py +50 -0
  77. catalystwan/endpoints/configuration/policy/definition/fxo_port.py +57 -0
  78. catalystwan/endpoints/configuration/policy/definition/fxs_did_port.py +57 -0
  79. catalystwan/endpoints/configuration/policy/definition/fxs_port.py +57 -0
  80. catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py +6 -11
  81. catalystwan/endpoints/configuration/policy/definition/intrusion_prevention.py +52 -0
  82. catalystwan/endpoints/configuration/policy/definition/mesh.py +2 -11
  83. catalystwan/endpoints/configuration/policy/definition/pri_isdn_port.py +57 -0
  84. catalystwan/endpoints/configuration/policy/definition/qos_map.py +2 -11
  85. catalystwan/endpoints/configuration/policy/definition/rewrite.py +6 -11
  86. catalystwan/endpoints/configuration/policy/definition/route_policy.py +50 -0
  87. catalystwan/endpoints/configuration/policy/definition/rule_set.py +2 -11
  88. catalystwan/endpoints/configuration/policy/definition/security_group.py +6 -11
  89. catalystwan/endpoints/configuration/policy/definition/srst_phone_profile.py +59 -0
  90. catalystwan/endpoints/configuration/policy/definition/ssl_decryption.py +50 -0
  91. catalystwan/endpoints/configuration/policy/definition/ssl_decryption_utd_profile.py +52 -0
  92. catalystwan/endpoints/configuration/policy/definition/traffic_data.py +6 -11
  93. catalystwan/endpoints/configuration/policy/definition/url_filtering.py +50 -0
  94. catalystwan/endpoints/configuration/policy/definition/vpn_membership.py +6 -11
  95. catalystwan/endpoints/configuration/policy/definition/vpn_qos_map.py +50 -0
  96. catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py +6 -11
  97. catalystwan/endpoints/configuration/policy/list/app.py +3 -16
  98. catalystwan/endpoints/configuration/policy/list/app_probe.py +6 -15
  99. catalystwan/endpoints/configuration/policy/list/as_path.py +3 -16
  100. catalystwan/endpoints/configuration/policy/list/class_map.py +3 -16
  101. catalystwan/endpoints/configuration/policy/list/color.py +3 -16
  102. catalystwan/endpoints/configuration/policy/list/community.py +3 -16
  103. catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py +6 -15
  104. catalystwan/endpoints/configuration/policy/list/data_prefix.py +3 -16
  105. catalystwan/endpoints/configuration/policy/list/expanded_community.py +6 -15
  106. catalystwan/endpoints/configuration/policy/list/extended_community.py +52 -0
  107. catalystwan/endpoints/configuration/policy/list/fax_protocol.py +48 -0
  108. catalystwan/endpoints/configuration/policy/list/fqdn.py +3 -16
  109. catalystwan/endpoints/configuration/policy/list/geo_location.py +3 -16
  110. catalystwan/endpoints/configuration/policy/list/identity.py +48 -0
  111. catalystwan/endpoints/configuration/policy/list/ips_signature.py +6 -15
  112. catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py +3 -16
  113. catalystwan/endpoints/configuration/policy/list/local_app.py +3 -16
  114. catalystwan/endpoints/configuration/policy/list/local_domain.py +3 -16
  115. catalystwan/endpoints/configuration/policy/list/media_profile.py +52 -0
  116. catalystwan/endpoints/configuration/policy/list/mirror.py +3 -16
  117. catalystwan/endpoints/configuration/policy/list/modem_pass_through.py +52 -0
  118. catalystwan/endpoints/configuration/policy/list/policer.py +3 -16
  119. catalystwan/endpoints/configuration/policy/list/port.py +3 -16
  120. catalystwan/endpoints/configuration/policy/list/preferred_color_group.py +6 -15
  121. catalystwan/endpoints/configuration/policy/list/prefix.py +4 -16
  122. catalystwan/endpoints/configuration/policy/list/protocol_name.py +6 -15
  123. catalystwan/endpoints/configuration/policy/list/region.py +2 -10
  124. catalystwan/endpoints/configuration/policy/list/scalable_group_tag.py +52 -0
  125. catalystwan/endpoints/configuration/policy/list/site.py +3 -16
  126. catalystwan/endpoints/configuration/policy/list/sla.py +3 -16
  127. catalystwan/endpoints/configuration/policy/list/supervisory_disconnect.py +52 -0
  128. catalystwan/endpoints/configuration/policy/list/threat_grid_api_key.py +52 -0
  129. catalystwan/endpoints/configuration/policy/list/tloc.py +3 -16
  130. catalystwan/endpoints/configuration/policy/list/translation_profile.py +52 -0
  131. catalystwan/endpoints/configuration/policy/list/translation_rules.py +52 -0
  132. catalystwan/endpoints/configuration/policy/list/trunkgroup.py +48 -0
  133. catalystwan/endpoints/configuration/policy/list/umbrella_data.py +52 -0
  134. catalystwan/endpoints/configuration/policy/list/url_allow_list.py +3 -16
  135. catalystwan/endpoints/configuration/policy/list/url_block_list.py +3 -16
  136. catalystwan/endpoints/configuration/policy/list/vpn.py +3 -16
  137. catalystwan/endpoints/configuration/policy/list/zone.py +3 -16
  138. catalystwan/endpoints/configuration/policy/security_template.py +2 -3
  139. catalystwan/endpoints/configuration/policy/voice_template.py +39 -0
  140. catalystwan/endpoints/configuration/policy_group.py +30 -0
  141. catalystwan/endpoints/configuration/software_actions.py +2 -4
  142. catalystwan/endpoints/configuration/topology_group.py +51 -0
  143. catalystwan/endpoints/configuration_dashboard_status.py +2 -2
  144. catalystwan/endpoints/configuration_device_template.py +15 -1
  145. catalystwan/endpoints/configuration_feature_profile.py +8 -11
  146. catalystwan/endpoints/configuration_general_template.py +31 -0
  147. catalystwan/endpoints/configuration_group.py +28 -5
  148. catalystwan/endpoints/configuration_settings.py +90 -1
  149. catalystwan/endpoints/configuration_template_master.py +48 -0
  150. catalystwan/endpoints/endpoints_container.py +79 -19
  151. catalystwan/endpoints/real_time_monitoring/reboot_history.py +1 -3
  152. catalystwan/endpoints/tenant_migration.py +2 -0
  153. catalystwan/exceptions.py +17 -0
  154. catalystwan/integration_tests/base.py +81 -0
  155. catalystwan/integration_tests/feature_profile/sdwan/__init__.py +0 -0
  156. catalystwan/integration_tests/feature_profile/sdwan/policy/__init__.py +0 -0
  157. catalystwan/integration_tests/feature_profile/sdwan/policy/base.py +33 -0
  158. catalystwan/integration_tests/feature_profile/sdwan/policy/test_extended_community.py +33 -0
  159. catalystwan/integration_tests/feature_profile/sdwan/policy/test_security_app_list.py +32 -0
  160. catalystwan/integration_tests/feature_profile/sdwan/test_application_priority.py +433 -0
  161. catalystwan/integration_tests/feature_profile/sdwan/test_cli.py +54 -0
  162. catalystwan/integration_tests/feature_profile/sdwan/test_dns_security.py +106 -0
  163. catalystwan/integration_tests/feature_profile/sdwan/test_other.py +49 -0
  164. catalystwan/integration_tests/feature_profile/sdwan/test_service.py +1078 -0
  165. catalystwan/integration_tests/feature_profile/sdwan/test_sig_security.py +322 -0
  166. catalystwan/integration_tests/feature_profile/sdwan/test_ssl_decryption.py +85 -0
  167. catalystwan/integration_tests/feature_profile/sdwan/test_system.py +368 -0
  168. catalystwan/integration_tests/feature_profile/sdwan/test_tracker.py +127 -0
  169. catalystwan/integration_tests/feature_profile/sdwan/test_transport.py +1698 -0
  170. catalystwan/integration_tests/feature_profile/sdwan/topology/test_topology.py +93 -0
  171. catalystwan/integration_tests/profile_builder/__init__.py +0 -0
  172. catalystwan/integration_tests/profile_builder/test_pb_service.py +197 -0
  173. catalystwan/integration_tests/profile_builder/test_pb_transport.py +226 -0
  174. catalystwan/integration_tests/profile_builder/test_pb_uc_voice.py +277 -0
  175. catalystwan/integration_tests/test_data/__init__.py +117 -0
  176. catalystwan/integration_tests/test_find_template_values.py +7 -18
  177. catalystwan/integration_tests/test_network_hierarchy.py +82 -0
  178. catalystwan/integration_tests/test_settings.py +30 -0
  179. catalystwan/models/common.py +1898 -2
  180. catalystwan/models/configuration/common.py +1 -0
  181. catalystwan/models/configuration/feature_profile/common.py +634 -149
  182. catalystwan/models/configuration/feature_profile/parcel.py +238 -0
  183. catalystwan/models/configuration/feature_profile/sdwan/acl/__init__.py +13 -0
  184. catalystwan/models/configuration/feature_profile/sdwan/acl/ipv4acl.py +298 -0
  185. catalystwan/models/configuration/feature_profile/sdwan/acl/ipv6acl.py +344 -0
  186. catalystwan/models/configuration/feature_profile/sdwan/application_priority/__init__.py +218 -0
  187. catalystwan/models/configuration/feature_profile/sdwan/application_priority/cloud_probe.py +61 -0
  188. catalystwan/models/configuration/feature_profile/sdwan/application_priority/policy_settings.py +31 -0
  189. catalystwan/models/configuration/feature_profile/sdwan/application_priority/qos_policy.py +102 -0
  190. catalystwan/models/configuration/feature_profile/sdwan/application_priority/traffic_policy.py +1057 -0
  191. catalystwan/models/configuration/feature_profile/sdwan/cli/__init__.py +23 -0
  192. catalystwan/models/configuration/feature_profile/sdwan/cli/config.py +18 -0
  193. catalystwan/models/configuration/feature_profile/sdwan/cli/full_config.py +15 -0
  194. catalystwan/models/configuration/feature_profile/sdwan/dns_security/__init__.py +13 -0
  195. catalystwan/models/configuration/feature_profile/sdwan/dns_security/dns.py +110 -0
  196. catalystwan/models/configuration/feature_profile/sdwan/embedded_security/__init__.py +23 -0
  197. catalystwan/models/configuration/feature_profile/sdwan/embedded_security/ngfirewall.py +493 -0
  198. catalystwan/models/configuration/feature_profile/sdwan/embedded_security/policy.py +171 -0
  199. catalystwan/models/configuration/feature_profile/sdwan/other/__init__.py +25 -0
  200. catalystwan/models/configuration/feature_profile/sdwan/other/cybervision.py +44 -0
  201. catalystwan/models/configuration/feature_profile/sdwan/other/thousandeyes.py +147 -0
  202. catalystwan/models/configuration/feature_profile/sdwan/other/ucse.py +110 -0
  203. catalystwan/models/configuration/feature_profile/sdwan/policy_object/__init__.py +62 -48
  204. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/app_probe.py +34 -20
  205. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/application_list.py +8 -6
  206. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/as_path.py +22 -0
  207. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/color_list.py +7 -5
  208. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/data_prefix.py +13 -4
  209. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/expanded_community_list.py +9 -7
  210. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/extended_community.py +34 -0
  211. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/fowarding_class.py +7 -5
  212. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv4_network_object.py +15 -0
  213. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv4_service_object.py +254 -0
  214. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_data_prefix.py +11 -9
  215. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_prefix_list.py +25 -10
  216. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/mirror.py +27 -0
  217. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/network_object_group.py +15 -0
  218. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/object_group.py +15 -0
  219. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/{policier.py → policer.py} +12 -10
  220. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefered_group_color.py +29 -10
  221. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefix_list.py +23 -8
  222. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/service_object_group.py +21 -0
  223. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/sla_class.py +12 -31
  224. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/standard_community.py +16 -10
  225. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/tloc_list.py +8 -7
  226. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/aip.py +64 -0
  227. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/amp.py +79 -0
  228. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/application_list.py +8 -6
  229. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/data_prefix.py +7 -5
  230. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/fqdn.py +7 -5
  231. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/geolocation_list.py +7 -5
  232. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/identity.py +30 -0
  233. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/intrusion_prevention.py +58 -0
  234. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ips_signature.py +7 -5
  235. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/local_domain.py +7 -5
  236. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/object_group.py +72 -0
  237. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/protocol_list.py +7 -5
  238. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/rule_set.py +137 -0
  239. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/scalable_group_tag.py +26 -0
  240. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/security_port.py +21 -11
  241. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption.py +126 -0
  242. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption_profile.py +165 -0
  243. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url.py +15 -10
  244. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url_filtering.py +148 -0
  245. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/zone.py +14 -18
  246. catalystwan/models/configuration/feature_profile/sdwan/routing/__init__.py +26 -0
  247. catalystwan/models/configuration/feature_profile/sdwan/routing/bgp.py +609 -0
  248. catalystwan/models/configuration/feature_profile/sdwan/{service → routing}/ospf.py +55 -47
  249. catalystwan/models/configuration/feature_profile/sdwan/{service → routing}/ospfv3.py +74 -72
  250. catalystwan/models/configuration/feature_profile/sdwan/service/__init__.py +91 -0
  251. catalystwan/models/configuration/feature_profile/sdwan/service/appqoe.py +76 -41
  252. catalystwan/models/configuration/feature_profile/sdwan/service/dhcp_server.py +107 -64
  253. catalystwan/models/configuration/feature_profile/sdwan/service/dual_router_ha.py +26 -0
  254. catalystwan/models/configuration/feature_profile/sdwan/service/eigrp.py +39 -42
  255. catalystwan/models/configuration/feature_profile/sdwan/service/lan/common.py +7 -88
  256. catalystwan/models/configuration/feature_profile/sdwan/service/lan/ethernet.py +231 -155
  257. catalystwan/models/configuration/feature_profile/sdwan/service/lan/gre.py +38 -108
  258. catalystwan/models/configuration/feature_profile/sdwan/service/lan/ipsec.py +77 -84
  259. catalystwan/models/configuration/feature_profile/sdwan/service/lan/multilink.py +101 -0
  260. catalystwan/models/configuration/feature_profile/sdwan/service/lan/svi.py +62 -56
  261. catalystwan/models/configuration/feature_profile/sdwan/service/lan/vpn.py +111 -120
  262. catalystwan/models/configuration/feature_profile/sdwan/service/multicast.py +56 -57
  263. catalystwan/models/configuration/feature_profile/sdwan/service/object_tracker.py +15 -21
  264. catalystwan/models/configuration/feature_profile/sdwan/service/route_policy.py +358 -110
  265. catalystwan/models/configuration/feature_profile/sdwan/service/service_chain.py +38 -0
  266. catalystwan/models/configuration/feature_profile/sdwan/service/service_insertion_attachment.py +17 -25
  267. catalystwan/models/configuration/feature_profile/sdwan/service/switchport.py +50 -58
  268. catalystwan/models/configuration/feature_profile/sdwan/service/tracker.py +12 -21
  269. catalystwan/models/configuration/feature_profile/sdwan/service/wireless_lan.py +27 -31
  270. catalystwan/models/configuration/feature_profile/sdwan/sig_security/__init__.py +19 -0
  271. catalystwan/models/configuration/feature_profile/sdwan/sig_security/sig_security.py +379 -0
  272. catalystwan/models/configuration/feature_profile/sdwan/system/__init__.py +59 -0
  273. catalystwan/models/configuration/feature_profile/sdwan/system/aaa.py +58 -10
  274. catalystwan/models/configuration/feature_profile/sdwan/system/banner.py +30 -0
  275. catalystwan/models/configuration/feature_profile/sdwan/system/basic.py +290 -0
  276. catalystwan/models/configuration/feature_profile/sdwan/system/bfd.py +69 -0
  277. catalystwan/models/configuration/feature_profile/sdwan/system/device_access.py +157 -0
  278. catalystwan/models/configuration/feature_profile/sdwan/system/device_access_ipv6.py +157 -0
  279. catalystwan/models/configuration/feature_profile/sdwan/system/global_parcel.py +163 -0
  280. catalystwan/models/configuration/feature_profile/sdwan/system/logging_parcel.py +162 -0
  281. catalystwan/models/configuration/feature_profile/sdwan/system/mrf.py +75 -0
  282. catalystwan/models/configuration/feature_profile/sdwan/system/ntp.py +103 -0
  283. catalystwan/models/configuration/feature_profile/sdwan/system/omp.py +120 -0
  284. catalystwan/models/configuration/feature_profile/sdwan/system/security.py +179 -0
  285. catalystwan/models/configuration/feature_profile/sdwan/system/snmp.py +173 -0
  286. catalystwan/models/configuration/feature_profile/sdwan/topology/__init__.py +29 -0
  287. catalystwan/models/configuration/feature_profile/sdwan/topology/custom_control.py +425 -0
  288. catalystwan/models/configuration/feature_profile/sdwan/topology/hubspoke.py +60 -0
  289. catalystwan/models/configuration/feature_profile/sdwan/topology/mesh.py +23 -0
  290. catalystwan/models/configuration/feature_profile/sdwan/trackers/__init__.py +36 -0
  291. catalystwan/models/configuration/feature_profile/sdwan/trackers/tracker.py +96 -0
  292. catalystwan/models/configuration/feature_profile/sdwan/trackers/tracker_group.py +63 -0
  293. catalystwan/models/configuration/feature_profile/sdwan/transport/__init__.py +93 -0
  294. catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_controller.py +26 -23
  295. catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_profile.py +71 -0
  296. catalystwan/models/configuration/feature_profile/sdwan/transport/gps.py +37 -0
  297. catalystwan/models/configuration/feature_profile/sdwan/transport/management/ethernet.py +121 -0
  298. catalystwan/models/configuration/feature_profile/sdwan/transport/t1e1controller.py +124 -0
  299. catalystwan/models/configuration/feature_profile/sdwan/transport/vpn.py +285 -0
  300. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/cellular.py +173 -0
  301. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ethernet.py +389 -0
  302. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/gre.py +46 -0
  303. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ipsec.py +137 -0
  304. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/multilink.py +219 -0
  305. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/protocol_over.py +405 -0
  306. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/t1e1serial.py +195 -0
  307. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/__init__.py +62 -0
  308. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/analog_interface.py +436 -0
  309. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/call_routing.py +179 -0
  310. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/digital_interface.py +380 -0
  311. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/dsp_farm.py +193 -0
  312. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/media_profile.py +17 -0
  313. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/server_group.py +51 -0
  314. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/srst.py +86 -0
  315. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/supervisory_disconnect.py +69 -0
  316. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_profile.py +42 -0
  317. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_rule.py +31 -0
  318. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/trunk_group.py +26 -0
  319. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_global.py +57 -0
  320. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_tenant.py +40 -0
  321. catalystwan/models/configuration/network_hierarchy/__init__.py +22 -0
  322. catalystwan/models/configuration/network_hierarchy/cflowd.py +120 -0
  323. catalystwan/models/configuration/network_hierarchy/node.py +88 -0
  324. catalystwan/models/configuration/policy_group.py +74 -0
  325. catalystwan/models/configuration/profile_type.py +1 -6
  326. catalystwan/models/configuration/topology_group.py +52 -0
  327. catalystwan/models/policy/__init__.py +275 -69
  328. catalystwan/models/policy/centralized.py +26 -29
  329. catalystwan/models/policy/{definitions → definition}/access_control_list.py +47 -17
  330. catalystwan/models/policy/{definitions → definition}/access_control_list_ipv6.py +42 -18
  331. catalystwan/models/policy/definition/aip.py +60 -0
  332. catalystwan/models/policy/definition/amp.py +65 -0
  333. catalystwan/models/policy/definition/app_route.py +246 -0
  334. catalystwan/models/policy/definition/cflowd.py +95 -0
  335. catalystwan/models/policy/{definitions → definition}/control.py +48 -25
  336. catalystwan/models/policy/{definitions → definition}/device_access.py +22 -11
  337. catalystwan/models/policy/{definitions → definition}/device_access_ipv6.py +20 -11
  338. catalystwan/models/policy/definition/dial_peer.py +60 -0
  339. catalystwan/models/policy/definition/dns_security.py +130 -0
  340. catalystwan/models/policy/definition/fxo_port.py +63 -0
  341. catalystwan/models/policy/definition/fxs_did_port.py +58 -0
  342. catalystwan/models/policy/definition/fxs_port.py +56 -0
  343. catalystwan/models/policy/{definitions → definition}/hub_and_spoke.py +18 -4
  344. catalystwan/models/policy/definition/intrusion_prevention.py +55 -0
  345. catalystwan/models/policy/{definitions → definition}/mesh.py +13 -1
  346. catalystwan/models/policy/definition/pri_isdn_port.py +48 -0
  347. catalystwan/models/policy/{definitions → definition}/qos_map.py +39 -32
  348. catalystwan/models/policy/{definitions → definition}/rewrite.py +12 -2
  349. catalystwan/models/policy/definition/route_policy.py +187 -0
  350. catalystwan/models/policy/{definitions → definition}/rule_set.py +66 -48
  351. catalystwan/models/policy/{definitions → definition}/security_group.py +38 -14
  352. catalystwan/models/policy/definition/srst_phone_profile.py +37 -0
  353. catalystwan/models/policy/definition/ssl_decryption.py +209 -0
  354. catalystwan/models/policy/definition/ssl_decryption_utd_profile.py +87 -0
  355. catalystwan/models/policy/{definitions → definition}/traffic_data.py +184 -61
  356. catalystwan/models/policy/definition/url_filtering.py +70 -0
  357. catalystwan/models/policy/{definitions → definition}/vpn_membership.py +13 -1
  358. catalystwan/models/policy/definition/vpn_qos_map.py +46 -0
  359. catalystwan/models/policy/{definitions → definition}/zone_based_firewall.py +93 -32
  360. catalystwan/models/policy/list/app.py +44 -0
  361. catalystwan/models/policy/list/app_probe.py +42 -0
  362. catalystwan/models/policy/list/as_path.py +30 -0
  363. catalystwan/models/policy/list/class_map.py +30 -0
  364. catalystwan/models/policy/list/color.py +28 -0
  365. catalystwan/models/policy/list/communities.py +83 -0
  366. catalystwan/models/policy/list/data_ipv6_prefix.py +30 -0
  367. catalystwan/models/policy/list/data_prefix.py +30 -0
  368. catalystwan/models/policy/list/fax_protocol.py +45 -0
  369. catalystwan/models/policy/list/fqdn.py +24 -0
  370. catalystwan/models/policy/list/geo_location.py +33 -0
  371. catalystwan/models/policy/list/identity.py +29 -0
  372. catalystwan/models/policy/list/ips_signature.py +27 -0
  373. catalystwan/models/policy/list/ipv6_prefix.py +33 -0
  374. catalystwan/models/policy/list/local_app.py +45 -0
  375. catalystwan/models/policy/list/local_domain.py +36 -0
  376. catalystwan/models/policy/list/media_profile.py +44 -0
  377. catalystwan/models/policy/list/mirror.py +27 -0
  378. catalystwan/models/policy/list/modem_pass_through.py +27 -0
  379. catalystwan/models/policy/list/policer.py +39 -0
  380. catalystwan/models/policy/list/port.py +33 -0
  381. catalystwan/models/policy/list/preferred_color_group.py +82 -0
  382. catalystwan/models/policy/list/prefix.py +33 -0
  383. catalystwan/models/policy/list/protocol_name.py +26 -0
  384. catalystwan/models/policy/list/region.py +45 -0
  385. catalystwan/models/policy/list/scalable_group_tag.py +30 -0
  386. catalystwan/models/policy/list/site.py +34 -0
  387. catalystwan/models/policy/list/sla.py +77 -0
  388. catalystwan/models/policy/list/supervisory_disconnect.py +62 -0
  389. catalystwan/models/policy/list/threat_grid_api_key.py +32 -0
  390. catalystwan/models/policy/list/tloc.py +32 -0
  391. catalystwan/models/policy/list/translation_profile.py +32 -0
  392. catalystwan/models/policy/list/translation_rules.py +29 -0
  393. catalystwan/models/policy/list/trunkgroup.py +56 -0
  394. catalystwan/models/policy/list/umbrella_data.py +30 -0
  395. catalystwan/models/policy/list/url.py +39 -0
  396. catalystwan/models/policy/list/vpn.py +40 -0
  397. catalystwan/models/policy/list/zone.py +46 -0
  398. catalystwan/models/policy/localized.py +34 -16
  399. catalystwan/models/policy/policy.py +13 -9
  400. catalystwan/models/policy/policy_definition.py +673 -173
  401. catalystwan/models/policy/policy_list.py +38 -27
  402. catalystwan/models/policy/security.py +145 -46
  403. catalystwan/models/policy/voice.py +77 -0
  404. catalystwan/models/settings.py +41 -0
  405. catalystwan/models/templates.py +79 -0
  406. catalystwan/response.py +6 -2
  407. catalystwan/session.py +1 -1
  408. catalystwan/tests/builders/test_report.py +60 -0
  409. catalystwan/tests/builders/uc_voice.py +85 -0
  410. catalystwan/tests/models/__init__.py +0 -0
  411. catalystwan/tests/models/test_digital_interface.py +56 -0
  412. catalystwan/tests/templates/definitions/aaa_basic.json +96 -0
  413. catalystwan/tests/templates/definitions/aaa_complex.json +464 -0
  414. catalystwan/tests/templates/definitions/{iuo.json → cisco_aaa.json} +44 -15
  415. catalystwan/tests/templates/definitions/cisco_aaa_complex.json +361 -0
  416. catalystwan/tests/templates/definitions/cisco_logging_complex.json +268 -0
  417. catalystwan/tests/templates/definitions/cisco_ntp_complex.json +143 -0
  418. catalystwan/tests/templates/definitions/cisco_omp_complex.json +175 -0
  419. catalystwan/tests/templates/definitions/cisco_ospf_complex.json +302 -0
  420. catalystwan/tests/templates/definitions/cisco_sig.json +405 -0
  421. catalystwan/tests/templates/definitions/cisco_snmp_complex.json +258 -0
  422. catalystwan/tests/templates/definitions/cisco_system_complex.json +502 -0
  423. catalystwan/tests/templates/definitions/{Basic_Cisco_VPN_Model.json → cisco_vpn_basic.json} +2 -2
  424. catalystwan/tests/templates/definitions/{complex_cisco_vpn.json → cisco_vpn_complex.json} +27 -12
  425. catalystwan/tests/templates/definitions/cisco_vpn_interface_complex.json +821 -0
  426. catalystwan/tests/templates/definitions/omp_vsmart_1.json +26 -0
  427. catalystwan/tests/templates/definitions/{omp_2.json → omp_vsmart_2.json} +16 -2
  428. catalystwan/tests/templates/definitions/{omp_3.json → omp_vsmart_3.json} +16 -2
  429. catalystwan/tests/templates/definitions/omp_vsmart_complex.json +73 -0
  430. catalystwan/tests/templates/definitions/security_vsmart_complex.json +24 -0
  431. catalystwan/tests/templates/definitions/system_vsmart_complex.json +193 -0
  432. catalystwan/tests/templates/definitions/vpn_vsmart_basic.json +17 -0
  433. catalystwan/tests/templates/definitions/vpn_vsmart_complex.json +179 -0
  434. catalystwan/tests/templates/definitions/vpn_vsmart_interface_basic.json +42 -0
  435. catalystwan/tests/templates/definitions/vpn_vsmart_interface_complex.json +208 -0
  436. catalystwan/tests/templates/models/__init__.py +46 -13
  437. catalystwan/tests/templates/models/aaa.py +106 -0
  438. catalystwan/tests/templates/models/cisco_aaa.py +81 -48
  439. catalystwan/tests/templates/models/cisco_banner.py +2 -2
  440. catalystwan/tests/templates/models/cisco_bfd.py +4 -6
  441. catalystwan/tests/templates/models/cisco_logging.py +65 -0
  442. catalystwan/tests/templates/models/cisco_ntp.py +17 -0
  443. catalystwan/tests/templates/models/cisco_omp.py +37 -0
  444. catalystwan/tests/templates/models/cisco_ospf.py +60 -0
  445. catalystwan/tests/templates/models/cisco_secure_internet_gateway.py +95 -0
  446. catalystwan/tests/templates/models/cisco_snmp.py +40 -0
  447. catalystwan/tests/templates/models/cisco_system.py +108 -3
  448. catalystwan/tests/templates/models/cisco_vpn.py +42 -72
  449. catalystwan/tests/templates/models/cisco_vpn_interface.py +200 -0
  450. catalystwan/tests/templates/models/omp_vsmart.py +28 -8
  451. catalystwan/tests/templates/models/security_vsmart.py +11 -0
  452. catalystwan/tests/templates/models/system_vsmart.py +37 -0
  453. catalystwan/tests/templates/models/vpn_vsmart.py +32 -0
  454. catalystwan/tests/templates/models/vpn_vsmart_interface.py +54 -0
  455. catalystwan/tests/templates/schemas/aaa.json +1096 -0
  456. catalystwan/tests/templates/schemas/cedge_aaa.json +1 -1
  457. catalystwan/tests/templates/schemas/cisco_logging.json +577 -0
  458. catalystwan/tests/templates/schemas/cisco_ntp.json +265 -0
  459. catalystwan/tests/templates/schemas/cisco_omp.json +479 -0
  460. catalystwan/tests/templates/schemas/cisco_ospf.json +908 -0
  461. catalystwan/tests/templates/schemas/cisco_secure_internet_gateway.json +1520 -0
  462. catalystwan/tests/templates/schemas/cisco_snmp.json +561 -0
  463. catalystwan/tests/templates/schemas/cisco_system.json +242 -0
  464. catalystwan/tests/templates/schemas/cisco_vpn.json +53 -1
  465. catalystwan/tests/templates/schemas/cisco_vpn_interface.json +3348 -0
  466. catalystwan/tests/templates/schemas/omp-vsmart.json +20 -0
  467. catalystwan/tests/templates/schemas/security-vsmart.json +58 -0
  468. catalystwan/tests/templates/schemas/system-vsmart.json +2585 -0
  469. catalystwan/tests/templates/schemas/vpn-vsmart-interface.json +859 -0
  470. catalystwan/tests/templates/schemas/vpn-vsmart.json +445 -0
  471. catalystwan/tests/templates/test_chose_model.py +6 -10
  472. catalystwan/tests/templates/test_deserialize_model.py +4 -4
  473. catalystwan/tests/templates/test_find_template_values.py +229 -0
  474. catalystwan/tests/templates/test_find_template_values_2.py +193 -0
  475. catalystwan/tests/templates/test_serialize_model.py +1 -2
  476. catalystwan/tests/test_cli_template.py +8 -9
  477. catalystwan/tests/test_endpoints.py +42 -11
  478. catalystwan/tests/test_feature_profile_api.py +282 -0
  479. catalystwan/tests/test_models_common.py +53 -0
  480. catalystwan/tests/test_templates.py +16 -19
  481. catalystwan/utils/feature_template/find_template_values.py +17 -4
  482. catalystwan/utils/model.py +45 -0
  483. catalystwan/utils/persona.py +5 -0
  484. catalystwan/utils/type_check.py +22 -0
  485. catalystwan/workflows/backup_restore_device_templates.py +467 -0
  486. catalystwan/workflows/tenant_migration.py +1 -1
  487. {catalystwan-0.41.2.dist-info → catalystwan-0.41.2.dev1.dist-info}/METADATA +20 -1
  488. catalystwan-0.41.2.dev1.dist-info/RECORD +636 -0
  489. catalystwan/ENDPOINTS.md +0 -611
  490. catalystwan/api/configuration_groups/parcels/cellular_controller.py +0 -33
  491. catalystwan/api/templates/device_template/device_template_payload.json.j2 +0 -19
  492. catalystwan/models/configuration/config_migration.py +0 -36
  493. catalystwan/models/configuration/feature_profile/sdwan/management/vpn.py +0 -26
  494. catalystwan/models/configuration/feature_profile/sdwan/service/acl.py +0 -409
  495. catalystwan/models/configuration/feature_profile/sdwan/service/bgp.py +0 -288
  496. catalystwan/models/policy/lists.py +0 -330
  497. catalystwan/models/policy/lists_entries.py +0 -444
  498. catalystwan/tests/templates/definitions/complex_aaa.json +0 -277
  499. catalystwan/tests/templates/definitions/omp_1.json +0 -11
  500. catalystwan/utils/timezone.py +0 -422
  501. catalystwan-0.41.2.dist-info/RECORD +0 -353
  502. /catalystwan/tests/templates/definitions/{banner_1.json → cisco_banner.json} +0 -0
  503. {catalystwan-0.41.2.dist-info → catalystwan-0.41.2.dev1.dist-info}/LICENSE +0 -0
  504. {catalystwan-0.41.2.dist-info → catalystwan-0.41.2.dev1.dist-info}/WHEEL +0 -0
@@ -1,6 +1,103 @@
1
- # Copyright 2023 Cisco Systems, Inc. and its affiliates
1
+ # Copyright 2024 Cisco Systems, Inc. and its affiliates
2
2
 
3
- from typing import Dict, List, Literal, Set, Tuple
3
+ import re
4
+ from dataclasses import InitVar, dataclass, field
5
+ from ipaddress import IPv4Interface, IPv4Network, IPv6Interface
6
+ from typing import Any, Dict, Iterator, List, Literal, Mapping, Optional, Sequence, Set, Tuple, Union, cast, get_args
7
+ from uuid import UUID
8
+
9
+ from annotated_types import Ge, Le
10
+ from packaging.specifiers import SpecifierSet # type: ignore
11
+ from packaging.version import Version # type: ignore
12
+ from pydantic import Field, NonNegativeInt, PlainSerializer, PositiveInt, SerializationInfo, ValidationInfo
13
+ from pydantic.fields import FieldInfo
14
+ from pydantic.functional_validators import BeforeValidator
15
+ from typing_extensions import Annotated
16
+
17
+
18
+ @dataclass()
19
+ class VersionedField:
20
+ """
21
+ This class could be used as field type annotation for pydantic.BaseModel fields.
22
+ Together with dedicated @model_serializer it allows pick different serialization alias.
23
+ When version provided as specifier set eg. ">=20.13" matches Manager API version detected at runtime
24
+ original serialization_alias will be overriden.
25
+
26
+ Example:
27
+ >>> from catalystwan.models.common import VersionedField
28
+ >>> from pydantic import BaseModel, SerializationInfo, SerializerFunctionWrapHandler, model_serializer
29
+ >>> from typing_extensions import Annotated
30
+ >>>
31
+ >>> class Payload(BaseModel):
32
+ >>> snake_case: Annotated[int, VersionedField(versions="<=20.12", serialization_alias="kebab-case")]
33
+ >>>
34
+ >>> @model_serializer(mode="wrap", when_used="json")
35
+ >>> def serialize(self, handler: SerializerFunctionWrapHandler, info: SerializationInfo) -> Dict[str, Any]:
36
+ >>> return VersionedField.dump(self.model_fields, handler(self), info)
37
+ """
38
+
39
+ versions: InitVar[str]
40
+ versions_set: SpecifierSet = field(init=False)
41
+ serialization_alias: Optional[str] = None
42
+ forbidden: bool = False
43
+
44
+ def __post_init__(self, versions):
45
+ self.versions_set = SpecifierSet(versions)
46
+
47
+ @staticmethod
48
+ def model_iterate(
49
+ model_fields: Dict[str, FieldInfo], info: Union[SerializationInfo, ValidationInfo]
50
+ ) -> Iterator[Tuple[str, FieldInfo, "VersionedField"]]:
51
+ """Itrerates over model fields that matches a version given in context (Serialization info or ValidationInfo)
52
+
53
+ Yields:
54
+ Tuple[str, FieldInfo, VersionedField]: a tuple containing field name, FieldInfo and VersionedField
55
+ """
56
+ if info.context is not None:
57
+ api_version: Optional[Version] = info.context.get("api_version")
58
+ if api_version is not None:
59
+ for field_name, field_info in model_fields.items():
60
+ versioned_fields = [meta for meta in field_info.metadata if isinstance(meta, VersionedField)]
61
+ for versioned_field in versioned_fields:
62
+ if api_version in versioned_field.versions_set:
63
+ yield (field_name, field_info, versioned_field)
64
+
65
+ @staticmethod
66
+ def dump(
67
+ model_fields: Dict[str, FieldInfo],
68
+ model_dict: Dict[str, Any],
69
+ info: SerializationInfo,
70
+ replaced_keys: Optional[Mapping[str, Tuple[Optional[str], str]]] = None,
71
+ ) -> Dict[str, Any]:
72
+ """To be reused in methods decorated with pydantic.model_serializer
73
+ Args:
74
+ model_fields (Dict[str, FieldInfo]): obtained from BaseModel class
75
+ model_dict (Dict[str, Any]): obtained from serialized BaseModel instance
76
+ serialization_info (SerializationInfo): passed from serializer
77
+ replaced_keys (Dict[str, Tuple(Optional[str], str)]): field names that were replaced
78
+ previously during serialization
79
+ (Tuple represent path and new field name - this currently supports up to 1 level deep alias path only)
80
+
81
+ Returns:
82
+ Dict[str, Any]: model_dict with updated field names according to matching runtime version
83
+ """
84
+ for field_name, field_info, versioned_field in VersionedField.model_iterate(model_fields, info):
85
+ current_field_name = field_info.serialization_alias or field_info.alias or field_name
86
+ new_field_name = versioned_field.serialization_alias
87
+ if current_field_name in model_dict:
88
+ if versioned_field.forbidden:
89
+ del model_dict[current_field_name]
90
+ elif new_field_name is not None and new_field_name != current_field_name:
91
+ model_dict[new_field_name] = model_dict[current_field_name]
92
+ del model_dict[current_field_name]
93
+ elif replaced_keys is not None:
94
+ if current_field_path := replaced_keys.get(current_field_name):
95
+ path, name = current_field_path
96
+ dict_ = model_dict[path] if path is not None else model_dict
97
+ if new_field_name is not None:
98
+ dict_[new_field_name] = dict_[name]
99
+ del dict_[name]
100
+ return model_dict
4
101
 
5
102
 
6
103
  def check_fields_exclusive(values: Dict, field_names: Set[str], at_least_one: bool = False) -> bool:
@@ -48,6 +145,211 @@ def check_any_of_exclusive_field_sets(values: Dict, field_sets: List[Tuple[Set[s
48
145
  raise ValueError(f"One of {all_sets_field_names} must be assigned")
49
146
 
50
147
 
148
+ def str_as_uuid_list(val: Union[str, Sequence[UUID]]) -> Sequence[UUID]:
149
+ if isinstance(val, str):
150
+ return [UUID(uuid_) for uuid_ in val.split()]
151
+ return val
152
+
153
+
154
+ def str_as_positive_int_list(val: Union[str, Sequence[PositiveInt]]) -> Sequence[PositiveInt]:
155
+ if isinstance(val, str):
156
+ return [int(element) for element in val.split()]
157
+ return val
158
+
159
+
160
+ def str_as_ipv4_list(val: Union[str, Sequence[IPv4Interface]]) -> Sequence[IPv4Interface]:
161
+ if isinstance(val, str):
162
+ return [IPv4Interface(element) for element in val.split()]
163
+ return val
164
+
165
+
166
+ def str_as_ipv4_network_list(val: Union[str, Sequence[IPv4Network]]) -> Sequence[IPv4Network]:
167
+ if isinstance(val, str):
168
+ return [IPv4Network(element) for element in val.split()]
169
+ return val
170
+
171
+
172
+ def str_as_ipv6_list(val: Union[str, Sequence[IPv6Interface]]) -> Sequence[IPv6Interface]:
173
+ if isinstance(val, str):
174
+ return [IPv6Interface(element) for element in val.split()]
175
+ return val
176
+
177
+
178
+ def str_as_str_list(val: Union[str, Sequence[str]]) -> Sequence[str]:
179
+ if isinstance(val, str):
180
+ return val.split()
181
+ return val
182
+
183
+
184
+ IntStr = Annotated[
185
+ int,
186
+ PlainSerializer(lambda x: str(x), return_type=str, when_used="json-unless-none"),
187
+ BeforeValidator(lambda x: int(x)),
188
+ ]
189
+
190
+ IntRange = Tuple[int, Optional[int]]
191
+
192
+ DualToneCadenceInterval = Annotated[int, Field(ge=50, le=10_000)]
193
+ DualToneCadenceStartStop = Tuple[DualToneCadenceInterval, DualToneCadenceInterval]
194
+
195
+
196
+ def str_as_cadence_pairs(val: Union[str, Sequence[DualToneCadenceStartStop]]) -> Sequence[DualToneCadenceStartStop]:
197
+ if isinstance(val, str):
198
+ tab = val.split()
199
+ val = list()
200
+ assert len(tab) % 2 == 0, "cadence contain on/off interval pairs, odd number of entries detected"
201
+ for start, stop in zip(tab, tab[1:]):
202
+ val.append((int(start), int(stop)))
203
+ return val
204
+
205
+
206
+ def tuple_to_str(val: Tuple[Any, ...]) -> str:
207
+ return " ".join(map(str, val))
208
+
209
+
210
+ SpaceSeparatedCustomCadenceRanges = Annotated[
211
+ List[DualToneCadenceStartStop],
212
+ PlainSerializer(lambda x: " ".join(map(tuple_to_str, x)), return_type=str, when_used="json-unless-none"),
213
+ BeforeValidator(str_as_cadence_pairs),
214
+ Field(min_length=1),
215
+ ]
216
+
217
+ SpaceSeparatedUUIDList = Annotated[
218
+ List[UUID],
219
+ PlainSerializer(lambda x: " ".join(map(str, x)), return_type=str, when_used="json-unless-none"),
220
+ BeforeValidator(str_as_uuid_list),
221
+ Field(min_length=1),
222
+ ]
223
+
224
+ SpaceSeparatedNonNegativeIntList = Annotated[
225
+ List[NonNegativeInt],
226
+ PlainSerializer(lambda x: " ".join(map(str, x)), return_type=str, when_used="json-unless-none"),
227
+ BeforeValidator(str_as_positive_int_list),
228
+ Field(min_length=1),
229
+ ]
230
+
231
+ SpaceSeparatedIPv4 = Annotated[
232
+ List[IPv4Interface],
233
+ PlainSerializer(lambda x: " ".join(map(str, x)), return_type=str, when_used="json-unless-none"),
234
+ BeforeValidator(str_as_ipv4_list),
235
+ Field(min_length=1),
236
+ ]
237
+
238
+ SpaceSeparatedIPv4Networks = Annotated[
239
+ List[IPv4Network],
240
+ PlainSerializer(lambda x: " ".join(map(str, x)), return_type=str, when_used="json-unless-none"),
241
+ BeforeValidator(str_as_ipv4_network_list),
242
+ Field(min_length=1),
243
+ ]
244
+
245
+ SpaceSeparatedIPv6 = Annotated[
246
+ List[IPv6Interface],
247
+ PlainSerializer(lambda x: " ".join(map(str, x)), return_type=str, when_used="json-unless-none"),
248
+ BeforeValidator(str_as_ipv6_list),
249
+ Field(min_length=1),
250
+ ]
251
+
252
+ Ipv4PrefixLen = Annotated[
253
+ int,
254
+ Field(ge=0, le=32),
255
+ ]
256
+
257
+ Ipv4LePrefixRangeLen = Annotated[
258
+ int,
259
+ Field(ge=1, le=32),
260
+ ]
261
+
262
+ Ipv4GePrefixRangeLen = Annotated[
263
+ int,
264
+ Field(ge=1, le=32),
265
+ ]
266
+
267
+ Ipv6PrefixLen = Annotated[
268
+ int,
269
+ Field(ge=0, le=128),
270
+ ]
271
+
272
+ Ipv6LePrefixRangeLen = Annotated[
273
+ int,
274
+ Field(ge=1, le=128),
275
+ ]
276
+
277
+ Ipv6GePrefixRangeLen = Annotated[
278
+ int,
279
+ Field(ge=1, le=128),
280
+ ]
281
+
282
+
283
+ def int_range_str_validator(value: Union[str, int, IntRange], ascending: bool = True) -> IntRange:
284
+ """
285
+ Validates input given as string containing integer pair separated by hyphen
286
+ eg: '1-3' or single number '1'
287
+ """
288
+ if isinstance(value, str):
289
+ int_list = [int(i) for i in value.strip().split("-")]
290
+ assert 0 < len(int_list) <= 2, "Number range string must contain one or two numbers"
291
+ first = int_list[0]
292
+ second = None if len(int_list) == 1 else int_list[1]
293
+ int_range = (first, second)
294
+ elif isinstance(value, int):
295
+ int_range = (value, None)
296
+ else:
297
+ int_range = value
298
+ if ascending and int_range[1] is not None:
299
+ assert int_range[0] < int_range[1], "Numbers in range must be in ascending order"
300
+ return int_range
301
+
302
+
303
+ def int_range_serializer(value: IntRange) -> str:
304
+ """Serializes integer pair as string separated by hyphen eg: '1-3' or single number '1'"""
305
+ return "-".join((str(i) for i in value if i is not None))
306
+
307
+
308
+ IntRangeStr = Annotated[
309
+ IntRange,
310
+ PlainSerializer(int_range_serializer, return_type=str, when_used="json-unless-none"),
311
+ BeforeValidator(int_range_str_validator),
312
+ ]
313
+
314
+ AcceptDropActionType = Literal["accept", "drop"]
315
+ AcceptRejectActionType = Literal["accept", "reject"]
316
+ DeviceAccessProtocolPort = Literal[161, 22]
317
+
318
+ DestinationRegion = Literal[
319
+ "primary-region",
320
+ "secondary-region",
321
+ "other-region",
322
+ ]
323
+
324
+ DNSEntryType = Literal[
325
+ "request",
326
+ "response",
327
+ ]
328
+
329
+ CarrierType = Literal[
330
+ "default",
331
+ "carrier1",
332
+ "carrier2",
333
+ "carrier3",
334
+ "carrier4",
335
+ "carrier5",
336
+ "carrier6",
337
+ "carrier7",
338
+ "carrier8",
339
+ ]
340
+
341
+ ControlPathType = Literal[
342
+ "direct-path",
343
+ "hierarchical-path",
344
+ "transport-gateway-path",
345
+ ]
346
+
347
+ EncapType = Literal[
348
+ "ipsec",
349
+ "gre",
350
+ ]
351
+
352
+
51
353
  InterfaceType = Literal[
52
354
  "Ethernet",
53
355
  "FastEthernet",
@@ -64,6 +366,29 @@ InterfaceType = Literal[
64
366
  "VirtualPortGroup",
65
367
  "Vlan",
66
368
  ]
369
+ InterfaceTypePattern = re.compile(r"^(?:" + "|".join(map(re.escape, get_args(InterfaceType))) + r")[\x00-\x7F]*$")
370
+
371
+ InterfaceStr = Annotated[
372
+ str,
373
+ Field(pattern=InterfaceTypePattern),
374
+ ]
375
+
376
+
377
+ def str_as_interface_list(val: Union[str, Sequence[InterfaceStr]]) -> Sequence[InterfaceStr]:
378
+ if isinstance(val, str):
379
+ return [str(element) for element in val.split()]
380
+ return val
381
+
382
+
383
+ SpaceSeparatedInterfaceStr = Annotated[
384
+ List[InterfaceStr],
385
+ PlainSerializer(lambda x: " ".join(map(str, x)), return_type=str, when_used="json-unless-none"),
386
+ BeforeValidator(str_as_interface_list),
387
+ ]
388
+
389
+ StaticNatDirection = Literal["inside", "outside"]
390
+
391
+ Protocol = Literal["tcp", "udp"]
67
392
 
68
393
  TLOCColor = Literal[
69
394
  "default",
@@ -90,6 +415,96 @@ TLOCColor = Literal[
90
415
  "private6",
91
416
  ]
92
417
 
418
+ MpVoiceCodec = Literal["g711ulaw", "g711alaw", "g729r8", "g729br8", "g722-64", "clear-channel", "isac", "ilbc"]
419
+
420
+ FaxProtocols = Literal[
421
+ "Fax Pass-through G711alaw No ECM",
422
+ "Fax Pass-through G711alaw",
423
+ "Fax Pass-through G711ulaw No ECM",
424
+ "Fax Pass-through G711ulaw",
425
+ "None",
426
+ "T.38 Fax Relay Version 0 No ECM",
427
+ "T.38 Fax Relay Version 0 NSE force No ECM",
428
+ "T.38 Fax Relay Version 0 NSE force Rate 14.4 No ECM",
429
+ "T.38 Fax Relay Version 0 NSE force Rate 14.4",
430
+ "T.38 Fax Relay Version 0 NSE force Rate 9.6 No ECM",
431
+ "T.38 Fax Relay Version 0 NSE force Rate 9.6",
432
+ "T.38 Fax Relay Version 0 NSE force",
433
+ "T.38 Fax Relay Version 0 NSE No ECM",
434
+ "T.38 Fax Relay Version 0 NSE Rate 14.4 No ECM",
435
+ "T.38 Fax Relay Version 0 NSE Rate 14.4",
436
+ "T.38 Fax Relay Version 0 NSE Rate 9.6 No ECM",
437
+ "T.38 Fax Relay Version 0 NSE Rate 9.6",
438
+ "T.38 Fax Relay Version 0 NSE",
439
+ "T.38 Fax Relay Version 0 Rate 14.4 No ECM",
440
+ "T.38 Fax Relay Version 0 Rate 14.4",
441
+ "T.38 Fax Relay Version 0 Rate 9.6 No ECM",
442
+ "T.38 Fax Relay Version 0",
443
+ "T.38 Fax Relay Version 3 NSE force",
444
+ "T.38 Fax Relay Version 3 NSE",
445
+ "T.38 Fax Relay Version 3",
446
+ ]
447
+
448
+ FaxPrimaryProtocols = Literal[
449
+ "none",
450
+ "t38",
451
+ "g711ulaw",
452
+ "g711alaw",
453
+ ]
454
+
455
+ FaxFallBackProtocols = Literal[
456
+ "none",
457
+ "g711ulaw",
458
+ "g711alaw",
459
+ ]
460
+
461
+ MpDtmf = Literal[
462
+ "inband",
463
+ "rtp-nte",
464
+ "sip-notify",
465
+ "sip-kpml",
466
+ ]
467
+
468
+
469
+ def str_as_mp_dmtf_list(val: Union[str, Sequence[MpDtmf]]) -> Sequence[MpDtmf]:
470
+ if isinstance(val, str):
471
+ return [cast(MpDtmf, dtmf) for dtmf in val.split()]
472
+ return val
473
+
474
+
475
+ SpaceSeparatedMpDtmfList = Annotated[
476
+ List[MpDtmf],
477
+ PlainSerializer(lambda x: " ".join(map(str, x)), return_type=MpDtmf, when_used="json-unless-none"),
478
+ BeforeValidator(str_as_mp_dmtf_list),
479
+ Field(min_length=1),
480
+ ]
481
+
482
+ HuntSchemeMethod = Literal[
483
+ "least-idle",
484
+ "least-used",
485
+ "longest-idle",
486
+ "random",
487
+ "round-robin",
488
+ "sequential",
489
+ ]
490
+
491
+ HuntSchemeChannel = Literal[
492
+ "both",
493
+ "even",
494
+ "odd",
495
+ ]
496
+
497
+ HuntSchemeDirection = Literal[
498
+ "down",
499
+ "up",
500
+ ]
501
+
502
+ SpaceSeparatedTLOCColorStr = Annotated[
503
+ List[TLOCColor],
504
+ PlainSerializer(lambda x: " ".join(map(str, x)), return_type=str, when_used="json-unless-none"),
505
+ BeforeValidator(str_as_str_list),
506
+ ]
507
+
93
508
 
94
509
  WellKnownBGPCommunities = Literal[
95
510
  "internet",
@@ -98,6 +513,52 @@ WellKnownBGPCommunities = Literal[
98
513
  "no-export",
99
514
  ]
100
515
 
516
+
517
+ MultiRegionRole = Literal[
518
+ "border-router",
519
+ "edge-router",
520
+ ]
521
+
522
+ OriginProtocol = Literal[
523
+ "aggregate",
524
+ "bgp",
525
+ "bgp-external",
526
+ "bgp-internal",
527
+ "connected",
528
+ "eigrp",
529
+ "ospf",
530
+ "ospf-inter-area",
531
+ "ospf-intra-area",
532
+ "ospf-external1",
533
+ "ospf-external2",
534
+ "rip",
535
+ "static",
536
+ "eigrp-summary",
537
+ "eigrp-internal",
538
+ "eigrp-external",
539
+ "lisp",
540
+ "nat-dia",
541
+ "natpool",
542
+ "isis",
543
+ "isis-level1",
544
+ "isis-level2",
545
+ "egp",
546
+ "igp",
547
+ "incomplete",
548
+ ]
549
+
550
+ ServiceType = Literal[
551
+ "appqoe",
552
+ "FW",
553
+ "IDP",
554
+ "IDS",
555
+ "netsvc1",
556
+ "netsvc2",
557
+ "netsvc3",
558
+ "netsvc4",
559
+ "netsvc5",
560
+ ]
561
+
101
562
  ServiceChainNumber = Literal[
102
563
  "SC1",
103
564
  "SC2",
@@ -116,3 +577,1438 @@ ServiceChainNumber = Literal[
116
577
  "SC15",
117
578
  "SC16",
118
579
  ]
580
+
581
+ SequenceIpType = Literal[
582
+ "ipv4",
583
+ "ipv6",
584
+ "all",
585
+ ]
586
+
587
+ TLOCActionType = Literal[
588
+ "strict",
589
+ "primary",
590
+ "backup",
591
+ "ecmp",
592
+ ]
593
+
594
+ IcmpMsgType = Literal[
595
+ "administratively-prohibited",
596
+ "dod-host-prohibited",
597
+ "dod-net-prohibited",
598
+ "echo",
599
+ "echo-reply",
600
+ "echo-reply-no-error",
601
+ "extended-echo",
602
+ "extended-echo-reply",
603
+ "general-parameter-problem",
604
+ "host-isolated",
605
+ "host-precedence-unreachable",
606
+ "host-redirect",
607
+ "host-tos-redirect",
608
+ "host-tos-unreachable",
609
+ "host-unknown",
610
+ "host-unreachable",
611
+ "interface-error",
612
+ "malformed-query",
613
+ "multiple-interface-match",
614
+ "net-redirect",
615
+ "net-tos-redirect",
616
+ "net-tos-unreachable",
617
+ "net-unreachable",
618
+ "network-unknown",
619
+ "no-room-for-option",
620
+ "option-missing",
621
+ "packet-too-big",
622
+ "parameter-problem",
623
+ "photuris",
624
+ "port-unreachable",
625
+ "precedence-unreachable",
626
+ "protocol-unreachable",
627
+ "reassembly-timeout",
628
+ "redirect",
629
+ "router-advertisement",
630
+ "router-solicitation",
631
+ "source-route-failed",
632
+ "table-entry-error",
633
+ "time-exceeded",
634
+ "timestamp-reply",
635
+ "timestamp-request",
636
+ "ttl-exceeded",
637
+ "unreachable",
638
+ ]
639
+
640
+ Icmp6MsgType = Literal[
641
+ "beyond-scope",
642
+ "cp-advertisement",
643
+ "cp-solicitation",
644
+ "destination-unreachable",
645
+ "dhaad-reply",
646
+ "dhaad-request",
647
+ "echo-reply",
648
+ "echo-request",
649
+ "header",
650
+ "hop-limit",
651
+ "ind-advertisement",
652
+ "ind-solicitation",
653
+ "mld-query",
654
+ "mld-reduction",
655
+ "mld-report",
656
+ "mldv2-report",
657
+ "mpd-advertisement",
658
+ "mpd-solicitation",
659
+ "mr-advertisement",
660
+ "mr-solicitation",
661
+ "mr-termination",
662
+ "nd-na",
663
+ "nd-ns",
664
+ "next-header-type",
665
+ "ni-query",
666
+ "ni-query-name",
667
+ "ni-query-v4-address",
668
+ "ni-query-v6-address",
669
+ "ni-response",
670
+ "ni-response-qtype-unknown",
671
+ "ni-response-refuse",
672
+ "ni-response-success",
673
+ "no-admin",
674
+ "no-route",
675
+ "packet-too-big",
676
+ "parameter-option",
677
+ "parameter-problem",
678
+ "port-unreachable",
679
+ "reassembly-timeout",
680
+ "redirect",
681
+ "reject-route",
682
+ "renum-command",
683
+ "renum-result",
684
+ "renum-seq-number",
685
+ "router-advertisement",
686
+ "router-renumbering",
687
+ "router-solicitation",
688
+ "rpl-control",
689
+ "source-policy",
690
+ "source-route-header",
691
+ "time-exceeded",
692
+ "unreachable",
693
+ ]
694
+
695
+ MetricType = Literal["type1", "type2"]
696
+
697
+ SubnetMask = Literal[
698
+ "255.255.255.255",
699
+ "255.255.255.254",
700
+ "255.255.255.252",
701
+ "255.255.255.248",
702
+ "255.255.255.240",
703
+ "255.255.255.224",
704
+ "255.255.255.192",
705
+ "255.255.255.128",
706
+ "255.255.255.0",
707
+ "255.255.254.0",
708
+ "255.255.252.0",
709
+ "255.255.248.0",
710
+ "255.255.240.0",
711
+ "255.255.224.0",
712
+ "255.255.192.0",
713
+ "255.255.128.0",
714
+ "255.255.0.0",
715
+ "255.254.0.0",
716
+ "255.252.0.0",
717
+ "255.240.0.0",
718
+ "255.224.0.0",
719
+ "255.192.0.0",
720
+ "255.128.0.0",
721
+ "255.0.0.0",
722
+ "254.0.0.0",
723
+ "252.0.0.0",
724
+ "248.0.0.0",
725
+ "240.0.0.0",
726
+ "224.0.0.0",
727
+ "192.0.0.0",
728
+ "128.0.0.0",
729
+ "0.0.0.0",
730
+ ]
731
+
732
+ AmpFileReputationServer = Literal["nam", "eur", "apjc"]
733
+ AmpFileAlertLevel = Literal["critical", "warning", "info"]
734
+ AmpFileAnalysisServer = Literal["nam", "eur"]
735
+ AmpFileAnalysisFileTypes = Literal[
736
+ "pdf", "ms-exe", "new-office", "rtf", "mdb", "mscab", "msole2", "wri", "xlw", "flv", "swf"
737
+ ]
738
+
739
+ VpnId = Annotated[
740
+ IntStr,
741
+ Ge(0),
742
+ Le(65530),
743
+ ]
744
+
745
+ DNSTypeEntryType = Literal[
746
+ "host",
747
+ "umbrella",
748
+ ]
749
+
750
+ _PolicyModeType = Literal["security", "unified"]
751
+
752
+
753
+ def parse_policy_mode(val: Optional[str]) -> _PolicyModeType:
754
+ if isinstance(val, str) and val == "unified":
755
+ return "unified"
756
+ return "security"
757
+
758
+
759
+ PolicyModeType = Annotated[_PolicyModeType, BeforeValidator(parse_policy_mode)]
760
+
761
+
762
+ CoreRegion = Literal[
763
+ "core",
764
+ "core-shared",
765
+ ]
766
+
767
+ SecondaryRegion = Literal[
768
+ "secondary-only",
769
+ "secondary-shared",
770
+ ]
771
+
772
+ WebReputation = Literal["low-risk", "moderate-risk", "high-risk", "suspicious", "trustworthy"]
773
+
774
+ WebCategory = Literal[
775
+ "abused-drugs",
776
+ "abortion",
777
+ "adult-and-pornography",
778
+ "alcohol-and-tobacco",
779
+ "auctions",
780
+ "bot-nets",
781
+ "business-and-economy",
782
+ "cdns",
783
+ "cheating",
784
+ "computer-and-internet-info",
785
+ "computer-and-internet-security",
786
+ "games",
787
+ "gambling",
788
+ "financial-services",
789
+ "fashion-and-beauty",
790
+ "entertainment-and-arts",
791
+ "educational-institutions",
792
+ "dynamic-content",
793
+ "dead-sites",
794
+ "confirmed-spam-sources",
795
+ "cult-and-occult",
796
+ "dating",
797
+ "government",
798
+ "gross",
799
+ "hacking",
800
+ "hate-and-racism",
801
+ "health-and-medicine",
802
+ "home",
803
+ "hunting-and-fishing",
804
+ "illegal",
805
+ "image-and-video-search",
806
+ "individual-stock-advice-and-tools",
807
+ "internet-communications",
808
+ "internet-portals",
809
+ "job-search",
810
+ "keyloggers-and-monitoring",
811
+ "kids",
812
+ "legal",
813
+ "local-information",
814
+ "malware-sites",
815
+ "marijuana",
816
+ "p2p",
817
+ "parked-sites",
818
+ "pay-to-surf",
819
+ "personal-sites-and-blogs",
820
+ "philosophy-and-political-advocacy",
821
+ "phishing-and-other-frauds",
822
+ "private-ip-addresses",
823
+ "proxy-avoid-and-anonymizers",
824
+ "questionable",
825
+ "real-estate",
826
+ "recreation-and-hobbies",
827
+ "reference-and-research",
828
+ "religion",
829
+ "search-engines",
830
+ "sex-education",
831
+ "shareware-and-freeware",
832
+ "shopping",
833
+ "social-network",
834
+ "society",
835
+ "sports",
836
+ "spam-urls",
837
+ "spyware-and-adware",
838
+ "streaming-media",
839
+ "swimsuits-and-intimate-apparel",
840
+ "training-and-tools",
841
+ "translation",
842
+ "travel",
843
+ "uncategorized",
844
+ "unconfirmed-spam-sources",
845
+ "violence",
846
+ "weapons",
847
+ "web-advertisements",
848
+ "web-based-email",
849
+ "web-hosting",
850
+ "open-http-proxies",
851
+ "online-personal-storage",
852
+ "online-greeting-cards",
853
+ "nudity",
854
+ "news-and-media",
855
+ "music",
856
+ "motor-vehicles",
857
+ "military",
858
+ ]
859
+
860
+ IkeMode = Literal[
861
+ "main",
862
+ "aggresive",
863
+ ]
864
+
865
+ IkeCiphersuite = Literal[
866
+ "aes256-cbc-sha1",
867
+ "aes256-cbc-sha2",
868
+ "aes128-cbc-sha1",
869
+ "aes128-cbc-sha2",
870
+ ]
871
+
872
+ IkeGroup = Literal[
873
+ "2",
874
+ "14",
875
+ "15",
876
+ "16",
877
+ "19",
878
+ "20",
879
+ "21",
880
+ "24",
881
+ ]
882
+
883
+ IpsecCiphersuite = Literal[
884
+ "aes256-cbc-sha1",
885
+ "aes256-cbc-sha384",
886
+ "aes256-cbc-sha256",
887
+ "aes256-cbc-sha512",
888
+ "aes256-gcm",
889
+ "null-sha1",
890
+ "null-sha384",
891
+ "null-sha256",
892
+ "null-sha512",
893
+ ]
894
+
895
+ IpsecTunnelMode = Literal[
896
+ "ipv4",
897
+ "ipv6",
898
+ "ipv4-v6overlay",
899
+ ]
900
+
901
+ LossProtectionType = Literal[
902
+ "fecAdaptive",
903
+ "fecAlways",
904
+ "packetDuplication",
905
+ ]
906
+
907
+ PfsGroup = Literal[
908
+ "group-1",
909
+ "group-2",
910
+ "group-5",
911
+ "group-14",
912
+ "group-15",
913
+ "group-16",
914
+ "group-19",
915
+ "group-20",
916
+ "group-21",
917
+ "group-24",
918
+ "none",
919
+ ]
920
+
921
+ VrrpTrackerAction = Literal[
922
+ "Decrement",
923
+ "Shutdown",
924
+ ]
925
+
926
+ TunnelMode = Literal[
927
+ "hub",
928
+ "spoke",
929
+ ]
930
+
931
+ Duplex = Literal[
932
+ "full",
933
+ "half",
934
+ ]
935
+
936
+ EthernetDuplexMode = Literal[
937
+ "full",
938
+ "half",
939
+ "auto",
940
+ ]
941
+
942
+ MediaType = Literal[
943
+ "auto-select",
944
+ "rj45",
945
+ "sfp",
946
+ ]
947
+
948
+ Speed = Literal[
949
+ "10",
950
+ "100",
951
+ "1000",
952
+ "10000",
953
+ "2500",
954
+ ]
955
+
956
+ EthernetNatType = Literal["pool", "loopback", "interface"]
957
+
958
+ EthernetDirection = Literal[
959
+ "inside",
960
+ "outside",
961
+ ]
962
+
963
+ ClockRate = Literal[
964
+ "1000000",
965
+ "115200",
966
+ "1200",
967
+ "125000",
968
+ "14400",
969
+ "148000",
970
+ "19200",
971
+ "192000",
972
+ "2000000",
973
+ "2400",
974
+ "250000",
975
+ "256000",
976
+ "28800",
977
+ "32000",
978
+ "38400",
979
+ "384000",
980
+ "4000000",
981
+ "4800",
982
+ "48000",
983
+ "500000",
984
+ "512000",
985
+ "5300000",
986
+ "56000",
987
+ "57600",
988
+ "64000",
989
+ "72000",
990
+ "768000",
991
+ "800000",
992
+ "8000000",
993
+ "9600",
994
+ ]
995
+
996
+ LineMode = Literal[
997
+ "primary",
998
+ "secondary",
999
+ ]
1000
+
1001
+ T1Framing = Literal[
1002
+ "esf",
1003
+ "sf",
1004
+ ]
1005
+
1006
+ T1Linecode = Literal[
1007
+ "ami",
1008
+ "b8zs",
1009
+ ]
1010
+
1011
+ E1Framing = Literal[
1012
+ "crc4",
1013
+ "no-crc4",
1014
+ ]
1015
+
1016
+ E1Linecode = Literal[
1017
+ "ami",
1018
+ "hdb3",
1019
+ ]
1020
+
1021
+ CableLengthShortValue = Literal[
1022
+ "110ft",
1023
+ "220ft",
1024
+ "330ft",
1025
+ "440ft",
1026
+ "550ft",
1027
+ "660ft",
1028
+ ]
1029
+
1030
+ CableLengthLongValue = Literal[
1031
+ "-15db",
1032
+ "-22.5db",
1033
+ "-7.5db",
1034
+ "0db",
1035
+ ]
1036
+
1037
+
1038
+ Timezone = Literal[
1039
+ "Europe/Andorra",
1040
+ "Asia/Dubai",
1041
+ "Asia/Kabul",
1042
+ "America/Antigua",
1043
+ "America/Anguilla",
1044
+ "Europe/Tirane",
1045
+ "Asia/Yerevan",
1046
+ "Africa/Luanda",
1047
+ "Antarctica/McMurdo",
1048
+ "Antarctica/Rothera",
1049
+ "Antarctica/Palmer",
1050
+ "Antarctica/Mawson",
1051
+ "Antarctica/Davis",
1052
+ "Antarctica/Casey",
1053
+ "Antarctica/Vostok",
1054
+ "Antarctica/DumontDUrville",
1055
+ "Antarctica/Syowa",
1056
+ "America/Argentina/Buenos_Aires",
1057
+ "America/Argentina/Cordoba",
1058
+ "America/Argentina/Salta",
1059
+ "America/Argentina/Jujuy",
1060
+ "America/Argentina/Tucuman",
1061
+ "America/Argentina/Catamarca",
1062
+ "America/Argentina/La_Rioja",
1063
+ "America/Argentina/San_Juan",
1064
+ "America/Argentina/Mendoza",
1065
+ "America/Argentina/San_Luis",
1066
+ "America/Argentina/Rio_Gallegos",
1067
+ "America/Argentina/Ushuaia",
1068
+ "Pacific/Pago_Pago",
1069
+ "Europe/Vienna",
1070
+ "Australia/Lord_Howe",
1071
+ "Antarctica/Macquarie",
1072
+ "Australia/Hobart",
1073
+ "Australia/Currie",
1074
+ "Australia/Melbourne",
1075
+ "Australia/Sydney",
1076
+ "Australia/Broken_Hill",
1077
+ "Australia/Brisbane",
1078
+ "Australia/Lindeman",
1079
+ "Australia/Adelaide",
1080
+ "Australia/Darwin",
1081
+ "Australia/Perth",
1082
+ "Australia/Eucla",
1083
+ "America/Aruba",
1084
+ "Europe/Mariehamn",
1085
+ "Asia/Baku",
1086
+ "Europe/Sarajevo",
1087
+ "America/Barbados",
1088
+ "Asia/Dhaka",
1089
+ "Europe/Brussels",
1090
+ "Africa/Ouagadougou",
1091
+ "Europe/Sofia",
1092
+ "Asia/Bahrain",
1093
+ "Africa/Bujumbura",
1094
+ "Africa/Porto-Novo",
1095
+ "America/St_Barthelemy",
1096
+ "Atlantic/Bermuda",
1097
+ "Asia/Brunei",
1098
+ "America/La_Paz",
1099
+ "America/Kralendijk",
1100
+ "America/Noronha",
1101
+ "America/Belem",
1102
+ "America/Fortaleza",
1103
+ "America/Recife",
1104
+ "America/Araguaina",
1105
+ "America/Maceio",
1106
+ "America/Bahia",
1107
+ "America/Sao_Paulo",
1108
+ "America/Campo_Grande",
1109
+ "America/Cuiaba",
1110
+ "America/Santarem",
1111
+ "America/Porto_Velho",
1112
+ "America/Boa_Vista",
1113
+ "America/Manaus",
1114
+ "America/Eirunepe",
1115
+ "America/Rio_Branco",
1116
+ "America/Nassau",
1117
+ "Asia/Thimphu",
1118
+ "Africa/Gaborone",
1119
+ "Europe/Minsk",
1120
+ "America/Belize",
1121
+ "America/St_Johns",
1122
+ "America/Halifax",
1123
+ "America/Glace_Bay",
1124
+ "America/Moncton",
1125
+ "America/Goose_Bay",
1126
+ "America/Blanc-Sablon",
1127
+ "America/Toronto",
1128
+ "America/Nipigon",
1129
+ "America/Thunder_Bay",
1130
+ "America/Iqaluit",
1131
+ "America/Pangnirtung",
1132
+ "America/Resolute",
1133
+ "America/Atikokan",
1134
+ "America/Rankin_Inlet",
1135
+ "America/Winnipeg",
1136
+ "America/Rainy_River",
1137
+ "America/Regina",
1138
+ "America/Swift_Current",
1139
+ "America/Edmonton",
1140
+ "America/Cambridge_Bay",
1141
+ "America/Yellowknife",
1142
+ "America/Inuvik",
1143
+ "America/Creston",
1144
+ "America/Dawson_Creek",
1145
+ "America/Vancouver",
1146
+ "America/Whitehorse",
1147
+ "America/Dawson",
1148
+ "Indian/Cocos",
1149
+ "Africa/Kinshasa",
1150
+ "Africa/Lubumbashi",
1151
+ "Africa/Bangui",
1152
+ "Africa/Brazzaville",
1153
+ "Europe/Zurich",
1154
+ "Africa/Abidjan",
1155
+ "Pacific/Rarotonga",
1156
+ "America/Santiago",
1157
+ "Pacific/Easter",
1158
+ "Africa/Douala",
1159
+ "Asia/Shanghai",
1160
+ "Asia/Harbin",
1161
+ "Asia/Chongqing",
1162
+ "Asia/Urumqi",
1163
+ "Asia/Kashgar",
1164
+ "America/Bogota",
1165
+ "America/Costa_Rica",
1166
+ "America/Havana",
1167
+ "Atlantic/Cape_Verde",
1168
+ "America/Curacao",
1169
+ "Indian/Christmas",
1170
+ "Asia/Nicosia",
1171
+ "Europe/Prague",
1172
+ "Europe/Berlin",
1173
+ "Europe/Busingen",
1174
+ "Africa/Djibouti",
1175
+ "Europe/Copenhagen",
1176
+ "America/Dominica",
1177
+ "America/Santo_Domingo",
1178
+ "Africa/Algiers",
1179
+ "America/Guayaquil",
1180
+ "Pacific/Galapagos",
1181
+ "Europe/Tallinn",
1182
+ "Africa/Cairo",
1183
+ "Africa/El_Aaiun",
1184
+ "Africa/Asmara",
1185
+ "Europe/Madrid",
1186
+ "Africa/Ceuta",
1187
+ "Atlantic/Canary",
1188
+ "Africa/Addis_Ababa",
1189
+ "Europe/Helsinki",
1190
+ "Pacific/Fiji",
1191
+ "Atlantic/Stanley",
1192
+ "Pacific/Chuuk",
1193
+ "Pacific/Pohnpei",
1194
+ "Pacific/Kosrae",
1195
+ "Atlantic/Faroe",
1196
+ "Europe/Paris",
1197
+ "Africa/Libreville",
1198
+ "Europe/London",
1199
+ "America/Grenada",
1200
+ "Asia/Tbilisi",
1201
+ "America/Cayenne",
1202
+ "Europe/Guernsey",
1203
+ "Africa/Accra",
1204
+ "Europe/Gibraltar",
1205
+ "America/Godthab",
1206
+ "America/Danmarkshavn",
1207
+ "America/Scoresbysund",
1208
+ "America/Thule",
1209
+ "Africa/Banjul",
1210
+ "Africa/Conakry",
1211
+ "America/Guadeloupe",
1212
+ "Africa/Malabo",
1213
+ "Europe/Athens",
1214
+ "Atlantic/South_Georgia",
1215
+ "America/Guatemala",
1216
+ "Pacific/Guam",
1217
+ "Africa/Bissau",
1218
+ "America/Guyana",
1219
+ "Asia/Hong_Kong",
1220
+ "America/Tegucigalpa",
1221
+ "Europe/Zagreb",
1222
+ "America/Port-au-Prince",
1223
+ "Europe/Budapest",
1224
+ "Asia/Jakarta",
1225
+ "Asia/Pontianak",
1226
+ "Asia/Makassar",
1227
+ "Asia/Jayapura",
1228
+ "Europe/Dublin",
1229
+ "Asia/Jerusalem",
1230
+ "Europe/Isle_of_Man",
1231
+ "Asia/Kolkata",
1232
+ "Indian/Chagos",
1233
+ "Asia/Baghdad",
1234
+ "Asia/Tehran",
1235
+ "Atlantic/Reykjavik",
1236
+ "Europe/Rome",
1237
+ "Europe/Jersey",
1238
+ "America/Jamaica",
1239
+ "Asia/Amman",
1240
+ "Asia/Tokyo",
1241
+ "Africa/Nairobi",
1242
+ "Asia/Bishkek",
1243
+ "Asia/Phnom_Penh",
1244
+ "Pacific/Tarawa",
1245
+ "Pacific/Enderbury",
1246
+ "Pacific/Kiritimati",
1247
+ "Indian/Comoro",
1248
+ "America/St_Kitts",
1249
+ "Asia/Pyongyang",
1250
+ "Asia/Seoul",
1251
+ "Asia/Kuwait",
1252
+ "America/Cayman",
1253
+ "Asia/Almaty",
1254
+ "Asia/Qyzylorda",
1255
+ "Asia/Aqtobe",
1256
+ "Asia/Aqtau",
1257
+ "Asia/Oral",
1258
+ "Asia/Vientiane",
1259
+ "Asia/Beirut",
1260
+ "America/St_Lucia",
1261
+ "Europe/Vaduz",
1262
+ "Asia/Colombo",
1263
+ "Africa/Monrovia",
1264
+ "Africa/Maseru",
1265
+ "Europe/Vilnius",
1266
+ "Europe/Luxembourg",
1267
+ "Europe/Riga",
1268
+ "Africa/Tripoli",
1269
+ "Africa/Casablanca",
1270
+ "Europe/Monaco",
1271
+ "Europe/Chisinau",
1272
+ "Europe/Podgorica",
1273
+ "America/Marigot",
1274
+ "Indian/Antananarivo",
1275
+ "Pacific/Majuro",
1276
+ "Pacific/Kwajalein",
1277
+ "Europe/Skopje",
1278
+ "Africa/Bamako",
1279
+ "Asia/Rangoon",
1280
+ "Asia/Ulaanbaatar",
1281
+ "Asia/Hovd",
1282
+ "Asia/Choibalsan",
1283
+ "Asia/Macau",
1284
+ "Pacific/Saipan",
1285
+ "America/Martinique",
1286
+ "Africa/Nouakchott",
1287
+ "America/Montserrat",
1288
+ "Europe/Malta",
1289
+ "Indian/Mauritius",
1290
+ "Indian/Maldives",
1291
+ "Africa/Blantyre",
1292
+ "America/Mexico_City",
1293
+ "America/Cancun",
1294
+ "America/Merida",
1295
+ "America/Monterrey",
1296
+ "America/Matamoros",
1297
+ "America/Mazatlan",
1298
+ "America/Chihuahua",
1299
+ "America/Ojinaga",
1300
+ "America/Hermosillo",
1301
+ "America/Tijuana",
1302
+ "America/Santa_Isabel",
1303
+ "America/Bahia_Banderas",
1304
+ "Asia/Kuala_Lumpur",
1305
+ "Asia/Kuching",
1306
+ "Africa/Maputo",
1307
+ "Africa/Windhoek",
1308
+ "Pacific/Noumea",
1309
+ "Africa/Niamey",
1310
+ "Pacific/Norfolk",
1311
+ "Africa/Lagos",
1312
+ "America/Managua",
1313
+ "Europe/Amsterdam",
1314
+ "Europe/Oslo",
1315
+ "Asia/Kathmandu",
1316
+ "Pacific/Nauru",
1317
+ "Pacific/Niue",
1318
+ "Pacific/Auckland",
1319
+ "Pacific/Chatham",
1320
+ "Asia/Muscat",
1321
+ "America/Panama",
1322
+ "America/Lima",
1323
+ "Pacific/Tahiti",
1324
+ "Pacific/Marquesas",
1325
+ "Pacific/Gambier",
1326
+ "Pacific/Port_Moresby",
1327
+ "Asia/Manila",
1328
+ "Asia/Karachi",
1329
+ "Europe/Warsaw",
1330
+ "America/Miquelon",
1331
+ "Pacific/Pitcairn",
1332
+ "America/Puerto_Rico",
1333
+ "Asia/Gaza",
1334
+ "Asia/Hebron",
1335
+ "Europe/Lisbon",
1336
+ "Atlantic/Madeira",
1337
+ "Atlantic/Azores",
1338
+ "Pacific/Palau",
1339
+ "America/Asuncion",
1340
+ "Asia/Qatar",
1341
+ "Indian/Reunion",
1342
+ "Europe/Bucharest",
1343
+ "Europe/Belgrade",
1344
+ "Europe/Kaliningrad",
1345
+ "Europe/Moscow",
1346
+ "Europe/Volgograd",
1347
+ "Europe/Samara",
1348
+ "Asia/Yekaterinburg",
1349
+ "Asia/Omsk",
1350
+ "Asia/Novosibirsk",
1351
+ "Asia/Novokuznetsk",
1352
+ "Asia/Krasnoyarsk",
1353
+ "Asia/Irkutsk",
1354
+ "Asia/Yakutsk",
1355
+ "Asia/Khandyga",
1356
+ "Asia/Vladivostok",
1357
+ "Asia/Sakhalin",
1358
+ "Asia/Ust-Nera",
1359
+ "Asia/Magadan",
1360
+ "Asia/Kamchatka",
1361
+ "Asia/Anadyr",
1362
+ "Africa/Kigali",
1363
+ "Asia/Riyadh",
1364
+ "Pacific/Guadalcanal",
1365
+ "Indian/Mahe",
1366
+ "Africa/Khartoum",
1367
+ "Europe/Stockholm",
1368
+ "Asia/Singapore",
1369
+ "Atlantic/St_Helena",
1370
+ "Europe/Ljubljana",
1371
+ "Arctic/Longyearbyen",
1372
+ "Europe/Bratislava",
1373
+ "Africa/Freetown",
1374
+ "Europe/San_Marino",
1375
+ "Africa/Dakar",
1376
+ "Africa/Mogadishu",
1377
+ "America/Paramaribo",
1378
+ "Africa/Juba",
1379
+ "Africa/Sao_Tome",
1380
+ "America/El_Salvador",
1381
+ "America/Lower_Princes",
1382
+ "Asia/Damascus",
1383
+ "Africa/Mbabane",
1384
+ "America/Grand_Turk",
1385
+ "Africa/Ndjamena",
1386
+ "Indian/Kerguelen",
1387
+ "Africa/Lome",
1388
+ "Asia/Bangkok",
1389
+ "Asia/Dushanbe",
1390
+ "Pacific/Fakaofo",
1391
+ "Asia/Dili",
1392
+ "Asia/Ashgabat",
1393
+ "Africa/Tunis",
1394
+ "Pacific/Tongatapu",
1395
+ "Europe/Istanbul",
1396
+ "America/Port_of_Spain",
1397
+ "Pacific/Funafuti",
1398
+ "Asia/Taipei",
1399
+ "Africa/Dar_es_Salaam",
1400
+ "Europe/Kiev",
1401
+ "Europe/Uzhgorod",
1402
+ "Europe/Zaporozhye",
1403
+ "Europe/Simferopol",
1404
+ "Africa/Kampala",
1405
+ "Pacific/Johnston",
1406
+ "Pacific/Midway",
1407
+ "Pacific/Wake",
1408
+ "America/New_York",
1409
+ "America/Detroit",
1410
+ "America/Kentucky/Louisville",
1411
+ "America/Kentucky/Monticello",
1412
+ "America/Indiana/Indianapolis",
1413
+ "America/Indiana/Vincennes",
1414
+ "America/Indiana/Winamac",
1415
+ "America/Indiana/Marengo",
1416
+ "America/Indiana/Petersburg",
1417
+ "America/Indiana/Vevay",
1418
+ "America/Chicago",
1419
+ "America/Indiana/Tell_City",
1420
+ "America/Indiana/Knox",
1421
+ "America/Menominee",
1422
+ "America/North_Dakota/Center",
1423
+ "America/North_Dakota/New_Salem",
1424
+ "America/North_Dakota/Beulah",
1425
+ "America/Denver",
1426
+ "America/Boise",
1427
+ "America/Phoenix",
1428
+ "America/Los_Angeles",
1429
+ "America/Anchorage",
1430
+ "America/Juneau",
1431
+ "America/Sitka",
1432
+ "America/Yakutat",
1433
+ "America/Nome",
1434
+ "America/Adak",
1435
+ "America/Metlakatla",
1436
+ "Pacific/Honolulu",
1437
+ "America/Montevideo",
1438
+ "Asia/Samarkand",
1439
+ "Asia/Tashkent",
1440
+ "Europe/Vatican",
1441
+ "America/St_Vincent",
1442
+ "America/Caracas",
1443
+ "America/Tortola",
1444
+ "America/St_Thomas",
1445
+ "Asia/Ho_Chi_Minh",
1446
+ "Pacific/Efate",
1447
+ "Pacific/Wallis",
1448
+ "Pacific/Apia",
1449
+ "Asia/Aden",
1450
+ "Indian/Mayotte",
1451
+ "Africa/Johannesburg",
1452
+ "Africa/Lusaka",
1453
+ "Africa/Harare",
1454
+ "UTC",
1455
+ ]
1456
+
1457
+ TrafficTargetType = Literal[
1458
+ "access",
1459
+ "core",
1460
+ "service",
1461
+ ]
1462
+
1463
+ DeviceModel = Literal[
1464
+ "None",
1465
+ "vsmart",
1466
+ "vedge-cloud",
1467
+ "vmanage",
1468
+ "vedge-ISR1100-6G",
1469
+ "vedge-ISR1100X-6G",
1470
+ "vedge-ISR1100-4G",
1471
+ "vedge-ISR1100X-4G",
1472
+ "vedge-ISR1100-4GLTE",
1473
+ "vedge-cloud",
1474
+ "vedge-1000",
1475
+ "vedge-2000",
1476
+ "vedge-100",
1477
+ "vedge-100-B",
1478
+ "vedge-100-WM",
1479
+ "vedge-100-M",
1480
+ "vedge-5000",
1481
+ "vedge-IR-1101",
1482
+ "vedge-ESR-6300",
1483
+ "vedge-IR-1821",
1484
+ "vedge-IR-1831",
1485
+ "vedge-IR-1833",
1486
+ "vedge-IR-1835",
1487
+ "vedge-ASR-1001-X",
1488
+ "vedge-ASR-1002-X",
1489
+ "vedge-ASR-1002-HX",
1490
+ "vedge-ASR-1001-HX",
1491
+ "vedge-C8500L-8G4X",
1492
+ "vedge-C8500-12X4QC",
1493
+ "vedge-C8500-12X",
1494
+ "vedge-C8500L-8S4X",
1495
+ "vedge-ASR-1006-X",
1496
+ "vedge-C8500-20X6C",
1497
+ "vedge-CSR-1000v",
1498
+ "vedge-C8000V",
1499
+ "vedge-ISR-4331",
1500
+ "vedge-ISR-4431",
1501
+ "vedge-ISR-4461",
1502
+ "vedge-ISR-4451-X",
1503
+ "vedge-ISR-4321",
1504
+ "vedge-ISR-4351",
1505
+ "vedge-ISR-4221",
1506
+ "vedge-ISR-4221X",
1507
+ "vedge-C1111-8PW",
1508
+ "vedge-C1111-8PLTELAW",
1509
+ "vedge-C1111-8PLTEEAW",
1510
+ "vedge-C1113-8PMLTEEA",
1511
+ "vedge-C1116-4P",
1512
+ "vedge-C1116-4PLTEEA",
1513
+ "vedge-C1117-4P",
1514
+ "vedge-C1117-4PM",
1515
+ "vedge-C1117-4PLTEEA",
1516
+ "vedge-C1111-8PLTELA",
1517
+ "vedge-C1111-8PLTEEA",
1518
+ "vedge-C1121-8PLTEPW",
1519
+ "vedge-C1121-8PLTEP",
1520
+ "vedge-C1121X-8PLTEP",
1521
+ "vedge-C1111-4PLTEEA",
1522
+ "vedge-C1161X-8PLTEP",
1523
+ "vedge-C8300-2N2S-6T",
1524
+ "vedge-C8300-1N1S-6T",
1525
+ "vedge-C8300-1N1S-4T2X",
1526
+ "vedge-C8300-2N2S-4T2X",
1527
+ "vedge-C8200-1N-4T",
1528
+ "vedge-C8200L-1N-4T",
1529
+ "vedge-ISRv",
1530
+ ]
1531
+
1532
+ SLAClassCriteria = Literal[
1533
+ "loss",
1534
+ "latency",
1535
+ "jitter",
1536
+ "loss-latency",
1537
+ "loss-jitter",
1538
+ "latency-loss",
1539
+ "latency-jitter",
1540
+ "jitter-latency",
1541
+ "jitter-loss",
1542
+ "loss-latency-jitter",
1543
+ "loss-jitter-latency",
1544
+ "latency-loss-jitter",
1545
+ "latency-jitter-loss",
1546
+ "jitter-latency-loss",
1547
+ "jitter-loss-latency",
1548
+ ]
1549
+
1550
+ ServiceAreaValue = Literal[
1551
+ "common",
1552
+ "exchange",
1553
+ "sharepoint",
1554
+ "skype",
1555
+ ]
1556
+
1557
+ TrafficCategory = Literal[
1558
+ "all",
1559
+ "optimize",
1560
+ "optimize-allow",
1561
+ ]
1562
+
1563
+ GeoLocation = Literal[
1564
+ "AF",
1565
+ "AN",
1566
+ "AS",
1567
+ "EU",
1568
+ "NA",
1569
+ "OC",
1570
+ "SA",
1571
+ "AFG",
1572
+ "ALB",
1573
+ "ATA",
1574
+ "DZA",
1575
+ "ASM",
1576
+ "AND",
1577
+ "AGO",
1578
+ "ATG",
1579
+ "AZE",
1580
+ "ARG",
1581
+ "AUS",
1582
+ "AUT",
1583
+ "BHS",
1584
+ "BHR",
1585
+ "BGD",
1586
+ "ARM",
1587
+ "BRB",
1588
+ "BEL",
1589
+ "BMU",
1590
+ "BTN",
1591
+ "BOL",
1592
+ "BIH",
1593
+ "BWA",
1594
+ "BVT",
1595
+ "BRA",
1596
+ "BLZ",
1597
+ "IOT",
1598
+ "SLB",
1599
+ "VGB",
1600
+ "BRN",
1601
+ "BGR",
1602
+ "MMR",
1603
+ "BDI",
1604
+ "BLR",
1605
+ "KHM",
1606
+ "CMR",
1607
+ "CAN",
1608
+ "CPV",
1609
+ "CYM",
1610
+ "CAF",
1611
+ "LKA",
1612
+ "TCD",
1613
+ "CHL",
1614
+ "CHN",
1615
+ "TWN",
1616
+ "CXR",
1617
+ "CCK",
1618
+ "COL",
1619
+ "COM",
1620
+ "MYT",
1621
+ "COG",
1622
+ "COD",
1623
+ "COK",
1624
+ "CRI",
1625
+ "HRV",
1626
+ "CUB",
1627
+ "CYP",
1628
+ "CZE",
1629
+ "BEN",
1630
+ "DNK",
1631
+ "DMA",
1632
+ "DOM",
1633
+ "ECU",
1634
+ "SLV",
1635
+ "GNQ",
1636
+ "ETH",
1637
+ "ERI",
1638
+ "EST",
1639
+ "FRO",
1640
+ "FLK",
1641
+ "SGS",
1642
+ "FJI",
1643
+ "FIN",
1644
+ "ALA",
1645
+ "FRA",
1646
+ "GUF",
1647
+ "PYF",
1648
+ "ATF",
1649
+ "DJI",
1650
+ "GAB",
1651
+ "GEO",
1652
+ "GMB",
1653
+ "PSE",
1654
+ "DEU",
1655
+ "GHA",
1656
+ "GIB",
1657
+ "KIR",
1658
+ "GRC",
1659
+ "GRL",
1660
+ "GRD",
1661
+ "GLP",
1662
+ "GUM",
1663
+ "GTM",
1664
+ "GIN",
1665
+ "GUY",
1666
+ "HTI",
1667
+ "HMD",
1668
+ "VAT",
1669
+ "HND",
1670
+ "HKG",
1671
+ "HUN",
1672
+ "ISL",
1673
+ "IND",
1674
+ "IDN",
1675
+ "IRN",
1676
+ "IRQ",
1677
+ "IRL",
1678
+ "ISR",
1679
+ "ITA",
1680
+ "CIV",
1681
+ "JAM",
1682
+ "JPN",
1683
+ "KAZ",
1684
+ "JOR",
1685
+ "KEN",
1686
+ "PRK",
1687
+ "KOR",
1688
+ "KWT",
1689
+ "KGZ",
1690
+ "LAO",
1691
+ "LBN",
1692
+ "LSO",
1693
+ "LVA",
1694
+ "LBR",
1695
+ "LBY",
1696
+ "LIE",
1697
+ "LTU",
1698
+ "LUX",
1699
+ "MAC",
1700
+ "MDG",
1701
+ "MWI",
1702
+ "MYS",
1703
+ "MDV",
1704
+ "MLI",
1705
+ "MLT",
1706
+ "MTQ",
1707
+ "MRT",
1708
+ "MUS",
1709
+ "MEX",
1710
+ "MCO",
1711
+ "MNG",
1712
+ "MDA",
1713
+ "MNE",
1714
+ "MSR",
1715
+ "MAR",
1716
+ "MOZ",
1717
+ "OMN",
1718
+ "NAM",
1719
+ "NRU",
1720
+ "NPL",
1721
+ "NLD",
1722
+ "ANT",
1723
+ "CUW",
1724
+ "ABW",
1725
+ "SXM",
1726
+ "BES",
1727
+ "NCL",
1728
+ "VUT",
1729
+ "NZL",
1730
+ "NIC",
1731
+ "NER",
1732
+ "NGA",
1733
+ "NIU",
1734
+ "NFK",
1735
+ "NOR",
1736
+ "MNP",
1737
+ "UMI",
1738
+ "FSM",
1739
+ "MHL",
1740
+ "PLW",
1741
+ "PAK",
1742
+ "PAN",
1743
+ "PNG",
1744
+ "PRY",
1745
+ "PER",
1746
+ "PHL",
1747
+ "PCN",
1748
+ "POL",
1749
+ "PRT",
1750
+ "GNB",
1751
+ "TLS",
1752
+ "PRI",
1753
+ "QAT",
1754
+ "REU",
1755
+ "ROU",
1756
+ "RUS",
1757
+ "RWA",
1758
+ "BLM",
1759
+ "SHN",
1760
+ "KNA",
1761
+ "AIA",
1762
+ "LCA",
1763
+ "MAF",
1764
+ "SPM",
1765
+ "VCT",
1766
+ "SMR",
1767
+ "STP",
1768
+ "SAU",
1769
+ "SEN",
1770
+ "SRB",
1771
+ "SYC",
1772
+ "SLE",
1773
+ "SGP",
1774
+ "SVK",
1775
+ "VNM",
1776
+ "SVN",
1777
+ "SOM",
1778
+ "ZAF",
1779
+ "ZWE",
1780
+ "ESP",
1781
+ "SSD",
1782
+ "ESH",
1783
+ "SDN",
1784
+ "SUR",
1785
+ "SJM",
1786
+ "SWZ",
1787
+ "SWE",
1788
+ "CHE",
1789
+ "SYR",
1790
+ "TJK",
1791
+ "THA",
1792
+ "TGO",
1793
+ "TKL",
1794
+ "TON",
1795
+ "TTO",
1796
+ "ARE",
1797
+ "TUN",
1798
+ "TUR",
1799
+ "TKM",
1800
+ "TCA",
1801
+ "TUV",
1802
+ "UGA",
1803
+ "UKR",
1804
+ "MKD",
1805
+ "EGY",
1806
+ "GBR",
1807
+ "GGY",
1808
+ "JEY",
1809
+ "IMN",
1810
+ "TZA",
1811
+ "USA",
1812
+ "VIR",
1813
+ "BFA",
1814
+ "URY",
1815
+ "UZB",
1816
+ "VEN",
1817
+ "WLF",
1818
+ "WSM",
1819
+ "YEM",
1820
+ "ZMB",
1821
+ ]
1822
+ ProtocolName = Literal[
1823
+ "snmp",
1824
+ "icmp",
1825
+ "tcp",
1826
+ "udp",
1827
+ "echo",
1828
+ "telnet",
1829
+ "wins",
1830
+ "n2h2server",
1831
+ "nntp",
1832
+ "pptp",
1833
+ "rtsp",
1834
+ "bootpc",
1835
+ "gdoi",
1836
+ "tacacs",
1837
+ "gopher",
1838
+ "icabrowser",
1839
+ "skinny",
1840
+ "sunrpc",
1841
+ "biff",
1842
+ "router",
1843
+ "ircs",
1844
+ "orasrv",
1845
+ "ms-cluster-net",
1846
+ "kermit",
1847
+ "isakmp",
1848
+ "sshell",
1849
+ "realsecure",
1850
+ "ircu",
1851
+ "appleqtc",
1852
+ "pwdgen",
1853
+ "rdb-dbs-disp",
1854
+ "creativepartnr",
1855
+ "finger",
1856
+ "ftps",
1857
+ "giop",
1858
+ "rsvd",
1859
+ "hp-alarm-mgr",
1860
+ "uucp",
1861
+ "kerberos",
1862
+ "imap",
1863
+ "time",
1864
+ "bootps",
1865
+ "tftp",
1866
+ "oracle",
1867
+ "snmptrap",
1868
+ "http",
1869
+ "qmtp",
1870
+ "radius",
1871
+ "oracle-em-vp",
1872
+ "tarantella",
1873
+ "pcanywheredata",
1874
+ "ldap",
1875
+ "mgcp",
1876
+ "sqlsrv",
1877
+ "hsrp",
1878
+ "cisco-net-mgmt",
1879
+ "smtp",
1880
+ "pcanywherestat",
1881
+ "exec",
1882
+ "send",
1883
+ "stun",
1884
+ "syslog",
1885
+ "ms-sql-m",
1886
+ "citrix",
1887
+ "creativeserver",
1888
+ "cifs",
1889
+ "cisco-sys",
1890
+ "cisco-tna",
1891
+ "ms-dotnetster",
1892
+ "gtpv1",
1893
+ "gtpv0",
1894
+ "imap3",
1895
+ "fcip-port",
1896
+ "netbios-dgm",
1897
+ "sip-tls",
1898
+ "pop3s",
1899
+ "cisco-fna",
1900
+ "802-11-iapp",
1901
+ "oem-agent",
1902
+ "cisco-tdp",
1903
+ "tr-rsrb",
1904
+ "r-winsock",
1905
+ "sql-net",
1906
+ "syslog-conn",
1907
+ "tacacs-ds",
1908
+ "h225ras",
1909
+ "ace-svr",
1910
+ "dhcp-failover",
1911
+ "igmpv3lite",
1912
+ "irc-serv",
1913
+ "entrust-svcs",
1914
+ "dbcontrol_agent",
1915
+ "cisco-svcs",
1916
+ "ipsec-msft",
1917
+ "microsoft-ds",
1918
+ "ms-sna",
1919
+ "rsvp_tunnel",
1920
+ "rsvp-encap",
1921
+ "hp-collector",
1922
+ "netbios-ns",
1923
+ "msexch-routing",
1924
+ "h323",
1925
+ "l2tp",
1926
+ "ldap-admin",
1927
+ "pop3",
1928
+ "h323callsigalt",
1929
+ "ms-sql",
1930
+ "iscsi-target",
1931
+ "webster",
1932
+ "lotusnote",
1933
+ "ipx",
1934
+ "entrust-svc-hand",
1935
+ "citriximaclient",
1936
+ "rtc-pm-port",
1937
+ "ftp",
1938
+ "aol",
1939
+ "xdmcp",
1940
+ "oraclenames",
1941
+ "login",
1942
+ "iscsi",
1943
+ "ttc",
1944
+ "imaps",
1945
+ "socks",
1946
+ "ssh",
1947
+ "dnsix",
1948
+ "daytime",
1949
+ "sip",
1950
+ "discard",
1951
+ "ntp",
1952
+ "ldaps",
1953
+ "https",
1954
+ "vdolive",
1955
+ "ica",
1956
+ "net8-cman",
1957
+ "cuseeme",
1958
+ "netstat",
1959
+ "sms",
1960
+ "streamworks",
1961
+ "rtelnet",
1962
+ "who",
1963
+ "kazaa",
1964
+ "ssp",
1965
+ "dbase",
1966
+ "timed",
1967
+ "cddbp",
1968
+ "telnets",
1969
+ "ymsgr",
1970
+ "ident",
1971
+ "bgp",
1972
+ "ddns-v3",
1973
+ "vqp",
1974
+ "irc",
1975
+ "ipass",
1976
+ "x11",
1977
+ "dns",
1978
+ "lotusmtap",
1979
+ "mysql",
1980
+ "nfs",
1981
+ "msnmsgr",
1982
+ "netshow",
1983
+ "sqlserv",
1984
+ "hp-managed-node",
1985
+ "ncp",
1986
+ "shell",
1987
+ "realmedia",
1988
+ "msrpc",
1989
+ "clp",
1990
+ ]
1991
+
1992
+ SecurityBaseAction = Literal[
1993
+ "drop",
1994
+ "inspect",
1995
+ "pass",
1996
+ ]
1997
+
1998
+ SecuritySequenceIpType = Literal[
1999
+ "ipv4",
2000
+ "ipv6",
2001
+ ]
2002
+
2003
+
2004
+ def str_as_service_area_list(val: Union[str, Sequence[ServiceAreaValue]]) -> Sequence[ServiceAreaValue]:
2005
+ if isinstance(val, str):
2006
+ return [cast(ServiceAreaValue, item) for item in val.split() if item in get_args(ServiceAreaValue)]
2007
+ return val
2008
+
2009
+
2010
+ SpaceSeparatedServiceAreaList = Annotated[
2011
+ List[ServiceAreaValue],
2012
+ PlainSerializer(lambda x: " ".join(map(str, x)), return_type=str, when_used="json-unless-none"),
2013
+ BeforeValidator(str_as_service_area_list),
2014
+ ]