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,152 +1,214 @@
1
1
  # Copyright 2023 Cisco Systems, Inc. and its affiliates
2
2
 
3
3
  import ipaddress
4
- from enum import Enum
5
4
  from pathlib import Path
6
- from typing import ClassVar, List, Optional
5
+ from typing import ClassVar, List, Literal, Optional
7
6
 
8
7
  from pydantic import ConfigDict, Field
9
8
 
10
9
  from catalystwan.api.templates.bool_str import BoolStr
11
10
  from catalystwan.api.templates.feature_template import FeatureTemplate, FeatureTemplateValidator
12
11
 
13
-
14
- class MetricType(str, Enum):
15
- TYPE1 = "type1"
16
- TYPE2 = "type2"
17
-
18
-
19
- class Protocol(str, Enum):
20
- BGP = "bgp"
21
- CONNECTED = "connected"
22
- EIGRP = "eigrp"
23
- ISIS = "isis"
24
- LISP = "lisp"
25
- NAT_ROUTE = "nat-route"
26
- OMP = "omp"
27
- STATIC = "static"
12
+ MetricType = Literal["type1", "type2"]
13
+ Protocol = Literal["bgp", "connected", "eigrp", "isis", "lisp", "nat-route", "omp", "static"]
14
+ AdType = Literal["on-startup"]
15
+ Translate = Literal["always"]
16
+ Network = Literal["broadcast", "point-to-point", "non-broadcast", "point-to-multipoint"]
17
+ Type = Literal["md5", "sha1"]
28
18
 
29
19
 
30
20
  class Redistribute(FeatureTemplateValidator):
31
- protocol: Protocol
32
- route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"})
33
- dia: Optional[BoolStr] = True
21
+ protocol: Protocol = Field(description="The routing protocol for redistribution")
22
+ route_policy: Optional[str] = Field(
23
+ default=None,
24
+ json_schema_extra={"vmanage_key": "route-policy"},
25
+ description="The route policy to filter routes for redistribution",
26
+ )
27
+ dia: Optional[BoolStr] = Field(
28
+ default=True, description="Whether to include Direct Internet Access (DIA) routes in redistribution"
29
+ )
34
30
  model_config = ConfigDict(populate_by_name=True)
35
31
 
36
32
 
37
- class AdType(str, Enum):
38
- ON_STARTUP = "on-startup"
39
-
40
-
41
33
  class RouterLsa(FeatureTemplateValidator):
42
- ad_type: AdType = Field(json_schema_extra={"vmanage_key": "ad-type"})
43
- time: int
34
+ ad_type: AdType = Field(
35
+ json_schema_extra={"vmanage_key": "ad-type"}, description="Advertisement type for the router LSA"
36
+ )
37
+ time: int = Field(description="Time configuration for the router LSA advertisement")
44
38
  model_config = ConfigDict(populate_by_name=True)
45
39
 
46
40
 
47
- class Translate(str, Enum):
48
- ALWAYS = "always"
49
-
50
-
51
- class Network(str, Enum):
52
- BROADCAST = "broadcast"
53
- POINT_TO_POINT = "point-to-point"
54
- NON_BROADCAST = "non-broadcast"
55
- POINT_TO_MULTIPOINT = "point-to-multipoint"
56
-
57
-
58
- class Type(str, Enum):
59
- MD5 = "md5"
60
- SHA1 = "sha1"
61
-
62
-
63
41
  class Interface(FeatureTemplateValidator):
64
- name: str
65
- hello_interval: Optional[int] = Field(10, json_schema_extra={"vmanage_key": "hello-interval"})
66
- dead_interval: Optional[int] = Field(40, json_schema_extra={"vmanage_key": "dead-interval"})
67
- retransmit_interval: Optional[int] = Field(5, json_schema_extra={"vmanage_key": "retransmit-interval"})
68
- cost: Optional[int] = None
69
- network: Optional[Network] = Network.BROADCAST
70
- passive_interface: Optional[bool] = Field(False, json_schema_extra={"vmanage_key": "passive-interface"})
71
- type: Type = Field(json_schema_extra={"data_path": ["authentication"]})
42
+ name: str = Field(description="The name of the interface")
43
+ hello_interval: Optional[int] = Field(
44
+ default=10,
45
+ json_schema_extra={"vmanage_key": "hello-interval"},
46
+ description="The interval between HELLO packets in seconds",
47
+ )
48
+ dead_interval: Optional[int] = Field(
49
+ default=40,
50
+ json_schema_extra={"vmanage_key": "dead-interval"},
51
+ description="The interval after which a neighbor is declared down if no HELLO packets are received",
52
+ )
53
+ retransmit_interval: Optional[int] = Field(
54
+ default=5,
55
+ json_schema_extra={"vmanage_key": "retransmit-interval"},
56
+ description="The interval between LSA retransmissions",
57
+ )
58
+ cost: Optional[int] = Field(description="The cost metric for the interface")
59
+ network: Optional[Network] = Field(default="broadcast", description="The network type for the OSPF interface")
60
+ passive_interface: Optional[bool] = Field(
61
+ default=False,
62
+ json_schema_extra={"vmanage_key": "passive-interface"},
63
+ description="Whether the interface is passive (not sending OSPF packets)",
64
+ )
65
+ type: Type = Field(
66
+ json_schema_extra={"data_path": ["authentication"]},
67
+ description="The type of authentication for OSPF (MD5 or SHA1)",
68
+ )
72
69
  authentication_key: str = Field(
73
- json_schema_extra={"vmanage_key": "authentication-key", "data_path": ["authentication"]}
70
+ json_schema_extra={"vmanage_key": "authentication-key", "data_path": ["authentication"]},
71
+ description="The authentication key for OSPF",
72
+ )
73
+ spi: Optional[int] = Field(
74
+ default=None,
75
+ json_schema_extra={"data_path": ["authentication", "ipsec"]},
76
+ description="The Security Parameter Index for IPsec authentication",
74
77
  )
75
- spi: Optional[int] = Field(default=None, json_schema_extra={"data_path": ["authentication", "ipsec"]})
76
78
  model_config = ConfigDict(populate_by_name=True)
77
79
 
78
80
 
79
81
  class Range(FeatureTemplateValidator):
80
- address: ipaddress.IPv4Interface
81
- cost: Optional[int] = None
82
- no_advertise: Optional[bool] = Field(False, json_schema_extra={"vmanage_key": "no-advertise"})
82
+ address: ipaddress.IPv4Interface = Field(..., description="The IPv4 interface address and subnet")
83
+ cost: Optional[int] = Field(default=None, description="The cost metric for the address range")
84
+ no_advertise: Optional[bool] = Field(
85
+ default=False,
86
+ json_schema_extra={"vmanage_key": "no-advertise"},
87
+ description="Whether to advertise this range or not",
88
+ )
83
89
  model_config = ConfigDict(populate_by_name=True)
84
90
 
85
91
 
86
92
  class Area(FeatureTemplateValidator):
87
- a_num: int = Field(json_schema_extra={"vmanage_key": "a-num"})
93
+ a_num: int = Field(json_schema_extra={"vmanage_key": "a-num"}, description="The area number for OSPF configuration")
88
94
  stub: Optional[BoolStr] = Field(
89
- default=None, json_schema_extra={"vmanage_key": "no-summary", "data_path": ["stub"]}
95
+ default=None,
96
+ json_schema_extra={"vmanage_key": "no-summary", "data_path": ["stub"]},
97
+ description="Configuration for the stub area type with the option to suppress summary LSA",
90
98
  )
91
99
  nssa: Optional[BoolStr] = Field(
92
- default=None, json_schema_extra={"vmanage_key": "no-summary", "data_path": ["nssa"]}
100
+ default=None,
101
+ json_schema_extra={"vmanage_key": "no-summary", "data_path": ["nssa"]},
102
+ description="Configuration for the NSSA area type with the option to suppress summary LSA",
103
+ )
104
+ translate: Optional[Translate] = Field(
105
+ default=None,
106
+ json_schema_extra={"data_path": ["nssa"]},
107
+ description="Control for translating type 7 LSAs to type 5 LSAs in NSSA",
93
108
  )
94
- translate: Optional[Translate] = Field(default=None, json_schema_extra={"data_path": ["nssa"]})
95
- normal: Optional[BoolStr] = None
96
- interface: Optional[List[Interface]] = None
97
- range: Optional[List[Range]] = None
109
+ normal: Optional[BoolStr] = Field(description="Whether the area is a normal OSPF area")
110
+ interface: Optional[List[Interface]] = Field(
111
+ default=None, description="List of OSPF interface configurations for the area"
112
+ )
113
+ range: Optional[List[Range]] = Field(default=None, description="List of address ranges for the area")
98
114
  model_config = ConfigDict(populate_by_name=True)
99
115
 
100
116
 
101
117
  class RedistributeV6(FeatureTemplateValidator):
102
- protocol: Protocol
103
- route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"})
118
+ protocol: Protocol = Field(description="The IPv6 routing protocol for redistribution")
119
+ route_policy: Optional[str] = Field(
120
+ default=None,
121
+ json_schema_extra={"vmanage_key": "route-policy"},
122
+ description="The route policy to filter IPv6 routes for redistribution",
123
+ )
104
124
  model_config = ConfigDict(populate_by_name=True)
105
125
 
106
126
 
107
127
  class InterfaceV6(FeatureTemplateValidator):
108
- name: str
109
- hello_interval: Optional[int] = Field(10, json_schema_extra={"vmanage_key": "hello-interval"})
110
- dead_interval: Optional[int] = Field(40, json_schema_extra={"vmanage_key": "dead-interval"})
111
- retransmit_interval: Optional[int] = Field(5, json_schema_extra={"vmanage_key": "retransmit-interval"})
112
- cost: Optional[int] = None
113
- network: Optional[Network] = Network.BROADCAST
114
- passive_interface: Optional[bool] = Field(False, json_schema_extra={"vmanage_key": "passive-interface"})
115
- type: Type = Field(json_schema_extra={"data_path": ["authentication"]})
128
+ name: str = Field(description="The name of the IPv6 interface")
129
+ hello_interval: Optional[int] = Field(
130
+ default=10,
131
+ json_schema_extra={"vmanage_key": "hello-interval"},
132
+ description="The interval between HELLO packets in seconds for IPv6",
133
+ )
134
+ dead_interval: Optional[int] = Field(
135
+ default=40,
136
+ json_schema_extra={"vmanage_key": "dead-interval"},
137
+ description="The interval after which a neighbor is declared down if no HELLO packets are received for IPv6",
138
+ )
139
+ retransmit_interval: Optional[int] = Field(
140
+ default=5,
141
+ json_schema_extra={"vmanage_key": "retransmit-interval"},
142
+ description="The interval between LSA retransmissions for IPv6",
143
+ )
144
+ cost: Optional[int] = Field(description="The cost metric for the IPv6 interface")
145
+ network: Optional[Network] = Field(default="broadcast", description="The network type for the OSPFv3 interface")
146
+ passive_interface: Optional[bool] = Field(
147
+ default=False,
148
+ json_schema_extra={"vmanage_key": "passive-interface"},
149
+ description="Whether the IPv6 interface is passive (not sending OSPF packets)",
150
+ )
151
+ type: Type = Field(
152
+ json_schema_extra={"data_path": ["authentication"]},
153
+ description="The type of authentication for OSPFv3 (MD5 or SHA1)",
154
+ )
116
155
  authentication_key: str = Field(
117
- json_schema_extra={"vmanage_key": "authentication-key", "data_path": ["authentication"]}
156
+ json_schema_extra={"vmanage_key": "authentication-key", "data_path": ["authentication"]},
157
+ description="The authentication key for OSPFv3",
158
+ )
159
+ spi: Optional[int] = Field(
160
+ default=None,
161
+ json_schema_extra={"data_path": ["authentication", "ipsec"]},
118
162
  )
119
- spi: Optional[int] = Field(default=None, json_schema_extra={"data_path": ["authentication", "ipsec"]})
120
163
  model_config = ConfigDict(populate_by_name=True)
121
164
 
122
165
 
123
166
  class RangeV6(FeatureTemplateValidator):
124
- address: ipaddress.IPv6Interface
125
- cost: Optional[int] = None
126
- no_advertise: Optional[bool] = Field(False, json_schema_extra={"vmanage_key": "no-advertise"})
167
+ address: ipaddress.IPv6Interface = Field(..., description="The IPv6 interface address and subnet")
168
+ cost: Optional[int] = Field(default=None, description="The cost metric for the IPv6 address range")
169
+ no_advertise: Optional[bool] = Field(
170
+ default=False,
171
+ json_schema_extra={"vmanage_key": "no-advertise"},
172
+ description="Whether to advertise this IPv6 range or not",
173
+ )
127
174
  model_config = ConfigDict(populate_by_name=True)
128
175
 
129
176
 
130
177
  class AreaV6(FeatureTemplateValidator):
131
- a_num: int = Field(json_schema_extra={"vmanage_key": "a-num"})
178
+ a_num: int = Field(
179
+ json_schema_extra={"vmanage_key": "a-num"}, description="The IPv6 area number for OSPFv3 configuration"
180
+ )
132
181
  stub: Optional[BoolStr] = Field(
133
- default=None, json_schema_extra={"vmanage_key": "no-summary", "data_path": ["stub"]}
182
+ default=None,
183
+ json_schema_extra={"vmanage_key": "no-summary", "data_path": ["stub"]},
184
+ description="Configuration for the IPv6 stub area type with the option to suppress summary LSA",
134
185
  )
135
186
  nssa: Optional[BoolStr] = Field(
136
- default=None, json_schema_extra={"vmanage_key": "no-summary", "data_path": ["nssa"]}
187
+ default=None,
188
+ json_schema_extra={"vmanage_key": "no-summary", "data_path": ["nssa"]},
189
+ description="Configuration for the IPv6 NSSA area type with the option to suppress summary LSA",
190
+ )
191
+ translate: Optional[Translate] = Field(
192
+ default=None,
193
+ json_schema_extra={"data_path": ["nssa"]},
194
+ description="Control for translating type 7 LSAs to type 5 LSAs in NSSA for IPv6",
137
195
  )
138
- translate: Optional[Translate] = Field(default=None, json_schema_extra={"data_path": ["nssa"]})
139
- normal: Optional[BoolStr] = None
140
- interface: Optional[List[InterfaceV6]] = None
141
- range: Optional[List[RangeV6]] = None
196
+ normal: Optional[BoolStr] = Field(description="Whether the IPv6 area is a normal OSPFv3 area")
197
+ interface: Optional[List[InterfaceV6]] = Field(
198
+ default=None, description="List of OSPFv3 interface configurations for the IPv6 area"
199
+ )
200
+ range: Optional[List[RangeV6]] = Field(default=None, description="List of IPv6 address ranges for the OSPFv3 area")
142
201
  model_config = ConfigDict(populate_by_name=True)
143
202
 
144
203
 
145
204
  class CiscoOspfv3Model(FeatureTemplate):
146
205
  model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True)
206
+ _docs_description: str = "Cisco OSPFv3 (Open Shortest Path First v3) configuration"
147
207
 
148
208
  router_id_v4: Optional[ipaddress.IPv4Address] = Field(
149
- default=None, json_schema_extra={"vmanage_key": "router-id", "data_path": ["ospfv3", "address-family", "ipv4"]}
209
+ default=None,
210
+ json_schema_extra={"vmanage_key": "router-id", "data_path": ["ospfv3", "address-family", "ipv4"]},
211
+ description="IPv4 address to be used as the router ID for the OSPFv3 process",
150
212
  )
151
213
  reference_bandwidth_v4: Optional[int] = Field(
152
214
  100,
@@ -154,10 +216,12 @@ class CiscoOspfv3Model(FeatureTemplate):
154
216
  "vmanage_key": "reference-bandwidth",
155
217
  "data_path": ["ospfv3", "address-family", "ipv4", "auto-cost"],
156
218
  },
219
+ description="Reference bandwidth in Mbps for calculating the OSPFv3 cost on IPv4 interfaces",
157
220
  )
158
221
  rfc1583_v4: Optional[BoolStr] = Field(
159
222
  default=True,
160
223
  json_schema_extra={"vmanage_key": "rfc1583", "data_path": ["ospfv3", "address-family", "ipv4", "compatible"]},
224
+ description="Compatibility flag for RFC 1583 to influence OSPFv3 route selection and preferences on IPv4",
161
225
  )
162
226
  originate_v4: Optional[BoolStr] = Field(
163
227
  default=None,
@@ -165,6 +229,7 @@ class CiscoOspfv3Model(FeatureTemplate):
165
229
  "vmanage_key": "originate",
166
230
  "data_path": ["ospfv3", "address-family", "ipv4", "default-information"],
167
231
  },
232
+ description="Flag to control the origination of default information/routes into the OSPFv3 domain for IPv4",
168
233
  )
169
234
  always_v4: Optional[BoolStr] = Field(
170
235
  default=None,
@@ -172,6 +237,10 @@ class CiscoOspfv3Model(FeatureTemplate):
172
237
  "vmanage_key": "always",
173
238
  "data_path": ["ospfv3", "address-family", "ipv4", "default-information", "originate"],
174
239
  },
240
+ description=(
241
+ "Flag indicating if the default route should always be advertised in OSPFv3 for IPv4, "
242
+ "irrespective of its presence in the routing table"
243
+ ),
175
244
  )
176
245
  metric_v4: Optional[int] = Field(
177
246
  default=None,
@@ -179,6 +248,7 @@ class CiscoOspfv3Model(FeatureTemplate):
179
248
  "vmanage_key": "metric",
180
249
  "data_path": ["ospfv3", "address-family", "ipv4", "default-information", "originate"],
181
250
  },
251
+ description="The OSPFv3 metric value to use for the default route advertisement in IPv4",
182
252
  )
183
253
  metric_type_v4: Optional[MetricType] = Field(
184
254
  default=None,
@@ -186,6 +256,7 @@ class CiscoOspfv3Model(FeatureTemplate):
186
256
  "vmanage_key": "metric-type",
187
257
  "data_path": ["ospfv3", "address-family", "ipv4", "default-information", "originate"],
188
258
  },
259
+ description="The OSPFv3 metric type (E1 or E2) for the default route advertisement in IPv4",
189
260
  )
190
261
  external_v4: Optional[int] = Field(
191
262
  110,
@@ -193,6 +264,7 @@ class CiscoOspfv3Model(FeatureTemplate):
193
264
  "vmanage_key": "external",
194
265
  "data_path": ["ospfv3", "address-family", "ipv4", "distance-ipv4", "ospf"],
195
266
  },
267
+ description="Administrative distance for OSPFv3 external routes in IPv4",
196
268
  )
197
269
  inter_area_v4: Optional[int] = Field(
198
270
  110,
@@ -200,13 +272,7 @@ class CiscoOspfv3Model(FeatureTemplate):
200
272
  "vmanage_key": "inter-area",
201
273
  "data_path": ["ospfv3", "address-family", "ipv4", "distance-ipv4", "ospf"],
202
274
  },
203
- )
204
- intra_area_v4: Optional[int] = Field(
205
- 110,
206
- json_schema_extra={
207
- "vmanage_key": "intra-area",
208
- "data_path": ["ospfv3", "address-family", "ipv4", "distance-ipv4", "ospf"],
209
- },
275
+ description="Administrative distance for OSPFv3 inter-area routes in IPv4",
210
276
  )
211
277
  delay_v4: Optional[int] = Field(
212
278
  200,
@@ -214,6 +280,10 @@ class CiscoOspfv3Model(FeatureTemplate):
214
280
  "vmanage_key": "delay",
215
281
  "data_path": ["ospfv3", "address-family", "ipv4", "timers", "throttle", "spf"],
216
282
  },
283
+ description=(
284
+ "Initial delay time in milliseconds before the OSPFv3 SPF algorithm starts "
285
+ "after a topology change for IPv4"
286
+ ),
217
287
  )
218
288
  initial_hold_v4: Optional[int] = Field(
219
289
  1000,
@@ -221,6 +291,10 @@ class CiscoOspfv3Model(FeatureTemplate):
221
291
  "vmanage_key": "initial-hold",
222
292
  "data_path": ["ospfv3", "address-family", "ipv4", "timers", "throttle", "spf"],
223
293
  },
294
+ description=(
295
+ "Initial hold time in milliseconds for the OSPFv3 SPF algorithm to wait "
296
+ "between two successive SPF calculations for IPv4"
297
+ ),
224
298
  )
225
299
  max_hold_v4: Optional[int] = Field(
226
300
  10000,
@@ -228,6 +302,10 @@ class CiscoOspfv3Model(FeatureTemplate):
228
302
  "vmanage_key": "max-hold",
229
303
  "data_path": ["ospfv3", "address-family", "ipv4", "timers", "throttle", "spf"],
230
304
  },
305
+ description=(
306
+ "Maximum hold time in milliseconds for the OSPFv3 SPF algorithm to wait "
307
+ "between two successive SPF calculations for IPv4"
308
+ ),
231
309
  )
232
310
  distance_v4: Optional[int] = Field(
233
311
  110,
@@ -235,18 +313,22 @@ class CiscoOspfv3Model(FeatureTemplate):
235
313
  "vmanage_key": "distance",
236
314
  "data_path": ["ospfv3", "address-family", "ipv4", "distance-ipv4"],
237
315
  },
316
+ description="Administrative distance for OSPFv3 routes in IPv4",
238
317
  )
239
318
  name_v4: Optional[str] = Field(
240
319
  default=None,
241
320
  json_schema_extra={"vmanage_key": "name", "data_path": ["ospfv3", "address-family", "ipv4", "table-map"]},
321
+ description="Name of the route map used for OSPFv3 IPv4 route redistribution",
242
322
  )
243
323
  filter_v4: Optional[BoolStr] = Field(
244
324
  default=None,
245
325
  json_schema_extra={"vmanage_key": "filter", "data_path": ["ospfv3", "address-family", "ipv4", "table-map"]},
326
+ description="Flag indicating whether filtering is applied to OSPFv3 IPv4 routes using the specified route map",
246
327
  )
247
328
  redistribute_v4: Optional[List[Redistribute]] = Field(
248
329
  default=None,
249
330
  json_schema_extra={"vmanage_key": "redistribute", "data_path": ["ospfv3", "address-family", "ipv4"]},
331
+ description="List of redistribution configurations for OSPFv3 IPv4 address family",
250
332
  )
251
333
  router_lsa_v4: Optional[List[RouterLsa]] = Field(
252
334
  default=None,
@@ -254,12 +336,19 @@ class CiscoOspfv3Model(FeatureTemplate):
254
336
  "vmanage_key": "router-lsa",
255
337
  "data_path": ["ospfv3", "address-family", "ipv4", "max-metric"],
256
338
  },
339
+ description=(
340
+ "List of configurations to set the maximum metric for router LSAs in the OSPFv3 IPv4 address family"
341
+ ),
257
342
  )
258
343
  area_v4: Optional[List[Area]] = Field(
259
- default=None, json_schema_extra={"vmanage_key": "area", "data_path": ["ospfv3", "address-family", "ipv4"]}
344
+ default=None,
345
+ json_schema_extra={"vmanage_key": "area", "data_path": ["ospfv3", "address-family", "ipv4"]},
346
+ description="List of OSPFv3 area configurations for the IPv4 address family",
260
347
  )
261
348
  router_id_v6: Optional[ipaddress.IPv4Address] = Field(
262
- default=None, json_schema_extra={"vmanage_key": "router-id", "data_path": ["ospfv3", "address-family", "ipv6"]}
349
+ default=None,
350
+ json_schema_extra={"vmanage_key": "router-id", "data_path": ["ospfv3", "address-family", "ipv6"]},
351
+ description="IPv4 address to be used as the router ID for the OSPFv3 process for IPv6",
263
352
  )
264
353
  reference_bandwidth_v6: Optional[int] = Field(
265
354
  100,
@@ -267,10 +356,12 @@ class CiscoOspfv3Model(FeatureTemplate):
267
356
  "vmanage_key": "reference-bandwidth",
268
357
  "data_path": ["ospfv3", "address-family", "ipv6", "auto-cost"],
269
358
  },
359
+ description="Reference bandwidth in Mbps for calculating the OSPFv3 cost on IPv6 interfaces",
270
360
  )
271
361
  rfc1583_v6: Optional[BoolStr] = Field(
272
362
  default=True,
273
363
  json_schema_extra={"vmanage_key": "rfc1583", "data_path": ["ospfv3", "address-family", "ipv6", "compatible"]},
364
+ description="Compatibility flag for RFC 1583 to influence OSPFv3 route selection and preferences on IPv6",
274
365
  )
275
366
  originate_v6: Optional[BoolStr] = Field(
276
367
  default=None,
@@ -278,6 +369,7 @@ class CiscoOspfv3Model(FeatureTemplate):
278
369
  "vmanage_key": "originate",
279
370
  "data_path": ["ospfv3", "address-family", "ipv6", "default-information"],
280
371
  },
372
+ description="Flag to control the origination of default information/routes into the OSPFv3 domain for IPv6",
281
373
  )
282
374
  always_v6: Optional[BoolStr] = Field(
283
375
  default=None,
@@ -285,6 +377,10 @@ class CiscoOspfv3Model(FeatureTemplate):
285
377
  "vmanage_key": "always",
286
378
  "data_path": ["ospfv3", "address-family", "ipv6", "default-information", "originate"],
287
379
  },
380
+ description=(
381
+ "Flag indicating if the default route should always be advertised in OSPFv3 for IPv6, "
382
+ "irrespective of its presence in the routing table"
383
+ ),
288
384
  )
289
385
  metric_v6: Optional[int] = Field(
290
386
  default=None,
@@ -292,6 +388,7 @@ class CiscoOspfv3Model(FeatureTemplate):
292
388
  "vmanage_key": "metric",
293
389
  "data_path": ["ospfv3", "address-family", "ipv6", "default-information", "originate"],
294
390
  },
391
+ description="The OSPFv3 metric value to use for the default route advertisement in IPv6",
295
392
  )
296
393
  metric_type_v6: Optional[MetricType] = Field(
297
394
  default=None,
@@ -299,6 +396,7 @@ class CiscoOspfv3Model(FeatureTemplate):
299
396
  "vmanage_key": "metric-type",
300
397
  "data_path": ["ospfv3", "address-family", "ipv6", "default-information", "originate"],
301
398
  },
399
+ description="The OSPFv3 metric type (E1 or E2) for the default route advertisement in IPv6",
302
400
  )
303
401
  external_v6: Optional[int] = Field(
304
402
  110,
@@ -306,6 +404,7 @@ class CiscoOspfv3Model(FeatureTemplate):
306
404
  "vmanage_key": "external",
307
405
  "data_path": ["ospfv3", "address-family", "ipv6", "distance-ipv6", "ospf"],
308
406
  },
407
+ description="Administrative distance for OSPFv3 external routes in IPv6",
309
408
  )
310
409
  inter_area_v6: Optional[int] = Field(
311
410
  110,
@@ -313,6 +412,7 @@ class CiscoOspfv3Model(FeatureTemplate):
313
412
  "vmanage_key": "inter-area",
314
413
  "data_path": ["ospfv3", "address-family", "ipv6", "distance-ipv6", "ospf"],
315
414
  },
415
+ description="Administrative distance for OSPFv3 inter-area routes in IPv6",
316
416
  )
317
417
  intra_area_v6: Optional[int] = Field(
318
418
  110,
@@ -320,6 +420,7 @@ class CiscoOspfv3Model(FeatureTemplate):
320
420
  "vmanage_key": "intra-area",
321
421
  "data_path": ["ospfv3", "address-family", "ipv6", "distance-ipv6", "ospf"],
322
422
  },
423
+ description="Administrative distance for OSPFv3 intra-area routes in IPv6",
323
424
  )
324
425
  delay_v6: Optional[int] = Field(
325
426
  200,
@@ -327,6 +428,10 @@ class CiscoOspfv3Model(FeatureTemplate):
327
428
  "vmanage_key": "delay",
328
429
  "data_path": ["ospfv3", "address-family", "ipv6", "timers", "throttle", "spf"],
329
430
  },
431
+ description=(
432
+ "Initial delay time in milliseconds before the OSPFv3 SPF algorithm starts "
433
+ "after a topology change for IPv6"
434
+ ),
330
435
  )
331
436
  initial_hold_v6: Optional[int] = Field(
332
437
  1000,
@@ -334,6 +439,10 @@ class CiscoOspfv3Model(FeatureTemplate):
334
439
  "vmanage_key": "initial-hold",
335
440
  "data_path": ["ospfv3", "address-family", "ipv6", "timers", "throttle", "spf"],
336
441
  },
442
+ description=(
443
+ "Initial hold time in milliseconds for the OSPFv3 SPF algorithm to "
444
+ "wait between two successive SPF calculations for IPv6"
445
+ ),
337
446
  )
338
447
  max_hold_v6: Optional[int] = Field(
339
448
  10000,
@@ -341,6 +450,10 @@ class CiscoOspfv3Model(FeatureTemplate):
341
450
  "vmanage_key": "max-hold",
342
451
  "data_path": ["ospfv3", "address-family", "ipv6", "timers", "throttle", "spf"],
343
452
  },
453
+ description=(
454
+ "Maximum hold time in milliseconds for the OSPFv3 SPF algorithm "
455
+ "to wait between two successive SPF calculations for IPv6"
456
+ ),
344
457
  )
345
458
  distance_v6: Optional[int] = Field(
346
459
  110,
@@ -348,18 +461,22 @@ class CiscoOspfv3Model(FeatureTemplate):
348
461
  "vmanage_key": "distance",
349
462
  "data_path": ["ospfv3", "address-family", "ipv6", "distance-ipv6"],
350
463
  },
464
+ description="Administrative distance for OSPFv3 routes in IPv6",
351
465
  )
352
466
  name_v6: Optional[str] = Field(
353
467
  default=None,
354
468
  json_schema_extra={"vmanage_key": "name", "data_path": ["ospfv3", "address-family", "ipv6", "table-map"]},
469
+ description="Name of the route map used for OSPFv3 IPv6 route redistribution",
355
470
  )
356
471
  filter_v6: Optional[BoolStr] = Field(
357
472
  default=None,
358
473
  json_schema_extra={"vmanage_key": "filter", "data_path": ["ospfv3", "address-family", "ipv6", "table-map"]},
474
+ description="Flag indicating whether filtering is applied to OSPFv3 IPv6 routes using the specified route map",
359
475
  )
360
476
  redistribute_v6: Optional[List[RedistributeV6]] = Field(
361
477
  default=None,
362
478
  json_schema_extra={"vmanage_key": "redistribute", "data_path": ["ospfv3", "address-family", "ipv6"]},
479
+ description="List of redistribution configurations for OSPFv3 IPv6 address family",
363
480
  )
364
481
  router_lsa_v6: Optional[List[RouterLsa]] = Field(
365
482
  default=None,
@@ -367,9 +484,14 @@ class CiscoOspfv3Model(FeatureTemplate):
367
484
  "vmanage_key": "router-lsa",
368
485
  "data_path": ["ospfv3", "address-family", "ipv6", "max-metric"],
369
486
  },
487
+ description=(
488
+ "List of configurations to set the maximum metric for router LSAs in the OSPFv3 IPv6 address family"
489
+ ),
370
490
  )
371
491
  area_v6: Optional[List[AreaV6]] = Field(
372
- default=None, json_schema_extra={"vmanage_key": "area", "data_path": ["ospfv3", "address-family", "ipv6"]}
492
+ default=None,
493
+ json_schema_extra={"vmanage_key": "area", "data_path": ["ospfv3", "address-family", "ipv6"]},
494
+ description="List of OSPFv3 area configurations for the IPv6 address family",
373
495
  )
374
496
 
375
497
  payload_path: ClassVar[Path] = Path(__file__).parent / "DEPRECATED"