catalystwan 0.41.2.dev9__py3-none-any.whl → 0.41.3__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 (509) hide show
  1. catalystwan/ENDPOINTS.md +611 -0
  2. catalystwan/__init__.py +2 -3
  3. catalystwan/api/administration.py +2 -13
  4. catalystwan/api/api_container.py +1 -4
  5. catalystwan/api/config_group_api.py +16 -41
  6. catalystwan/api/configuration_groups/parcel.py +30 -100
  7. catalystwan/api/configuration_groups/parcels/cellular_controller.py +33 -0
  8. catalystwan/api/feature_profile_api.py +237 -2016
  9. catalystwan/api/policy_api.py +116 -470
  10. catalystwan/api/template_api.py +44 -113
  11. catalystwan/api/templates/README.md +47 -61
  12. catalystwan/api/templates/cli_template.py +7 -17
  13. catalystwan/api/templates/device_template/device_template.py +32 -127
  14. catalystwan/api/templates/device_template/device_template_payload.json.j2 +19 -0
  15. catalystwan/api/templates/feature_template.py +3 -3
  16. catalystwan/api/templates/models/cisco_aaa_model.py +42 -289
  17. catalystwan/api/templates/models/cisco_banner_model.py +2 -11
  18. catalystwan/api/templates/models/cisco_bfd_model.py +36 -31
  19. catalystwan/api/templates/models/cisco_bgp_model.py +131 -382
  20. catalystwan/api/templates/models/cisco_logging_model.py +43 -80
  21. catalystwan/api/templates/models/cisco_ntp_model.py +15 -34
  22. catalystwan/api/templates/models/cisco_omp_model.py +60 -70
  23. catalystwan/api/templates/models/cisco_ospf.py +74 -143
  24. catalystwan/api/templates/models/cisco_ospfv3.py +95 -217
  25. catalystwan/api/templates/models/cisco_secure_internet_gateway.py +142 -304
  26. catalystwan/api/templates/models/cisco_snmp_model.py +52 -66
  27. catalystwan/api/templates/models/cisco_system.py +129 -238
  28. catalystwan/api/templates/models/cisco_vpn_interface_model.py +275 -632
  29. catalystwan/api/templates/models/cisco_vpn_model.py +270 -433
  30. catalystwan/api/templates/models/cli_template.py +2 -3
  31. catalystwan/api/templates/models/omp_vsmart_model.py +10 -46
  32. catalystwan/api/templates/models/security_vsmart_model.py +8 -11
  33. catalystwan/api/templates/models/supported.py +4 -10
  34. catalystwan/api/templates/models/system_vsmart_model.py +27 -164
  35. catalystwan/apigw_auth.py +2 -6
  36. catalystwan/dataclasses.py +53 -2
  37. catalystwan/endpoints/__init__.py +41 -41
  38. catalystwan/endpoints/certificate_management_device.py +0 -4
  39. catalystwan/endpoints/cluster_management.py +9 -30
  40. catalystwan/endpoints/configuration/feature_profile/sdwan/policy_object.py +12 -35
  41. catalystwan/endpoints/configuration/feature_profile/sdwan/system.py +11 -164
  42. catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py +26 -144
  43. catalystwan/endpoints/configuration/policy/definition/access_control_list.py +11 -6
  44. catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py +11 -6
  45. catalystwan/endpoints/configuration/policy/definition/control.py +11 -6
  46. catalystwan/endpoints/configuration/policy/definition/device_access.py +11 -6
  47. catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py +11 -6
  48. catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py +11 -6
  49. catalystwan/endpoints/configuration/policy/definition/mesh.py +11 -2
  50. catalystwan/endpoints/configuration/policy/definition/qos_map.py +11 -2
  51. catalystwan/endpoints/configuration/policy/definition/rewrite.py +11 -6
  52. catalystwan/endpoints/configuration/policy/definition/rule_set.py +11 -2
  53. catalystwan/endpoints/configuration/policy/definition/security_group.py +11 -6
  54. catalystwan/endpoints/configuration/policy/definition/traffic_data.py +11 -6
  55. catalystwan/endpoints/configuration/policy/definition/vpn_membership.py +11 -6
  56. catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py +11 -6
  57. catalystwan/endpoints/configuration/policy/list/app.py +16 -3
  58. catalystwan/endpoints/configuration/policy/list/app_probe.py +15 -6
  59. catalystwan/endpoints/configuration/policy/list/as_path.py +16 -3
  60. catalystwan/endpoints/configuration/policy/list/class_map.py +16 -3
  61. catalystwan/endpoints/configuration/policy/list/color.py +16 -3
  62. catalystwan/endpoints/configuration/policy/list/community.py +16 -3
  63. catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py +15 -6
  64. catalystwan/endpoints/configuration/policy/list/data_prefix.py +16 -3
  65. catalystwan/endpoints/configuration/policy/list/expanded_community.py +15 -6
  66. catalystwan/endpoints/configuration/policy/list/fqdn.py +16 -3
  67. catalystwan/endpoints/configuration/policy/list/geo_location.py +16 -3
  68. catalystwan/endpoints/configuration/policy/list/ips_signature.py +15 -6
  69. catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py +16 -3
  70. catalystwan/endpoints/configuration/policy/list/local_app.py +16 -3
  71. catalystwan/endpoints/configuration/policy/list/local_domain.py +16 -3
  72. catalystwan/endpoints/configuration/policy/list/mirror.py +16 -3
  73. catalystwan/endpoints/configuration/policy/list/policer.py +16 -3
  74. catalystwan/endpoints/configuration/policy/list/port.py +16 -3
  75. catalystwan/endpoints/configuration/policy/list/preferred_color_group.py +15 -6
  76. catalystwan/endpoints/configuration/policy/list/prefix.py +16 -4
  77. catalystwan/endpoints/configuration/policy/list/protocol_name.py +15 -6
  78. catalystwan/endpoints/configuration/policy/list/region.py +10 -2
  79. catalystwan/endpoints/configuration/policy/list/site.py +16 -3
  80. catalystwan/endpoints/configuration/policy/list/sla.py +16 -3
  81. catalystwan/endpoints/configuration/policy/list/tloc.py +16 -3
  82. catalystwan/endpoints/configuration/policy/list/url_allow_list.py +16 -3
  83. catalystwan/endpoints/configuration/policy/list/url_block_list.py +16 -3
  84. catalystwan/endpoints/configuration/policy/list/vpn.py +16 -3
  85. catalystwan/endpoints/configuration/policy/list/zone.py +16 -3
  86. catalystwan/endpoints/configuration/policy/security_template.py +3 -2
  87. catalystwan/endpoints/configuration/software_actions.py +4 -2
  88. catalystwan/endpoints/configuration_dashboard_status.py +2 -2
  89. catalystwan/endpoints/configuration_device_template.py +1 -15
  90. catalystwan/endpoints/configuration_feature_profile.py +11 -8
  91. catalystwan/endpoints/configuration_group.py +5 -28
  92. catalystwan/endpoints/configuration_settings.py +1 -90
  93. catalystwan/endpoints/endpoints_container.py +18 -82
  94. catalystwan/endpoints/real_time_monitoring/reboot_history.py +3 -1
  95. catalystwan/endpoints/tenant_migration.py +0 -2
  96. catalystwan/exceptions.py +0 -24
  97. catalystwan/integration_tests/test_find_template_values.py +18 -7
  98. catalystwan/models/common.py +2 -1898
  99. catalystwan/models/configuration/common.py +0 -1
  100. catalystwan/models/configuration/config_migration.py +36 -0
  101. catalystwan/models/configuration/feature_profile/common.py +149 -634
  102. catalystwan/models/configuration/feature_profile/sdwan/management/vpn.py +26 -0
  103. catalystwan/models/configuration/feature_profile/sdwan/policy_object/__init__.py +60 -69
  104. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/app_probe.py +20 -34
  105. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/application_list.py +6 -8
  106. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/color_list.py +5 -7
  107. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/data_prefix.py +4 -13
  108. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/expanded_community_list.py +7 -9
  109. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/fowarding_class.py +5 -7
  110. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_data_prefix.py +9 -11
  111. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_prefix_list.py +10 -25
  112. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/{policer.py → policier.py} +10 -12
  113. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefered_group_color.py +10 -29
  114. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefix_list.py +8 -23
  115. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/sla_class.py +31 -12
  116. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/standard_community.py +10 -16
  117. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/tloc_list.py +7 -8
  118. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/application_list.py +6 -8
  119. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/data_prefix.py +5 -7
  120. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/fqdn.py +5 -7
  121. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/geolocation_list.py +5 -7
  122. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ips_signature.py +5 -7
  123. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/local_domain.py +5 -7
  124. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/protocol_list.py +5 -7
  125. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/security_port.py +11 -21
  126. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url.py +15 -36
  127. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/zone.py +18 -14
  128. catalystwan/models/configuration/feature_profile/sdwan/service/acl.py +409 -0
  129. catalystwan/models/configuration/feature_profile/sdwan/service/appqoe.py +42 -77
  130. catalystwan/models/configuration/feature_profile/sdwan/service/bgp.py +288 -0
  131. catalystwan/models/configuration/feature_profile/sdwan/service/dhcp_server.py +64 -107
  132. catalystwan/models/configuration/feature_profile/sdwan/service/eigrp.py +42 -39
  133. catalystwan/models/configuration/feature_profile/sdwan/service/lan/common.py +88 -7
  134. catalystwan/models/configuration/feature_profile/sdwan/service/lan/ethernet.py +156 -232
  135. catalystwan/models/configuration/feature_profile/sdwan/service/lan/gre.py +108 -38
  136. catalystwan/models/configuration/feature_profile/sdwan/service/lan/ipsec.py +84 -77
  137. catalystwan/models/configuration/feature_profile/sdwan/service/lan/svi.py +56 -62
  138. catalystwan/models/configuration/feature_profile/sdwan/service/lan/vpn.py +121 -112
  139. catalystwan/models/configuration/feature_profile/sdwan/service/multicast.py +57 -56
  140. catalystwan/models/configuration/feature_profile/sdwan/service/object_tracker.py +21 -15
  141. catalystwan/models/configuration/feature_profile/sdwan/{routing → service}/ospf.py +47 -55
  142. catalystwan/models/configuration/feature_profile/sdwan/{routing → service}/ospfv3.py +72 -74
  143. catalystwan/models/configuration/feature_profile/sdwan/service/route_policy.py +110 -358
  144. catalystwan/models/configuration/feature_profile/sdwan/service/service_insertion_attachment.py +25 -17
  145. catalystwan/models/configuration/feature_profile/sdwan/service/switchport.py +58 -50
  146. catalystwan/models/configuration/feature_profile/sdwan/service/tracker.py +21 -12
  147. catalystwan/models/configuration/feature_profile/sdwan/service/wireless_lan.py +31 -27
  148. catalystwan/models/configuration/feature_profile/sdwan/system/aaa.py +10 -58
  149. catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_controller.py +23 -26
  150. catalystwan/models/configuration/profile_type.py +6 -1
  151. catalystwan/models/policy/__init__.py +69 -282
  152. catalystwan/models/policy/centralized.py +29 -26
  153. catalystwan/models/policy/{definition → definitions}/access_control_list.py +17 -47
  154. catalystwan/models/policy/{definition → definitions}/access_control_list_ipv6.py +18 -42
  155. catalystwan/models/policy/{definition → definitions}/control.py +25 -48
  156. catalystwan/models/policy/{definition → definitions}/device_access.py +11 -22
  157. catalystwan/models/policy/{definition → definitions}/device_access_ipv6.py +11 -20
  158. catalystwan/models/policy/{definition → definitions}/hub_and_spoke.py +4 -18
  159. catalystwan/models/policy/{definition → definitions}/mesh.py +1 -13
  160. catalystwan/models/policy/{definition → definitions}/qos_map.py +32 -39
  161. catalystwan/models/policy/{definition → definitions}/rewrite.py +2 -12
  162. catalystwan/models/policy/{definition → definitions}/rule_set.py +48 -66
  163. catalystwan/models/policy/{definition → definitions}/security_group.py +14 -38
  164. catalystwan/models/policy/{definition → definitions}/traffic_data.py +61 -184
  165. catalystwan/models/policy/{definition → definitions}/vpn_membership.py +1 -13
  166. catalystwan/models/policy/{definition → definitions}/zone_based_firewall.py +32 -93
  167. catalystwan/models/policy/lists.py +330 -0
  168. catalystwan/models/policy/lists_entries.py +444 -0
  169. catalystwan/models/policy/localized.py +16 -34
  170. catalystwan/models/policy/policy.py +10 -14
  171. catalystwan/models/policy/policy_definition.py +173 -673
  172. catalystwan/models/policy/policy_list.py +27 -38
  173. catalystwan/models/policy/security.py +46 -145
  174. catalystwan/response.py +2 -6
  175. catalystwan/session.py +1 -1
  176. catalystwan/tests/templates/definitions/{cisco_vpn_basic.json → Basic_Cisco_VPN_Model.json} +2 -2
  177. catalystwan/tests/templates/definitions/complex_aaa.json +277 -0
  178. catalystwan/tests/templates/definitions/{cisco_vpn_complex.json → complex_cisco_vpn.json} +12 -27
  179. catalystwan/tests/templates/definitions/{cisco_aaa.json → iuo.json} +15 -44
  180. catalystwan/tests/templates/definitions/omp_1.json +11 -0
  181. catalystwan/tests/templates/definitions/{omp_vsmart_2.json → omp_2.json} +2 -16
  182. catalystwan/tests/templates/definitions/{omp_vsmart_3.json → omp_3.json} +2 -16
  183. catalystwan/tests/templates/models/__init__.py +13 -46
  184. catalystwan/tests/templates/models/cisco_aaa.py +48 -81
  185. catalystwan/tests/templates/models/cisco_banner.py +2 -2
  186. catalystwan/tests/templates/models/cisco_bfd.py +6 -4
  187. catalystwan/tests/templates/models/cisco_system.py +3 -108
  188. catalystwan/tests/templates/models/cisco_vpn.py +72 -42
  189. catalystwan/tests/templates/models/omp_vsmart.py +8 -28
  190. catalystwan/tests/templates/schemas/cedge_aaa.json +1 -1
  191. catalystwan/tests/templates/schemas/cisco_system.json +0 -242
  192. catalystwan/tests/templates/schemas/cisco_vpn.json +1 -53
  193. catalystwan/tests/templates/schemas/omp-vsmart.json +0 -20
  194. catalystwan/tests/templates/test_chose_model.py +10 -6
  195. catalystwan/tests/templates/test_deserialize_model.py +4 -4
  196. catalystwan/tests/templates/test_find_template_values.py +0 -229
  197. catalystwan/tests/templates/test_serialize_model.py +2 -1
  198. catalystwan/tests/test_cli_template.py +9 -8
  199. catalystwan/tests/test_endpoints.py +11 -42
  200. catalystwan/tests/test_templates.py +19 -16
  201. catalystwan/utils/feature_template/find_template_values.py +9 -22
  202. catalystwan/utils/timezone.py +422 -0
  203. catalystwan/workflows/tenant_migration.py +1 -1
  204. {catalystwan-0.41.2.dev9.dist-info → catalystwan-0.41.3.dist-info}/METADATA +1 -20
  205. catalystwan-0.41.3.dist-info/RECORD +353 -0
  206. catalystwan/api/builders/__init__.py +0 -14
  207. catalystwan/api/builders/feature_profiles/__init__.py +0 -0
  208. catalystwan/api/builders/feature_profiles/application_priority.py +0 -58
  209. catalystwan/api/builders/feature_profiles/builder_factory.py +0 -59
  210. catalystwan/api/builders/feature_profiles/cli.py +0 -76
  211. catalystwan/api/builders/feature_profiles/mixins.py +0 -44
  212. catalystwan/api/builders/feature_profiles/other.py +0 -79
  213. catalystwan/api/builders/feature_profiles/report.py +0 -155
  214. catalystwan/api/builders/feature_profiles/service.py +0 -248
  215. catalystwan/api/builders/feature_profiles/system.py +0 -80
  216. catalystwan/api/builders/feature_profiles/transport.py +0 -256
  217. catalystwan/api/builders/feature_profiles/uc_voice.py +0 -287
  218. catalystwan/api/templates/models/aaa_model.py +0 -387
  219. catalystwan/api/templates/models/vpn_vsmart_interface_model.py +0 -198
  220. catalystwan/api/templates/models/vpn_vsmart_model.py +0 -124
  221. catalystwan/endpoints/configuration/feature_profile/sdwan/application_priority.py +0 -107
  222. catalystwan/endpoints/configuration/feature_profile/sdwan/cli.py +0 -60
  223. catalystwan/endpoints/configuration/feature_profile/sdwan/dns_security.py +0 -83
  224. catalystwan/endpoints/configuration/feature_profile/sdwan/embedded_security.py +0 -88
  225. catalystwan/endpoints/configuration/feature_profile/sdwan/other.py +0 -62
  226. catalystwan/endpoints/configuration/feature_profile/sdwan/service.py +0 -154
  227. catalystwan/endpoints/configuration/feature_profile/sdwan/sig_security.py +0 -88
  228. catalystwan/endpoints/configuration/feature_profile/sdwan/topology.py +0 -93
  229. catalystwan/endpoints/configuration/feature_profile/sdwan/uc_voice.py +0 -77
  230. catalystwan/endpoints/configuration/network_hierarchy.py +0 -47
  231. catalystwan/endpoints/configuration/packages.py +0 -36
  232. catalystwan/endpoints/configuration/policy/abstractions.py +0 -49
  233. catalystwan/endpoints/configuration/policy/definition/aip.py +0 -52
  234. catalystwan/endpoints/configuration/policy/definition/amp.py +0 -52
  235. catalystwan/endpoints/configuration/policy/definition/app_route.py +0 -50
  236. catalystwan/endpoints/configuration/policy/definition/cflowd.py +0 -46
  237. catalystwan/endpoints/configuration/policy/definition/dial_peer.py +0 -57
  238. catalystwan/endpoints/configuration/policy/definition/dns_security.py +0 -50
  239. catalystwan/endpoints/configuration/policy/definition/fxo_port.py +0 -57
  240. catalystwan/endpoints/configuration/policy/definition/fxs_did_port.py +0 -57
  241. catalystwan/endpoints/configuration/policy/definition/fxs_port.py +0 -57
  242. catalystwan/endpoints/configuration/policy/definition/intrusion_prevention.py +0 -52
  243. catalystwan/endpoints/configuration/policy/definition/pri_isdn_port.py +0 -57
  244. catalystwan/endpoints/configuration/policy/definition/route_policy.py +0 -50
  245. catalystwan/endpoints/configuration/policy/definition/srst_phone_profile.py +0 -59
  246. catalystwan/endpoints/configuration/policy/definition/ssl_decryption.py +0 -50
  247. catalystwan/endpoints/configuration/policy/definition/ssl_decryption_utd_profile.py +0 -52
  248. catalystwan/endpoints/configuration/policy/definition/url_filtering.py +0 -50
  249. catalystwan/endpoints/configuration/policy/definition/vpn_qos_map.py +0 -50
  250. catalystwan/endpoints/configuration/policy/list/extended_community.py +0 -52
  251. catalystwan/endpoints/configuration/policy/list/fax_protocol.py +0 -48
  252. catalystwan/endpoints/configuration/policy/list/identity.py +0 -48
  253. catalystwan/endpoints/configuration/policy/list/media_profile.py +0 -52
  254. catalystwan/endpoints/configuration/policy/list/modem_pass_through.py +0 -52
  255. catalystwan/endpoints/configuration/policy/list/scalable_group_tag.py +0 -52
  256. catalystwan/endpoints/configuration/policy/list/supervisory_disconnect.py +0 -52
  257. catalystwan/endpoints/configuration/policy/list/threat_grid_api_key.py +0 -52
  258. catalystwan/endpoints/configuration/policy/list/translation_profile.py +0 -52
  259. catalystwan/endpoints/configuration/policy/list/translation_rules.py +0 -52
  260. catalystwan/endpoints/configuration/policy/list/trunkgroup.py +0 -48
  261. catalystwan/endpoints/configuration/policy/list/umbrella_data.py +0 -52
  262. catalystwan/endpoints/configuration/policy/voice_template.py +0 -39
  263. catalystwan/endpoints/configuration/policy_group.py +0 -30
  264. catalystwan/endpoints/configuration/topology_group.py +0 -51
  265. catalystwan/endpoints/configuration_general_template.py +0 -31
  266. catalystwan/endpoints/configuration_template_master.py +0 -48
  267. catalystwan/integration_tests/base.py +0 -81
  268. catalystwan/integration_tests/feature_profile/sdwan/__init__.py +0 -0
  269. catalystwan/integration_tests/feature_profile/sdwan/policy/__init__.py +0 -0
  270. catalystwan/integration_tests/feature_profile/sdwan/policy/base.py +0 -33
  271. catalystwan/integration_tests/feature_profile/sdwan/policy/test_extended_community.py +0 -33
  272. catalystwan/integration_tests/feature_profile/sdwan/policy/test_security_app_list.py +0 -32
  273. catalystwan/integration_tests/feature_profile/sdwan/test_application_priority.py +0 -433
  274. catalystwan/integration_tests/feature_profile/sdwan/test_cli.py +0 -54
  275. catalystwan/integration_tests/feature_profile/sdwan/test_dns_security.py +0 -106
  276. catalystwan/integration_tests/feature_profile/sdwan/test_other.py +0 -49
  277. catalystwan/integration_tests/feature_profile/sdwan/test_service.py +0 -1078
  278. catalystwan/integration_tests/feature_profile/sdwan/test_sig_security.py +0 -322
  279. catalystwan/integration_tests/feature_profile/sdwan/test_ssl_decryption.py +0 -85
  280. catalystwan/integration_tests/feature_profile/sdwan/test_system.py +0 -368
  281. catalystwan/integration_tests/feature_profile/sdwan/test_tracker.py +0 -127
  282. catalystwan/integration_tests/feature_profile/sdwan/test_transport.py +0 -1698
  283. catalystwan/integration_tests/feature_profile/sdwan/topology/test_topology.py +0 -93
  284. catalystwan/integration_tests/feature_profile/test_parcel.py +0 -54
  285. catalystwan/integration_tests/profile_builder/__init__.py +0 -0
  286. catalystwan/integration_tests/profile_builder/test_pb_service.py +0 -197
  287. catalystwan/integration_tests/profile_builder/test_pb_transport.py +0 -226
  288. catalystwan/integration_tests/profile_builder/test_pb_uc_voice.py +0 -277
  289. catalystwan/integration_tests/test_data/__init__.py +0 -117
  290. catalystwan/integration_tests/test_network_hierarchy.py +0 -82
  291. catalystwan/integration_tests/test_settings.py +0 -30
  292. catalystwan/models/configuration/feature_profile/parcel.py +0 -245
  293. catalystwan/models/configuration/feature_profile/sdwan/acl/__init__.py +0 -13
  294. catalystwan/models/configuration/feature_profile/sdwan/acl/ipv4acl.py +0 -298
  295. catalystwan/models/configuration/feature_profile/sdwan/acl/ipv6acl.py +0 -344
  296. catalystwan/models/configuration/feature_profile/sdwan/application_priority/__init__.py +0 -218
  297. catalystwan/models/configuration/feature_profile/sdwan/application_priority/cloud_probe.py +0 -61
  298. catalystwan/models/configuration/feature_profile/sdwan/application_priority/policy_settings.py +0 -31
  299. catalystwan/models/configuration/feature_profile/sdwan/application_priority/qos_policy.py +0 -102
  300. catalystwan/models/configuration/feature_profile/sdwan/application_priority/traffic_policy.py +0 -1057
  301. catalystwan/models/configuration/feature_profile/sdwan/cli/__init__.py +0 -23
  302. catalystwan/models/configuration/feature_profile/sdwan/cli/config.py +0 -18
  303. catalystwan/models/configuration/feature_profile/sdwan/cli/full_config.py +0 -15
  304. catalystwan/models/configuration/feature_profile/sdwan/dns_security/__init__.py +0 -13
  305. catalystwan/models/configuration/feature_profile/sdwan/dns_security/dns.py +0 -110
  306. catalystwan/models/configuration/feature_profile/sdwan/embedded_security/__init__.py +0 -23
  307. catalystwan/models/configuration/feature_profile/sdwan/embedded_security/ngfirewall.py +0 -493
  308. catalystwan/models/configuration/feature_profile/sdwan/embedded_security/policy.py +0 -171
  309. catalystwan/models/configuration/feature_profile/sdwan/other/__init__.py +0 -25
  310. catalystwan/models/configuration/feature_profile/sdwan/other/cybervision.py +0 -44
  311. catalystwan/models/configuration/feature_profile/sdwan/other/thousandeyes.py +0 -147
  312. catalystwan/models/configuration/feature_profile/sdwan/other/ucse.py +0 -110
  313. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/as_path.py +0 -22
  314. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/extended_community.py +0 -34
  315. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv4_network_object.py +0 -15
  316. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv4_service_object.py +0 -254
  317. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/mirror.py +0 -27
  318. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/network_object_group.py +0 -15
  319. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/object_group.py +0 -15
  320. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/service_object_group.py +0 -21
  321. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/aip.py +0 -64
  322. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/amp.py +0 -79
  323. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/identity.py +0 -30
  324. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/intrusion_prevention.py +0 -58
  325. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/object_group.py +0 -72
  326. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/rule_set.py +0 -137
  327. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/scalable_group_tag.py +0 -26
  328. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption.py +0 -126
  329. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption_profile.py +0 -165
  330. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url_filtering.py +0 -148
  331. catalystwan/models/configuration/feature_profile/sdwan/routing/__init__.py +0 -26
  332. catalystwan/models/configuration/feature_profile/sdwan/routing/bgp.py +0 -609
  333. catalystwan/models/configuration/feature_profile/sdwan/service/__init__.py +0 -91
  334. catalystwan/models/configuration/feature_profile/sdwan/service/dual_router_ha.py +0 -26
  335. catalystwan/models/configuration/feature_profile/sdwan/service/lan/multilink.py +0 -101
  336. catalystwan/models/configuration/feature_profile/sdwan/service/service_chain.py +0 -38
  337. catalystwan/models/configuration/feature_profile/sdwan/sig_security/__init__.py +0 -19
  338. catalystwan/models/configuration/feature_profile/sdwan/sig_security/sig_security.py +0 -379
  339. catalystwan/models/configuration/feature_profile/sdwan/system/__init__.py +0 -59
  340. catalystwan/models/configuration/feature_profile/sdwan/system/banner.py +0 -30
  341. catalystwan/models/configuration/feature_profile/sdwan/system/basic.py +0 -290
  342. catalystwan/models/configuration/feature_profile/sdwan/system/bfd.py +0 -69
  343. catalystwan/models/configuration/feature_profile/sdwan/system/device_access.py +0 -157
  344. catalystwan/models/configuration/feature_profile/sdwan/system/device_access_ipv6.py +0 -157
  345. catalystwan/models/configuration/feature_profile/sdwan/system/global_parcel.py +0 -163
  346. catalystwan/models/configuration/feature_profile/sdwan/system/logging_parcel.py +0 -162
  347. catalystwan/models/configuration/feature_profile/sdwan/system/mrf.py +0 -75
  348. catalystwan/models/configuration/feature_profile/sdwan/system/ntp.py +0 -103
  349. catalystwan/models/configuration/feature_profile/sdwan/system/omp.py +0 -120
  350. catalystwan/models/configuration/feature_profile/sdwan/system/security.py +0 -179
  351. catalystwan/models/configuration/feature_profile/sdwan/system/snmp.py +0 -173
  352. catalystwan/models/configuration/feature_profile/sdwan/topology/__init__.py +0 -29
  353. catalystwan/models/configuration/feature_profile/sdwan/topology/custom_control.py +0 -425
  354. catalystwan/models/configuration/feature_profile/sdwan/topology/hubspoke.py +0 -60
  355. catalystwan/models/configuration/feature_profile/sdwan/topology/mesh.py +0 -23
  356. catalystwan/models/configuration/feature_profile/sdwan/trackers/__init__.py +0 -36
  357. catalystwan/models/configuration/feature_profile/sdwan/trackers/tracker.py +0 -96
  358. catalystwan/models/configuration/feature_profile/sdwan/trackers/tracker_group.py +0 -63
  359. catalystwan/models/configuration/feature_profile/sdwan/transport/__init__.py +0 -93
  360. catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_profile.py +0 -71
  361. catalystwan/models/configuration/feature_profile/sdwan/transport/gps.py +0 -37
  362. catalystwan/models/configuration/feature_profile/sdwan/transport/management/ethernet.py +0 -121
  363. catalystwan/models/configuration/feature_profile/sdwan/transport/t1e1controller.py +0 -124
  364. catalystwan/models/configuration/feature_profile/sdwan/transport/vpn.py +0 -285
  365. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/cellular.py +0 -173
  366. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ethernet.py +0 -389
  367. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/gre.py +0 -46
  368. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ipsec.py +0 -137
  369. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/multilink.py +0 -219
  370. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/protocol_over.py +0 -405
  371. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/t1e1serial.py +0 -195
  372. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/__init__.py +0 -62
  373. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/analog_interface.py +0 -436
  374. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/call_routing.py +0 -179
  375. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/digital_interface.py +0 -380
  376. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/dsp_farm.py +0 -193
  377. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/media_profile.py +0 -17
  378. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/server_group.py +0 -51
  379. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/srst.py +0 -86
  380. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/supervisory_disconnect.py +0 -69
  381. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_profile.py +0 -42
  382. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_rule.py +0 -31
  383. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/trunk_group.py +0 -26
  384. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_global.py +0 -57
  385. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_tenant.py +0 -40
  386. catalystwan/models/configuration/network_hierarchy/__init__.py +0 -24
  387. catalystwan/models/configuration/network_hierarchy/cflowd.py +0 -128
  388. catalystwan/models/configuration/network_hierarchy/node.py +0 -88
  389. catalystwan/models/configuration/network_hierarchy/security_logging.py +0 -91
  390. catalystwan/models/configuration/packages.py +0 -57
  391. catalystwan/models/configuration/policy_group.py +0 -74
  392. catalystwan/models/configuration/topology_group.py +0 -52
  393. catalystwan/models/policy/definition/aip.py +0 -60
  394. catalystwan/models/policy/definition/amp.py +0 -65
  395. catalystwan/models/policy/definition/app_route.py +0 -246
  396. catalystwan/models/policy/definition/cflowd.py +0 -95
  397. catalystwan/models/policy/definition/dial_peer.py +0 -60
  398. catalystwan/models/policy/definition/dns_security.py +0 -130
  399. catalystwan/models/policy/definition/fxo_port.py +0 -63
  400. catalystwan/models/policy/definition/fxs_did_port.py +0 -58
  401. catalystwan/models/policy/definition/fxs_port.py +0 -56
  402. catalystwan/models/policy/definition/intrusion_prevention.py +0 -55
  403. catalystwan/models/policy/definition/pri_isdn_port.py +0 -48
  404. catalystwan/models/policy/definition/route_policy.py +0 -187
  405. catalystwan/models/policy/definition/srst_phone_profile.py +0 -37
  406. catalystwan/models/policy/definition/ssl_decryption.py +0 -209
  407. catalystwan/models/policy/definition/ssl_decryption_utd_profile.py +0 -88
  408. catalystwan/models/policy/definition/url_filtering.py +0 -70
  409. catalystwan/models/policy/definition/vpn_qos_map.py +0 -46
  410. catalystwan/models/policy/list/app.py +0 -44
  411. catalystwan/models/policy/list/app_probe.py +0 -42
  412. catalystwan/models/policy/list/as_path.py +0 -30
  413. catalystwan/models/policy/list/class_map.py +0 -30
  414. catalystwan/models/policy/list/color.py +0 -28
  415. catalystwan/models/policy/list/communities.py +0 -83
  416. catalystwan/models/policy/list/data_ipv6_prefix.py +0 -30
  417. catalystwan/models/policy/list/data_prefix.py +0 -30
  418. catalystwan/models/policy/list/fax_protocol.py +0 -45
  419. catalystwan/models/policy/list/fqdn.py +0 -24
  420. catalystwan/models/policy/list/geo_location.py +0 -33
  421. catalystwan/models/policy/list/identity.py +0 -29
  422. catalystwan/models/policy/list/ips_signature.py +0 -27
  423. catalystwan/models/policy/list/ipv6_prefix.py +0 -33
  424. catalystwan/models/policy/list/local_app.py +0 -45
  425. catalystwan/models/policy/list/local_domain.py +0 -36
  426. catalystwan/models/policy/list/media_profile.py +0 -44
  427. catalystwan/models/policy/list/mirror.py +0 -27
  428. catalystwan/models/policy/list/modem_pass_through.py +0 -27
  429. catalystwan/models/policy/list/policer.py +0 -39
  430. catalystwan/models/policy/list/port.py +0 -33
  431. catalystwan/models/policy/list/preferred_color_group.py +0 -82
  432. catalystwan/models/policy/list/prefix.py +0 -33
  433. catalystwan/models/policy/list/protocol_name.py +0 -26
  434. catalystwan/models/policy/list/region.py +0 -45
  435. catalystwan/models/policy/list/scalable_group_tag.py +0 -30
  436. catalystwan/models/policy/list/site.py +0 -34
  437. catalystwan/models/policy/list/sla.py +0 -77
  438. catalystwan/models/policy/list/supervisory_disconnect.py +0 -62
  439. catalystwan/models/policy/list/threat_grid_api_key.py +0 -32
  440. catalystwan/models/policy/list/tloc.py +0 -32
  441. catalystwan/models/policy/list/translation_profile.py +0 -32
  442. catalystwan/models/policy/list/translation_rules.py +0 -29
  443. catalystwan/models/policy/list/trunkgroup.py +0 -56
  444. catalystwan/models/policy/list/umbrella_data.py +0 -30
  445. catalystwan/models/policy/list/url.py +0 -39
  446. catalystwan/models/policy/list/vpn.py +0 -40
  447. catalystwan/models/policy/list/zone.py +0 -46
  448. catalystwan/models/policy/voice.py +0 -77
  449. catalystwan/models/settings.py +0 -41
  450. catalystwan/models/templates.py +0 -79
  451. catalystwan/tests/builders/test_report.py +0 -60
  452. catalystwan/tests/builders/uc_voice.py +0 -85
  453. catalystwan/tests/models/__init__.py +0 -0
  454. catalystwan/tests/models/configuration/feature_profile/sdwan/policy_object/security/test_url.py +0 -73
  455. catalystwan/tests/models/test_digital_interface.py +0 -56
  456. catalystwan/tests/templates/definitions/aaa_basic.json +0 -96
  457. catalystwan/tests/templates/definitions/aaa_complex.json +0 -464
  458. catalystwan/tests/templates/definitions/cisco_aaa_complex.json +0 -361
  459. catalystwan/tests/templates/definitions/cisco_logging_complex.json +0 -268
  460. catalystwan/tests/templates/definitions/cisco_ntp_complex.json +0 -143
  461. catalystwan/tests/templates/definitions/cisco_omp_complex.json +0 -175
  462. catalystwan/tests/templates/definitions/cisco_ospf_complex.json +0 -302
  463. catalystwan/tests/templates/definitions/cisco_sig.json +0 -405
  464. catalystwan/tests/templates/definitions/cisco_snmp_complex.json +0 -258
  465. catalystwan/tests/templates/definitions/cisco_system_complex.json +0 -502
  466. catalystwan/tests/templates/definitions/cisco_vpn_interface_complex.json +0 -821
  467. catalystwan/tests/templates/definitions/omp_vsmart_1.json +0 -26
  468. catalystwan/tests/templates/definitions/omp_vsmart_complex.json +0 -73
  469. catalystwan/tests/templates/definitions/security_vsmart_complex.json +0 -24
  470. catalystwan/tests/templates/definitions/system_vsmart_complex.json +0 -193
  471. catalystwan/tests/templates/definitions/vpn_vsmart_basic.json +0 -17
  472. catalystwan/tests/templates/definitions/vpn_vsmart_complex.json +0 -179
  473. catalystwan/tests/templates/definitions/vpn_vsmart_interface_basic.json +0 -42
  474. catalystwan/tests/templates/definitions/vpn_vsmart_interface_complex.json +0 -208
  475. catalystwan/tests/templates/models/aaa.py +0 -106
  476. catalystwan/tests/templates/models/cisco_logging.py +0 -65
  477. catalystwan/tests/templates/models/cisco_ntp.py +0 -17
  478. catalystwan/tests/templates/models/cisco_omp.py +0 -37
  479. catalystwan/tests/templates/models/cisco_ospf.py +0 -60
  480. catalystwan/tests/templates/models/cisco_secure_internet_gateway.py +0 -95
  481. catalystwan/tests/templates/models/cisco_snmp.py +0 -40
  482. catalystwan/tests/templates/models/cisco_vpn_interface.py +0 -200
  483. catalystwan/tests/templates/models/security_vsmart.py +0 -11
  484. catalystwan/tests/templates/models/system_vsmart.py +0 -37
  485. catalystwan/tests/templates/models/vpn_vsmart.py +0 -32
  486. catalystwan/tests/templates/models/vpn_vsmart_interface.py +0 -54
  487. catalystwan/tests/templates/schemas/aaa.json +0 -1096
  488. catalystwan/tests/templates/schemas/cisco_logging.json +0 -577
  489. catalystwan/tests/templates/schemas/cisco_ntp.json +0 -265
  490. catalystwan/tests/templates/schemas/cisco_omp.json +0 -479
  491. catalystwan/tests/templates/schemas/cisco_ospf.json +0 -908
  492. catalystwan/tests/templates/schemas/cisco_secure_internet_gateway.json +0 -1520
  493. catalystwan/tests/templates/schemas/cisco_snmp.json +0 -561
  494. catalystwan/tests/templates/schemas/cisco_vpn_interface.json +0 -3348
  495. catalystwan/tests/templates/schemas/security-vsmart.json +0 -58
  496. catalystwan/tests/templates/schemas/system-vsmart.json +0 -2585
  497. catalystwan/tests/templates/schemas/vpn-vsmart-interface.json +0 -859
  498. catalystwan/tests/templates/schemas/vpn-vsmart.json +0 -445
  499. catalystwan/tests/templates/test_find_template_values_2.py +0 -193
  500. catalystwan/tests/test_feature_profile_api.py +0 -282
  501. catalystwan/tests/test_models_common.py +0 -53
  502. catalystwan/utils/model.py +0 -48
  503. catalystwan/utils/persona.py +0 -5
  504. catalystwan/utils/type_check.py +0 -22
  505. catalystwan/workflows/backup_restore_device_templates.py +0 -467
  506. catalystwan-0.41.2.dev9.dist-info/RECORD +0 -641
  507. /catalystwan/tests/templates/definitions/{cisco_banner.json → banner_1.json} +0 -0
  508. {catalystwan-0.41.2.dev9.dist-info → catalystwan-0.41.3.dist-info}/LICENSE +0 -0
  509. {catalystwan-0.41.2.dev9.dist-info → catalystwan-0.41.3.dist-info}/WHEEL +0 -0
@@ -1,73 +1,53 @@
1
1
  # Copyright 2023 Cisco Systems, Inc. and its affiliates
2
2
 
3
+ from enum import Enum
3
4
  from pathlib import Path
4
- from typing import ClassVar, List, Literal, Optional
5
+ from typing import ClassVar, List, Optional
5
6
 
6
7
  from pydantic import ConfigDict, Field, field_validator
7
8
 
8
- from catalystwan.api.templates.bool_str import BoolStr
9
9
  from catalystwan.api.templates.feature_template import FeatureTemplate, FeatureTemplateValidator
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"]
10
+
11
+
12
+ class Role(str, Enum):
13
+ PRIMARY = "primary"
14
+ SECONDARY = "secondary"
34
15
 
35
16
 
36
17
  class Dns(FeatureTemplateValidator):
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'.")
18
+ dns_addr: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "dns-addr"})
19
+ role: Role = Role.PRIMARY
41
20
  model_config = ConfigDict(populate_by_name=True)
42
21
 
43
22
 
44
23
  class DnsIpv6(FeatureTemplateValidator):
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
- )
24
+ dns_addr: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "dns-addr"})
25
+ role: Optional[Role] = Role.PRIMARY
52
26
  model_config = ConfigDict(populate_by_name=True)
53
27
 
54
28
 
55
29
  class Host(FeatureTemplateValidator):
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.")
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"
58
44
 
59
45
 
60
46
  class Service(FeatureTemplateValidator):
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
- )
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"})
71
51
  model_config = ConfigDict(populate_by_name=True)
72
52
 
73
53
  @field_validator("track_enable")
@@ -76,450 +56,345 @@ class Service(FeatureTemplateValidator):
76
56
  return str(value).lower()
77
57
 
78
58
 
59
+ class ServiceRouteService(str, Enum):
60
+ SIG = "sig"
61
+
62
+
79
63
  class ServiceRoute(FeatureTemplateValidator):
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.")
64
+ prefix: str
65
+ vpn: int
66
+ service: ServiceRouteService = ServiceRouteService.SIG
83
67
 
84
68
 
85
69
  class NextHop(FeatureTemplateValidator):
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.")
70
+ address: Optional[str] = None
71
+ distance: Optional[int] = 1
88
72
 
89
73
 
90
74
  class NextHopWithTrack(FeatureTemplateValidator):
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.")
75
+ address: Optional[str] = None
76
+ distance: Optional[int] = 1
77
+ tracker: str
98
78
 
99
79
 
100
80
  class RouteInterface(FeatureTemplateValidator):
101
- interface_name: str = Field(
102
- description="The name of the interface used for routing.", json_schema_extra={"vmanage_key": "interface-name"}
103
- )
81
+ interface_name: str = Field(json_schema_extra={"vmanage_key": "interface-name"})
104
82
  interface_next_hop: Optional[List[NextHop]] = Field(
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"]},
83
+ default=None, json_schema_extra={"vmanage_key": "interface-next-hop", "priority_order": ["address", "distance"]}
108
84
  )
109
85
  model_config = ConfigDict(populate_by_name=True)
110
86
 
111
87
 
112
88
  class Routev4(FeatureTemplateValidator):
113
- prefix: Optional[str] = Field(default=None, description="The IPv4 network prefix for the static route.")
89
+ prefix: Optional[str] = None
114
90
  next_hop: Optional[List[NextHop]] = Field(
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"]},
91
+ default=None, json_schema_extra={"vmanage_key": "next-hop", "priority_order": ["address", "distance"]}
118
92
  )
119
93
  next_hop_with_track: Optional[List[NextHopWithTrack]] = Field(
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"},
94
+ default=None, json_schema_extra={"vmanage_key": "next-hop-with-track"}
123
95
  )
124
96
  route_interface: Optional[RouteInterface] = Field(
125
- default=None,
126
- description="The interface configuration for the IPv4 static route.",
127
- json_schema_extra={"vmanage_key": "route-interface"},
97
+ default=None, json_schema_extra={"vmanage_key": "route-interface"}
128
98
  )
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
-
99
+ null0: Optional[bool] = None
100
+ distance: Optional[int] = None
101
+ vpn: Optional[int] = None
102
+ dhcp: Optional[bool] = None
140
103
  model_config = ConfigDict(populate_by_name=True)
141
104
 
142
105
 
143
106
  class NextHopv6(FeatureTemplateValidator):
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.")
107
+ address: str
108
+ distance: Optional[int] = 1
109
+
110
+
111
+ class Nat(str, Enum):
112
+ NAT64 = "NAT64"
113
+ NAT66 = "NAT66"
146
114
 
147
115
 
148
116
  class Routev6(FeatureTemplateValidator):
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
- )
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
164
122
  model_config = ConfigDict(populate_by_name=True)
165
123
 
166
124
 
167
125
  class GreRoute(FeatureTemplateValidator):
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
- )
126
+ prefix: str
127
+ vpn: int
128
+ interface: Optional[List[str]] = None
173
129
 
174
130
 
175
131
  class IpsecRoute(FeatureTemplateValidator):
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
- )
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"
181
157
 
182
158
 
183
159
  class PrefixList(FeatureTemplateValidator):
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.")
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]
193
163
  model_config = ConfigDict(populate_by_name=True)
194
164
 
195
165
 
196
166
  class Advertise(FeatureTemplateValidator):
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
- )
167
+ protocol: AdvertiseProtocol
168
+ route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"})
203
169
  protocol_sub_type: Optional[List[AdvertiseProtocolSubType]] = Field(
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"},
170
+ default=None, json_schema_extra={"vmanage_key": "protocol-sub-type"}
212
171
  )
172
+ prefix_list: Optional[List[PrefixList]] = Field(default=None, json_schema_extra={"vmanage_key": "prefix-list"})
213
173
  model_config = ConfigDict(populate_by_name=True)
214
174
 
215
175
 
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
+
216
189
  class Ipv6Advertise(FeatureTemplateValidator):
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
- )
190
+ protocol: Ipv6AdvertiseProtocol
191
+ route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"})
223
192
  protocol_sub_type: Optional[List[Ipv6AdvertiseProtocolSubType]] = Field(
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"},
193
+ default=None, json_schema_extra={"vmanage_key": "protocol-sub-type"}
232
194
  )
195
+ prefix_list: Optional[List[PrefixList]] = Field(default=None, json_schema_extra={"vmanage_key": "prefix-list"})
233
196
  model_config = ConfigDict(populate_by_name=True)
234
197
 
235
198
 
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
+
236
208
  class Pool(FeatureTemplateValidator):
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.")
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
252
216
  model_config = ConfigDict(populate_by_name=True)
253
217
 
254
218
 
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
+
255
229
  class Natpool(FeatureTemplateValidator):
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
- )
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"})
280
237
  model_config = ConfigDict(populate_by_name=True)
281
238
 
282
239
 
240
+ class StaticNatDirection(str, Enum):
241
+ INSIDE = "inside"
242
+ OUTSIDE = "outside"
243
+
244
+
283
245
  class Static(FeatureTemplateValidator):
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
- )
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"})
308
251
  model_config = ConfigDict(populate_by_name=True)
309
252
 
310
253
 
311
254
  class SubnetStatic(FeatureTemplateValidator):
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
- )
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"})
333
260
  model_config = ConfigDict(populate_by_name=True)
334
261
 
335
262
 
263
+ class Proto(str, Enum):
264
+ TCP = "tcp"
265
+ UDP = "udp"
266
+
267
+
336
268
  class PortForward(FeatureTemplateValidator):
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).")
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
359
275
  model_config = ConfigDict(populate_by_name=True)
360
276
 
361
277
 
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
+
362
295
  class RouteImportRedistribute(FeatureTemplateValidator):
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
- )
296
+ protocol: RouteImportRedistributeProtocol
297
+ route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"})
371
298
  model_config = ConfigDict(populate_by_name=True)
372
299
 
373
300
 
374
301
  class RouteImport(FeatureTemplateValidator):
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
- )
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
389
306
  model_config = ConfigDict(populate_by_name=True)
390
307
 
391
308
 
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
+
392
327
  class RouteImportFromRedistribute(FeatureTemplateValidator):
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
- )
328
+ protocol: RouteImportFromRedistributeProtocol
329
+ route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"})
401
330
  model_config = ConfigDict(populate_by_name=True)
402
331
 
403
332
 
404
333
  class RouteImportFrom(FeatureTemplateValidator):
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.")
334
+ source_vpn: int = Field(json_schema_extra={"vmanage_key": "source-vpn"})
335
+ protocol: RouteImportFromProtocol
410
336
  protocol_sub_type: List[RouteImportFromProtocolSubType] = Field(
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
- ),
337
+ json_schema_extra={"vmanage_key": "protocol-sub-type"}
424
338
  )
339
+ route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"})
340
+ redistribute: Optional[List[RouteImportFromRedistribute]] = None
425
341
  model_config = ConfigDict(populate_by_name=True)
426
342
 
427
343
 
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
+
428
361
  class RouteExportRedistribute(FeatureTemplateValidator):
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
- )
362
+ protocol: RouteExportRedistributeProtocol
363
+ route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"})
437
364
  model_config = ConfigDict(populate_by_name=True)
438
365
 
439
366
 
440
367
  class RouteExport(FeatureTemplateValidator):
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
- )
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]]
457
372
  model_config = ConfigDict(populate_by_name=True)
458
373
 
459
374
 
460
375
  class CiscoVPNModel(FeatureTemplate):
461
376
  model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True)
462
- _docs_description: str = "Cisco VPN Feature Template configuration."
463
377
 
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
- )
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"})
482
382
  omp_admin_distance_ipv4: Optional[int] = Field(
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"},
383
+ default=None, json_schema_extra={"vmanage_key": "omp-admin-distance-ipv4"}
486
384
  )
487
385
  omp_admin_distance_ipv6: Optional[int] = Field(
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.",
386
+ default=None, json_schema_extra={"vmanage_key": "omp-admin-distance-ipv6"}
514
387
  )
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
515
393
  service_route: Optional[List[ServiceRoute]] = Field(
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"},
394
+ default=None, json_schema_extra={"data_path": ["ip"], "vmanage_key": "service-route"}
519
395
  )
520
396
  route_v4: Optional[List[Routev4]] = Field(
521
397
  default=None,
522
- description="A list of IPv4 route configurations within the VPN instance.",
523
398
  json_schema_extra={
524
399
  "data_path": ["ip"],
525
400
  "vmanage_key": "route",
@@ -527,70 +402,32 @@ class CiscoVPNModel(FeatureTemplate):
527
402
  },
528
403
  )
529
404
  route_v6: Optional[List[Routev6]] = Field(
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"},
405
+ default=None, json_schema_extra={"data_path": ["ipv6"], "vmanage_key": "route"}
533
406
  )
534
407
  gre_route: Optional[List[GreRoute]] = Field(
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"},
408
+ default=None, json_schema_extra={"data_path": ["ip"], "vmanage_key": "gre-route"}
538
409
  )
539
410
  ipsec_route: Optional[List[IpsecRoute]] = Field(
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"]},
411
+ default=None, json_schema_extra={"data_path": ["ip"], "vmanage_key": "ipsec-route"}
548
412
  )
413
+ advertise: Optional[List[Advertise]] = Field(default=None, json_schema_extra={"data_path": ["omp"]})
549
414
  ipv6_advertise: Optional[List[Ipv6Advertise]] = Field(
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"]},
415
+ default=None, json_schema_extra={"data_path": ["omp"], "vmanage_key": "ipv6-advertise"}
568
416
  )
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"]})
569
420
  subnet_static: Optional[List[SubnetStatic]] = Field(
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"},
421
+ default=None, json_schema_extra={"data_path": ["nat"], "vmanage_key": "subnet-static"}
573
422
  )
574
423
  port_forward: Optional[List[PortForward]] = Field(
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"},
424
+ default=None, json_schema_extra={"data_path": ["nat"], "vmanage_key": "port-forward"}
583
425
  )
426
+ route_import: Optional[List[RouteImport]] = Field(default=None, json_schema_extra={"vmanage_key": "route-import"})
584
427
  route_import_from: Optional[List[RouteImportFrom]] = Field(
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"},
428
+ default=None, json_schema_extra={"vmanage_key": "route-import-from"}
593
429
  )
430
+ route_export: Optional[List[RouteExport]] = Field(default=None, json_schema_extra={"vmanage_key": "route-export"})
594
431
 
595
432
  payload_path: ClassVar[Path] = Path(__file__).parent / "DEPRECATED"
596
433
  type: ClassVar[str] = "cisco_vpn"