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.
- catalystwan/__init__.py +3 -2
- catalystwan/api/administration.py +13 -2
- catalystwan/api/api_container.py +4 -1
- catalystwan/api/builders/__init__.py +14 -0
- catalystwan/api/builders/feature_profiles/__init__.py +0 -0
- catalystwan/api/builders/feature_profiles/application_priority.py +58 -0
- catalystwan/api/builders/feature_profiles/builder_factory.py +59 -0
- catalystwan/api/builders/feature_profiles/cli.py +76 -0
- catalystwan/api/builders/feature_profiles/mixins.py +44 -0
- catalystwan/api/builders/feature_profiles/other.py +79 -0
- catalystwan/api/builders/feature_profiles/report.py +155 -0
- catalystwan/api/builders/feature_profiles/service.py +248 -0
- catalystwan/api/builders/feature_profiles/system.py +80 -0
- catalystwan/api/builders/feature_profiles/transport.py +256 -0
- catalystwan/api/builders/feature_profiles/uc_voice.py +287 -0
- catalystwan/api/config_group_api.py +41 -16
- catalystwan/api/configuration_groups/parcel.py +100 -30
- catalystwan/api/feature_profile_api.py +2021 -242
- catalystwan/api/policy_api.py +470 -116
- catalystwan/api/template_api.py +113 -44
- catalystwan/api/templates/README.md +61 -47
- catalystwan/api/templates/cli_template.py +17 -7
- catalystwan/api/templates/device_template/device_template.py +127 -32
- catalystwan/api/templates/feature_template.py +3 -3
- catalystwan/api/templates/models/aaa_model.py +387 -0
- catalystwan/api/templates/models/cisco_aaa_model.py +289 -42
- catalystwan/api/templates/models/cisco_banner_model.py +11 -2
- catalystwan/api/templates/models/cisco_bfd_model.py +31 -36
- catalystwan/api/templates/models/cisco_bgp_model.py +382 -131
- catalystwan/api/templates/models/cisco_logging_model.py +80 -43
- catalystwan/api/templates/models/cisco_ntp_model.py +34 -15
- catalystwan/api/templates/models/cisco_omp_model.py +70 -60
- catalystwan/api/templates/models/cisco_ospf.py +143 -74
- catalystwan/api/templates/models/cisco_ospfv3.py +217 -95
- catalystwan/api/templates/models/cisco_secure_internet_gateway.py +304 -142
- catalystwan/api/templates/models/cisco_snmp_model.py +66 -52
- catalystwan/api/templates/models/cisco_system.py +238 -129
- catalystwan/api/templates/models/cisco_vpn_interface_model.py +632 -275
- catalystwan/api/templates/models/cisco_vpn_model.py +433 -270
- catalystwan/api/templates/models/cli_template.py +3 -2
- catalystwan/api/templates/models/omp_vsmart_model.py +46 -10
- catalystwan/api/templates/models/security_vsmart_model.py +11 -8
- catalystwan/api/templates/models/supported.py +10 -4
- catalystwan/api/templates/models/system_vsmart_model.py +164 -27
- catalystwan/api/templates/models/vpn_vsmart_interface_model.py +198 -0
- catalystwan/api/templates/models/vpn_vsmart_model.py +124 -0
- catalystwan/apigw_auth.py +6 -2
- catalystwan/dataclasses.py +2 -53
- catalystwan/endpoints/__init__.py +41 -41
- catalystwan/endpoints/certificate_management_device.py +4 -0
- catalystwan/endpoints/cluster_management.py +27 -7
- catalystwan/endpoints/configuration/feature_profile/sdwan/application_priority.py +107 -0
- catalystwan/endpoints/configuration/feature_profile/sdwan/cli.py +60 -0
- catalystwan/endpoints/configuration/feature_profile/sdwan/dns_security.py +83 -0
- catalystwan/endpoints/configuration/feature_profile/sdwan/embedded_security.py +88 -0
- catalystwan/endpoints/configuration/feature_profile/sdwan/other.py +62 -0
- catalystwan/endpoints/configuration/feature_profile/sdwan/policy_object.py +35 -12
- catalystwan/endpoints/configuration/feature_profile/sdwan/service.py +154 -0
- catalystwan/endpoints/configuration/feature_profile/sdwan/sig_security.py +88 -0
- catalystwan/endpoints/configuration/feature_profile/sdwan/system.py +164 -11
- catalystwan/endpoints/configuration/feature_profile/sdwan/topology.py +93 -0
- catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py +144 -26
- catalystwan/endpoints/configuration/feature_profile/sdwan/uc_voice.py +77 -0
- catalystwan/endpoints/configuration/network_hierarchy.py +32 -0
- catalystwan/endpoints/configuration/policy/abstractions.py +49 -0
- catalystwan/endpoints/configuration/policy/definition/access_control_list.py +6 -11
- catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py +6 -11
- catalystwan/endpoints/configuration/policy/definition/aip.py +52 -0
- catalystwan/endpoints/configuration/policy/definition/amp.py +52 -0
- catalystwan/endpoints/configuration/policy/definition/app_route.py +50 -0
- catalystwan/endpoints/configuration/policy/definition/cflowd.py +46 -0
- catalystwan/endpoints/configuration/policy/definition/control.py +6 -11
- catalystwan/endpoints/configuration/policy/definition/device_access.py +6 -11
- catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py +6 -11
- catalystwan/endpoints/configuration/policy/definition/dial_peer.py +57 -0
- catalystwan/endpoints/configuration/policy/definition/dns_security.py +50 -0
- catalystwan/endpoints/configuration/policy/definition/fxo_port.py +57 -0
- catalystwan/endpoints/configuration/policy/definition/fxs_did_port.py +57 -0
- catalystwan/endpoints/configuration/policy/definition/fxs_port.py +57 -0
- catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py +6 -11
- catalystwan/endpoints/configuration/policy/definition/intrusion_prevention.py +52 -0
- catalystwan/endpoints/configuration/policy/definition/mesh.py +2 -11
- catalystwan/endpoints/configuration/policy/definition/pri_isdn_port.py +57 -0
- catalystwan/endpoints/configuration/policy/definition/qos_map.py +2 -11
- catalystwan/endpoints/configuration/policy/definition/rewrite.py +6 -11
- catalystwan/endpoints/configuration/policy/definition/route_policy.py +50 -0
- catalystwan/endpoints/configuration/policy/definition/rule_set.py +2 -11
- catalystwan/endpoints/configuration/policy/definition/security_group.py +6 -11
- catalystwan/endpoints/configuration/policy/definition/srst_phone_profile.py +59 -0
- catalystwan/endpoints/configuration/policy/definition/ssl_decryption.py +50 -0
- catalystwan/endpoints/configuration/policy/definition/ssl_decryption_utd_profile.py +52 -0
- catalystwan/endpoints/configuration/policy/definition/traffic_data.py +6 -11
- catalystwan/endpoints/configuration/policy/definition/url_filtering.py +50 -0
- catalystwan/endpoints/configuration/policy/definition/vpn_membership.py +6 -11
- catalystwan/endpoints/configuration/policy/definition/vpn_qos_map.py +50 -0
- catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py +6 -11
- catalystwan/endpoints/configuration/policy/list/app.py +3 -16
- catalystwan/endpoints/configuration/policy/list/app_probe.py +6 -15
- catalystwan/endpoints/configuration/policy/list/as_path.py +3 -16
- catalystwan/endpoints/configuration/policy/list/class_map.py +3 -16
- catalystwan/endpoints/configuration/policy/list/color.py +3 -16
- catalystwan/endpoints/configuration/policy/list/community.py +3 -16
- catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py +6 -15
- catalystwan/endpoints/configuration/policy/list/data_prefix.py +3 -16
- catalystwan/endpoints/configuration/policy/list/expanded_community.py +6 -15
- catalystwan/endpoints/configuration/policy/list/extended_community.py +52 -0
- catalystwan/endpoints/configuration/policy/list/fax_protocol.py +48 -0
- catalystwan/endpoints/configuration/policy/list/fqdn.py +3 -16
- catalystwan/endpoints/configuration/policy/list/geo_location.py +3 -16
- catalystwan/endpoints/configuration/policy/list/identity.py +48 -0
- catalystwan/endpoints/configuration/policy/list/ips_signature.py +6 -15
- catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py +3 -16
- catalystwan/endpoints/configuration/policy/list/local_app.py +3 -16
- catalystwan/endpoints/configuration/policy/list/local_domain.py +3 -16
- catalystwan/endpoints/configuration/policy/list/media_profile.py +52 -0
- catalystwan/endpoints/configuration/policy/list/mirror.py +3 -16
- catalystwan/endpoints/configuration/policy/list/modem_pass_through.py +52 -0
- catalystwan/endpoints/configuration/policy/list/policer.py +3 -16
- catalystwan/endpoints/configuration/policy/list/port.py +3 -16
- catalystwan/endpoints/configuration/policy/list/preferred_color_group.py +6 -15
- catalystwan/endpoints/configuration/policy/list/prefix.py +4 -16
- catalystwan/endpoints/configuration/policy/list/protocol_name.py +6 -15
- catalystwan/endpoints/configuration/policy/list/region.py +2 -10
- catalystwan/endpoints/configuration/policy/list/scalable_group_tag.py +52 -0
- catalystwan/endpoints/configuration/policy/list/site.py +3 -16
- catalystwan/endpoints/configuration/policy/list/sla.py +3 -16
- catalystwan/endpoints/configuration/policy/list/supervisory_disconnect.py +52 -0
- catalystwan/endpoints/configuration/policy/list/threat_grid_api_key.py +52 -0
- catalystwan/endpoints/configuration/policy/list/tloc.py +3 -16
- catalystwan/endpoints/configuration/policy/list/translation_profile.py +52 -0
- catalystwan/endpoints/configuration/policy/list/translation_rules.py +52 -0
- catalystwan/endpoints/configuration/policy/list/trunkgroup.py +48 -0
- catalystwan/endpoints/configuration/policy/list/umbrella_data.py +52 -0
- catalystwan/endpoints/configuration/policy/list/url_allow_list.py +3 -16
- catalystwan/endpoints/configuration/policy/list/url_block_list.py +3 -16
- catalystwan/endpoints/configuration/policy/list/vpn.py +3 -16
- catalystwan/endpoints/configuration/policy/list/zone.py +3 -16
- catalystwan/endpoints/configuration/policy/security_template.py +2 -3
- catalystwan/endpoints/configuration/policy/voice_template.py +39 -0
- catalystwan/endpoints/configuration/policy_group.py +30 -0
- catalystwan/endpoints/configuration/software_actions.py +2 -4
- catalystwan/endpoints/configuration/topology_group.py +51 -0
- catalystwan/endpoints/configuration_dashboard_status.py +2 -2
- catalystwan/endpoints/configuration_device_template.py +15 -1
- catalystwan/endpoints/configuration_feature_profile.py +8 -11
- catalystwan/endpoints/configuration_general_template.py +31 -0
- catalystwan/endpoints/configuration_group.py +28 -5
- catalystwan/endpoints/configuration_settings.py +90 -1
- catalystwan/endpoints/configuration_template_master.py +48 -0
- catalystwan/endpoints/endpoints_container.py +79 -19
- catalystwan/endpoints/real_time_monitoring/reboot_history.py +1 -3
- catalystwan/endpoints/tenant_migration.py +2 -0
- catalystwan/exceptions.py +17 -0
- catalystwan/integration_tests/base.py +81 -0
- catalystwan/integration_tests/feature_profile/sdwan/__init__.py +0 -0
- catalystwan/integration_tests/feature_profile/sdwan/policy/__init__.py +0 -0
- catalystwan/integration_tests/feature_profile/sdwan/policy/base.py +33 -0
- catalystwan/integration_tests/feature_profile/sdwan/policy/test_extended_community.py +33 -0
- catalystwan/integration_tests/feature_profile/sdwan/policy/test_security_app_list.py +32 -0
- catalystwan/integration_tests/feature_profile/sdwan/test_application_priority.py +433 -0
- catalystwan/integration_tests/feature_profile/sdwan/test_cli.py +54 -0
- catalystwan/integration_tests/feature_profile/sdwan/test_dns_security.py +106 -0
- catalystwan/integration_tests/feature_profile/sdwan/test_other.py +49 -0
- catalystwan/integration_tests/feature_profile/sdwan/test_service.py +1078 -0
- catalystwan/integration_tests/feature_profile/sdwan/test_sig_security.py +322 -0
- catalystwan/integration_tests/feature_profile/sdwan/test_ssl_decryption.py +85 -0
- catalystwan/integration_tests/feature_profile/sdwan/test_system.py +368 -0
- catalystwan/integration_tests/feature_profile/sdwan/test_tracker.py +127 -0
- catalystwan/integration_tests/feature_profile/sdwan/test_transport.py +1698 -0
- catalystwan/integration_tests/feature_profile/sdwan/topology/test_topology.py +93 -0
- catalystwan/integration_tests/profile_builder/__init__.py +0 -0
- catalystwan/integration_tests/profile_builder/test_pb_service.py +197 -0
- catalystwan/integration_tests/profile_builder/test_pb_transport.py +226 -0
- catalystwan/integration_tests/profile_builder/test_pb_uc_voice.py +277 -0
- catalystwan/integration_tests/test_data/__init__.py +117 -0
- catalystwan/integration_tests/test_find_template_values.py +7 -18
- catalystwan/integration_tests/test_network_hierarchy.py +82 -0
- catalystwan/integration_tests/test_settings.py +30 -0
- catalystwan/models/common.py +1898 -2
- catalystwan/models/configuration/common.py +1 -0
- catalystwan/models/configuration/feature_profile/common.py +634 -149
- catalystwan/models/configuration/feature_profile/parcel.py +238 -0
- catalystwan/models/configuration/feature_profile/sdwan/acl/__init__.py +13 -0
- catalystwan/models/configuration/feature_profile/sdwan/acl/ipv4acl.py +298 -0
- catalystwan/models/configuration/feature_profile/sdwan/acl/ipv6acl.py +344 -0
- catalystwan/models/configuration/feature_profile/sdwan/application_priority/__init__.py +218 -0
- catalystwan/models/configuration/feature_profile/sdwan/application_priority/cloud_probe.py +61 -0
- catalystwan/models/configuration/feature_profile/sdwan/application_priority/policy_settings.py +31 -0
- catalystwan/models/configuration/feature_profile/sdwan/application_priority/qos_policy.py +102 -0
- catalystwan/models/configuration/feature_profile/sdwan/application_priority/traffic_policy.py +1057 -0
- catalystwan/models/configuration/feature_profile/sdwan/cli/__init__.py +23 -0
- catalystwan/models/configuration/feature_profile/sdwan/cli/config.py +18 -0
- catalystwan/models/configuration/feature_profile/sdwan/cli/full_config.py +15 -0
- catalystwan/models/configuration/feature_profile/sdwan/dns_security/__init__.py +13 -0
- catalystwan/models/configuration/feature_profile/sdwan/dns_security/dns.py +110 -0
- catalystwan/models/configuration/feature_profile/sdwan/embedded_security/__init__.py +23 -0
- catalystwan/models/configuration/feature_profile/sdwan/embedded_security/ngfirewall.py +493 -0
- catalystwan/models/configuration/feature_profile/sdwan/embedded_security/policy.py +171 -0
- catalystwan/models/configuration/feature_profile/sdwan/other/__init__.py +25 -0
- catalystwan/models/configuration/feature_profile/sdwan/other/cybervision.py +44 -0
- catalystwan/models/configuration/feature_profile/sdwan/other/thousandeyes.py +147 -0
- catalystwan/models/configuration/feature_profile/sdwan/other/ucse.py +110 -0
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/__init__.py +62 -48
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/app_probe.py +34 -20
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/application_list.py +8 -6
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/as_path.py +22 -0
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/color_list.py +7 -5
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/data_prefix.py +13 -4
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/expanded_community_list.py +9 -7
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/extended_community.py +34 -0
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/fowarding_class.py +7 -5
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv4_network_object.py +15 -0
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv4_service_object.py +254 -0
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_data_prefix.py +11 -9
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_prefix_list.py +25 -10
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/mirror.py +27 -0
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/network_object_group.py +15 -0
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/object_group.py +15 -0
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/{policier.py → policer.py} +12 -10
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefered_group_color.py +29 -10
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefix_list.py +23 -8
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/service_object_group.py +21 -0
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/sla_class.py +12 -31
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/standard_community.py +16 -10
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/tloc_list.py +8 -7
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/aip.py +64 -0
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/amp.py +79 -0
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/application_list.py +8 -6
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/data_prefix.py +7 -5
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/fqdn.py +7 -5
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/geolocation_list.py +7 -5
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/identity.py +30 -0
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/intrusion_prevention.py +58 -0
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ips_signature.py +7 -5
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/local_domain.py +7 -5
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/object_group.py +72 -0
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/protocol_list.py +7 -5
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/rule_set.py +137 -0
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/scalable_group_tag.py +26 -0
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/security_port.py +21 -11
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption.py +126 -0
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption_profile.py +165 -0
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url.py +15 -10
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url_filtering.py +148 -0
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/zone.py +14 -18
- catalystwan/models/configuration/feature_profile/sdwan/routing/__init__.py +26 -0
- catalystwan/models/configuration/feature_profile/sdwan/routing/bgp.py +609 -0
- catalystwan/models/configuration/feature_profile/sdwan/{service → routing}/ospf.py +55 -47
- catalystwan/models/configuration/feature_profile/sdwan/{service → routing}/ospfv3.py +74 -72
- catalystwan/models/configuration/feature_profile/sdwan/service/__init__.py +91 -0
- catalystwan/models/configuration/feature_profile/sdwan/service/appqoe.py +76 -41
- catalystwan/models/configuration/feature_profile/sdwan/service/dhcp_server.py +107 -64
- catalystwan/models/configuration/feature_profile/sdwan/service/dual_router_ha.py +26 -0
- catalystwan/models/configuration/feature_profile/sdwan/service/eigrp.py +39 -42
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/common.py +7 -88
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/ethernet.py +231 -155
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/gre.py +38 -108
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/ipsec.py +77 -84
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/multilink.py +101 -0
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/svi.py +62 -56
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/vpn.py +111 -120
- catalystwan/models/configuration/feature_profile/sdwan/service/multicast.py +56 -57
- catalystwan/models/configuration/feature_profile/sdwan/service/object_tracker.py +15 -21
- catalystwan/models/configuration/feature_profile/sdwan/service/route_policy.py +358 -110
- catalystwan/models/configuration/feature_profile/sdwan/service/service_chain.py +38 -0
- catalystwan/models/configuration/feature_profile/sdwan/service/service_insertion_attachment.py +17 -25
- catalystwan/models/configuration/feature_profile/sdwan/service/switchport.py +50 -58
- catalystwan/models/configuration/feature_profile/sdwan/service/tracker.py +12 -21
- catalystwan/models/configuration/feature_profile/sdwan/service/wireless_lan.py +27 -31
- catalystwan/models/configuration/feature_profile/sdwan/sig_security/__init__.py +19 -0
- catalystwan/models/configuration/feature_profile/sdwan/sig_security/sig_security.py +379 -0
- catalystwan/models/configuration/feature_profile/sdwan/system/__init__.py +59 -0
- catalystwan/models/configuration/feature_profile/sdwan/system/aaa.py +58 -10
- catalystwan/models/configuration/feature_profile/sdwan/system/banner.py +30 -0
- catalystwan/models/configuration/feature_profile/sdwan/system/basic.py +290 -0
- catalystwan/models/configuration/feature_profile/sdwan/system/bfd.py +69 -0
- catalystwan/models/configuration/feature_profile/sdwan/system/device_access.py +157 -0
- catalystwan/models/configuration/feature_profile/sdwan/system/device_access_ipv6.py +157 -0
- catalystwan/models/configuration/feature_profile/sdwan/system/global_parcel.py +163 -0
- catalystwan/models/configuration/feature_profile/sdwan/system/logging_parcel.py +162 -0
- catalystwan/models/configuration/feature_profile/sdwan/system/mrf.py +75 -0
- catalystwan/models/configuration/feature_profile/sdwan/system/ntp.py +103 -0
- catalystwan/models/configuration/feature_profile/sdwan/system/omp.py +120 -0
- catalystwan/models/configuration/feature_profile/sdwan/system/security.py +179 -0
- catalystwan/models/configuration/feature_profile/sdwan/system/snmp.py +173 -0
- catalystwan/models/configuration/feature_profile/sdwan/topology/__init__.py +29 -0
- catalystwan/models/configuration/feature_profile/sdwan/topology/custom_control.py +425 -0
- catalystwan/models/configuration/feature_profile/sdwan/topology/hubspoke.py +60 -0
- catalystwan/models/configuration/feature_profile/sdwan/topology/mesh.py +23 -0
- catalystwan/models/configuration/feature_profile/sdwan/trackers/__init__.py +36 -0
- catalystwan/models/configuration/feature_profile/sdwan/trackers/tracker.py +96 -0
- catalystwan/models/configuration/feature_profile/sdwan/trackers/tracker_group.py +63 -0
- catalystwan/models/configuration/feature_profile/sdwan/transport/__init__.py +93 -0
- catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_controller.py +26 -23
- catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_profile.py +71 -0
- catalystwan/models/configuration/feature_profile/sdwan/transport/gps.py +37 -0
- catalystwan/models/configuration/feature_profile/sdwan/transport/management/ethernet.py +121 -0
- catalystwan/models/configuration/feature_profile/sdwan/transport/t1e1controller.py +124 -0
- catalystwan/models/configuration/feature_profile/sdwan/transport/vpn.py +285 -0
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/cellular.py +173 -0
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ethernet.py +389 -0
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/gre.py +46 -0
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ipsec.py +137 -0
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/multilink.py +219 -0
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/protocol_over.py +405 -0
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/t1e1serial.py +195 -0
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/__init__.py +62 -0
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/analog_interface.py +436 -0
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/call_routing.py +179 -0
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/digital_interface.py +380 -0
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/dsp_farm.py +193 -0
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/media_profile.py +17 -0
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/server_group.py +51 -0
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/srst.py +86 -0
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/supervisory_disconnect.py +69 -0
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_profile.py +42 -0
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_rule.py +31 -0
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/trunk_group.py +26 -0
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_global.py +55 -0
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_tenant.py +40 -0
- catalystwan/models/configuration/network_hierarchy/__init__.py +22 -0
- catalystwan/models/configuration/network_hierarchy/cflowd.py +120 -0
- catalystwan/models/configuration/network_hierarchy/node.py +88 -0
- catalystwan/models/configuration/policy_group.py +74 -0
- catalystwan/models/configuration/profile_type.py +1 -6
- catalystwan/models/configuration/topology_group.py +52 -0
- catalystwan/models/policy/__init__.py +275 -69
- catalystwan/models/policy/centralized.py +26 -29
- catalystwan/models/policy/{definitions → definition}/access_control_list.py +47 -17
- catalystwan/models/policy/{definitions → definition}/access_control_list_ipv6.py +42 -18
- catalystwan/models/policy/definition/aip.py +60 -0
- catalystwan/models/policy/definition/amp.py +65 -0
- catalystwan/models/policy/definition/app_route.py +246 -0
- catalystwan/models/policy/definition/cflowd.py +95 -0
- catalystwan/models/policy/{definitions → definition}/control.py +48 -25
- catalystwan/models/policy/{definitions → definition}/device_access.py +22 -11
- catalystwan/models/policy/{definitions → definition}/device_access_ipv6.py +20 -11
- catalystwan/models/policy/definition/dial_peer.py +60 -0
- catalystwan/models/policy/definition/dns_security.py +130 -0
- catalystwan/models/policy/definition/fxo_port.py +63 -0
- catalystwan/models/policy/definition/fxs_did_port.py +58 -0
- catalystwan/models/policy/definition/fxs_port.py +56 -0
- catalystwan/models/policy/{definitions → definition}/hub_and_spoke.py +18 -4
- catalystwan/models/policy/definition/intrusion_prevention.py +55 -0
- catalystwan/models/policy/{definitions → definition}/mesh.py +13 -1
- catalystwan/models/policy/definition/pri_isdn_port.py +48 -0
- catalystwan/models/policy/{definitions → definition}/qos_map.py +39 -32
- catalystwan/models/policy/{definitions → definition}/rewrite.py +12 -2
- catalystwan/models/policy/definition/route_policy.py +187 -0
- catalystwan/models/policy/{definitions → definition}/rule_set.py +66 -48
- catalystwan/models/policy/{definitions → definition}/security_group.py +38 -14
- catalystwan/models/policy/definition/srst_phone_profile.py +37 -0
- catalystwan/models/policy/definition/ssl_decryption.py +209 -0
- catalystwan/models/policy/definition/ssl_decryption_utd_profile.py +87 -0
- catalystwan/models/policy/{definitions → definition}/traffic_data.py +184 -61
- catalystwan/models/policy/definition/url_filtering.py +70 -0
- catalystwan/models/policy/{definitions → definition}/vpn_membership.py +13 -1
- catalystwan/models/policy/definition/vpn_qos_map.py +46 -0
- catalystwan/models/policy/{definitions → definition}/zone_based_firewall.py +93 -32
- catalystwan/models/policy/list/app.py +44 -0
- catalystwan/models/policy/list/app_probe.py +42 -0
- catalystwan/models/policy/list/as_path.py +30 -0
- catalystwan/models/policy/list/class_map.py +30 -0
- catalystwan/models/policy/list/color.py +28 -0
- catalystwan/models/policy/list/communities.py +83 -0
- catalystwan/models/policy/list/data_ipv6_prefix.py +30 -0
- catalystwan/models/policy/list/data_prefix.py +30 -0
- catalystwan/models/policy/list/fax_protocol.py +45 -0
- catalystwan/models/policy/list/fqdn.py +24 -0
- catalystwan/models/policy/list/geo_location.py +33 -0
- catalystwan/models/policy/list/identity.py +29 -0
- catalystwan/models/policy/list/ips_signature.py +27 -0
- catalystwan/models/policy/list/ipv6_prefix.py +33 -0
- catalystwan/models/policy/list/local_app.py +45 -0
- catalystwan/models/policy/list/local_domain.py +36 -0
- catalystwan/models/policy/list/media_profile.py +44 -0
- catalystwan/models/policy/list/mirror.py +27 -0
- catalystwan/models/policy/list/modem_pass_through.py +27 -0
- catalystwan/models/policy/list/policer.py +39 -0
- catalystwan/models/policy/list/port.py +33 -0
- catalystwan/models/policy/list/preferred_color_group.py +82 -0
- catalystwan/models/policy/list/prefix.py +33 -0
- catalystwan/models/policy/list/protocol_name.py +26 -0
- catalystwan/models/policy/list/region.py +45 -0
- catalystwan/models/policy/list/scalable_group_tag.py +30 -0
- catalystwan/models/policy/list/site.py +34 -0
- catalystwan/models/policy/list/sla.py +77 -0
- catalystwan/models/policy/list/supervisory_disconnect.py +62 -0
- catalystwan/models/policy/list/threat_grid_api_key.py +32 -0
- catalystwan/models/policy/list/tloc.py +32 -0
- catalystwan/models/policy/list/translation_profile.py +32 -0
- catalystwan/models/policy/list/translation_rules.py +29 -0
- catalystwan/models/policy/list/trunkgroup.py +56 -0
- catalystwan/models/policy/list/umbrella_data.py +30 -0
- catalystwan/models/policy/list/url.py +39 -0
- catalystwan/models/policy/list/vpn.py +40 -0
- catalystwan/models/policy/list/zone.py +46 -0
- catalystwan/models/policy/localized.py +34 -16
- catalystwan/models/policy/policy.py +13 -9
- catalystwan/models/policy/policy_definition.py +673 -173
- catalystwan/models/policy/policy_list.py +38 -27
- catalystwan/models/policy/security.py +145 -46
- catalystwan/models/policy/voice.py +77 -0
- catalystwan/models/settings.py +41 -0
- catalystwan/models/templates.py +79 -0
- catalystwan/response.py +6 -2
- catalystwan/session.py +1 -1
- catalystwan/tests/builders/test_report.py +60 -0
- catalystwan/tests/builders/uc_voice.py +85 -0
- catalystwan/tests/models/__init__.py +0 -0
- catalystwan/tests/models/test_digital_interface.py +56 -0
- catalystwan/tests/templates/definitions/aaa_basic.json +96 -0
- catalystwan/tests/templates/definitions/aaa_complex.json +464 -0
- catalystwan/tests/templates/definitions/{iuo.json → cisco_aaa.json} +44 -15
- catalystwan/tests/templates/definitions/cisco_aaa_complex.json +361 -0
- catalystwan/tests/templates/definitions/cisco_logging_complex.json +268 -0
- catalystwan/tests/templates/definitions/cisco_ntp_complex.json +143 -0
- catalystwan/tests/templates/definitions/cisco_omp_complex.json +175 -0
- catalystwan/tests/templates/definitions/cisco_ospf_complex.json +302 -0
- catalystwan/tests/templates/definitions/cisco_sig.json +405 -0
- catalystwan/tests/templates/definitions/cisco_snmp_complex.json +258 -0
- catalystwan/tests/templates/definitions/cisco_system_complex.json +502 -0
- catalystwan/tests/templates/definitions/{Basic_Cisco_VPN_Model.json → cisco_vpn_basic.json} +2 -2
- catalystwan/tests/templates/definitions/{complex_cisco_vpn.json → cisco_vpn_complex.json} +27 -12
- catalystwan/tests/templates/definitions/cisco_vpn_interface_complex.json +821 -0
- catalystwan/tests/templates/definitions/omp_vsmart_1.json +26 -0
- catalystwan/tests/templates/definitions/{omp_2.json → omp_vsmart_2.json} +16 -2
- catalystwan/tests/templates/definitions/{omp_3.json → omp_vsmart_3.json} +16 -2
- catalystwan/tests/templates/definitions/omp_vsmart_complex.json +73 -0
- catalystwan/tests/templates/definitions/security_vsmart_complex.json +24 -0
- catalystwan/tests/templates/definitions/system_vsmart_complex.json +193 -0
- catalystwan/tests/templates/definitions/vpn_vsmart_basic.json +17 -0
- catalystwan/tests/templates/definitions/vpn_vsmart_complex.json +179 -0
- catalystwan/tests/templates/definitions/vpn_vsmart_interface_basic.json +42 -0
- catalystwan/tests/templates/definitions/vpn_vsmart_interface_complex.json +208 -0
- catalystwan/tests/templates/models/__init__.py +46 -13
- catalystwan/tests/templates/models/aaa.py +106 -0
- catalystwan/tests/templates/models/cisco_aaa.py +81 -48
- catalystwan/tests/templates/models/cisco_banner.py +2 -2
- catalystwan/tests/templates/models/cisco_bfd.py +4 -6
- catalystwan/tests/templates/models/cisco_logging.py +65 -0
- catalystwan/tests/templates/models/cisco_ntp.py +17 -0
- catalystwan/tests/templates/models/cisco_omp.py +37 -0
- catalystwan/tests/templates/models/cisco_ospf.py +60 -0
- catalystwan/tests/templates/models/cisco_secure_internet_gateway.py +95 -0
- catalystwan/tests/templates/models/cisco_snmp.py +40 -0
- catalystwan/tests/templates/models/cisco_system.py +108 -3
- catalystwan/tests/templates/models/cisco_vpn.py +42 -72
- catalystwan/tests/templates/models/cisco_vpn_interface.py +200 -0
- catalystwan/tests/templates/models/omp_vsmart.py +28 -8
- catalystwan/tests/templates/models/security_vsmart.py +11 -0
- catalystwan/tests/templates/models/system_vsmart.py +37 -0
- catalystwan/tests/templates/models/vpn_vsmart.py +32 -0
- catalystwan/tests/templates/models/vpn_vsmart_interface.py +54 -0
- catalystwan/tests/templates/schemas/aaa.json +1096 -0
- catalystwan/tests/templates/schemas/cedge_aaa.json +1 -1
- catalystwan/tests/templates/schemas/cisco_logging.json +577 -0
- catalystwan/tests/templates/schemas/cisco_ntp.json +265 -0
- catalystwan/tests/templates/schemas/cisco_omp.json +479 -0
- catalystwan/tests/templates/schemas/cisco_ospf.json +908 -0
- catalystwan/tests/templates/schemas/cisco_secure_internet_gateway.json +1520 -0
- catalystwan/tests/templates/schemas/cisco_snmp.json +561 -0
- catalystwan/tests/templates/schemas/cisco_system.json +242 -0
- catalystwan/tests/templates/schemas/cisco_vpn.json +53 -1
- catalystwan/tests/templates/schemas/cisco_vpn_interface.json +3348 -0
- catalystwan/tests/templates/schemas/omp-vsmart.json +20 -0
- catalystwan/tests/templates/schemas/security-vsmart.json +58 -0
- catalystwan/tests/templates/schemas/system-vsmart.json +2585 -0
- catalystwan/tests/templates/schemas/vpn-vsmart-interface.json +859 -0
- catalystwan/tests/templates/schemas/vpn-vsmart.json +445 -0
- catalystwan/tests/templates/test_chose_model.py +6 -10
- catalystwan/tests/templates/test_deserialize_model.py +4 -4
- catalystwan/tests/templates/test_find_template_values.py +229 -0
- catalystwan/tests/templates/test_find_template_values_2.py +193 -0
- catalystwan/tests/templates/test_serialize_model.py +1 -2
- catalystwan/tests/test_cli_template.py +8 -9
- catalystwan/tests/test_endpoints.py +42 -11
- catalystwan/tests/test_feature_profile_api.py +282 -0
- catalystwan/tests/test_models_common.py +53 -0
- catalystwan/tests/test_templates.py +16 -19
- catalystwan/utils/feature_template/find_template_values.py +17 -4
- catalystwan/utils/model.py +45 -0
- catalystwan/utils/persona.py +5 -0
- catalystwan/utils/type_check.py +22 -0
- catalystwan/workflows/backup_restore_device_templates.py +467 -0
- catalystwan/workflows/tenant_migration.py +1 -1
- {catalystwan-0.41.2.dist-info → catalystwan-0.41.2.dev0.dist-info}/METADATA +20 -1
- catalystwan-0.41.2.dev0.dist-info/RECORD +636 -0
- catalystwan/ENDPOINTS.md +0 -611
- catalystwan/api/configuration_groups/parcels/cellular_controller.py +0 -33
- catalystwan/api/templates/device_template/device_template_payload.json.j2 +0 -19
- catalystwan/models/configuration/config_migration.py +0 -36
- catalystwan/models/configuration/feature_profile/sdwan/management/vpn.py +0 -26
- catalystwan/models/configuration/feature_profile/sdwan/service/acl.py +0 -409
- catalystwan/models/configuration/feature_profile/sdwan/service/bgp.py +0 -288
- catalystwan/models/policy/lists.py +0 -330
- catalystwan/models/policy/lists_entries.py +0 -444
- catalystwan/tests/templates/definitions/complex_aaa.json +0 -277
- catalystwan/tests/templates/definitions/omp_1.json +0 -11
- catalystwan/utils/timezone.py +0 -422
- catalystwan-0.41.2.dist-info/RECORD +0 -353
- /catalystwan/tests/templates/definitions/{banner_1.json → cisco_banner.json} +0 -0
- {catalystwan-0.41.2.dist-info → catalystwan-0.41.2.dev0.dist-info}/LICENSE +0 -0
- {catalystwan-0.41.2.dist-info → catalystwan-0.41.2.dev0.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Copyright 2022 Cisco Systems, Inc. and its affiliates
|
|
2
|
+
|
|
3
|
+
from typing import List, Literal, Optional
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, Field, model_validator
|
|
6
|
+
|
|
7
|
+
from catalystwan.models.common import check_fields_exclusive
|
|
8
|
+
from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class GeoLocationListEntry(BaseModel):
|
|
12
|
+
country: Optional[str] = Field(default=None, description="ISO-3166 alpha-3 country code eg: FRA")
|
|
13
|
+
continent: Optional[str] = Field(
|
|
14
|
+
default=None, description="One of 2-letter continent codes: AF, NA, OC, AN, AS, EU, SA"
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
@model_validator(mode="after")
|
|
18
|
+
def check_country_xor_continent(self):
|
|
19
|
+
check_fields_exclusive(self.__dict__, {"country", "continent"}, True)
|
|
20
|
+
return self
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class GeoLocationList(PolicyListBase):
|
|
24
|
+
type: Literal["geoLocation"] = "geoLocation"
|
|
25
|
+
entries: List[GeoLocationListEntry] = []
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class GeoLocationListEditPayload(GeoLocationList, PolicyListId):
|
|
29
|
+
pass
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class GeoLocationListInfo(GeoLocationList, PolicyListInfo):
|
|
33
|
+
pass
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Copyright 2022 Cisco Systems, Inc. and its affiliates
|
|
2
|
+
|
|
3
|
+
from typing import List, Literal
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
6
|
+
|
|
7
|
+
from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class IdentityListEntry(BaseModel):
|
|
11
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
12
|
+
user: str
|
|
13
|
+
user_group: str = Field(validation_alias="userGroup", serialization_alias="userGroup")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class IdentityList(PolicyListBase):
|
|
17
|
+
type: Literal["identity"] = "identity"
|
|
18
|
+
entries: List[IdentityListEntry] = Field(default_factory=list)
|
|
19
|
+
|
|
20
|
+
def add_entry(self, user: str, user_group: str) -> None:
|
|
21
|
+
self._add_entry(IdentityListEntry(user=user, user_group=user_group))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class IdentityListEditPayload(IdentityList, PolicyListId):
|
|
25
|
+
pass
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class IdentityListInfo(IdentityList, PolicyListInfo):
|
|
29
|
+
pass
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Copyright 2022 Cisco Systems, Inc. and its affiliates
|
|
2
|
+
|
|
3
|
+
from typing import List, Literal
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
6
|
+
|
|
7
|
+
from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class IPSSignatureListEntry(BaseModel):
|
|
11
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
12
|
+
|
|
13
|
+
generator_id: str = Field(serialization_alias="generatorId", validation_alias="generatorId")
|
|
14
|
+
signature_id: str = Field(serialization_alias="signatureId", validation_alias="signatureId")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class IPSSignatureList(PolicyListBase):
|
|
18
|
+
type: Literal["ipsSignature"] = "ipsSignature"
|
|
19
|
+
entries: List[IPSSignatureListEntry] = []
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class IPSSignatureListEditPayload(IPSSignatureList, PolicyListId):
|
|
23
|
+
pass
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class IPSSignatureListInfo(IPSSignatureList, PolicyListInfo):
|
|
27
|
+
pass
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Copyright 2022 Cisco Systems, Inc. and its affiliates
|
|
2
|
+
|
|
3
|
+
from ipaddress import IPv6Interface
|
|
4
|
+
from typing import List, Literal, Optional
|
|
5
|
+
|
|
6
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
7
|
+
|
|
8
|
+
from catalystwan.models.common import IntStr
|
|
9
|
+
from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class IPv6PrefixListEntry(BaseModel):
|
|
13
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
14
|
+
|
|
15
|
+
ipv6_prefix: IPv6Interface = Field(serialization_alias="ipv6Prefix", validation_alias="ipv6Prefix")
|
|
16
|
+
ge: Optional[IntStr] = Field(default=None, ge=0, le=128)
|
|
17
|
+
le: Optional[IntStr] = Field(default=None, ge=0, le=128)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class IPv6PrefixList(PolicyListBase):
|
|
21
|
+
type: Literal["ipv6prefix"] = "ipv6prefix"
|
|
22
|
+
entries: List[IPv6PrefixListEntry] = []
|
|
23
|
+
|
|
24
|
+
def add_prefix(self, prefix: IPv6Interface, ge: Optional[int] = None, le: Optional[int] = None) -> None:
|
|
25
|
+
self._add_entry(IPv6PrefixListEntry(ipv6_prefix=prefix, ge=ge, le=le))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class IPv6PrefixListEditPayload(IPv6PrefixList, PolicyListId):
|
|
29
|
+
pass
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class IPv6PrefixListInfo(IPv6PrefixList, PolicyListInfo):
|
|
33
|
+
pass
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Copyright 2022 Cisco Systems, Inc. and its affiliates
|
|
2
|
+
|
|
3
|
+
from typing import List, Literal, Optional
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, ConfigDict, Field, model_validator
|
|
6
|
+
|
|
7
|
+
from catalystwan.models.common import check_fields_exclusive
|
|
8
|
+
from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class LocalAppListEntry(BaseModel):
|
|
12
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
13
|
+
|
|
14
|
+
app_family: Optional[str] = Field(default=None, serialization_alias="appFamily", validation_alias="appFamily")
|
|
15
|
+
app: Optional[str] = None
|
|
16
|
+
|
|
17
|
+
@model_validator(mode="after")
|
|
18
|
+
def check_app_xor_appfamily(self):
|
|
19
|
+
check_fields_exclusive(self.__dict__, {"app", "app_family"}, True)
|
|
20
|
+
return self
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class LocalAppList(PolicyListBase):
|
|
24
|
+
type: Literal["localApp"] = "localApp"
|
|
25
|
+
entries: List[LocalAppListEntry] = []
|
|
26
|
+
|
|
27
|
+
def add_app(self, app: str) -> None:
|
|
28
|
+
self._add_entry(LocalAppListEntry(app=app))
|
|
29
|
+
|
|
30
|
+
def add_app_family(self, app_family: str) -> None:
|
|
31
|
+
self._add_entry(LocalAppListEntry(app_family=app_family))
|
|
32
|
+
|
|
33
|
+
def list_all_app(self) -> List[str]:
|
|
34
|
+
return [e.app for e in self.entries if e.app is not None]
|
|
35
|
+
|
|
36
|
+
def list_all_app_family(self) -> List[str]:
|
|
37
|
+
return [e.app_family for e in self.entries if e.app_family is not None]
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class LocalAppListEditPayload(LocalAppList, PolicyListId):
|
|
41
|
+
pass
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class LocalAppListInfo(LocalAppList, PolicyListInfo):
|
|
45
|
+
pass
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Copyright 2022 Cisco Systems, Inc. and its affiliates
|
|
2
|
+
|
|
3
|
+
from typing import List, Literal
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
6
|
+
|
|
7
|
+
from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class LocalDomainListEntry(BaseModel):
|
|
11
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
12
|
+
|
|
13
|
+
name_server: str = Field(
|
|
14
|
+
pattern="^[^*+].*",
|
|
15
|
+
serialization_alias="nameServer",
|
|
16
|
+
validation_alias="nameServer",
|
|
17
|
+
max_length=240,
|
|
18
|
+
description="Must be valid std regex."
|
|
19
|
+
"String cannot start with a '*' or a '+', be empty, or be more than 240 characters",
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class LocalDomainList(PolicyListBase):
|
|
24
|
+
type: Literal["localDomain"] = "localDomain"
|
|
25
|
+
entries: List[LocalDomainListEntry] = []
|
|
26
|
+
|
|
27
|
+
def add_domain(self, name_server: str) -> None:
|
|
28
|
+
self.entries.append(LocalDomainListEntry(name_server=name_server))
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class LocalDomainListEditPayload(LocalDomainList, PolicyListId):
|
|
32
|
+
pass
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class LocalDomainListInfo(LocalDomainList, PolicyListInfo):
|
|
36
|
+
pass
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Copyright 2024 Cisco Systems, Inc. and its affiliates
|
|
2
|
+
|
|
3
|
+
from typing import List, Literal, Union
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
6
|
+
from typing_extensions import Annotated
|
|
7
|
+
|
|
8
|
+
from catalystwan.models.common import IntStr, SpaceSeparatedMpDtmfList
|
|
9
|
+
from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class CodecEntry(BaseModel):
|
|
13
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
14
|
+
type: Literal["codec"] = "codec"
|
|
15
|
+
pref_num: IntStr = Field(ge=1, serialization_alias="prefNum", validation_alias="prefNum")
|
|
16
|
+
value: str
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class DtmfEntry(BaseModel):
|
|
20
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
21
|
+
type: Literal["dtmf"] = "dtmf"
|
|
22
|
+
value: SpaceSeparatedMpDtmfList
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
AnyMediaProfileListEntry = Annotated[
|
|
26
|
+
Union[
|
|
27
|
+
CodecEntry,
|
|
28
|
+
DtmfEntry,
|
|
29
|
+
],
|
|
30
|
+
Field(discriminator="type"),
|
|
31
|
+
]
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class MediaProfileList(PolicyListBase):
|
|
35
|
+
type: Literal["mediaProfile", "mediaprofile"] = "mediaProfile"
|
|
36
|
+
entries: List[AnyMediaProfileListEntry] = Field(default_factory=list)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class MediaProfileListEditPayload(MediaProfileList, PolicyListId):
|
|
40
|
+
pass
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class MediaProfileListInfo(MediaProfileList, PolicyListInfo):
|
|
44
|
+
pass
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Copyright 2022 Cisco Systems, Inc. and its affiliates
|
|
2
|
+
|
|
3
|
+
from typing import List, Literal
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, ConfigDict, Field, IPvAnyAddress
|
|
6
|
+
|
|
7
|
+
from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class MirrorListEntry(BaseModel):
|
|
11
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
12
|
+
|
|
13
|
+
remote_dest: IPvAnyAddress = Field(serialization_alias="remoteDest", validation_alias="remoteDest")
|
|
14
|
+
source: IPvAnyAddress
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class MirrorList(PolicyListBase):
|
|
18
|
+
type: Literal["mirror"] = "mirror"
|
|
19
|
+
entries: List[MirrorListEntry] = []
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class MirrorListEditPayload(MirrorList, PolicyListId):
|
|
23
|
+
pass
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class MirrorListInfo(MirrorList, PolicyListInfo):
|
|
27
|
+
pass
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Copyright 2024 Cisco Systems, Inc. and its affiliates
|
|
2
|
+
|
|
3
|
+
from typing import List, Literal
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
6
|
+
|
|
7
|
+
from catalystwan.models.common import FaxFallBackProtocols
|
|
8
|
+
from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ModemPassThroughListEntry(BaseModel):
|
|
12
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
13
|
+
protocol: FaxFallBackProtocols
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ModemPassThroughList(PolicyListBase):
|
|
17
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
18
|
+
type: Literal["modemPassthrough", "modempassthrough"] = "modemPassthrough"
|
|
19
|
+
entries: List[ModemPassThroughListEntry] = Field(default_factory=list, max_length=1)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class ModemPassThroughListEditPayload(ModemPassThroughList, PolicyListId):
|
|
23
|
+
pass
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ModemPassThroughListInfo(ModemPassThroughList, PolicyListInfo):
|
|
27
|
+
pass
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Copyright 2022 Cisco Systems, Inc. and its affiliates
|
|
2
|
+
|
|
3
|
+
from typing import List, Literal
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
6
|
+
|
|
7
|
+
from catalystwan.models.common import IntStr
|
|
8
|
+
from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
|
|
9
|
+
|
|
10
|
+
PolicerExceedAction = Literal[
|
|
11
|
+
"drop",
|
|
12
|
+
"remark",
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class PolicerListEntry(BaseModel):
|
|
17
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
18
|
+
|
|
19
|
+
burst: IntStr = Field(description="bytes", ge=15_000, le=10_000_000)
|
|
20
|
+
exceed: PolicerExceedAction = "drop"
|
|
21
|
+
rate: IntStr = Field(description="bps", ge=8, le=100_000_000_000)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class PolicerList(PolicyListBase):
|
|
25
|
+
type: Literal["policer"] = "policer"
|
|
26
|
+
entries: List[PolicerListEntry] = []
|
|
27
|
+
|
|
28
|
+
def police(self, burst: int, rate: int, exceed: PolicerExceedAction = "drop") -> None:
|
|
29
|
+
# Policer list must have only single entry!
|
|
30
|
+
entry = PolicerListEntry(burst=burst, exceed=exceed, rate=rate)
|
|
31
|
+
self._add_entry(entry, single=True)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class PolicerListEditPayload(PolicerList, PolicyListId):
|
|
35
|
+
pass
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class PolicerListInfo(PolicerList, PolicyListInfo):
|
|
39
|
+
pass
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Copyright 2022 Cisco Systems, Inc. and its affiliates
|
|
2
|
+
|
|
3
|
+
from typing import List, Literal
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, field_validator
|
|
6
|
+
|
|
7
|
+
from catalystwan.models.common import IntRangeStr
|
|
8
|
+
from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class PortListEntry(BaseModel):
|
|
12
|
+
port: IntRangeStr
|
|
13
|
+
|
|
14
|
+
@field_validator("port")
|
|
15
|
+
@classmethod
|
|
16
|
+
def check_port(cls, port: IntRangeStr):
|
|
17
|
+
for i in port:
|
|
18
|
+
if i is not None:
|
|
19
|
+
assert 0 <= i <= 65_535
|
|
20
|
+
return port
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class PortList(PolicyListBase):
|
|
24
|
+
type: Literal["port"] = "port"
|
|
25
|
+
entries: List[PortListEntry] = []
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class PortListEditPayload(PortList, PolicyListId):
|
|
29
|
+
pass
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class PortListInfo(PortList, PolicyListInfo):
|
|
33
|
+
pass
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Copyright 2022 Cisco Systems, Inc. and its affiliates
|
|
2
|
+
|
|
3
|
+
from typing import List, Literal, Optional, Set, Tuple
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
|
|
6
|
+
|
|
7
|
+
from catalystwan.models.common import TLOCColor, str_as_str_list
|
|
8
|
+
from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
|
|
9
|
+
|
|
10
|
+
PathPreference = Literal[
|
|
11
|
+
"direct-path",
|
|
12
|
+
"multi-hop-path",
|
|
13
|
+
"all-paths",
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ColorGroupPreference(BaseModel):
|
|
18
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
19
|
+
|
|
20
|
+
color_preference: Set[TLOCColor] = Field(serialization_alias="colorPreference", validation_alias="colorPreference")
|
|
21
|
+
path_preference: Optional[PathPreference] = Field(
|
|
22
|
+
default=None, serialization_alias="pathPreference", validation_alias="pathPreference"
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
_color_pref = field_validator("color_preference", mode="before")(str_as_str_list)
|
|
26
|
+
|
|
27
|
+
@staticmethod
|
|
28
|
+
def from_color_set_and_path(
|
|
29
|
+
color_preference: Set[TLOCColor], path_preference: Optional[PathPreference] = None
|
|
30
|
+
) -> "ColorGroupPreference":
|
|
31
|
+
return ColorGroupPreference(color_preference=color_preference, path_preference=path_preference)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class PreferredColorGroupListEntry(BaseModel):
|
|
35
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
36
|
+
|
|
37
|
+
primary_preference: ColorGroupPreference = Field(
|
|
38
|
+
serialization_alias="primaryPreference", validation_alias="primaryPreference"
|
|
39
|
+
)
|
|
40
|
+
secondary_preference: Optional[ColorGroupPreference] = Field(
|
|
41
|
+
default=None, serialization_alias="secondaryPreference", validation_alias="secondaryPreference"
|
|
42
|
+
)
|
|
43
|
+
tertiary_preference: Optional[ColorGroupPreference] = Field(
|
|
44
|
+
default=None, serialization_alias="tertiaryPreference", validation_alias="tertiaryPreference"
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
@model_validator(mode="after")
|
|
48
|
+
def check_optional_preferences_order(self):
|
|
49
|
+
assert not (self.secondary_preference is None and self.tertiary_preference is not None)
|
|
50
|
+
return self
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class PreferredColorGroupList(PolicyListBase):
|
|
54
|
+
type: Literal["preferredColorGroup"] = "preferredColorGroup"
|
|
55
|
+
entries: List[PreferredColorGroupListEntry] = []
|
|
56
|
+
|
|
57
|
+
def assign_color_groups(
|
|
58
|
+
self,
|
|
59
|
+
primary: Tuple[Set[TLOCColor], Optional[PathPreference]],
|
|
60
|
+
secondary: Optional[Tuple[Set[TLOCColor], Optional[PathPreference]]] = None,
|
|
61
|
+
tertiary: Optional[Tuple[Set[TLOCColor], Optional[PathPreference]]] = None,
|
|
62
|
+
) -> PreferredColorGroupListEntry:
|
|
63
|
+
primary_preference = ColorGroupPreference.from_color_set_and_path(*primary)
|
|
64
|
+
secondary_preference = (
|
|
65
|
+
ColorGroupPreference.from_color_set_and_path(*secondary) if secondary is not None else None
|
|
66
|
+
)
|
|
67
|
+
tertiary_preference = ColorGroupPreference.from_color_set_and_path(*tertiary) if tertiary is not None else None
|
|
68
|
+
entry = PreferredColorGroupListEntry(
|
|
69
|
+
primary_preference=primary_preference,
|
|
70
|
+
secondary_preference=secondary_preference,
|
|
71
|
+
tertiary_preference=tertiary_preference,
|
|
72
|
+
)
|
|
73
|
+
self._add_entry(entry=entry, single=True)
|
|
74
|
+
return entry
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class PreferredColorGroupListEditPayload(PreferredColorGroupList, PolicyListId):
|
|
78
|
+
pass
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class PreferredColorGroupListInfo(PreferredColorGroupList, PolicyListInfo):
|
|
82
|
+
pass
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Copyright 2022 Cisco Systems, Inc. and its affiliates
|
|
2
|
+
|
|
3
|
+
from ipaddress import IPv4Network
|
|
4
|
+
from typing import List, Literal, Optional
|
|
5
|
+
|
|
6
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
7
|
+
|
|
8
|
+
from catalystwan.models.common import IntStr
|
|
9
|
+
from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class PrefixListEntry(BaseModel):
|
|
13
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
14
|
+
|
|
15
|
+
ip_prefix: IPv4Network = Field(serialization_alias="ipPrefix", validation_alias="ipPrefix")
|
|
16
|
+
ge: Optional[IntStr] = Field(default=None, ge=0, le=32)
|
|
17
|
+
le: Optional[IntStr] = Field(default=None, ge=0, le=32)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class PrefixList(PolicyListBase):
|
|
21
|
+
type: Literal["prefix"] = "prefix"
|
|
22
|
+
entries: List[PrefixListEntry] = []
|
|
23
|
+
|
|
24
|
+
def add_prefix(self, prefix: IPv4Network, ge: Optional[int] = None, le: Optional[int] = None) -> None:
|
|
25
|
+
self._add_entry(PrefixListEntry(ip_prefix=prefix, ge=ge, le=le))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class PrefixListEditPayload(PrefixList, PolicyListId):
|
|
29
|
+
pass
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class PrefixListInfo(PrefixList, PolicyListInfo):
|
|
33
|
+
pass
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Copyright 2022 Cisco Systems, Inc. and its affiliates
|
|
2
|
+
|
|
3
|
+
from typing import List, Literal
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
6
|
+
|
|
7
|
+
from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ProtocolNameListEntry(BaseModel):
|
|
11
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
12
|
+
|
|
13
|
+
protocol_name: str = Field(serialization_alias="protocolName", validation_alias="protocolName")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ProtocolNameList(PolicyListBase):
|
|
17
|
+
type: Literal["protocolName"] = "protocolName"
|
|
18
|
+
entries: List[ProtocolNameListEntry] = []
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ProtocolNameListEditPayload(ProtocolNameList, PolicyListId):
|
|
22
|
+
pass
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class ProtocolNameListInfo(ProtocolNameList, PolicyListInfo):
|
|
26
|
+
pass
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Copyright 2022 Cisco Systems, Inc. and its affiliates
|
|
2
|
+
|
|
3
|
+
from typing import List, Literal, Set, Tuple
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
6
|
+
|
|
7
|
+
from catalystwan.models.common import IntRangeStr
|
|
8
|
+
from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class RegionListEntry(BaseModel):
|
|
12
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
13
|
+
|
|
14
|
+
region_id: IntRangeStr = Field(
|
|
15
|
+
serialization_alias="regionId", validation_alias="regionId", description="Number in range 0-63"
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
@field_validator("region_id")
|
|
19
|
+
@classmethod
|
|
20
|
+
def check_region_range(cls, region_ids: IntRangeStr):
|
|
21
|
+
for i in region_ids:
|
|
22
|
+
if i is not None:
|
|
23
|
+
assert 0 <= i <= 63
|
|
24
|
+
return region_ids
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class RegionList(PolicyListBase):
|
|
28
|
+
type: Literal["region"] = "region"
|
|
29
|
+
entries: List[RegionListEntry] = []
|
|
30
|
+
|
|
31
|
+
def add_regions(self, regions: Set[int]):
|
|
32
|
+
for region in regions:
|
|
33
|
+
self._add_entry(RegionListEntry(region_id=(region, None)))
|
|
34
|
+
|
|
35
|
+
def add_region_range(self, region_range: Tuple[int, int]):
|
|
36
|
+
entry = RegionListEntry(region_id=region_range)
|
|
37
|
+
self._add_entry(entry)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class RegionListEditPayload(RegionList, PolicyListId):
|
|
41
|
+
pass
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class RegionListInfo(RegionList, PolicyListInfo):
|
|
45
|
+
pass
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Copyright 2022 Cisco Systems, Inc. and its affiliates
|
|
2
|
+
|
|
3
|
+
from typing import List, Literal
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
6
|
+
|
|
7
|
+
from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ScalableGroupTagListEntry(BaseModel):
|
|
11
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
12
|
+
|
|
13
|
+
sgt_name: str = Field(serialization_alias="sgtName", validation_alias="sgtName")
|
|
14
|
+
tag: str = Field(serialization_alias="tag", validation_alias="tag")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ScalableGroupTagList(PolicyListBase):
|
|
18
|
+
type: Literal["scalablegrouptag", "scalableGroupTag"] = "scalableGroupTag"
|
|
19
|
+
entries: List[ScalableGroupTagListEntry] = Field(default_factory=list)
|
|
20
|
+
|
|
21
|
+
def add_entry(self, sgt_name: str, tag: str) -> None:
|
|
22
|
+
self._add_entry(ScalableGroupTagListEntry(sgt_name=sgt_name, tag=tag))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class ScalableGroupTagListEditPayload(ScalableGroupTagList, PolicyListId):
|
|
26
|
+
pass
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ScalableGroupTagListInfo(ScalableGroupTagList, PolicyListInfo):
|
|
30
|
+
pass
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Copyright 2022 Cisco Systems, Inc. and its affiliates
|
|
2
|
+
|
|
3
|
+
from typing import List, Literal, Set, Tuple
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
6
|
+
|
|
7
|
+
from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class SiteListEntry(BaseModel):
|
|
11
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
12
|
+
|
|
13
|
+
site_id: str = Field(serialization_alias="siteId", validation_alias="siteId")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class SiteList(PolicyListBase):
|
|
17
|
+
type: Literal["site"] = "site"
|
|
18
|
+
entries: List[SiteListEntry] = []
|
|
19
|
+
|
|
20
|
+
def add_sites(self, sites: Set[int]):
|
|
21
|
+
for site in sites:
|
|
22
|
+
self._add_entry(SiteListEntry(site_id=str(site)))
|
|
23
|
+
|
|
24
|
+
def add_site_range(self, site_range: Tuple[int, int]):
|
|
25
|
+
entry = SiteListEntry(site_id=f"{site_range[0]}-{site_range[1]}")
|
|
26
|
+
self._add_entry(entry)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class SiteListEditPayload(SiteList, PolicyListId):
|
|
30
|
+
pass
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class SiteListInfo(SiteList, PolicyListInfo):
|
|
34
|
+
pass
|