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,53 +1,73 @@
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, field_validator
8
7
 
8
+ from catalystwan.api.templates.bool_str import BoolStr
9
9
  from catalystwan.api.templates.feature_template import FeatureTemplate, FeatureTemplateValidator
10
-
11
-
12
- class Role(str, Enum):
13
- PRIMARY = "primary"
14
- SECONDARY = "secondary"
10
+ from catalystwan.models.common import Protocol, StaticNatDirection
11
+
12
+ Role = Literal["primary", "secondary"]
13
+ SvcType = Literal["FW", "IDS", "IDP", "netsvc1", "netsvc2", "netsvc3", "netsvc4", "TE", "appqoe"]
14
+ ServiceRouteService = Literal["sig"]
15
+ Nat = Literal["NAT64", "NAT66"]
16
+ AdvertiseProtocol = Literal[
17
+ "bgp", "ospf", "ospfv3", "connected", "static", "network", "aggregate", "eigrp", "lisp", "isis"
18
+ ]
19
+ AdvertiseProtocolSubType = Literal["external"]
20
+ Region = Literal["core", "access"]
21
+ Ipv6AdvertiseProtocol = Literal["bgp", "ospf", "connected", "static", "network", "aggregate"]
22
+ Ipv6AdvertiseProtocolSubType = Literal["external"]
23
+ LeakFromGlobalProtocol = Literal["all", "static", "mobile", "connected", "rip", "odr"]
24
+ Overload = Literal["true", "false"]
25
+ RouteImportProtocol = Literal["static", "connected", "bgp", "ospf"]
26
+ RouteImportProtocolSubType = Literal["external"]
27
+ RouteImportRedistributeProtocol = Literal["bgp", "eigrp", "ospf"]
28
+ RouteImportFromProtocol = Literal["static", "connected", "bgp", "ospf", "eigrp"]
29
+ RouteImportFromProtocolSubType = Literal["external"]
30
+ RouteImportFromRedistributeProtocol = Literal["bgp", "eigrp", "ospf"]
31
+ RouteExportProtocol = Literal["static", "connected", "bgp", "eigrp", "ospf"]
32
+ RouteExportProtocolSubType = Literal["external"]
33
+ RouteExportRedistributeProtocol = Literal["bgp", "ospf"]
15
34
 
16
35
 
17
36
  class Dns(FeatureTemplateValidator):
18
- dns_addr: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "dns-addr"})
19
- role: Role = Role.PRIMARY
37
+ dns_addr: Optional[str] = Field(
38
+ default=None, json_schema_extra={"vmanage_key": "dns-addr"}, description="The IP address of the DNS server."
39
+ )
40
+ role: Role = Field(default="primary", description="The role of the DNS server, either 'PRIMARY' or 'SECONDARY'.")
20
41
  model_config = ConfigDict(populate_by_name=True)
21
42
 
22
43
 
23
44
  class DnsIpv6(FeatureTemplateValidator):
24
- dns_addr: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "dns-addr"})
25
- role: Optional[Role] = Role.PRIMARY
45
+ dns_addr: Optional[str] = Field(
46
+ default=None, json_schema_extra={"vmanage_key": "dns-addr"}, description="The IPv6 address of the DNS server."
47
+ )
48
+ role: Optional[Role] = Field(
49
+ default="primary",
50
+ description="The role of the DNS server for IPv6, optionally either 'PRIMARY' or 'SECONDARY'.",
51
+ )
26
52
  model_config = ConfigDict(populate_by_name=True)
27
53
 
28
54
 
29
55
  class Host(FeatureTemplateValidator):
30
- hostname: str
31
- ip: List[str]
32
-
33
-
34
- class SvcType(str, Enum):
35
- FW = "FW"
36
- IDS = "IDS"
37
- IDP = "IDP"
38
- NETSVC1 = "netsvc1"
39
- NETSVC2 = "netsvc2"
40
- NETSVC3 = "netsvc3"
41
- NETSVC4 = "netsvc4"
42
- TE = "TE"
43
- APPQOE = "appqoe"
56
+ hostname: str = Field(..., description="The hostname of the device.")
57
+ ip: List[str] = Field(..., description="A list of IP addresses associated with the hostname.")
44
58
 
45
59
 
46
60
  class Service(FeatureTemplateValidator):
47
- svc_type: SvcType = Field(json_schema_extra={"vmanage_key": "svc-type"})
48
- address: Optional[List[str]] = None
49
- interface: Optional[str] = None
50
- track_enable: bool = Field(True, json_schema_extra={"vmanage_key": "track-enable"})
61
+ svc_type: SvcType = Field(
62
+ description="The type of service to be configured.", json_schema_extra={"vmanage_key": "svc-type"}
63
+ )
64
+ address: Optional[List[str]] = Field(default=None, description="A list of IP addresses for the service.")
65
+ interface: Optional[str] = Field(default=None, description="The interface associated with the service.")
66
+ track_enable: BoolStr = Field(
67
+ default=True,
68
+ description="Indicates whether tracking is enabled for the service.",
69
+ json_schema_extra={"vmanage_key": "track-enable"},
70
+ )
51
71
  model_config = ConfigDict(populate_by_name=True)
52
72
 
53
73
  @field_validator("track_enable")
@@ -56,345 +76,450 @@ class Service(FeatureTemplateValidator):
56
76
  return str(value).lower()
57
77
 
58
78
 
59
- class ServiceRouteService(str, Enum):
60
- SIG = "sig"
61
-
62
-
63
79
  class ServiceRoute(FeatureTemplateValidator):
64
- prefix: str
65
- vpn: int
66
- service: ServiceRouteService = ServiceRouteService.SIG
80
+ prefix: str = Field(description="The network prefix for the service route.")
81
+ vpn: int = Field(description="The VPN identifier where the service route is to be applied.")
82
+ service: ServiceRouteService = Field(default="sig", description="The service associated with the route.")
67
83
 
68
84
 
69
85
  class NextHop(FeatureTemplateValidator):
70
- address: Optional[str] = None
71
- distance: Optional[int] = 1
86
+ address: Optional[str] = Field(default=None, description="The IP address of the next hop for the route.")
87
+ distance: Optional[int] = Field(default=1, description="The administrative distance of the next hop.")
72
88
 
73
89
 
74
90
  class NextHopWithTrack(FeatureTemplateValidator):
75
- address: Optional[str] = None
76
- distance: Optional[int] = 1
77
- tracker: str
91
+ address: Optional[str] = Field(
92
+ default=None, description="The IP address of the next hop for the route that requires tracking."
93
+ )
94
+ distance: Optional[int] = Field(
95
+ default=1, description="The administrative distance of the next hop that requires tracking."
96
+ )
97
+ tracker: str = Field(description="The tracker associated with this next hop.")
78
98
 
79
99
 
80
100
  class RouteInterface(FeatureTemplateValidator):
81
- interface_name: str = Field(json_schema_extra={"vmanage_key": "interface-name"})
101
+ interface_name: str = Field(
102
+ description="The name of the interface used for routing.", json_schema_extra={"vmanage_key": "interface-name"}
103
+ )
82
104
  interface_next_hop: Optional[List[NextHop]] = Field(
83
- default=None, json_schema_extra={"vmanage_key": "interface-next-hop", "priority_order": ["address", "distance"]}
105
+ default=None,
106
+ description="A list of next hops associated with the interface for routing purposes.",
107
+ json_schema_extra={"vmanage_key": "interface-next-hop", "priority_order": ["address", "distance"]},
84
108
  )
85
109
  model_config = ConfigDict(populate_by_name=True)
86
110
 
87
111
 
88
112
  class Routev4(FeatureTemplateValidator):
89
- prefix: Optional[str] = None
113
+ prefix: Optional[str] = Field(default=None, description="The IPv4 network prefix for the static route.")
90
114
  next_hop: Optional[List[NextHop]] = Field(
91
- default=None, json_schema_extra={"vmanage_key": "next-hop", "priority_order": ["address", "distance"]}
115
+ default=None,
116
+ description="A list of IPv4 next hops for the route.",
117
+ json_schema_extra={"vmanage_key": "next-hop", "priority_order": ["address", "distance"]},
92
118
  )
93
119
  next_hop_with_track: Optional[List[NextHopWithTrack]] = Field(
94
- default=None, json_schema_extra={"vmanage_key": "next-hop-with-track"}
120
+ default=None,
121
+ description="A list of IPv4 next hops with tracking for the route.",
122
+ json_schema_extra={"vmanage_key": "next-hop-with-track"},
95
123
  )
96
124
  route_interface: Optional[RouteInterface] = Field(
97
- default=None, json_schema_extra={"vmanage_key": "route-interface"}
125
+ default=None,
126
+ description="The interface configuration for the IPv4 static route.",
127
+ json_schema_extra={"vmanage_key": "route-interface"},
98
128
  )
99
- null0: Optional[bool] = None
100
- distance: Optional[int] = None
101
- vpn: Optional[int] = None
102
- dhcp: Optional[bool] = None
129
+ null0: Optional[BoolStr] = Field(
130
+ default=None, description="A flag indicating whether to route traffic to null0 for this static route."
131
+ )
132
+ distance: Optional[int] = Field(default=None, description="The administrative distance for the static route.")
133
+ vpn: Optional[int] = Field(
134
+ default=None, description="The VPN instance identifier associated with the static route."
135
+ )
136
+ dhcp: Optional[BoolStr] = Field(
137
+ default=None, description="A flag indicating whether DHCP is used for this static route."
138
+ )
139
+
103
140
  model_config = ConfigDict(populate_by_name=True)
104
141
 
105
142
 
106
143
  class NextHopv6(FeatureTemplateValidator):
107
- address: str
108
- distance: Optional[int] = 1
109
-
110
-
111
- class Nat(str, Enum):
112
- NAT64 = "NAT64"
113
- NAT66 = "NAT66"
144
+ address: str = Field(description="The IPv6 address of the next hop for the route.")
145
+ distance: Optional[int] = Field(default=1, description="The administrative distance of the IPv6 next hop.")
114
146
 
115
147
 
116
148
  class Routev6(FeatureTemplateValidator):
117
- prefix: str
118
- next_hop: Optional[List[NextHopv6]] = Field(default=None, json_schema_extra={"vmanage_key": "next-hop"})
119
- null0: Optional[bool] = None
120
- vpn: Optional[int] = None
121
- nat: Optional[Nat] = None
149
+ prefix: str = Field(description="The IPv6 network prefix for the static route.")
150
+ next_hop: Optional[List[NextHopv6]] = Field(
151
+ default=None,
152
+ description="A list of IPv6 next hops for the route.",
153
+ json_schema_extra={"vmanage_key": "next-hop"},
154
+ )
155
+ null0: Optional[BoolStr] = Field(
156
+ default=None, description="A flag indicating whether to route IPv6 traffic to null0 for this static route."
157
+ )
158
+ vpn: Optional[int] = Field(
159
+ default=None, description="The VPN instance identifier associated with the IPv6 static route."
160
+ )
161
+ nat: Optional[Nat] = Field(
162
+ default=None, description="The type of NAT to apply for the IPv6 static route, if applicable."
163
+ )
122
164
  model_config = ConfigDict(populate_by_name=True)
123
165
 
124
166
 
125
167
  class GreRoute(FeatureTemplateValidator):
126
- prefix: str
127
- vpn: int
128
- interface: Optional[List[str]] = None
168
+ prefix: str = Field(description="The network prefix for the GRE (Generic Routing Encapsulation) route.")
169
+ vpn: int = Field(description="The VPN identifier where the GRE route is to be applied.")
170
+ interface: Optional[List[str]] = Field(
171
+ default=None, description="A list of interfaces associated with the GRE route."
172
+ )
129
173
 
130
174
 
131
175
  class IpsecRoute(FeatureTemplateValidator):
132
- prefix: str
133
- vpn: int
134
- interface: Optional[List[str]] = None
135
-
136
-
137
- class AdvertiseProtocol(str, Enum):
138
- BGP = "bgp"
139
- OSPF = "ospf"
140
- OSPFV3 = "ospfv3"
141
- CONNECTED = "connected"
142
- STATIC = "static"
143
- NETWORK = "network"
144
- AGGREGATE = "aggregate"
145
- EIGRP = "eigrp"
146
- LISP = "lisp"
147
- ISIS = "isis"
148
-
149
-
150
- class AdvertiseProtocolSubType(str, Enum):
151
- EXTERNAL = "external"
152
-
153
-
154
- class Region(str, Enum):
155
- CORE = "core"
156
- ACCESS = "access"
176
+ prefix: str = Field(description="The network prefix for the IPSec (Internet Protocol Security) route.")
177
+ vpn: int = Field(description="The VPN identifier where the IPSec route is to be applied.")
178
+ interface: Optional[List[str]] = Field(
179
+ default=None, description="A list of interfaces associated with the IPSec route."
180
+ )
157
181
 
158
182
 
159
183
  class PrefixList(FeatureTemplateValidator):
160
- prefix_entry: str = Field(json_schema_extra={"vmanage_key": "prefix-entry"})
161
- aggregate_only: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "aggregate-only"})
162
- region: Optional[Region]
184
+ prefix_entry: str = Field(
185
+ description="The network prefix entry for the prefix list.", json_schema_extra={"vmanage_key": "prefix-entry"}
186
+ )
187
+ aggregate_only: Optional[BoolStr] = Field(
188
+ default=None,
189
+ description="A flag indicating if only aggregate routes should be considered.",
190
+ json_schema_extra={"vmanage_key": "aggregate-only"},
191
+ )
192
+ region: Optional[Region] = Field(default=None, description="The network region where the prefix list is applied.")
163
193
  model_config = ConfigDict(populate_by_name=True)
164
194
 
165
195
 
166
196
  class Advertise(FeatureTemplateValidator):
167
- protocol: AdvertiseProtocol
168
- route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"})
197
+ protocol: AdvertiseProtocol = Field(description="The protocol used for route advertisement.")
198
+ route_policy: Optional[str] = Field(
199
+ default=None,
200
+ description="The route policy associated with advertisement.",
201
+ json_schema_extra={"vmanage_key": "route-policy"},
202
+ )
169
203
  protocol_sub_type: Optional[List[AdvertiseProtocolSubType]] = Field(
170
- default=None, json_schema_extra={"vmanage_key": "protocol-sub-type"}
204
+ default=None,
205
+ description="A list of subtypes for the advertisement protocol.",
206
+ json_schema_extra={"vmanage_key": "protocol-sub-type"},
207
+ )
208
+ prefix_list: Optional[List[PrefixList]] = Field(
209
+ default=None,
210
+ description="A list of prefix lists associated with the advertisement settings.",
211
+ json_schema_extra={"vmanage_key": "prefix-list"},
171
212
  )
172
- prefix_list: Optional[List[PrefixList]] = Field(default=None, json_schema_extra={"vmanage_key": "prefix-list"})
173
213
  model_config = ConfigDict(populate_by_name=True)
174
214
 
175
215
 
176
- class Ipv6AdvertiseProtocol(str, Enum):
177
- BGP = "bgp"
178
- OSPF = "ospf"
179
- CONNECTED = "connected"
180
- STATIC = "static"
181
- NETWORK = "network"
182
- AGGREGATE = "aggregate"
183
-
184
-
185
- class Ipv6AdvertiseProtocolSubType(str, Enum):
186
- EXTERNAL = "external"
187
-
188
-
189
216
  class Ipv6Advertise(FeatureTemplateValidator):
190
- protocol: Ipv6AdvertiseProtocol
191
- route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"})
217
+ protocol: Ipv6AdvertiseProtocol = Field(description="The IPv6 protocol used for route advertisement.")
218
+ route_policy: Optional[str] = Field(
219
+ default=None,
220
+ description="The IPv6 route policy associated with advertisement.",
221
+ json_schema_extra={"vmanage_key": "route-policy"},
222
+ )
192
223
  protocol_sub_type: Optional[List[Ipv6AdvertiseProtocolSubType]] = Field(
193
- default=None, json_schema_extra={"vmanage_key": "protocol-sub-type"}
224
+ default=None,
225
+ description="A list of subtypes for the IPv6 advertisement protocol.",
226
+ json_schema_extra={"vmanage_key": "protocol-sub-type"},
227
+ )
228
+ prefix_list: Optional[List[PrefixList]] = Field(
229
+ default=None,
230
+ description="A list of IPv6 prefix lists associated with the advertisement settings.",
231
+ json_schema_extra={"vmanage_key": "prefix-list"},
194
232
  )
195
- prefix_list: Optional[List[PrefixList]] = Field(default=None, json_schema_extra={"vmanage_key": "prefix-list"})
196
233
  model_config = ConfigDict(populate_by_name=True)
197
234
 
198
235
 
199
- class LeakFromGlobalProtocol(str, Enum):
200
- ALL = "all"
201
- STATIC = "static"
202
- MOBILE = "mobile"
203
- CONNECTED = "connected"
204
- RIP = "rip"
205
- ODR = "odr"
206
-
207
-
208
236
  class Pool(FeatureTemplateValidator):
209
- name: str
210
- start_address: str = Field(json_schema_extra={"vmanage_key": "start-address"})
211
- end_address: str = Field(json_schema_extra={"vmanage_key": "end-address"})
212
- overload: Optional[bool] = None
213
- leak_from_global: bool
214
- leak_from_global_protocol: LeakFromGlobalProtocol
215
- leak_to_global: bool
237
+ name: str = Field(description="The name of the IP address pool.")
238
+ start_address: str = Field(
239
+ description="The starting IP address of the pool.", json_schema_extra={"vmanage_key": "start-address"}
240
+ )
241
+ end_address: str = Field(
242
+ description="The ending IP address of the pool.", json_schema_extra={"vmanage_key": "end-address"}
243
+ )
244
+ overload: Optional[BoolStr] = Field(
245
+ default=None, description="A flag indicating whether address overload is allowed."
246
+ )
247
+ leak_from_global: BoolStr = Field(description="A flag indicating whether leaking from the global table is enabled.")
248
+ leak_from_global_protocol: LeakFromGlobalProtocol = Field(
249
+ description="The protocol used for leaking from the global routing table."
250
+ )
251
+ leak_to_global: BoolStr = Field(description="A flag indicating whether leaking to the global table is enabled.")
216
252
  model_config = ConfigDict(populate_by_name=True)
217
253
 
218
254
 
219
- class Direction(str, Enum):
220
- INSIDE = "inside"
221
- OUTSIDE = "outside"
222
-
223
-
224
- class Overload(str, Enum):
225
- TRUE = "true"
226
- FALSE = "false"
227
-
228
-
229
255
  class Natpool(FeatureTemplateValidator):
230
- name: int
231
- prefix_length: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "prefix-length"})
232
- range_start: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "range-start"})
233
- range_end: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "range-end"})
234
- overload: Overload = Overload.TRUE
235
- direction: Direction
236
- tracker_id: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "tracker-id"})
256
+ name: int = Field(description="The identifier for the NAT pool.")
257
+ prefix_length: Optional[int] = Field(
258
+ default=None,
259
+ description="The length of the network prefix for the NAT pool.",
260
+ json_schema_extra={"vmanage_key": "prefix-length"},
261
+ )
262
+ range_start: str = Field(
263
+ description="The starting IP address for the NAT pool range.",
264
+ json_schema_extra={"vmanage_key": "range-start"},
265
+ )
266
+ range_end: Optional[str] = Field(
267
+ default=None,
268
+ description="The ending IP address for the NAT pool range.",
269
+ json_schema_extra={"vmanage_key": "range-end"},
270
+ )
271
+ overload: Overload = Field(
272
+ default="true", description="Flag indicating whether NAT overload (PAT) is enabled for the pool."
273
+ )
274
+ direction: StaticNatDirection = Field(description="The direction (inside or outside) associated with the NAT pool.")
275
+ tracker_id: Optional[int] = Field(
276
+ default=None,
277
+ description="The tracker identifier associated with the NAT pool.",
278
+ json_schema_extra={"vmanage_key": "tracker-id"},
279
+ )
237
280
  model_config = ConfigDict(populate_by_name=True)
238
281
 
239
282
 
240
- class StaticNatDirection(str, Enum):
241
- INSIDE = "inside"
242
- OUTSIDE = "outside"
243
-
244
-
245
283
  class Static(FeatureTemplateValidator):
246
- pool_name: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "pool-name"})
247
- source_ip: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "source-ip"})
248
- translate_ip: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "translate-ip"})
249
- static_nat_direction: StaticNatDirection = Field(json_schema_extra={"vmanage_key": "static-nat-direction"})
250
- tracker_id: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "tracker-id"})
284
+ pool_name: Optional[int] = Field(
285
+ default=None,
286
+ description="The identifier for the NAT pool associated with the static NAT rule.",
287
+ json_schema_extra={"vmanage_key": "pool-name"},
288
+ )
289
+ source_ip: Optional[str] = Field(
290
+ default=None,
291
+ description="The original source IP address to be translated by static NAT.",
292
+ json_schema_extra={"vmanage_key": "source-ip"},
293
+ )
294
+ translate_ip: Optional[str] = Field(
295
+ default=None,
296
+ description="The translated IP address used by static NAT.",
297
+ json_schema_extra={"vmanage_key": "translate-ip"},
298
+ )
299
+ static_nat_direction: StaticNatDirection = Field(
300
+ description="The direction (inside or outside) for the static NAT rule.",
301
+ json_schema_extra={"vmanage_key": "static-nat-direction"},
302
+ )
303
+ tracker_id: Optional[int] = Field(
304
+ default=None,
305
+ description="The tracker identifier associated with the static NAT rule.",
306
+ json_schema_extra={"vmanage_key": "tracker-id"},
307
+ )
251
308
  model_config = ConfigDict(populate_by_name=True)
252
309
 
253
310
 
254
311
  class SubnetStatic(FeatureTemplateValidator):
255
- source_ip_subnet: str = Field(json_schema_extra={"vmanage_key": "source-ip-subnet"})
256
- translate_ip_subnet: str = Field(json_schema_extra={"vmanage_key": "translate-ip-subnet"})
257
- prefix_length: int = Field(json_schema_extra={"vmanage_key": "prefix-length"})
258
- static_nat_direction: StaticNatDirection = Field(json_schema_extra={"vmanage_key": "static-nat-direction"})
259
- tracker_id: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "tracker-id"})
312
+ source_ip_subnet: str = Field(
313
+ description="The original source IP subnet to be translated by static NAT.",
314
+ json_schema_extra={"vmanage_key": "source-ip-subnet"},
315
+ )
316
+ translate_ip_subnet: str = Field(
317
+ description="The translated IP subnet used by static NAT.",
318
+ json_schema_extra={"vmanage_key": "translate-ip-subnet"},
319
+ )
320
+ prefix_length: int = Field(
321
+ description="The prefix length for the translated IP subnet in static NAT.",
322
+ json_schema_extra={"vmanage_key": "prefix-length"},
323
+ )
324
+ static_nat_direction: StaticNatDirection = Field(
325
+ description="The direction (inside or outside) for the subnet static NAT rule.",
326
+ json_schema_extra={"vmanage_key": "static-nat-direction"},
327
+ )
328
+ tracker_id: Optional[int] = Field(
329
+ default=None,
330
+ description="The tracker identifier associated with the subnet static NAT rule.",
331
+ json_schema_extra={"vmanage_key": "tracker-id"},
332
+ )
260
333
  model_config = ConfigDict(populate_by_name=True)
261
334
 
262
335
 
263
- class Proto(str, Enum):
264
- TCP = "tcp"
265
- UDP = "udp"
266
-
267
-
268
336
  class PortForward(FeatureTemplateValidator):
269
- pool_name: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "pool-name"})
270
- source_port: int = Field(json_schema_extra={"vmanage_key": "source-port"})
271
- translate_port: int = Field(json_schema_extra={"vmanage_key": "translate-port"})
272
- source_ip: str = Field(json_schema_extra={"vmanage_key": "source-ip"})
273
- translate_ip: str = Field(json_schema_extra={"vmanage_key": "translate-ip"})
274
- proto: Proto
337
+ pool_name: Optional[int] = Field(
338
+ default=None,
339
+ description="The identifier for the NAT pool associated with the port forwarding rule.",
340
+ json_schema_extra={"vmanage_key": "pool-name"},
341
+ )
342
+ source_port: int = Field(
343
+ description="The source port number for the port forwarding rule.",
344
+ json_schema_extra={"vmanage_key": "source-port"},
345
+ )
346
+ translate_port: int = Field(
347
+ description="The destination port number to which the source port is translated.",
348
+ json_schema_extra={"vmanage_key": "translate-port"},
349
+ )
350
+ source_ip: str = Field(
351
+ description="The source IP address for the port forwarding rule.",
352
+ json_schema_extra={"vmanage_key": "source-ip"},
353
+ )
354
+ translate_ip: str = Field(
355
+ description="The destination IP address to which the source IP is translated.",
356
+ json_schema_extra={"vmanage_key": "translate-ip"},
357
+ )
358
+ proto: Protocol = Field(description="The protocol used in the port forwarding rule (TCP/UDP).")
275
359
  model_config = ConfigDict(populate_by_name=True)
276
360
 
277
361
 
278
- class RouteImportProtocol(str, Enum):
279
- STATIC = "static"
280
- CONNECTED = "connected"
281
- BGP = "bgp"
282
- OSPF = "ospf"
283
-
284
-
285
- class RouteImportProtocolSubType(str, Enum):
286
- EXTERNAL = "external"
287
-
288
-
289
- class RouteImportRedistributeProtocol(str, Enum):
290
- BGP = "bgp"
291
- EIGRP = "eigrp"
292
- OSPF = "ospf"
293
-
294
-
295
362
  class RouteImportRedistribute(FeatureTemplateValidator):
296
- protocol: RouteImportRedistributeProtocol
297
- route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"})
363
+ protocol: RouteImportRedistributeProtocol = Field(
364
+ description="The protocol from which routes are to be redistributed."
365
+ )
366
+ route_policy: Optional[str] = Field(
367
+ default=None,
368
+ description="The route policy that specifies the conditions for route redistribution.",
369
+ json_schema_extra={"vmanage_key": "route-policy"},
370
+ )
298
371
  model_config = ConfigDict(populate_by_name=True)
299
372
 
300
373
 
301
374
  class RouteImport(FeatureTemplateValidator):
302
- protocol: RouteImportProtocol
303
- protocol_sub_type: List[RouteImportProtocolSubType] = Field(json_schema_extra={"vmanage_key": "protocol-sub-type"})
304
- route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"})
305
- redistribute: Optional[List[RouteImportRedistribute]] = None
375
+ protocol: RouteImportProtocol = Field(description="The protocol from which routes are to be imported.")
376
+ protocol_sub_type: List[RouteImportProtocolSubType] = Field(
377
+ description="The list of subtypes for the import protocol.",
378
+ json_schema_extra={"vmanage_key": "protocol-sub-type"},
379
+ )
380
+ route_policy: Optional[str] = Field(
381
+ default=None,
382
+ description="The route policy that specifies the conditions for route import.",
383
+ json_schema_extra={"vmanage_key": "route-policy"},
384
+ )
385
+ redistribute: Optional[List[RouteImportRedistribute]] = Field(
386
+ default=None,
387
+ description="A list of redistribute configurations that define how routes from other protocols are imported.",
388
+ )
306
389
  model_config = ConfigDict(populate_by_name=True)
307
390
 
308
391
 
309
- class RouteImportFromProtocol(str, Enum):
310
- STATIC = "static"
311
- CONNECTED = "connected"
312
- BGP = "bgp"
313
- OSPF = "ospf"
314
- EIGRP = "eigrp"
315
-
316
-
317
- class RouteImportFromProtocolSubType(str, Enum):
318
- EXTERNAL = "external"
319
-
320
-
321
- class RouteImportFromRedistributeProtocol(str, Enum):
322
- BGP = "bgp"
323
- EIGRP = "eigrp"
324
- OSPF = "ospf"
325
-
326
-
327
392
  class RouteImportFromRedistribute(FeatureTemplateValidator):
328
- protocol: RouteImportFromRedistributeProtocol
329
- route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"})
393
+ protocol: RouteImportFromRedistributeProtocol = Field(
394
+ description="The protocol from which routes are to be redistributed into the local routing table."
395
+ )
396
+ route_policy: Optional[str] = Field(
397
+ default=None,
398
+ description="The route policy that defines the conditions for route redistribution.",
399
+ json_schema_extra={"vmanage_key": "route-policy"},
400
+ )
330
401
  model_config = ConfigDict(populate_by_name=True)
331
402
 
332
403
 
333
404
  class RouteImportFrom(FeatureTemplateValidator):
334
- source_vpn: int = Field(json_schema_extra={"vmanage_key": "source-vpn"})
335
- protocol: RouteImportFromProtocol
405
+ source_vpn: int = Field(
406
+ description="The VPN instance (VRF) from which routes are to be imported.",
407
+ json_schema_extra={"vmanage_key": "source-vpn"},
408
+ )
409
+ protocol: RouteImportFromProtocol = Field(description="The routing protocol from which routes are to be imported.")
336
410
  protocol_sub_type: List[RouteImportFromProtocolSubType] = Field(
337
- json_schema_extra={"vmanage_key": "protocol-sub-type"}
411
+ description="The list of protocol subtypes for route importation.",
412
+ json_schema_extra={"vmanage_key": "protocol-sub-type"},
413
+ )
414
+ route_policy: Optional[str] = Field(
415
+ default=None,
416
+ description="The route policy that specifies the criteria for route importation.",
417
+ json_schema_extra={"vmanage_key": "route-policy"},
418
+ )
419
+ redistribute: Optional[List[RouteImportFromRedistribute]] = Field(
420
+ default=None,
421
+ description=(
422
+ "A list of route redistribution configurations specifying how routes from other protocols are imported."
423
+ ),
338
424
  )
339
- route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"})
340
- redistribute: Optional[List[RouteImportFromRedistribute]] = None
341
425
  model_config = ConfigDict(populate_by_name=True)
342
426
 
343
427
 
344
- class RouteExportProtocol(str, Enum):
345
- STATIC = "static"
346
- CONNECTED = "connected"
347
- BGP = "bgp"
348
- EIGRP = "eigrp"
349
- OSPF = "ospf"
350
-
351
-
352
- class RouteExportProtocolSubType(str, Enum):
353
- EXTERNAL = "external"
354
-
355
-
356
- class RouteExportRedistributeProtocol(str, Enum):
357
- BGP = "bgp"
358
- OSPF = "ospf"
359
-
360
-
361
428
  class RouteExportRedistribute(FeatureTemplateValidator):
362
- protocol: RouteExportRedistributeProtocol
363
- route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"})
429
+ protocol: RouteExportRedistributeProtocol = Field(
430
+ description="The protocol from which routes are to be redistributed out of the local routing table."
431
+ )
432
+ route_policy: Optional[str] = Field(
433
+ default=None,
434
+ description="The route policy that defines the conditions for route redistribution.",
435
+ json_schema_extra={"vmanage_key": "route-policy"},
436
+ )
364
437
  model_config = ConfigDict(populate_by_name=True)
365
438
 
366
439
 
367
440
  class RouteExport(FeatureTemplateValidator):
368
- protocol: RouteExportProtocol
369
- protocol_sub_type: List[RouteExportProtocolSubType] = Field(json_schema_extra={"vmanage_key": "protocol-sub-type"})
370
- route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"})
371
- redistribute: Optional[List[RouteExportRedistribute]]
441
+ protocol: RouteExportProtocol = Field(description="The routing protocol to which routes are to be exported.")
442
+ protocol_sub_type: List[RouteExportProtocolSubType] = Field(
443
+ description="The list of protocol subtypes for route exportation.",
444
+ json_schema_extra={"vmanage_key": "protocol-sub-type"},
445
+ )
446
+ route_policy: Optional[str] = Field(
447
+ default=None,
448
+ description="The route policy that specifies the criteria for route exportation.",
449
+ json_schema_extra={"vmanage_key": "route-policy"},
450
+ )
451
+ redistribute: Optional[List[RouteExportRedistribute]] = Field(
452
+ default=None,
453
+ description=(
454
+ "A list of route redistribution configurations specifying how routes from other protocols are exported."
455
+ ),
456
+ )
372
457
  model_config = ConfigDict(populate_by_name=True)
373
458
 
374
459
 
375
460
  class CiscoVPNModel(FeatureTemplate):
376
461
  model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True)
462
+ _docs_description: str = "Cisco VPN Feature Template configuration."
377
463
 
378
- vpn_id: int = Field(default=0, json_schema_extra={"vmanage_key": "vpn-id"})
379
- vpn_name: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "name"})
380
- tenant_vpn_id: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "tenant-vpn-id"})
381
- org_name: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "org-name"})
464
+ vpn_id: int = Field(
465
+ default=0,
466
+ description="The unique identifier for the VPN instance (VRF).",
467
+ json_schema_extra={"vmanage_key": "vpn-id"},
468
+ )
469
+ vpn_name: Optional[str] = Field(
470
+ default=None, description="The name of the VPN instance.", json_schema_extra={"vmanage_key": "name"}
471
+ )
472
+ tenant_vpn_id: Optional[int] = Field(
473
+ default=None,
474
+ description="The tenant-specific identifier for the VPN instance, used in multi-tenant environments.",
475
+ json_schema_extra={"vmanage_key": "tenant-vpn-id"},
476
+ )
477
+ org_name: Optional[str] = Field(
478
+ default=None,
479
+ description="The name of the organization to which the VPN instance belongs.",
480
+ json_schema_extra={"vmanage_key": "org-name"},
481
+ )
382
482
  omp_admin_distance_ipv4: Optional[int] = Field(
383
- default=None, json_schema_extra={"vmanage_key": "omp-admin-distance-ipv4"}
483
+ default=None,
484
+ description="The administrative distance for IPv4 routes received over the Overlay Management Protocol (OMP).",
485
+ json_schema_extra={"vmanage_key": "omp-admin-distance-ipv4"},
384
486
  )
385
487
  omp_admin_distance_ipv6: Optional[int] = Field(
386
- default=None, json_schema_extra={"vmanage_key": "omp-admin-distance-ipv6"}
488
+ default=None,
489
+ description="The administrative distance for IPv6 routes received over OMP.",
490
+ json_schema_extra={"vmanage_key": "omp-admin-distance-ipv6"},
491
+ )
492
+ dns: Optional[List[Dns]] = Field(
493
+ default=None,
494
+ description="A list of DNS configurations for the VPN instance.",
495
+ )
496
+ dns_ipv6: Optional[List[DnsIpv6]] = Field(
497
+ default=None,
498
+ description="A list of DNS configurations for IPv6 within the VPN instance.",
499
+ json_schema_extra={"vmanage_key": "dns-ipv6"},
500
+ )
501
+ layer4: Optional[BoolStr] = Field(
502
+ default=None,
503
+ description="A flag indicating whether Layer 4 information is included in the ECMP hash key.",
504
+ json_schema_extra={"data_path": ["ecmp-hash-key"]},
505
+ )
506
+ host: Optional[List[Host]] = Field(
507
+ default=None,
508
+ description="A list of host configurations within the VPN instance.",
509
+ json_schema_extra={"priority_order": ["hostname", "ip"]},
510
+ )
511
+ service: Optional[List[Service]] = Field(
512
+ default=None,
513
+ description="A list of service configurations associated with the VPN instance.",
387
514
  )
388
- dns: Optional[List[Dns]] = None
389
- dns_ipv6: Optional[List[DnsIpv6]] = Field(default=None, json_schema_extra={"vmanage_key": "dns-ipv6"})
390
- layer4: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["ecmp-hash-key"]})
391
- host: Optional[List[Host]] = Field(default=None, json_schema_extra={"priority_order": ["hostname", "ip"]})
392
- service: Optional[List[Service]] = None
393
515
  service_route: Optional[List[ServiceRoute]] = Field(
394
- default=None, json_schema_extra={"data_path": ["ip"], "vmanage_key": "service-route"}
516
+ default=None,
517
+ description="A list of service route configurations for directing traffic to services within the VPN.",
518
+ json_schema_extra={"data_path": ["ip"], "vmanage_key": "service-route"},
395
519
  )
396
520
  route_v4: Optional[List[Routev4]] = Field(
397
521
  default=None,
522
+ description="A list of IPv4 route configurations within the VPN instance.",
398
523
  json_schema_extra={
399
524
  "data_path": ["ip"],
400
525
  "vmanage_key": "route",
@@ -402,32 +527,70 @@ class CiscoVPNModel(FeatureTemplate):
402
527
  },
403
528
  )
404
529
  route_v6: Optional[List[Routev6]] = Field(
405
- default=None, json_schema_extra={"data_path": ["ipv6"], "vmanage_key": "route"}
530
+ default=None,
531
+ description="A list of IPv6 route configurations within the VPN instance.",
532
+ json_schema_extra={"data_path": ["ipv6"], "vmanage_key": "route"},
406
533
  )
407
534
  gre_route: Optional[List[GreRoute]] = Field(
408
- default=None, json_schema_extra={"data_path": ["ip"], "vmanage_key": "gre-route"}
535
+ default=None,
536
+ description="A list of GRE tunnel route configurations within the VPN instance.",
537
+ json_schema_extra={"data_path": ["ip"], "vmanage_key": "gre-route"},
409
538
  )
410
539
  ipsec_route: Optional[List[IpsecRoute]] = Field(
411
- default=None, json_schema_extra={"data_path": ["ip"], "vmanage_key": "ipsec-route"}
540
+ default=None,
541
+ description="A list of IPSec route configurations within the VPN instance.",
542
+ json_schema_extra={"data_path": ["ip"], "vmanage_key": "ipsec-route"},
543
+ )
544
+ advertise: Optional[List[Advertise]] = Field(
545
+ default=None,
546
+ description="A list of configurations for advertising routes via OMP within the VPN instance.",
547
+ json_schema_extra={"data_path": ["omp"]},
412
548
  )
413
- advertise: Optional[List[Advertise]] = Field(default=None, json_schema_extra={"data_path": ["omp"]})
414
549
  ipv6_advertise: Optional[List[Ipv6Advertise]] = Field(
415
- default=None, json_schema_extra={"data_path": ["omp"], "vmanage_key": "ipv6-advertise"}
550
+ default=None,
551
+ description="A list of configurations for advertising IPv6 routes via OMP within the VPN instance.",
552
+ json_schema_extra={"data_path": ["omp"], "vmanage_key": "ipv6-advertise"},
553
+ )
554
+ pool: Optional[List[Pool]] = Field(
555
+ default=None,
556
+ description="A list of NAT64 pool configurations within the VPN instance.",
557
+ json_schema_extra={"data_path": ["nat64", "v4"]},
558
+ )
559
+ natpool: Optional[List[Natpool]] = Field(
560
+ default=None,
561
+ description="A list of NAT pool configurations within the VPN instance.",
562
+ json_schema_extra={"data_path": ["nat"]},
563
+ )
564
+ static: Optional[List[Static]] = Field(
565
+ default=None,
566
+ description="A list of static configurations within the VPN instance for NAT.",
567
+ json_schema_extra={"data_path": ["nat"]},
416
568
  )
417
- pool: Optional[List[Pool]] = Field(default=None, json_schema_extra={"data_path": ["nat64", "v4"]})
418
- natpool: Optional[List[Natpool]] = Field(default=None, json_schema_extra={"data_path": ["nat"]})
419
- static: Optional[List[Static]] = Field(default=None, json_schema_extra={"data_path": ["nat"]})
420
569
  subnet_static: Optional[List[SubnetStatic]] = Field(
421
- default=None, json_schema_extra={"data_path": ["nat"], "vmanage_key": "subnet-static"}
570
+ default=None,
571
+ description="A list of subnet-specific static configurations within the VPN instance for NAT.",
572
+ json_schema_extra={"data_path": ["nat"], "vmanage_key": "subnet-static"},
422
573
  )
423
574
  port_forward: Optional[List[PortForward]] = Field(
424
- default=None, json_schema_extra={"data_path": ["nat"], "vmanage_key": "port-forward"}
575
+ default=None,
576
+ description="A list of port forwarding configurations within the VPN instance.",
577
+ json_schema_extra={"data_path": ["nat"], "vmanage_key": "port-forward"},
578
+ )
579
+ route_import: Optional[List[RouteImport]] = Field(
580
+ default=None,
581
+ description="A list of route import configurations within the VPN instance.",
582
+ json_schema_extra={"vmanage_key": "route-import"},
425
583
  )
426
- route_import: Optional[List[RouteImport]] = Field(default=None, json_schema_extra={"vmanage_key": "route-import"})
427
584
  route_import_from: Optional[List[RouteImportFrom]] = Field(
428
- default=None, json_schema_extra={"vmanage_key": "route-import-from"}
585
+ default=None,
586
+ description="A list of configurations specifying routes to import from other sources into the VPN instance.",
587
+ json_schema_extra={"vmanage_key": "route-import-from"},
588
+ )
589
+ route_export: Optional[List[RouteExport]] = Field(
590
+ default=None,
591
+ description="A list of route export configurations within the VPN instance.",
592
+ json_schema_extra={"vmanage_key": "route-export"},
429
593
  )
430
- route_export: Optional[List[RouteExport]] = Field(default=None, json_schema_extra={"vmanage_key": "route-export"})
431
594
 
432
595
  payload_path: ClassVar[Path] = Path(__file__).parent / "DEPRECATED"
433
596
  type: ClassVar[str] = "cisco_vpn"