catalystwan 0.41.2__py3-none-any.whl → 0.41.2.dev0__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 +55 -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.dev0.dist-info}/METADATA +20 -1
  488. catalystwan-0.41.2.dev0.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.dev0.dist-info}/LICENSE +0 -0
  504. {catalystwan-0.41.2.dist-info → catalystwan-0.41.2.dev0.dist-info}/WHEEL +0 -0
@@ -1,88 +1,102 @@
1
1
  # Copyright 2023 Cisco Systems, Inc. and its affiliates
2
2
 
3
- from enum import Enum
4
3
  from pathlib import Path
5
- from typing import ClassVar, List, Optional
4
+ from typing import ClassVar, List, Literal, Optional
6
5
 
7
6
  from pydantic import ConfigDict, Field
8
7
 
9
8
  from catalystwan.api.templates.bool_str import BoolStr
10
9
  from catalystwan.api.templates.feature_template import FeatureTemplate, FeatureTemplateValidator
11
10
 
11
+ Authorization = Literal["read-only"]
12
+ SecurityLevel = Literal["no-auth-no-priv", "auth-no-priv", "auth-priv"]
13
+ Auth = Literal["md5", "sha"]
14
+ Priv = Literal["aes-cfb-128", "aes-256-cfb-128"]
15
+
12
16
 
13
17
  class Oid(FeatureTemplateValidator):
14
- id: str
15
- exclude: Optional[BoolStr] = None
18
+ id: str = Field(description="The OID (Object Identifier) to include or exclude in the view")
19
+ exclude: Optional[BoolStr] = Field(
20
+ default=None, description="Indicates whether the OID should be excluded from the view"
21
+ )
16
22
 
17
23
 
18
24
  class View(FeatureTemplateValidator):
19
- name: str
20
- oid: Optional[List[Oid]] = None
21
-
22
-
23
- class Authorization(str, Enum):
24
- READ_ONLY = "read-only"
25
+ name: str = Field(description="The name of the SNMP view")
26
+ oid: Optional[List[Oid]] = Field(default=None, description="List of OIDs to include or exclude in the view")
25
27
 
26
28
 
27
29
  class Community(FeatureTemplateValidator):
28
- name: str
29
- view: str
30
- authorization: Authorization
31
-
32
-
33
- class SecurityLevel(str, Enum):
34
- NOAUTHNOPRIV = "no-auth-no-priv"
35
- AUTHNOPRIV = "auth-no-priv"
36
- AUTHPRIV = "auth-priv"
30
+ name: str = Field(description="The name of the SNMP community")
31
+ view: str = Field(description="The SNMP view associated with the community")
32
+ authorization: Authorization = Field(description="The authorization level of the community")
37
33
 
38
34
 
39
35
  class Group(FeatureTemplateValidator):
40
- name: str
41
- security_level: SecurityLevel = Field(json_schema_extra={"vmanage_key": "security-level"})
42
- view: str
36
+ name: str = Field(description="The name of the SNMP group")
37
+ security_level: SecurityLevel = Field(
38
+ description="The security level associated with the group", json_schema_extra={"vmanage_key": "security-level"}
39
+ )
40
+ view: str = Field(description="The SNMP view associated with the group")
43
41
  model_config = ConfigDict(populate_by_name=True)
44
42
 
45
43
 
46
- class Auth(str, Enum):
47
- MD5 = "md5"
48
- SHA = "sha"
49
-
50
-
51
- class Priv(str, Enum):
52
- AES_CFB_128 = "aes-cfb-128"
53
-
54
-
55
44
  class User(FeatureTemplateValidator):
56
- name: str
57
- auth: Optional[Auth] = None
58
- auth_password: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "auth-password"})
59
- priv: Optional[Priv] = None
60
- priv_password: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "priv-password"})
61
- group: str
45
+ name: str = Field(description="The name of the SNMP user")
46
+ auth: Optional[Auth] = Field(default=None, description="The authentication protocol used")
47
+ auth_password: Optional[str] = Field(
48
+ default=None, description="The password for authentication", json_schema_extra={"vmanage_key": "auth-password"}
49
+ )
50
+ priv: Optional[Priv] = Field(default=None, description="The privacy (encryption) protocol used")
51
+ priv_password: Optional[str] = Field(
52
+ default=None, description="The password for privacy", json_schema_extra={"vmanage_key": "priv-password"}
53
+ )
54
+ group: str = Field(description="The group to which the user belongs")
62
55
  model_config = ConfigDict(populate_by_name=True)
63
56
 
64
57
 
65
58
  class Target(FeatureTemplateValidator):
66
- vpn_id: int = Field(json_schema_extra={"vmanage_key": "vpn-id"})
67
- ip: str
68
- port: int
69
- community_name: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "community-name"})
70
- user: Optional[str] = None
71
- source_interface: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "source-interface"})
59
+ vpn_id: int = Field(
60
+ description="The VPN ID where the SNMP target resides", json_schema_extra={"vmanage_key": "vpn-id"}
61
+ )
62
+ ip: str = Field(description="The IP address of the SNMP target")
63
+ port: int = Field(description="The port number for the SNMP target")
64
+ community_name: Optional[str] = Field(
65
+ default=None,
66
+ description="The community name for the SNMP target",
67
+ json_schema_extra={"vmanage_key": "community-name"},
68
+ )
69
+ user: Optional[str] = Field(default=None, description="The user name for the SNMP target")
70
+ source_interface: Optional[str] = Field(
71
+ default=None,
72
+ description="The source interface for sending SNMP traps",
73
+ json_schema_extra={"vmanage_key": "source-interface"},
74
+ )
72
75
  model_config = ConfigDict(populate_by_name=True)
73
76
 
74
77
 
75
78
  class CiscoSNMPModel(FeatureTemplate):
76
79
  model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True)
77
-
78
- shutdown: Optional[BoolStr] = True
79
- contact: Optional[str] = None
80
- location: Optional[str] = None
81
- view: Optional[List[View]] = None
82
- community: Optional[List[Community]] = None
83
- group: Optional[List[Group]] = None
84
- user: Optional[List[User]] = None
85
- target: Optional[List[Target]] = Field(default=None, json_schema_extra={"data_path": ["trap"]})
80
+ _docs_description: str = "Cisco SNMP Feature Template configuration"
81
+
82
+ shutdown: Optional[BoolStr] = Field(
83
+ default=True, description="Indicates whether SNMP is administratively shut down"
84
+ )
85
+ contact: Optional[str] = Field(default=None, description="The contact information for the SNMP administrator")
86
+ location: Optional[str] = Field(default=None, description="The physical location information for the SNMP agent")
87
+ view: Optional[List[View]] = Field(default=None, description="List of SNMP views for controlling access to OIDs")
88
+ community: Optional[List[Community]] = Field(
89
+ default=None, description="List of SNMP communities for different access rights"
90
+ )
91
+ group: Optional[List[Group]] = Field(
92
+ default=None, description="List of SNMP groups defining security models and access rights"
93
+ )
94
+ user: Optional[List[User]] = Field(
95
+ default=None, description="List of SNMP users with authentication and privacy configurations"
96
+ )
97
+ target: Optional[List[Target]] = Field(
98
+ default=None, json_schema_extra={"data_path": ["trap"]}, description="List of SNMP targets for sending traps"
99
+ )
86
100
 
87
101
  payload_path: ClassVar[Path] = Path(__file__).parent / "DEPRECATED"
88
102
  type: ClassVar[str] = "cisco_snmp"
@@ -1,209 +1,318 @@
1
1
  # Copyright 2023 Cisco Systems, Inc. and its affiliates
2
2
 
3
- from enum import Enum
4
3
  from pathlib import Path
5
- from typing import ClassVar, List, Optional
4
+ from typing import ClassVar, List, Literal, Optional, Union
6
5
 
7
6
  from pydantic import ConfigDict, Field
8
7
 
9
8
  from catalystwan.api.templates.bool_str import BoolStr
10
9
  from catalystwan.api.templates.device_variable import DeviceVariable
11
10
  from catalystwan.api.templates.feature_template import FeatureTemplate, FeatureTemplateValidator
12
- from catalystwan.utils.timezone import Timezone
11
+ from catalystwan.models.common import Protocol, Timezone
13
12
 
14
-
15
- class MobileNumber(FeatureTemplateValidator):
16
- number: str
17
-
18
-
19
- class SiteType(str, Enum):
20
- TYPE_1 = "type-1"
21
- TYPE_2 = "type-2"
22
- TYPE_3 = "type-3"
23
- CLOUD = "cloud"
24
- BRANCH = "branch"
25
- BR = "br"
26
- SPOKE = "spoke"
27
-
28
-
29
- class ConsoleBaudRate(str, Enum):
30
- _1200 = "1200"
31
- _2400 = "2400"
32
- _4800 = "4800"
33
- _9600 = "9600"
34
- _19200 = "19200"
35
- _38400 = "38400"
36
- _57600 = "57600"
37
- _115200 = "115200"
13
+ SiteType = Literal["type-1", "type-2", "type-3", "cloud", "branch", "br", "spoke"]
14
+ ConsoleBaudRate = Literal["1200", "2400", "4800", "9600", "19200", "38400", "57600", "115200"]
15
+ Boolean = Literal["or", "and"]
16
+ Type = Literal["interface", "static-route"]
17
+ Role = Literal["edge-router", "border-router"]
18
+ EnableMrfMigration = Literal["enabled", "enabled-from-bgp-core"]
19
+ Epfr = Literal["disabled", "aggressive", "moderate", "conservative"]
38
20
 
39
21
 
40
- class Protocol(str, Enum):
41
- TCP = "tcp"
42
- UDP = "udp"
43
-
44
-
45
- class Boolean(str, Enum):
46
- OR = "or"
47
- AND = "and"
48
-
49
-
50
- class Type(str, Enum):
51
- INTERFACE = "interface"
52
- STATIC_ROUTE = "static-route"
22
+ class MobileNumber(FeatureTemplateValidator):
23
+ number: str = Field(description="The mobile phone number used for notification or security purposes.")
53
24
 
54
25
 
55
26
  class Tracker(FeatureTemplateValidator):
56
- name: str
57
- endpoint_ip: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "endpoint-ip"})
27
+ name: str = Field(description="Name for the Tracker")
28
+ endpoint_ip: Optional[str] = Field(
29
+ default=None,
30
+ description="The IP address of the endpoint to track.",
31
+ json_schema_extra={"vmanage_key": "endpoint-ip"},
32
+ )
58
33
  endpoint_ip_transport_port: Optional[str] = Field(
59
- default=None, json_schema_extra={"vmanage_key": "endpoint-ip", "data_path": ["endpoint-ip-transport-port"]}
60
- )
61
- protocol: Optional[Protocol] = Field(default=None, json_schema_extra={"data_path": ["endpoint-ip-transport-port"]})
62
- port: Optional[int] = Field(default=None, json_schema_extra={"data_path": ["endpoint-ip-transport-port"]})
63
- endpoint_dns_name: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "endpoint-dns-name"})
64
- endpoint_api_url: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "endpoint-api-url"})
65
- elements: Optional[List[str]] = None
66
- boolean: Optional[Boolean] = Boolean.OR
67
- threshold: Optional[int] = 300
68
- interval: Optional[int] = 60
69
- multiplier: Optional[int] = 3
70
- type: Optional[Type] = Type.INTERFACE
34
+ default=None,
35
+ description="The transport port of the endpoint IP address.",
36
+ json_schema_extra={"vmanage_key": "endpoint-ip", "data_path": ["endpoint-ip-transport-port"]},
37
+ )
38
+ protocol: Optional[Protocol] = Field(
39
+ default=None,
40
+ description="The protocol used for the tracker (TCP or UDP).",
41
+ json_schema_extra={"data_path": ["endpoint-ip-transport-port"]},
42
+ )
43
+ port: Optional[int] = Field(
44
+ default=None,
45
+ description="The port number used for the tracker.",
46
+ json_schema_extra={"data_path": ["endpoint-ip-transport-port"]},
47
+ )
48
+ endpoint_dns_name: Optional[str] = Field(
49
+ default=None,
50
+ description="The DNS name of the endpoint to track.",
51
+ json_schema_extra={"vmanage_key": "endpoint-dns-name"},
52
+ )
53
+ endpoint_api_url: Optional[str] = Field(
54
+ default=None,
55
+ description="The API URL of the endpoint to track.",
56
+ json_schema_extra={"vmanage_key": "endpoint-api-url"},
57
+ )
58
+ elements: Optional[List[str]] = Field(default=None, description="A list of elements to track.")
59
+ boolean: Optional[Boolean] = Field(
60
+ default="or", description="The boolean condition to use when evaluating multiple elements."
61
+ )
62
+ threshold: Optional[int] = Field(default=300, description="The threshold for triggering the tracker.")
63
+ interval: Optional[int] = Field(default=60, description="The interval at which the tracker checks the elements.")
64
+ multiplier: Optional[int] = Field(default=3, description="The multiplier used for determining the loss threshold.")
65
+ type: Optional[Type] = Field(default="interface", description="The type of tracker (interface or static route).")
66
+
71
67
  model_config = ConfigDict(populate_by_name=True)
72
68
 
73
69
 
74
70
  class Object(FeatureTemplateValidator):
75
- number: int
71
+ number: int = Field(description="The unique identifier for the object.")
76
72
 
77
73
 
78
74
  class ObjectTrack(FeatureTemplateValidator):
79
- object_number: int = Field(json_schema_extra={"vmanage_key": "object-number"})
80
- interface: str
81
- sig: str
82
- ip: str
83
- mask: Optional[str] = "0.0.0.0"
84
- vpn: int
85
- object: List[Object]
86
- boolean: Boolean
75
+ object_number: int = Field(
76
+ description="The tracking object number.", json_schema_extra={"vmanage_key": "object-number"}
77
+ )
78
+ interface: str = Field(description="The name of the interface to track.")
79
+ sig: str = Field(description="The signature associated with the tracking object.")
80
+ ip: str = Field(description="The IP address used for tracking.")
81
+ mask: Optional[str] = Field(
82
+ default="0.0.0.0", description="The subnet mask associated with the IP address for tracking."
83
+ )
84
+ vpn: int = Field(description="The VPN instance associated with the tracking object.")
85
+ object: List[Object] = Field(description="A list of objects related to the tracking.")
86
+ boolean: Boolean = Field(description="The boolean condition to use when evaluating multiple objects.")
87
87
  model_config = ConfigDict(populate_by_name=True)
88
88
 
89
89
 
90
- class Role(str, Enum):
91
- EDGE_ROUTER = "edge-router"
92
- BORDER_ROUTER = "border-router"
93
-
94
-
95
90
  class AffinityPerVrf(FeatureTemplateValidator):
96
91
  affinity_group_number: Optional[int] = Field(
97
- default=None, json_schema_extra={"vmanage_key": "affinity-group-number"}
92
+ default=None,
93
+ description="The affinity group number for VRF binding.",
94
+ json_schema_extra={"vmanage_key": "affinity-group-number"},
95
+ )
96
+ vrf_range: Optional[str] = Field(
97
+ default=None,
98
+ description="The range of VRFs associated with the affinity group.",
99
+ json_schema_extra={"vmanage_key": "vrf-range"},
98
100
  )
99
- vrf_range: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "vrf-range"})
100
101
  model_config = ConfigDict(populate_by_name=True)
101
102
 
102
103
 
103
- class EnableMrfMigration(str, Enum):
104
- ENABLE = "enabled"
105
- ENABLE_FROM_BGP_CORE = "enabled-from-bgp-core"
106
-
107
-
108
104
  class Vrf(FeatureTemplateValidator):
109
- vrf_id: int = Field(json_schema_extra={"vmanage_key": "vrf-id"})
105
+ vrf_id: int = Field(
106
+ description="The VRF (VPN Routing and Forwarding) instance ID.", json_schema_extra={"vmanage_key": "vrf-id"}
107
+ )
110
108
  gateway_preference: Optional[List[int]] = Field(
111
- default=None, json_schema_extra={"vmanage_key": "gateway-preference"}
109
+ default=None,
110
+ description="List of affinity group preferences for VRF",
111
+ json_schema_extra={"vmanage_key": "gateway-preference"},
112
112
  )
113
113
  model_config = ConfigDict(populate_by_name=True)
114
114
 
115
115
 
116
- class Epfr(str, Enum):
117
- DISABLED = "disabled"
118
- AGGRESSIVE = "aggressive"
119
- MODERATE = "moderate"
120
- CONSERVATIVE = "conservative"
121
-
122
-
123
116
  class CiscoSystemModel(FeatureTemplate):
124
117
  model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True)
118
+ _docs_description: str = "Cisco System configuration settings for SD-WAN devices."
125
119
 
126
- timezone: Optional[Timezone] = Field(default=None, json_schema_extra={"data_path": ["clock"]})
120
+ timezone: Optional[Timezone] = Field(
121
+ default=None, description="The timezone setting for the system.", json_schema_extra={"data_path": ["clock"]}
122
+ )
123
+ description: Optional[str] = Field(default=None, description="Set a text description of the device")
127
124
  hostname: DeviceVariable = Field(
128
125
  default=DeviceVariable(name="system_host_name"),
129
126
  validate_default=True,
127
+ description="The hostname for the device.",
130
128
  json_schema_extra={"vmanage_key": "host-name"},
131
129
  )
132
- location: Optional[str] = None
133
- latitude: Optional[float] = Field(default=None, json_schema_extra={"data_path": ["gps-location"]})
134
- longitude: Optional[float] = Field(default=None, json_schema_extra={"data_path": ["gps-location"]})
135
- range: Optional[int] = Field(100, json_schema_extra={"data_path": ["gps-location", "geo-fencing"]})
130
+ location: Optional[str] = Field(default=None, description="The physical location of the device.")
131
+ latitude: Optional[float] = Field(
132
+ default=None,
133
+ description="The latitude coordinate for the device's location.",
134
+ json_schema_extra={"data_path": ["gps-location"]},
135
+ )
136
+ longitude: Optional[float] = Field(
137
+ default=None,
138
+ description="The longitude coordinate for the device's location.",
139
+ json_schema_extra={"data_path": ["gps-location"]},
140
+ )
141
+ range: Optional[int] = Field(
142
+ default=100,
143
+ description="The range for geo-fencing feature.",
144
+ json_schema_extra={"data_path": ["gps-location", "geo-fencing"]},
145
+ )
136
146
  enable_fencing: Optional[BoolStr] = Field(
137
- default=None, json_schema_extra={"data_path": ["gps-location", "geo-fencing"], "vmanage_key": "enable"}
147
+ default=None,
148
+ description="Enable or disable geo-fencing.",
149
+ json_schema_extra={"data_path": ["gps-location", "geo-fencing"], "vmanage_key": "enable"},
138
150
  )
139
151
  mobile_number: Optional[List[MobileNumber]] = Field(
140
152
  default=None,
153
+ description="List of mobile numbers for SMS notifications.",
141
154
  json_schema_extra={"vmanage_key": "mobile-number", "data_path": ["gps-location", "geo-fencing", "sms"]},
142
155
  )
143
156
  enable_sms: Optional[BoolStr] = Field(
144
- default=False, json_schema_extra={"data_path": ["gps-location", "geo-fencing", "sms"], "vmanage_key": "enable"}
157
+ default=False,
158
+ description="Enable or disable SMS notifications.",
159
+ json_schema_extra={"data_path": ["gps-location", "geo-fencing", "sms"], "vmanage_key": "enable"},
160
+ )
161
+ device_groups: Optional[List[str]] = Field(
162
+ default=None,
163
+ description="List of device groups the device belongs to.",
164
+ json_schema_extra={"vmanage_key": "device-groups"},
145
165
  )
146
- device_groups: Optional[List[str]] = Field(default=None, json_schema_extra={"vmanage_key": "device-groups"})
147
166
  controller_group_list: Optional[List[int]] = Field(
148
- default=None, json_schema_extra={"vmanage_key": "controller-group-list"}
167
+ default=None,
168
+ description="List of controller groups the device is associated with.",
169
+ json_schema_extra={"vmanage_key": "controller-group-list"},
149
170
  )
150
171
  system_ip: DeviceVariable = Field(
151
- default=DeviceVariable(name="system_system_ip"), json_schema_extra={"vmanage_key": "system-ip"}
152
- )
153
- overlay_id: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "overlay-id"})
154
- site_id: DeviceVariable = Field(
155
- default=DeviceVariable(name="system_site_id"), json_schema_extra={"vmanage_key": "site-id"}
156
- )
157
- site_type: Optional[List[SiteType]] = Field(default=None, json_schema_extra={"vmanage_key": "site-type"})
158
- port_offset: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "port-offset"})
159
- port_hop: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "port-hop"})
160
- control_session_pps: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "control-session-pps"})
161
- track_transport: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "track-transport"})
162
- track_interface_tag: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "track-interface-tag"})
172
+ default=DeviceVariable(name="system_system_ip"),
173
+ description="The system IP address of the device.",
174
+ json_schema_extra={"vmanage_key": "system-ip"},
175
+ )
176
+ overlay_id: Optional[int] = Field(
177
+ default=None, description="The overlay ID of the device.", json_schema_extra={"vmanage_key": "overlay-id"}
178
+ )
179
+ site_id: Union[int, DeviceVariable] = Field(
180
+ default=DeviceVariable(name="system_site_id"),
181
+ description="The site ID of the device.",
182
+ json_schema_extra={"vmanage_key": "site-id"},
183
+ )
184
+ site_type: Optional[List[SiteType]] = Field(
185
+ default=None,
186
+ description="The site type classification for the device.",
187
+ json_schema_extra={"vmanage_key": "site-type"},
188
+ )
189
+ port_offset: Optional[int] = Field(
190
+ default=None, description="The port offset for the device.", json_schema_extra={"vmanage_key": "port-offset"}
191
+ )
192
+ port_hop: Optional[BoolStr] = Field(
193
+ default=None, description="Enable or disable port hopping.", json_schema_extra={"vmanage_key": "port-hop"}
194
+ )
195
+ control_session_pps: Optional[int] = Field(
196
+ default=None,
197
+ description="Control session packets per second setting.",
198
+ json_schema_extra={"vmanage_key": "control-session-pps"},
199
+ )
200
+ track_transport: Optional[BoolStr] = Field(
201
+ default=None,
202
+ description="Enable or disable transport tracking.",
203
+ json_schema_extra={"vmanage_key": "track-transport"},
204
+ )
205
+ track_interface_tag: Optional[int] = Field(
206
+ default=None,
207
+ description="The tag of the interface to be tracked.",
208
+ json_schema_extra={"vmanage_key": "track-interface-tag"},
209
+ )
210
+
163
211
  console_baud_rate: Optional[ConsoleBaudRate] = Field(
164
- default=None, json_schema_extra={"vmanage_key": "console-baud-rate"}
212
+ default=None,
213
+ description="The console baud rate setting for the device.",
214
+ json_schema_extra={"vmanage_key": "console-baud-rate"},
215
+ )
216
+ max_omp_sessions: Optional[int] = Field(
217
+ default=None,
218
+ description="The maximum number of OMP (Overlay Management Protocol) sessions.",
219
+ json_schema_extra={"vmanage_key": "max-omp-sessions"},
220
+ )
221
+ multi_tenant: Optional[BoolStr] = Field(
222
+ default=None,
223
+ description="Enable or disable multi-tenant support.",
224
+ json_schema_extra={"vmanage_key": "multi-tenant"},
165
225
  )
166
- max_omp_sessions: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "max-omp-sessions"})
167
- multi_tenant: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "multi-tenant"})
168
226
  track_default_gateway: Optional[BoolStr] = Field(
169
- default=None, json_schema_extra={"vmanage_key": "track-default-gateway"}
227
+ default=None,
228
+ description="Enable or disable default gateway tracking.",
229
+ json_schema_extra={"vmanage_key": "track-default-gateway"},
170
230
  )
171
231
  admin_tech_on_failure: Optional[BoolStr] = Field(
172
- default=None, json_schema_extra={"vmanage_key": "admin-tech-on-failure"}
232
+ default=None,
233
+ description="Enable or disable automatic generation of admin technical details on failure.",
234
+ json_schema_extra={"vmanage_key": "admin-tech-on-failure"},
173
235
  )
174
236
  enable_tunnel: Optional[BoolStr] = Field(
175
- default=None, json_schema_extra={"vmanage_key": "enable", "data_path": ["on-demand"]}
237
+ default=None,
238
+ description="Enable or disable tunnel functionality.",
239
+ json_schema_extra={"vmanage_key": "enable", "data_path": ["on-demand"]},
240
+ )
241
+ idle_timeout: Optional[int] = Field(
242
+ default=None,
243
+ description="The idle timeout setting for tunnels.",
244
+ json_schema_extra={"vmanage_key": "idle-timeout"},
176
245
  )
177
- idle_timeout: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "idle-timeout"})
178
246
  on_demand_idle_timeout_min: Optional[int] = Field(
179
- default=None, json_schema_extra={"vmanage_key": "idle-timeout", "data_path": ["on-demand"]}
247
+ default=None,
248
+ description="The minimum idle timeout for on-demand tunnels.",
249
+ json_schema_extra={"vmanage_key": "idle-timeout", "data_path": ["on-demand"]},
250
+ )
251
+ tracker: Optional[List[Tracker]] = Field(default=None, description="List of tracker configurations.")
252
+ object_track: Optional[List[ObjectTrack]] = Field(
253
+ default=None,
254
+ description="List of object tracking configurations.",
255
+ json_schema_extra={"vmanage_key": "object-track"},
256
+ )
257
+ region_id: Optional[int] = Field(
258
+ default=None, description="The region ID of the device.", json_schema_extra={"vmanage_key": "region-id"}
259
+ )
260
+ secondary_region: Optional[int] = Field(
261
+ default=None,
262
+ description="The secondary region ID of the device.",
263
+ json_schema_extra={"vmanage_key": "secondary-region"},
264
+ )
265
+ role: Optional[Role] = Field(
266
+ default=None,
267
+ description="The role of the device in the network.",
180
268
  )
181
- tracker: Optional[List[Tracker]] = None
182
- object_track: Optional[List[ObjectTrack]] = Field(default=None, json_schema_extra={"vmanage_key": "object-track"})
183
- region_id: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "region-id"})
184
- secondary_region: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "secondary-region"})
185
- role: Optional[Role] = None
186
269
  affinity_group_number: Optional[int] = Field(
187
- default=None, json_schema_extra={"vmanage_key": "affinity-group-number", "data_path": ["affinity-group"]}
270
+ default=None,
271
+ description="The affinity group number for VRF binding.",
272
+ json_schema_extra={"vmanage_key": "affinity-group-number", "data_path": ["affinity-group"]},
273
+ )
274
+ preference: Optional[List[int]] = Field(
275
+ default=None,
276
+ description="List of affinity group preferences.",
277
+ json_schema_extra={"data_path": ["affinity-group"]},
278
+ )
279
+ preference_auto: Optional[BoolStr] = Field(
280
+ default=None,
281
+ description="Enable or disable automatic preference setting for affinity groups.",
282
+ json_schema_extra={"vmanage_key": "preference-auto", "data_path": ["affinity-group"]},
188
283
  )
189
- preference: Optional[List[int]] = Field(default=None, json_schema_extra={"data_path": ["affinity-group"]})
190
- preference_auto: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "preference-auto"})
191
284
  affinity_per_vrf: Optional[List[AffinityPerVrf]] = Field(
192
- default=None, json_schema_extra={"vmanage_key": "affinity-per-vrf"}
285
+ default=None,
286
+ description="List of affinity configurations per VRF.",
287
+ json_schema_extra={"vmanage_key": "affinity-per-vrf", "data_path": ["affinity-group"]},
288
+ )
289
+ transport_gateway: Optional[BoolStr] = Field(
290
+ default=None,
291
+ description="Enable or disable the transport gateway feature.",
292
+ json_schema_extra={"vmanage_key": "transport-gateway"},
193
293
  )
194
- transport_gateway: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "transport-gateway"})
195
294
  enable_mrf_migration: Optional[EnableMrfMigration] = Field(
196
- default=None, json_schema_extra={"vmanage_key": "enable-mrf-migration"}
295
+ default=None,
296
+ description="Enable Multicast Routing Framework (MRF) migration settings.",
297
+ json_schema_extra={"vmanage_key": "enable-mrf-migration"},
197
298
  )
198
299
  migration_bgp_community: Optional[int] = Field(
199
- default=None, json_schema_extra={"vmanage_key": "migration-bgp-community"}
300
+ default=None,
301
+ description="BGP community value for MRF migration.",
302
+ json_schema_extra={"vmanage_key": "migration-bgp-community"},
200
303
  )
201
304
  enable_management_region: Optional[BoolStr] = Field(
202
- default=None, json_schema_extra={"vmanage_key": "enable-management-region"}
305
+ default=None,
306
+ description="Enable or disable management region configuration.",
307
+ json_schema_extra={"vmanage_key": "enable-management-region"},
308
+ )
309
+ vrf: Optional[List[Vrf]] = Field(default=None, description="List of VRF configurations.")
310
+ management_gateway: Optional[BoolStr] = Field(
311
+ default=None,
312
+ description="Enable or disable the management gateway feature.",
313
+ json_schema_extra={"vmanage_key": "management-gateway"},
203
314
  )
204
- vrf: Optional[List[Vrf]] = None
205
- management_gateway: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "management-gateway"})
206
- epfr: Optional[Epfr] = None
315
+ epfr: Optional[Epfr] = Field(default=None, description="Edge Policy-based Framework Routing (EPFR) setting.")
207
316
 
208
317
  payload_path: ClassVar[Path] = Path(__file__).parent / "DEPRECATED"
209
318
  type: ClassVar[str] = "cisco_system"