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.
- catalystwan/ENDPOINTS.md +611 -0
- catalystwan/__init__.py +2 -3
- catalystwan/api/administration.py +2 -13
- catalystwan/api/api_container.py +1 -4
- catalystwan/api/config_group_api.py +16 -41
- catalystwan/api/configuration_groups/parcel.py +30 -100
- catalystwan/api/configuration_groups/parcels/cellular_controller.py +33 -0
- catalystwan/api/feature_profile_api.py +237 -2016
- catalystwan/api/policy_api.py +116 -470
- catalystwan/api/template_api.py +44 -113
- catalystwan/api/templates/README.md +47 -61
- catalystwan/api/templates/cli_template.py +7 -17
- catalystwan/api/templates/device_template/device_template.py +32 -127
- catalystwan/api/templates/device_template/device_template_payload.json.j2 +19 -0
- catalystwan/api/templates/feature_template.py +3 -3
- catalystwan/api/templates/models/cisco_aaa_model.py +42 -289
- catalystwan/api/templates/models/cisco_banner_model.py +2 -11
- catalystwan/api/templates/models/cisco_bfd_model.py +36 -31
- catalystwan/api/templates/models/cisco_bgp_model.py +131 -382
- catalystwan/api/templates/models/cisco_logging_model.py +43 -80
- catalystwan/api/templates/models/cisco_ntp_model.py +15 -34
- catalystwan/api/templates/models/cisco_omp_model.py +60 -70
- catalystwan/api/templates/models/cisco_ospf.py +74 -143
- catalystwan/api/templates/models/cisco_ospfv3.py +95 -217
- catalystwan/api/templates/models/cisco_secure_internet_gateway.py +142 -304
- catalystwan/api/templates/models/cisco_snmp_model.py +52 -66
- catalystwan/api/templates/models/cisco_system.py +129 -238
- catalystwan/api/templates/models/cisco_vpn_interface_model.py +275 -632
- catalystwan/api/templates/models/cisco_vpn_model.py +270 -433
- catalystwan/api/templates/models/cli_template.py +2 -3
- catalystwan/api/templates/models/omp_vsmart_model.py +10 -46
- catalystwan/api/templates/models/security_vsmart_model.py +8 -11
- catalystwan/api/templates/models/supported.py +4 -10
- catalystwan/api/templates/models/system_vsmart_model.py +27 -164
- catalystwan/apigw_auth.py +2 -6
- catalystwan/dataclasses.py +53 -2
- catalystwan/endpoints/__init__.py +41 -41
- catalystwan/endpoints/certificate_management_device.py +0 -4
- catalystwan/endpoints/cluster_management.py +9 -30
- catalystwan/endpoints/configuration/feature_profile/sdwan/policy_object.py +12 -35
- catalystwan/endpoints/configuration/feature_profile/sdwan/system.py +11 -164
- catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py +26 -144
- catalystwan/endpoints/configuration/policy/definition/access_control_list.py +11 -6
- catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py +11 -6
- catalystwan/endpoints/configuration/policy/definition/control.py +11 -6
- catalystwan/endpoints/configuration/policy/definition/device_access.py +11 -6
- catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py +11 -6
- catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py +11 -6
- catalystwan/endpoints/configuration/policy/definition/mesh.py +11 -2
- catalystwan/endpoints/configuration/policy/definition/qos_map.py +11 -2
- catalystwan/endpoints/configuration/policy/definition/rewrite.py +11 -6
- catalystwan/endpoints/configuration/policy/definition/rule_set.py +11 -2
- catalystwan/endpoints/configuration/policy/definition/security_group.py +11 -6
- catalystwan/endpoints/configuration/policy/definition/traffic_data.py +11 -6
- catalystwan/endpoints/configuration/policy/definition/vpn_membership.py +11 -6
- catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py +11 -6
- catalystwan/endpoints/configuration/policy/list/app.py +16 -3
- catalystwan/endpoints/configuration/policy/list/app_probe.py +15 -6
- catalystwan/endpoints/configuration/policy/list/as_path.py +16 -3
- catalystwan/endpoints/configuration/policy/list/class_map.py +16 -3
- catalystwan/endpoints/configuration/policy/list/color.py +16 -3
- catalystwan/endpoints/configuration/policy/list/community.py +16 -3
- catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py +15 -6
- catalystwan/endpoints/configuration/policy/list/data_prefix.py +16 -3
- catalystwan/endpoints/configuration/policy/list/expanded_community.py +15 -6
- catalystwan/endpoints/configuration/policy/list/fqdn.py +16 -3
- catalystwan/endpoints/configuration/policy/list/geo_location.py +16 -3
- catalystwan/endpoints/configuration/policy/list/ips_signature.py +15 -6
- catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py +16 -3
- catalystwan/endpoints/configuration/policy/list/local_app.py +16 -3
- catalystwan/endpoints/configuration/policy/list/local_domain.py +16 -3
- catalystwan/endpoints/configuration/policy/list/mirror.py +16 -3
- catalystwan/endpoints/configuration/policy/list/policer.py +16 -3
- catalystwan/endpoints/configuration/policy/list/port.py +16 -3
- catalystwan/endpoints/configuration/policy/list/preferred_color_group.py +15 -6
- catalystwan/endpoints/configuration/policy/list/prefix.py +16 -4
- catalystwan/endpoints/configuration/policy/list/protocol_name.py +15 -6
- catalystwan/endpoints/configuration/policy/list/region.py +10 -2
- catalystwan/endpoints/configuration/policy/list/site.py +16 -3
- catalystwan/endpoints/configuration/policy/list/sla.py +16 -3
- catalystwan/endpoints/configuration/policy/list/tloc.py +16 -3
- catalystwan/endpoints/configuration/policy/list/url_allow_list.py +16 -3
- catalystwan/endpoints/configuration/policy/list/url_block_list.py +16 -3
- catalystwan/endpoints/configuration/policy/list/vpn.py +16 -3
- catalystwan/endpoints/configuration/policy/list/zone.py +16 -3
- catalystwan/endpoints/configuration/policy/security_template.py +3 -2
- catalystwan/endpoints/configuration/software_actions.py +4 -2
- catalystwan/endpoints/configuration_dashboard_status.py +2 -2
- catalystwan/endpoints/configuration_device_template.py +1 -15
- catalystwan/endpoints/configuration_feature_profile.py +11 -8
- catalystwan/endpoints/configuration_group.py +5 -28
- catalystwan/endpoints/configuration_settings.py +1 -90
- catalystwan/endpoints/endpoints_container.py +18 -82
- catalystwan/endpoints/real_time_monitoring/reboot_history.py +3 -1
- catalystwan/endpoints/tenant_migration.py +0 -2
- catalystwan/exceptions.py +0 -24
- catalystwan/integration_tests/test_find_template_values.py +18 -7
- catalystwan/models/common.py +2 -1898
- catalystwan/models/configuration/common.py +0 -1
- catalystwan/models/configuration/config_migration.py +36 -0
- catalystwan/models/configuration/feature_profile/common.py +149 -634
- catalystwan/models/configuration/feature_profile/sdwan/management/vpn.py +26 -0
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/__init__.py +60 -69
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/app_probe.py +20 -34
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/application_list.py +6 -8
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/color_list.py +5 -7
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/data_prefix.py +4 -13
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/expanded_community_list.py +7 -9
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/fowarding_class.py +5 -7
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_data_prefix.py +9 -11
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_prefix_list.py +10 -25
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/{policer.py → policier.py} +10 -12
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefered_group_color.py +10 -29
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefix_list.py +8 -23
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/sla_class.py +31 -12
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/standard_community.py +10 -16
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/tloc_list.py +7 -8
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/application_list.py +6 -8
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/data_prefix.py +5 -7
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/fqdn.py +5 -7
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/geolocation_list.py +5 -7
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ips_signature.py +5 -7
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/local_domain.py +5 -7
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/protocol_list.py +5 -7
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/security_port.py +11 -21
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url.py +15 -36
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/zone.py +18 -14
- catalystwan/models/configuration/feature_profile/sdwan/service/acl.py +409 -0
- catalystwan/models/configuration/feature_profile/sdwan/service/appqoe.py +42 -77
- catalystwan/models/configuration/feature_profile/sdwan/service/bgp.py +288 -0
- catalystwan/models/configuration/feature_profile/sdwan/service/dhcp_server.py +64 -107
- catalystwan/models/configuration/feature_profile/sdwan/service/eigrp.py +42 -39
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/common.py +88 -7
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/ethernet.py +156 -232
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/gre.py +108 -38
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/ipsec.py +84 -77
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/svi.py +56 -62
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/vpn.py +121 -112
- catalystwan/models/configuration/feature_profile/sdwan/service/multicast.py +57 -56
- catalystwan/models/configuration/feature_profile/sdwan/service/object_tracker.py +21 -15
- catalystwan/models/configuration/feature_profile/sdwan/{routing → service}/ospf.py +47 -55
- catalystwan/models/configuration/feature_profile/sdwan/{routing → service}/ospfv3.py +72 -74
- catalystwan/models/configuration/feature_profile/sdwan/service/route_policy.py +110 -358
- catalystwan/models/configuration/feature_profile/sdwan/service/service_insertion_attachment.py +25 -17
- catalystwan/models/configuration/feature_profile/sdwan/service/switchport.py +58 -50
- catalystwan/models/configuration/feature_profile/sdwan/service/tracker.py +21 -12
- catalystwan/models/configuration/feature_profile/sdwan/service/wireless_lan.py +31 -27
- catalystwan/models/configuration/feature_profile/sdwan/system/aaa.py +10 -58
- catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_controller.py +23 -26
- catalystwan/models/configuration/profile_type.py +6 -1
- catalystwan/models/policy/__init__.py +69 -282
- catalystwan/models/policy/centralized.py +29 -26
- catalystwan/models/policy/{definition → definitions}/access_control_list.py +17 -47
- catalystwan/models/policy/{definition → definitions}/access_control_list_ipv6.py +18 -42
- catalystwan/models/policy/{definition → definitions}/control.py +25 -48
- catalystwan/models/policy/{definition → definitions}/device_access.py +11 -22
- catalystwan/models/policy/{definition → definitions}/device_access_ipv6.py +11 -20
- catalystwan/models/policy/{definition → definitions}/hub_and_spoke.py +4 -18
- catalystwan/models/policy/{definition → definitions}/mesh.py +1 -13
- catalystwan/models/policy/{definition → definitions}/qos_map.py +32 -39
- catalystwan/models/policy/{definition → definitions}/rewrite.py +2 -12
- catalystwan/models/policy/{definition → definitions}/rule_set.py +48 -66
- catalystwan/models/policy/{definition → definitions}/security_group.py +14 -38
- catalystwan/models/policy/{definition → definitions}/traffic_data.py +61 -184
- catalystwan/models/policy/{definition → definitions}/vpn_membership.py +1 -13
- catalystwan/models/policy/{definition → definitions}/zone_based_firewall.py +32 -93
- catalystwan/models/policy/lists.py +330 -0
- catalystwan/models/policy/lists_entries.py +444 -0
- catalystwan/models/policy/localized.py +16 -34
- catalystwan/models/policy/policy.py +10 -14
- catalystwan/models/policy/policy_definition.py +173 -673
- catalystwan/models/policy/policy_list.py +27 -38
- catalystwan/models/policy/security.py +46 -145
- catalystwan/response.py +2 -6
- catalystwan/session.py +1 -1
- catalystwan/tests/templates/definitions/{cisco_vpn_basic.json → Basic_Cisco_VPN_Model.json} +2 -2
- catalystwan/tests/templates/definitions/complex_aaa.json +277 -0
- catalystwan/tests/templates/definitions/{cisco_vpn_complex.json → complex_cisco_vpn.json} +12 -27
- catalystwan/tests/templates/definitions/{cisco_aaa.json → iuo.json} +15 -44
- catalystwan/tests/templates/definitions/omp_1.json +11 -0
- catalystwan/tests/templates/definitions/{omp_vsmart_2.json → omp_2.json} +2 -16
- catalystwan/tests/templates/definitions/{omp_vsmart_3.json → omp_3.json} +2 -16
- catalystwan/tests/templates/models/__init__.py +13 -46
- catalystwan/tests/templates/models/cisco_aaa.py +48 -81
- catalystwan/tests/templates/models/cisco_banner.py +2 -2
- catalystwan/tests/templates/models/cisco_bfd.py +6 -4
- catalystwan/tests/templates/models/cisco_system.py +3 -108
- catalystwan/tests/templates/models/cisco_vpn.py +72 -42
- catalystwan/tests/templates/models/omp_vsmart.py +8 -28
- catalystwan/tests/templates/schemas/cedge_aaa.json +1 -1
- catalystwan/tests/templates/schemas/cisco_system.json +0 -242
- catalystwan/tests/templates/schemas/cisco_vpn.json +1 -53
- catalystwan/tests/templates/schemas/omp-vsmart.json +0 -20
- catalystwan/tests/templates/test_chose_model.py +10 -6
- catalystwan/tests/templates/test_deserialize_model.py +4 -4
- catalystwan/tests/templates/test_find_template_values.py +0 -229
- catalystwan/tests/templates/test_serialize_model.py +2 -1
- catalystwan/tests/test_cli_template.py +9 -8
- catalystwan/tests/test_endpoints.py +11 -42
- catalystwan/tests/test_templates.py +19 -16
- catalystwan/utils/feature_template/find_template_values.py +9 -22
- catalystwan/utils/timezone.py +422 -0
- catalystwan/workflows/tenant_migration.py +1 -1
- {catalystwan-0.41.2.dev9.dist-info → catalystwan-0.41.3.dist-info}/METADATA +1 -20
- catalystwan-0.41.3.dist-info/RECORD +353 -0
- catalystwan/api/builders/__init__.py +0 -14
- catalystwan/api/builders/feature_profiles/__init__.py +0 -0
- catalystwan/api/builders/feature_profiles/application_priority.py +0 -58
- catalystwan/api/builders/feature_profiles/builder_factory.py +0 -59
- catalystwan/api/builders/feature_profiles/cli.py +0 -76
- catalystwan/api/builders/feature_profiles/mixins.py +0 -44
- catalystwan/api/builders/feature_profiles/other.py +0 -79
- catalystwan/api/builders/feature_profiles/report.py +0 -155
- catalystwan/api/builders/feature_profiles/service.py +0 -248
- catalystwan/api/builders/feature_profiles/system.py +0 -80
- catalystwan/api/builders/feature_profiles/transport.py +0 -256
- catalystwan/api/builders/feature_profiles/uc_voice.py +0 -287
- catalystwan/api/templates/models/aaa_model.py +0 -387
- catalystwan/api/templates/models/vpn_vsmart_interface_model.py +0 -198
- catalystwan/api/templates/models/vpn_vsmart_model.py +0 -124
- catalystwan/endpoints/configuration/feature_profile/sdwan/application_priority.py +0 -107
- catalystwan/endpoints/configuration/feature_profile/sdwan/cli.py +0 -60
- catalystwan/endpoints/configuration/feature_profile/sdwan/dns_security.py +0 -83
- catalystwan/endpoints/configuration/feature_profile/sdwan/embedded_security.py +0 -88
- catalystwan/endpoints/configuration/feature_profile/sdwan/other.py +0 -62
- catalystwan/endpoints/configuration/feature_profile/sdwan/service.py +0 -154
- catalystwan/endpoints/configuration/feature_profile/sdwan/sig_security.py +0 -88
- catalystwan/endpoints/configuration/feature_profile/sdwan/topology.py +0 -93
- catalystwan/endpoints/configuration/feature_profile/sdwan/uc_voice.py +0 -77
- catalystwan/endpoints/configuration/network_hierarchy.py +0 -47
- catalystwan/endpoints/configuration/packages.py +0 -36
- catalystwan/endpoints/configuration/policy/abstractions.py +0 -49
- catalystwan/endpoints/configuration/policy/definition/aip.py +0 -52
- catalystwan/endpoints/configuration/policy/definition/amp.py +0 -52
- catalystwan/endpoints/configuration/policy/definition/app_route.py +0 -50
- catalystwan/endpoints/configuration/policy/definition/cflowd.py +0 -46
- catalystwan/endpoints/configuration/policy/definition/dial_peer.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/dns_security.py +0 -50
- catalystwan/endpoints/configuration/policy/definition/fxo_port.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/fxs_did_port.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/fxs_port.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/intrusion_prevention.py +0 -52
- catalystwan/endpoints/configuration/policy/definition/pri_isdn_port.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/route_policy.py +0 -50
- catalystwan/endpoints/configuration/policy/definition/srst_phone_profile.py +0 -59
- catalystwan/endpoints/configuration/policy/definition/ssl_decryption.py +0 -50
- catalystwan/endpoints/configuration/policy/definition/ssl_decryption_utd_profile.py +0 -52
- catalystwan/endpoints/configuration/policy/definition/url_filtering.py +0 -50
- catalystwan/endpoints/configuration/policy/definition/vpn_qos_map.py +0 -50
- catalystwan/endpoints/configuration/policy/list/extended_community.py +0 -52
- catalystwan/endpoints/configuration/policy/list/fax_protocol.py +0 -48
- catalystwan/endpoints/configuration/policy/list/identity.py +0 -48
- catalystwan/endpoints/configuration/policy/list/media_profile.py +0 -52
- catalystwan/endpoints/configuration/policy/list/modem_pass_through.py +0 -52
- catalystwan/endpoints/configuration/policy/list/scalable_group_tag.py +0 -52
- catalystwan/endpoints/configuration/policy/list/supervisory_disconnect.py +0 -52
- catalystwan/endpoints/configuration/policy/list/threat_grid_api_key.py +0 -52
- catalystwan/endpoints/configuration/policy/list/translation_profile.py +0 -52
- catalystwan/endpoints/configuration/policy/list/translation_rules.py +0 -52
- catalystwan/endpoints/configuration/policy/list/trunkgroup.py +0 -48
- catalystwan/endpoints/configuration/policy/list/umbrella_data.py +0 -52
- catalystwan/endpoints/configuration/policy/voice_template.py +0 -39
- catalystwan/endpoints/configuration/policy_group.py +0 -30
- catalystwan/endpoints/configuration/topology_group.py +0 -51
- catalystwan/endpoints/configuration_general_template.py +0 -31
- catalystwan/endpoints/configuration_template_master.py +0 -48
- catalystwan/integration_tests/base.py +0 -81
- 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 +0 -33
- catalystwan/integration_tests/feature_profile/sdwan/policy/test_extended_community.py +0 -33
- catalystwan/integration_tests/feature_profile/sdwan/policy/test_security_app_list.py +0 -32
- catalystwan/integration_tests/feature_profile/sdwan/test_application_priority.py +0 -433
- catalystwan/integration_tests/feature_profile/sdwan/test_cli.py +0 -54
- catalystwan/integration_tests/feature_profile/sdwan/test_dns_security.py +0 -106
- catalystwan/integration_tests/feature_profile/sdwan/test_other.py +0 -49
- catalystwan/integration_tests/feature_profile/sdwan/test_service.py +0 -1078
- catalystwan/integration_tests/feature_profile/sdwan/test_sig_security.py +0 -322
- catalystwan/integration_tests/feature_profile/sdwan/test_ssl_decryption.py +0 -85
- catalystwan/integration_tests/feature_profile/sdwan/test_system.py +0 -368
- catalystwan/integration_tests/feature_profile/sdwan/test_tracker.py +0 -127
- catalystwan/integration_tests/feature_profile/sdwan/test_transport.py +0 -1698
- catalystwan/integration_tests/feature_profile/sdwan/topology/test_topology.py +0 -93
- catalystwan/integration_tests/feature_profile/test_parcel.py +0 -54
- catalystwan/integration_tests/profile_builder/__init__.py +0 -0
- catalystwan/integration_tests/profile_builder/test_pb_service.py +0 -197
- catalystwan/integration_tests/profile_builder/test_pb_transport.py +0 -226
- catalystwan/integration_tests/profile_builder/test_pb_uc_voice.py +0 -277
- catalystwan/integration_tests/test_data/__init__.py +0 -117
- catalystwan/integration_tests/test_network_hierarchy.py +0 -82
- catalystwan/integration_tests/test_settings.py +0 -30
- catalystwan/models/configuration/feature_profile/parcel.py +0 -245
- catalystwan/models/configuration/feature_profile/sdwan/acl/__init__.py +0 -13
- catalystwan/models/configuration/feature_profile/sdwan/acl/ipv4acl.py +0 -298
- catalystwan/models/configuration/feature_profile/sdwan/acl/ipv6acl.py +0 -344
- catalystwan/models/configuration/feature_profile/sdwan/application_priority/__init__.py +0 -218
- catalystwan/models/configuration/feature_profile/sdwan/application_priority/cloud_probe.py +0 -61
- catalystwan/models/configuration/feature_profile/sdwan/application_priority/policy_settings.py +0 -31
- catalystwan/models/configuration/feature_profile/sdwan/application_priority/qos_policy.py +0 -102
- catalystwan/models/configuration/feature_profile/sdwan/application_priority/traffic_policy.py +0 -1057
- catalystwan/models/configuration/feature_profile/sdwan/cli/__init__.py +0 -23
- catalystwan/models/configuration/feature_profile/sdwan/cli/config.py +0 -18
- catalystwan/models/configuration/feature_profile/sdwan/cli/full_config.py +0 -15
- catalystwan/models/configuration/feature_profile/sdwan/dns_security/__init__.py +0 -13
- catalystwan/models/configuration/feature_profile/sdwan/dns_security/dns.py +0 -110
- catalystwan/models/configuration/feature_profile/sdwan/embedded_security/__init__.py +0 -23
- catalystwan/models/configuration/feature_profile/sdwan/embedded_security/ngfirewall.py +0 -493
- catalystwan/models/configuration/feature_profile/sdwan/embedded_security/policy.py +0 -171
- catalystwan/models/configuration/feature_profile/sdwan/other/__init__.py +0 -25
- catalystwan/models/configuration/feature_profile/sdwan/other/cybervision.py +0 -44
- catalystwan/models/configuration/feature_profile/sdwan/other/thousandeyes.py +0 -147
- catalystwan/models/configuration/feature_profile/sdwan/other/ucse.py +0 -110
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/as_path.py +0 -22
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/extended_community.py +0 -34
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv4_network_object.py +0 -15
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv4_service_object.py +0 -254
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/mirror.py +0 -27
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/network_object_group.py +0 -15
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/object_group.py +0 -15
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/service_object_group.py +0 -21
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/aip.py +0 -64
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/amp.py +0 -79
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/identity.py +0 -30
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/intrusion_prevention.py +0 -58
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/object_group.py +0 -72
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/rule_set.py +0 -137
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/scalable_group_tag.py +0 -26
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption.py +0 -126
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption_profile.py +0 -165
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url_filtering.py +0 -148
- catalystwan/models/configuration/feature_profile/sdwan/routing/__init__.py +0 -26
- catalystwan/models/configuration/feature_profile/sdwan/routing/bgp.py +0 -609
- catalystwan/models/configuration/feature_profile/sdwan/service/__init__.py +0 -91
- catalystwan/models/configuration/feature_profile/sdwan/service/dual_router_ha.py +0 -26
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/multilink.py +0 -101
- catalystwan/models/configuration/feature_profile/sdwan/service/service_chain.py +0 -38
- catalystwan/models/configuration/feature_profile/sdwan/sig_security/__init__.py +0 -19
- catalystwan/models/configuration/feature_profile/sdwan/sig_security/sig_security.py +0 -379
- catalystwan/models/configuration/feature_profile/sdwan/system/__init__.py +0 -59
- catalystwan/models/configuration/feature_profile/sdwan/system/banner.py +0 -30
- catalystwan/models/configuration/feature_profile/sdwan/system/basic.py +0 -290
- catalystwan/models/configuration/feature_profile/sdwan/system/bfd.py +0 -69
- catalystwan/models/configuration/feature_profile/sdwan/system/device_access.py +0 -157
- catalystwan/models/configuration/feature_profile/sdwan/system/device_access_ipv6.py +0 -157
- catalystwan/models/configuration/feature_profile/sdwan/system/global_parcel.py +0 -163
- catalystwan/models/configuration/feature_profile/sdwan/system/logging_parcel.py +0 -162
- catalystwan/models/configuration/feature_profile/sdwan/system/mrf.py +0 -75
- catalystwan/models/configuration/feature_profile/sdwan/system/ntp.py +0 -103
- catalystwan/models/configuration/feature_profile/sdwan/system/omp.py +0 -120
- catalystwan/models/configuration/feature_profile/sdwan/system/security.py +0 -179
- catalystwan/models/configuration/feature_profile/sdwan/system/snmp.py +0 -173
- catalystwan/models/configuration/feature_profile/sdwan/topology/__init__.py +0 -29
- catalystwan/models/configuration/feature_profile/sdwan/topology/custom_control.py +0 -425
- catalystwan/models/configuration/feature_profile/sdwan/topology/hubspoke.py +0 -60
- catalystwan/models/configuration/feature_profile/sdwan/topology/mesh.py +0 -23
- catalystwan/models/configuration/feature_profile/sdwan/trackers/__init__.py +0 -36
- catalystwan/models/configuration/feature_profile/sdwan/trackers/tracker.py +0 -96
- catalystwan/models/configuration/feature_profile/sdwan/trackers/tracker_group.py +0 -63
- catalystwan/models/configuration/feature_profile/sdwan/transport/__init__.py +0 -93
- catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_profile.py +0 -71
- catalystwan/models/configuration/feature_profile/sdwan/transport/gps.py +0 -37
- catalystwan/models/configuration/feature_profile/sdwan/transport/management/ethernet.py +0 -121
- catalystwan/models/configuration/feature_profile/sdwan/transport/t1e1controller.py +0 -124
- catalystwan/models/configuration/feature_profile/sdwan/transport/vpn.py +0 -285
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/cellular.py +0 -173
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ethernet.py +0 -389
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/gre.py +0 -46
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ipsec.py +0 -137
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/multilink.py +0 -219
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/protocol_over.py +0 -405
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/t1e1serial.py +0 -195
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/__init__.py +0 -62
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/analog_interface.py +0 -436
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/call_routing.py +0 -179
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/digital_interface.py +0 -380
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/dsp_farm.py +0 -193
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/media_profile.py +0 -17
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/server_group.py +0 -51
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/srst.py +0 -86
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/supervisory_disconnect.py +0 -69
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_profile.py +0 -42
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_rule.py +0 -31
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/trunk_group.py +0 -26
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_global.py +0 -57
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_tenant.py +0 -40
- catalystwan/models/configuration/network_hierarchy/__init__.py +0 -24
- catalystwan/models/configuration/network_hierarchy/cflowd.py +0 -128
- catalystwan/models/configuration/network_hierarchy/node.py +0 -88
- catalystwan/models/configuration/network_hierarchy/security_logging.py +0 -91
- catalystwan/models/configuration/packages.py +0 -57
- catalystwan/models/configuration/policy_group.py +0 -74
- catalystwan/models/configuration/topology_group.py +0 -52
- catalystwan/models/policy/definition/aip.py +0 -60
- catalystwan/models/policy/definition/amp.py +0 -65
- catalystwan/models/policy/definition/app_route.py +0 -246
- catalystwan/models/policy/definition/cflowd.py +0 -95
- catalystwan/models/policy/definition/dial_peer.py +0 -60
- catalystwan/models/policy/definition/dns_security.py +0 -130
- catalystwan/models/policy/definition/fxo_port.py +0 -63
- catalystwan/models/policy/definition/fxs_did_port.py +0 -58
- catalystwan/models/policy/definition/fxs_port.py +0 -56
- catalystwan/models/policy/definition/intrusion_prevention.py +0 -55
- catalystwan/models/policy/definition/pri_isdn_port.py +0 -48
- catalystwan/models/policy/definition/route_policy.py +0 -187
- catalystwan/models/policy/definition/srst_phone_profile.py +0 -37
- catalystwan/models/policy/definition/ssl_decryption.py +0 -209
- catalystwan/models/policy/definition/ssl_decryption_utd_profile.py +0 -88
- catalystwan/models/policy/definition/url_filtering.py +0 -70
- catalystwan/models/policy/definition/vpn_qos_map.py +0 -46
- catalystwan/models/policy/list/app.py +0 -44
- catalystwan/models/policy/list/app_probe.py +0 -42
- catalystwan/models/policy/list/as_path.py +0 -30
- catalystwan/models/policy/list/class_map.py +0 -30
- catalystwan/models/policy/list/color.py +0 -28
- catalystwan/models/policy/list/communities.py +0 -83
- catalystwan/models/policy/list/data_ipv6_prefix.py +0 -30
- catalystwan/models/policy/list/data_prefix.py +0 -30
- catalystwan/models/policy/list/fax_protocol.py +0 -45
- catalystwan/models/policy/list/fqdn.py +0 -24
- catalystwan/models/policy/list/geo_location.py +0 -33
- catalystwan/models/policy/list/identity.py +0 -29
- catalystwan/models/policy/list/ips_signature.py +0 -27
- catalystwan/models/policy/list/ipv6_prefix.py +0 -33
- catalystwan/models/policy/list/local_app.py +0 -45
- catalystwan/models/policy/list/local_domain.py +0 -36
- catalystwan/models/policy/list/media_profile.py +0 -44
- catalystwan/models/policy/list/mirror.py +0 -27
- catalystwan/models/policy/list/modem_pass_through.py +0 -27
- catalystwan/models/policy/list/policer.py +0 -39
- catalystwan/models/policy/list/port.py +0 -33
- catalystwan/models/policy/list/preferred_color_group.py +0 -82
- catalystwan/models/policy/list/prefix.py +0 -33
- catalystwan/models/policy/list/protocol_name.py +0 -26
- catalystwan/models/policy/list/region.py +0 -45
- catalystwan/models/policy/list/scalable_group_tag.py +0 -30
- catalystwan/models/policy/list/site.py +0 -34
- catalystwan/models/policy/list/sla.py +0 -77
- catalystwan/models/policy/list/supervisory_disconnect.py +0 -62
- catalystwan/models/policy/list/threat_grid_api_key.py +0 -32
- catalystwan/models/policy/list/tloc.py +0 -32
- catalystwan/models/policy/list/translation_profile.py +0 -32
- catalystwan/models/policy/list/translation_rules.py +0 -29
- catalystwan/models/policy/list/trunkgroup.py +0 -56
- catalystwan/models/policy/list/umbrella_data.py +0 -30
- catalystwan/models/policy/list/url.py +0 -39
- catalystwan/models/policy/list/vpn.py +0 -40
- catalystwan/models/policy/list/zone.py +0 -46
- catalystwan/models/policy/voice.py +0 -77
- catalystwan/models/settings.py +0 -41
- catalystwan/models/templates.py +0 -79
- catalystwan/tests/builders/test_report.py +0 -60
- catalystwan/tests/builders/uc_voice.py +0 -85
- catalystwan/tests/models/__init__.py +0 -0
- catalystwan/tests/models/configuration/feature_profile/sdwan/policy_object/security/test_url.py +0 -73
- catalystwan/tests/models/test_digital_interface.py +0 -56
- catalystwan/tests/templates/definitions/aaa_basic.json +0 -96
- catalystwan/tests/templates/definitions/aaa_complex.json +0 -464
- catalystwan/tests/templates/definitions/cisco_aaa_complex.json +0 -361
- catalystwan/tests/templates/definitions/cisco_logging_complex.json +0 -268
- catalystwan/tests/templates/definitions/cisco_ntp_complex.json +0 -143
- catalystwan/tests/templates/definitions/cisco_omp_complex.json +0 -175
- catalystwan/tests/templates/definitions/cisco_ospf_complex.json +0 -302
- catalystwan/tests/templates/definitions/cisco_sig.json +0 -405
- catalystwan/tests/templates/definitions/cisco_snmp_complex.json +0 -258
- catalystwan/tests/templates/definitions/cisco_system_complex.json +0 -502
- catalystwan/tests/templates/definitions/cisco_vpn_interface_complex.json +0 -821
- catalystwan/tests/templates/definitions/omp_vsmart_1.json +0 -26
- catalystwan/tests/templates/definitions/omp_vsmart_complex.json +0 -73
- catalystwan/tests/templates/definitions/security_vsmart_complex.json +0 -24
- catalystwan/tests/templates/definitions/system_vsmart_complex.json +0 -193
- catalystwan/tests/templates/definitions/vpn_vsmart_basic.json +0 -17
- catalystwan/tests/templates/definitions/vpn_vsmart_complex.json +0 -179
- catalystwan/tests/templates/definitions/vpn_vsmart_interface_basic.json +0 -42
- catalystwan/tests/templates/definitions/vpn_vsmart_interface_complex.json +0 -208
- catalystwan/tests/templates/models/aaa.py +0 -106
- catalystwan/tests/templates/models/cisco_logging.py +0 -65
- catalystwan/tests/templates/models/cisco_ntp.py +0 -17
- catalystwan/tests/templates/models/cisco_omp.py +0 -37
- catalystwan/tests/templates/models/cisco_ospf.py +0 -60
- catalystwan/tests/templates/models/cisco_secure_internet_gateway.py +0 -95
- catalystwan/tests/templates/models/cisco_snmp.py +0 -40
- catalystwan/tests/templates/models/cisco_vpn_interface.py +0 -200
- catalystwan/tests/templates/models/security_vsmart.py +0 -11
- catalystwan/tests/templates/models/system_vsmart.py +0 -37
- catalystwan/tests/templates/models/vpn_vsmart.py +0 -32
- catalystwan/tests/templates/models/vpn_vsmart_interface.py +0 -54
- catalystwan/tests/templates/schemas/aaa.json +0 -1096
- catalystwan/tests/templates/schemas/cisco_logging.json +0 -577
- catalystwan/tests/templates/schemas/cisco_ntp.json +0 -265
- catalystwan/tests/templates/schemas/cisco_omp.json +0 -479
- catalystwan/tests/templates/schemas/cisco_ospf.json +0 -908
- catalystwan/tests/templates/schemas/cisco_secure_internet_gateway.json +0 -1520
- catalystwan/tests/templates/schemas/cisco_snmp.json +0 -561
- catalystwan/tests/templates/schemas/cisco_vpn_interface.json +0 -3348
- catalystwan/tests/templates/schemas/security-vsmart.json +0 -58
- catalystwan/tests/templates/schemas/system-vsmart.json +0 -2585
- catalystwan/tests/templates/schemas/vpn-vsmart-interface.json +0 -859
- catalystwan/tests/templates/schemas/vpn-vsmart.json +0 -445
- catalystwan/tests/templates/test_find_template_values_2.py +0 -193
- catalystwan/tests/test_feature_profile_api.py +0 -282
- catalystwan/tests/test_models_common.py +0 -53
- catalystwan/utils/model.py +0 -48
- catalystwan/utils/persona.py +0 -5
- catalystwan/utils/type_check.py +0 -22
- catalystwan/workflows/backup_restore_device_templates.py +0 -467
- catalystwan-0.41.2.dev9.dist-info/RECORD +0 -641
- /catalystwan/tests/templates/definitions/{cisco_banner.json → banner_1.json} +0 -0
- {catalystwan-0.41.2.dev9.dist-info → catalystwan-0.41.3.dist-info}/LICENSE +0 -0
- {catalystwan-0.41.2.dev9.dist-info → catalystwan-0.41.3.dist-info}/WHEEL +0 -0
catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefered_group_color.py
CHANGED
|
@@ -1,30 +1,23 @@
|
|
|
1
1
|
# Copyright 2024 Cisco Systems, Inc. and its affiliates
|
|
2
2
|
|
|
3
|
-
from typing import List,
|
|
3
|
+
from typing import List, Optional
|
|
4
4
|
|
|
5
|
-
from pydantic import AliasPath, BaseModel, ConfigDict, Field,
|
|
5
|
+
from pydantic import AliasPath, BaseModel, ConfigDict, Field, model_validator
|
|
6
6
|
|
|
7
|
-
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase,
|
|
7
|
+
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase, as_global
|
|
8
8
|
from catalystwan.models.common import TLOCColor
|
|
9
|
-
|
|
10
|
-
PathPreference = Literal[
|
|
11
|
-
"direct-path",
|
|
12
|
-
"multi-hop-path",
|
|
13
|
-
"all-paths",
|
|
14
|
-
]
|
|
9
|
+
from catalystwan.models.policy.lists_entries import PathPreference
|
|
15
10
|
|
|
16
11
|
|
|
17
12
|
class Preference(BaseModel):
|
|
18
13
|
model_config = ConfigDict(populate_by_name=True)
|
|
19
|
-
color_preference: Global[
|
|
20
|
-
serialization_alias="colorPreference", validation_alias="colorPreference"
|
|
21
|
-
)
|
|
14
|
+
color_preference: Global[list] = Field(serialization_alias="colorPreference", validation_alias="colorPreference")
|
|
22
15
|
path_preference: Global[PathPreference] = Field(
|
|
23
16
|
serialization_alias="pathPreference", validation_alias="pathPreference"
|
|
24
17
|
)
|
|
25
18
|
|
|
26
19
|
|
|
27
|
-
class PreferredColorGroupEntry(
|
|
20
|
+
class PreferredColorGroupEntry(BaseModel):
|
|
28
21
|
model_config = ConfigDict(populate_by_name=True)
|
|
29
22
|
primary_preference: Preference = Field(
|
|
30
23
|
serialization_alias="primaryPreference", validation_alias="primaryPreference"
|
|
@@ -42,25 +35,15 @@ class PreferredColorGroupEntry(_ParcelEntry):
|
|
|
42
35
|
raise ValueError("Preference Entry has to have a secondary prefrence when assigning tertiary preference.")
|
|
43
36
|
return self
|
|
44
37
|
|
|
45
|
-
@field_validator("secondary_preference", "tertiary_preference", mode="before")
|
|
46
|
-
@classmethod
|
|
47
|
-
def remove_empty_preferences(cls, value):
|
|
48
|
-
"""handle a situation when server returns empty json object: '{}'"""
|
|
49
|
-
if not value:
|
|
50
|
-
return None
|
|
51
|
-
return value
|
|
52
|
-
|
|
53
38
|
|
|
54
39
|
class PreferredColorGroupParcel(_ParcelBase):
|
|
55
|
-
|
|
56
|
-
type_: Literal["preferred-color-group"] = Field(default="preferred-color-group", exclude=True)
|
|
57
|
-
entries: List[PreferredColorGroupEntry] = Field(default_factory=list, validation_alias=AliasPath("data", "entries"))
|
|
40
|
+
entries: List[PreferredColorGroupEntry] = Field(default=[], validation_alias=AliasPath("data", "entries"))
|
|
58
41
|
|
|
59
42
|
def add_primary(self, color_preference: List[TLOCColor], path_preference: PathPreference):
|
|
60
43
|
self.entries.append(
|
|
61
44
|
PreferredColorGroupEntry(
|
|
62
45
|
primary_preference=Preference(
|
|
63
|
-
color_preference=
|
|
46
|
+
color_preference=as_global(color_preference),
|
|
64
47
|
path_preference=as_global(path_preference, PathPreference),
|
|
65
48
|
),
|
|
66
49
|
secondary_preference=None,
|
|
@@ -71,13 +54,11 @@ class PreferredColorGroupParcel(_ParcelBase):
|
|
|
71
54
|
def add_secondary(self, color_preference: List[TLOCColor], path_preference: PathPreference):
|
|
72
55
|
preferred_color = self.entries[0]
|
|
73
56
|
preferred_color.secondary_preference = Preference(
|
|
74
|
-
color_preference=
|
|
75
|
-
path_preference=as_global(path_preference, PathPreference),
|
|
57
|
+
color_preference=as_global(color_preference), path_preference=as_global(path_preference, PathPreference)
|
|
76
58
|
)
|
|
77
59
|
|
|
78
60
|
def add_tertiary(self, color_preference: List[TLOCColor], path_preference: PathPreference):
|
|
79
61
|
preferred_color = self.entries[0]
|
|
80
62
|
preferred_color.tertiary_preference = Preference(
|
|
81
|
-
color_preference=
|
|
82
|
-
path_preference=as_global(path_preference, PathPreference),
|
|
63
|
+
color_preference=as_global(color_preference), path_preference=as_global(path_preference, PathPreference)
|
|
83
64
|
)
|
|
@@ -1,41 +1,26 @@
|
|
|
1
1
|
# Copyright 2024 Cisco Systems, Inc. and its affiliates
|
|
2
2
|
|
|
3
3
|
from ipaddress import IPv4Address, IPv4Network
|
|
4
|
-
from typing import List
|
|
4
|
+
from typing import List
|
|
5
5
|
|
|
6
|
-
from pydantic import AliasPath, ConfigDict, Field
|
|
6
|
+
from pydantic import AliasPath, BaseModel, ConfigDict, Field
|
|
7
7
|
|
|
8
|
-
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase,
|
|
9
|
-
from catalystwan.models.common import Ipv4GePrefixRangeLen, Ipv4LePrefixRangeLen, Ipv4PrefixLen
|
|
8
|
+
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase, as_global
|
|
10
9
|
|
|
11
10
|
|
|
12
|
-
class PrefixListEntry(
|
|
11
|
+
class PrefixListEntry(BaseModel):
|
|
13
12
|
model_config = ConfigDict(populate_by_name=True)
|
|
14
13
|
ipv4_address: Global[IPv4Address] = Field(serialization_alias="ipv4Address", validation_alias="ipv4Address")
|
|
15
|
-
ipv4_prefix_length: Global[
|
|
16
|
-
serialization_alias="ipv4PrefixLength", validation_alias="ipv4PrefixLength"
|
|
17
|
-
)
|
|
18
|
-
le_range_prefix_length: Optional[Global[Ipv4LePrefixRangeLen]] = Field(
|
|
19
|
-
default=None, serialization_alias="leRangePrefixLength", validation_alias="leRangePrefixLength"
|
|
20
|
-
)
|
|
21
|
-
ge_range_prefix_length: Optional[Global[Ipv4GePrefixRangeLen]] = Field(
|
|
22
|
-
default=None, serialization_alias="geRangePrefixLength", validation_alias="geRangePrefixLength"
|
|
23
|
-
)
|
|
14
|
+
ipv4_prefix_length: Global[int] = Field(serialization_alias="ipv4PrefixLength", validation_alias="ipv4PrefixLength")
|
|
24
15
|
|
|
25
16
|
|
|
26
17
|
class PrefixListParcel(_ParcelBase):
|
|
27
|
-
model_config = ConfigDict(populate_by_name=True)
|
|
28
|
-
type_: Literal["prefix"] = Field(default="prefix", exclude=True)
|
|
29
18
|
entries: List[PrefixListEntry] = Field(default_factory=list, validation_alias=AliasPath("data", "entries"))
|
|
30
19
|
|
|
31
|
-
def add_prefix(self, ipv4_network: IPv4Network
|
|
32
|
-
le_ = Global[Ipv4LePrefixRangeLen](value=le) if le is not None else None
|
|
33
|
-
ge_ = Global[Ipv4GePrefixRangeLen](value=ge) if ge is not None else None
|
|
20
|
+
def add_prefix(self, ipv4_network: IPv4Network):
|
|
34
21
|
self.entries.append(
|
|
35
22
|
PrefixListEntry(
|
|
36
|
-
ipv4_address=
|
|
37
|
-
ipv4_prefix_length=
|
|
38
|
-
le_range_prefix_length=le_,
|
|
39
|
-
ge_range_prefix_length=ge_,
|
|
23
|
+
ipv4_address=as_global(ipv4_network.network_address),
|
|
24
|
+
ipv4_prefix_length=as_global(ipv4_network.prefixlen),
|
|
40
25
|
)
|
|
41
26
|
)
|
|
@@ -5,9 +5,25 @@ from uuid import UUID
|
|
|
5
5
|
|
|
6
6
|
from pydantic import AliasPath, BaseModel, ConfigDict, Field, field_validator
|
|
7
7
|
|
|
8
|
-
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase,
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase, as_global
|
|
9
|
+
|
|
10
|
+
SLAClassCriteria = Literal[
|
|
11
|
+
"loss",
|
|
12
|
+
"latency",
|
|
13
|
+
"jitter",
|
|
14
|
+
"loss-latency",
|
|
15
|
+
"loss-jitter",
|
|
16
|
+
"latency-loss",
|
|
17
|
+
"latency-jitter",
|
|
18
|
+
"jitter-latency",
|
|
19
|
+
"jitter-loss",
|
|
20
|
+
"loss-latency-jitter",
|
|
21
|
+
"loss-jitter-latency",
|
|
22
|
+
"latency-loss-jitter",
|
|
23
|
+
"latency-jitter-loss",
|
|
24
|
+
"jitter-latency-loss",
|
|
25
|
+
"jitter-loss-latency",
|
|
26
|
+
]
|
|
11
27
|
|
|
12
28
|
|
|
13
29
|
def check_latency_ms(cls, latency: Optional[Global]):
|
|
@@ -28,6 +44,12 @@ def check_jitter_ms(cls, jitter: Optional[Global]):
|
|
|
28
44
|
return jitter
|
|
29
45
|
|
|
30
46
|
|
|
47
|
+
class SLAAppProbeClass(BaseModel):
|
|
48
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
49
|
+
|
|
50
|
+
ref_id: Global[UUID] = Field(serialization_alias="refId", validation_alias="refId")
|
|
51
|
+
|
|
52
|
+
|
|
31
53
|
class FallbackBestTunnel(BaseModel):
|
|
32
54
|
model_config = ConfigDict(populate_by_name=True)
|
|
33
55
|
|
|
@@ -73,14 +95,14 @@ class FallbackBestTunnel(BaseModel):
|
|
|
73
95
|
raise ValueError(f"Criteria {e} is not in configured criteria {self.criteria.value}")
|
|
74
96
|
|
|
75
97
|
|
|
76
|
-
class SLAClassListEntry(
|
|
98
|
+
class SLAClassListEntry(BaseModel):
|
|
77
99
|
model_config = ConfigDict(populate_by_name=True)
|
|
78
100
|
|
|
79
101
|
latency: Optional[Global[int]] = None
|
|
80
102
|
loss: Optional[Global[int]] = None
|
|
81
103
|
jitter: Optional[Global[int]] = None
|
|
82
|
-
app_probe_class: Optional[
|
|
83
|
-
|
|
104
|
+
app_probe_class: Optional[SLAAppProbeClass] = Field(
|
|
105
|
+
validation_alias="appProbeClass", serialization_alias="appProbeClass"
|
|
84
106
|
)
|
|
85
107
|
fallback_best_tunnel: Optional[FallbackBestTunnel] = Field(
|
|
86
108
|
default=None, validation_alias="fallbackBestTunnel", serialization_alias="fallbackBestTunnel"
|
|
@@ -93,21 +115,18 @@ class SLAClassListEntry(_ParcelEntry):
|
|
|
93
115
|
|
|
94
116
|
|
|
95
117
|
class SLAClassParcel(_ParcelBase):
|
|
96
|
-
|
|
97
|
-
type_: Literal["sla-class"] = Field(default="sla-class", exclude=True)
|
|
98
|
-
entries: List[SLAClassListEntry] = Field(default_factory=list, validation_alias=AliasPath("data", "entries"))
|
|
118
|
+
entries: List[SLAClassListEntry] = Field(default=[], validation_alias=AliasPath("data", "entries"))
|
|
99
119
|
|
|
100
120
|
def add_entry(
|
|
101
121
|
self,
|
|
102
|
-
app_probe_class_id:
|
|
122
|
+
app_probe_class_id: UUID,
|
|
103
123
|
loss: Optional[int] = None,
|
|
104
124
|
jitter: Optional[int] = None,
|
|
105
125
|
latency: Optional[int] = None,
|
|
106
126
|
):
|
|
107
|
-
ref = RefIdItem(ref_id=as_global(str(app_probe_class_id))) if app_probe_class_id is not None else None
|
|
108
127
|
self.entries.append(
|
|
109
128
|
SLAClassListEntry(
|
|
110
|
-
app_probe_class=
|
|
129
|
+
app_probe_class=SLAAppProbeClass(ref_id=as_global(app_probe_class_id)),
|
|
111
130
|
loss=as_global(loss) if loss is not None else None,
|
|
112
131
|
jitter=as_global(jitter) if jitter is not None else None,
|
|
113
132
|
latency=as_global(latency) if latency is not None else None,
|
catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/standard_community.py
CHANGED
|
@@ -1,30 +1,24 @@
|
|
|
1
1
|
# Copyright 2024 Cisco Systems, Inc. and its affiliates
|
|
2
2
|
|
|
3
|
-
from typing import List
|
|
3
|
+
from typing import List
|
|
4
4
|
|
|
5
|
-
from pydantic import AliasPath, ConfigDict, Field
|
|
5
|
+
from pydantic import AliasPath, BaseModel, ConfigDict, Field
|
|
6
6
|
|
|
7
|
-
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase,
|
|
7
|
+
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase, as_global
|
|
8
8
|
from catalystwan.models.common import WellKnownBGPCommunities
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
class StandardCommunityEntry(
|
|
11
|
+
class StandardCommunityEntry(BaseModel):
|
|
12
12
|
model_config = ConfigDict(populate_by_name=True)
|
|
13
|
-
standard_community: Global[
|
|
13
|
+
standard_community: Global[WellKnownBGPCommunities] = Field(
|
|
14
14
|
serialization_alias="standardCommunity", validation_alias="standardCommunity"
|
|
15
15
|
)
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
class StandardCommunityParcel(_ParcelBase):
|
|
19
|
-
|
|
20
|
-
type_: Literal["standard-community"] = Field(default="standard-community", exclude=True)
|
|
21
|
-
entries: List[StandardCommunityEntry] = Field(default_factory=list, validation_alias=AliasPath("data", "entries"))
|
|
22
|
-
|
|
23
|
-
def _add_community(self, standard_community: str):
|
|
24
|
-
self.entries.append(StandardCommunityEntry(standard_community=as_global(standard_community)))
|
|
25
|
-
|
|
26
|
-
def add_well_known_community(self, standard_community: WellKnownBGPCommunities):
|
|
27
|
-
self._add_community(standard_community)
|
|
19
|
+
entries: List[StandardCommunityEntry] = Field(default=[], validation_alias=AliasPath("data", "entries"))
|
|
28
20
|
|
|
29
|
-
def add_community(self,
|
|
30
|
-
self.
|
|
21
|
+
def add_community(self, standard_community: WellKnownBGPCommunities):
|
|
22
|
+
self.entries.append(
|
|
23
|
+
StandardCommunityEntry(standard_community=as_global(standard_community, WellKnownBGPCommunities))
|
|
24
|
+
)
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
# Copyright 2024 Cisco Systems, Inc. and its affiliates
|
|
2
2
|
|
|
3
3
|
from ipaddress import IPv4Address
|
|
4
|
-
from typing import List,
|
|
4
|
+
from typing import List, Optional
|
|
5
5
|
|
|
6
|
-
from pydantic import AliasPath, ConfigDict, Field, field_validator
|
|
6
|
+
from pydantic import AliasPath, BaseModel, ConfigDict, Field, field_validator
|
|
7
7
|
|
|
8
|
-
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase,
|
|
9
|
-
from catalystwan.models.common import
|
|
8
|
+
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase, as_global
|
|
9
|
+
from catalystwan.models.common import TLOCColor
|
|
10
|
+
from catalystwan.models.policy.lists_entries import EncapType
|
|
10
11
|
|
|
11
12
|
|
|
12
|
-
class TlocEntry(
|
|
13
|
+
class TlocEntry(BaseModel):
|
|
13
14
|
model_config = ConfigDict(populate_by_name=True)
|
|
14
15
|
tloc: Global[IPv4Address]
|
|
15
16
|
color: Global[TLOCColor]
|
|
@@ -27,9 +28,7 @@ class TlocEntry(_ParcelEntry):
|
|
|
27
28
|
|
|
28
29
|
|
|
29
30
|
class TlocParcel(_ParcelBase):
|
|
30
|
-
|
|
31
|
-
type_: Literal["tloc"] = Field(default="tloc", exclude=True)
|
|
32
|
-
entries: List[TlocEntry] = Field(default_factory=list, validation_alias=AliasPath("data", "entries"))
|
|
31
|
+
entries: List[TlocEntry] = Field(default=[], validation_alias=AliasPath("data", "entries"))
|
|
33
32
|
|
|
34
33
|
def add_entry(
|
|
35
34
|
self, tloc: IPv4Address, color: TLOCColor, encapsulation: EncapType, preference: Optional[str] = None
|
catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/application_list.py
CHANGED
|
@@ -1,27 +1,25 @@
|
|
|
1
1
|
# Copyright 2024 Cisco Systems, Inc. and its affiliates
|
|
2
2
|
|
|
3
|
-
from typing import List,
|
|
3
|
+
from typing import List, Union
|
|
4
4
|
|
|
5
|
-
from pydantic import AliasPath, ConfigDict, Field
|
|
5
|
+
from pydantic import AliasPath, BaseModel, ConfigDict, Field
|
|
6
6
|
|
|
7
|
-
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase,
|
|
7
|
+
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase, as_global
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
class SecurityApplicationListEntry(
|
|
10
|
+
class SecurityApplicationListEntry(BaseModel):
|
|
11
11
|
model_config = ConfigDict(populate_by_name=True)
|
|
12
12
|
app_list: Global[str] = Field(serialization_alias="app", validation_alias="app")
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
class SecurityApplicationFamilyListEntry(
|
|
15
|
+
class SecurityApplicationFamilyListEntry(BaseModel):
|
|
16
16
|
model_config = ConfigDict(populate_by_name=True)
|
|
17
17
|
app_list_family: Global[str] = Field(serialization_alias="appFamily", validation_alias="appFamily")
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class SecurityApplicationListParcel(_ParcelBase):
|
|
21
|
-
model_config = ConfigDict(populate_by_name=True)
|
|
22
|
-
type_: Literal["security-localapp"] = Field(default="security-localapp", exclude=True)
|
|
23
21
|
entries: List[Union[SecurityApplicationFamilyListEntry, SecurityApplicationListEntry]] = Field(
|
|
24
|
-
|
|
22
|
+
default=[], validation_alias=AliasPath("data", "entries")
|
|
25
23
|
)
|
|
26
24
|
|
|
27
25
|
def add_application(self, application: str):
|
catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/data_prefix.py
CHANGED
|
@@ -1,22 +1,20 @@
|
|
|
1
1
|
# Copyright 2024 Cisco Systems, Inc. and its affiliates
|
|
2
2
|
|
|
3
3
|
from ipaddress import IPv4Network
|
|
4
|
-
from typing import List
|
|
4
|
+
from typing import List
|
|
5
5
|
|
|
6
|
-
from pydantic import AliasPath, ConfigDict, Field
|
|
6
|
+
from pydantic import AliasPath, BaseModel, ConfigDict, Field
|
|
7
7
|
|
|
8
|
-
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase,
|
|
8
|
+
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase, as_global
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
class SecurityDataPrefixEntry(
|
|
11
|
+
class SecurityDataPrefixEntry(BaseModel):
|
|
12
12
|
model_config = ConfigDict(populate_by_name=True)
|
|
13
13
|
ip_prefix: Global[IPv4Network] = Field(serialization_alias="ipPrefix", validation_alias="ipPrefix")
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class SecurityDataPrefixParcel(_ParcelBase):
|
|
17
|
-
|
|
18
|
-
type_: Literal["security-data-ip-prefix"] = Field(default="security-data-ip-prefix", exclude=True)
|
|
19
|
-
entries: List[SecurityDataPrefixEntry] = Field(default_factory=list, validation_alias=AliasPath("data", "entries"))
|
|
17
|
+
entries: List[SecurityDataPrefixEntry] = Field(default=[], validation_alias=AliasPath("data", "entries"))
|
|
20
18
|
|
|
21
19
|
def add_prefix(self, ip_prefix: IPv4Network):
|
|
22
20
|
self.entries.append(SecurityDataPrefixEntry(ip_prefix=as_global(ip_prefix)))
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# Copyright 2024 Cisco Systems, Inc. and its affiliates
|
|
2
2
|
|
|
3
|
-
from typing import List
|
|
3
|
+
from typing import List
|
|
4
4
|
|
|
5
|
-
from pydantic import AliasPath, ConfigDict, Field
|
|
5
|
+
from pydantic import AliasPath, BaseModel, ConfigDict, Field
|
|
6
6
|
|
|
7
|
-
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase,
|
|
7
|
+
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase, as_global
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
class FQDNListEntry(
|
|
10
|
+
class FQDNListEntry(BaseModel):
|
|
11
11
|
model_config = ConfigDict(populate_by_name=True)
|
|
12
12
|
pattern: Global[str] = Field(
|
|
13
13
|
description="Ex: cisco.com, .*cisco.com, .*.cisco.com. Should not start with '*' or '+'"
|
|
@@ -15,9 +15,7 @@ class FQDNListEntry(_ParcelEntry):
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class FQDNDomainParcel(_ParcelBase):
|
|
18
|
-
|
|
19
|
-
type_: Literal["security-fqdn"] = Field(default="security-fqdn", exclude=True)
|
|
20
|
-
entries: List[FQDNListEntry] = Field(default_factory=list, validation_alias=AliasPath("data", "entries"))
|
|
18
|
+
entries: List[FQDNListEntry] = Field(default=[], validation_alias=AliasPath("data", "entries"))
|
|
21
19
|
|
|
22
20
|
def from_fqdns(self, fqdns: List[str]):
|
|
23
21
|
for fqdn in fqdns:
|
catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/geolocation_list.py
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# Copyright 2024 Cisco Systems, Inc. and its affiliates
|
|
2
2
|
|
|
3
|
-
from typing import List,
|
|
3
|
+
from typing import List, Optional
|
|
4
4
|
|
|
5
|
-
from pydantic import AliasPath,
|
|
5
|
+
from pydantic import AliasPath, BaseModel, Field, model_validator
|
|
6
6
|
|
|
7
|
-
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase,
|
|
7
|
+
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase, as_global
|
|
8
8
|
from catalystwan.models.common import check_fields_exclusive
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
class GeoLocationListEntry(
|
|
11
|
+
class GeoLocationListEntry(BaseModel):
|
|
12
12
|
country: Optional[Global[str]] = Field(default=None, description="ISO-3166 alpha-3 country code eg: FRA")
|
|
13
13
|
continent: Optional[Global[str]] = Field(
|
|
14
14
|
default=None, description="One of 2-letter continent codes: AF, NA, OC, AN, AS, EU, SA"
|
|
@@ -21,9 +21,7 @@ class GeoLocationListEntry(_ParcelEntry):
|
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
class GeoLocationListParcel(_ParcelBase):
|
|
24
|
-
|
|
25
|
-
type_: Literal["security-geolocation"] = Field(default="security-geolocation", exclude=True)
|
|
26
|
-
entries: List[GeoLocationListEntry] = Field(default_factory=list, validation_alias=AliasPath("data", "entries"))
|
|
24
|
+
entries: List[GeoLocationListEntry] = Field(default=[], validation_alias=AliasPath("data", "entries"))
|
|
27
25
|
|
|
28
26
|
def add_country(self, country: str):
|
|
29
27
|
self.entries.append(GeoLocationListEntry(country=as_global(country)))
|
catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ips_signature.py
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# Copyright 2024 Cisco Systems, Inc. and its affiliates
|
|
2
2
|
|
|
3
|
-
from typing import List
|
|
3
|
+
from typing import List
|
|
4
4
|
|
|
5
|
-
from pydantic import AliasPath, ConfigDict, Field, field_validator
|
|
5
|
+
from pydantic import AliasPath, BaseModel, ConfigDict, Field, field_validator
|
|
6
6
|
|
|
7
|
-
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase,
|
|
7
|
+
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase, as_global
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
class IPSSignatureListEntry(
|
|
10
|
+
class IPSSignatureListEntry(BaseModel):
|
|
11
11
|
model_config = ConfigDict(populate_by_name=True)
|
|
12
12
|
generator_id: Global[str] = Field(
|
|
13
13
|
serialization_alias="generatorId", validation_alias="generatorId", description="Range 0 to 4294967295"
|
|
@@ -30,9 +30,7 @@ class IPSSignatureListEntry(_ParcelEntry):
|
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
class IPSSignatureParcel(_ParcelBase):
|
|
33
|
-
|
|
34
|
-
type_: Literal["security-ipssignature"] = Field(default="security-ipssignature", exclude=True)
|
|
35
|
-
entries: List[IPSSignatureListEntry] = Field(default_factory=list, validation_alias=AliasPath("data", "entries"))
|
|
33
|
+
entries: List[IPSSignatureListEntry] = Field(default=[], validation_alias=AliasPath("data", "entries"))
|
|
36
34
|
|
|
37
35
|
def add_signature(self, signature: str):
|
|
38
36
|
generator_id, signature_id = signature.split(":")
|
catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/local_domain.py
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# Copyright 2024 Cisco Systems, Inc. and its affiliates
|
|
2
2
|
|
|
3
|
-
from typing import List
|
|
3
|
+
from typing import List
|
|
4
4
|
|
|
5
|
-
from pydantic import AliasPath, ConfigDict, Field
|
|
5
|
+
from pydantic import AliasPath, BaseModel, ConfigDict, Field
|
|
6
6
|
|
|
7
|
-
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase,
|
|
7
|
+
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase, as_global
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
class LocalDomainListEntry(
|
|
10
|
+
class LocalDomainListEntry(BaseModel):
|
|
11
11
|
model_config = ConfigDict(populate_by_name=True)
|
|
12
12
|
name_server: Global[str] = Field(
|
|
13
13
|
serialization_alias="nameServer", validation_alias="nameServer", description="Ex: cisco.com, *.cisco.com"
|
|
@@ -15,9 +15,7 @@ class LocalDomainListEntry(_ParcelEntry):
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class LocalDomainParcel(_ParcelBase):
|
|
18
|
-
|
|
19
|
-
type_: Literal["security-localdomain"] = Field(default="security-localdomain", exclude=True)
|
|
20
|
-
entries: List[LocalDomainListEntry] = Field(default_factory=list, validation_alias=AliasPath("data", "entries"))
|
|
18
|
+
entries: List[LocalDomainListEntry] = Field(default=[], validation_alias=AliasPath("data", "entries"))
|
|
21
19
|
|
|
22
20
|
def from_local_domains(self, domains: List[str]):
|
|
23
21
|
for domain in domains:
|
catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/protocol_list.py
CHANGED
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
# Copyright 2024 Cisco Systems, Inc. and its affiliates
|
|
2
2
|
|
|
3
|
-
from typing import List
|
|
3
|
+
from typing import List
|
|
4
4
|
|
|
5
|
-
from pydantic import AliasPath, ConfigDict, Field
|
|
5
|
+
from pydantic import AliasPath, BaseModel, ConfigDict, Field
|
|
6
6
|
|
|
7
|
-
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase,
|
|
7
|
+
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase, as_global
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
class ProtocolListEntry(
|
|
10
|
+
class ProtocolListEntry(BaseModel):
|
|
11
11
|
model_config = ConfigDict(populate_by_name=True)
|
|
12
12
|
protocol: Global[str] = Field(serialization_alias="protocolName", validation_alias="protocolName")
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class ProtocolListParcel(_ParcelBase):
|
|
16
|
-
|
|
17
|
-
type_: Literal["security-protocolname"] = Field(default="security-protocolname", exclude=True)
|
|
18
|
-
entries: List[ProtocolListEntry] = Field(default_factory=list, validation_alias=AliasPath("data", "entries"))
|
|
16
|
+
entries: List[ProtocolListEntry] = Field(default=[], validation_alias=AliasPath("data", "entries"))
|
|
19
17
|
|
|
20
18
|
def add_protocol(self, protocol: str):
|
|
21
19
|
self.entries.append(ProtocolListEntry(protocol=as_global(protocol)))
|
catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/security_port.py
CHANGED
|
@@ -1,45 +1,35 @@
|
|
|
1
1
|
# Copyright 2024 Cisco Systems, Inc. and its affiliates
|
|
2
2
|
|
|
3
|
-
from typing import List
|
|
3
|
+
from typing import List
|
|
4
4
|
|
|
5
|
-
from pydantic import AliasPath, ConfigDict, Field, field_validator
|
|
5
|
+
from pydantic import AliasPath, BaseModel, ConfigDict, Field, field_validator
|
|
6
6
|
|
|
7
|
-
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase,
|
|
7
|
+
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase, as_global
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
class SecurityPortListEntry(
|
|
10
|
+
class SecurityPortListEntry(BaseModel):
|
|
11
11
|
model_config = ConfigDict(populate_by_name=True)
|
|
12
|
-
port: Global[str] = Field(
|
|
13
|
-
description="Ex: 1 or 1-10 by range. Range 0 to 65535"
|
|
14
|
-
) # Not clear why UI validation accepts max 65530
|
|
12
|
+
port: Global[str] = Field(description="Ex: 1 or 1-10 by range. Range 0 to 65530")
|
|
15
13
|
|
|
16
14
|
@field_validator("port")
|
|
17
15
|
@classmethod
|
|
18
16
|
def check_port(cls, port: Global[str]):
|
|
19
17
|
value = port.value
|
|
20
18
|
if value.count("-") == 0:
|
|
21
|
-
assert 0 <= int(value) <=
|
|
19
|
+
assert 0 <= int(value) <= 65530
|
|
22
20
|
return port
|
|
23
21
|
|
|
24
22
|
start_port, end_port = value.split("-")
|
|
25
23
|
start = int(start_port)
|
|
26
24
|
end = int(end_port)
|
|
27
|
-
assert 0 <= start <=
|
|
28
|
-
assert 0 <= end <=
|
|
25
|
+
assert 0 <= start <= 65530
|
|
26
|
+
assert 0 <= end <= 65530
|
|
29
27
|
assert start < end
|
|
30
28
|
return port
|
|
31
29
|
|
|
32
30
|
|
|
33
31
|
class SecurityPortParcel(_ParcelBase):
|
|
34
|
-
|
|
35
|
-
type_: Literal["security-port"] = Field(default="security-port", exclude=True)
|
|
36
|
-
entries: List[SecurityPortListEntry] = Field(default_factory=list, validation_alias=AliasPath("data", "entries"))
|
|
37
|
-
|
|
38
|
-
def _add_port(self, port: str):
|
|
39
|
-
self.entries.append(SecurityPortListEntry(port=Global[str](value=port)))
|
|
40
|
-
|
|
41
|
-
def add_port(self, port: int):
|
|
42
|
-
self._add_port(str(port))
|
|
32
|
+
entries: List[SecurityPortListEntry] = Field(default=[], validation_alias=AliasPath("data", "entries"))
|
|
43
33
|
|
|
44
|
-
def
|
|
45
|
-
self.
|
|
34
|
+
def add_port(self, port: str):
|
|
35
|
+
self.entries.append(SecurityPortListEntry(port=as_global(port)))
|
|
@@ -1,48 +1,27 @@
|
|
|
1
1
|
# Copyright 2024 Cisco Systems, Inc. and its affiliates
|
|
2
2
|
|
|
3
|
-
from typing import List
|
|
3
|
+
from typing import List
|
|
4
4
|
|
|
5
|
-
from pydantic import AliasPath, ConfigDict, Field
|
|
5
|
+
from pydantic import AliasPath, BaseModel, ConfigDict, Field
|
|
6
6
|
|
|
7
|
-
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase,
|
|
7
|
+
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase, as_global
|
|
8
8
|
|
|
9
|
-
URLListSubtype = Literal["urlallowed", "urlblocked"]
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
class BaseURLListEntry(_ParcelEntry):
|
|
10
|
+
class BaseURLListEntry(BaseModel):
|
|
13
11
|
model_config = ConfigDict(populate_by_name=True)
|
|
14
12
|
pattern: Global[str]
|
|
15
13
|
|
|
16
14
|
|
|
17
|
-
class
|
|
18
|
-
|
|
19
|
-
subtype: Optional[URLListSubtype] = Field( # field name must not clash with any of aliases
|
|
20
|
-
default=None,
|
|
21
|
-
validation_alias=AliasPath("data", "type"),
|
|
22
|
-
# serialization alias handled by _BaseParcel model serializer
|
|
23
|
-
description="must be used only for versions > 20.15.2",
|
|
24
|
-
)
|
|
25
|
-
legacy_subtype: Optional[URLListSubtype] = Field( # field name must not clash with any of aliases
|
|
26
|
-
exclude=True,
|
|
27
|
-
default=None,
|
|
28
|
-
validation_alias="type",
|
|
29
|
-
serialization_alias="type",
|
|
30
|
-
description="must be used only for versions <= 20.15.2",
|
|
31
|
-
)
|
|
32
|
-
type_: Literal["security-urllist"] = Field(default="security-urllist", exclude=True)
|
|
33
|
-
entries: List[BaseURLListEntry] = Field(default_factory=list, validation_alias=AliasPath("data", "entries"))
|
|
15
|
+
class BaseURLParcel(_ParcelBase):
|
|
16
|
+
entries: List[BaseURLListEntry] = Field(default=[], validation_alias=AliasPath("data", "entries"))
|
|
34
17
|
|
|
35
18
|
def add_url(self, pattern: str):
|
|
36
|
-
self.entries.append(BaseURLListEntry(pattern=
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
serialized = _ParcelBase.envelope_parcel_data(self, handler, info)
|
|
46
|
-
if self.legacy_subtype:
|
|
47
|
-
serialized["type"] = self.legacy_subtype
|
|
48
|
-
return serialized
|
|
19
|
+
self.entries.append(BaseURLListEntry(pattern=as_global(pattern)))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class URLAllowParcel(BaseURLParcel):
|
|
23
|
+
parcel_type: str = Field(default="urlallowed", validation_alias="type", serialization_alias="type")
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class URLBlockParcel(BaseURLParcel):
|
|
27
|
+
parcel_type: str = Field(default="urlblocked", validation_alias="type", serialization_alias="type")
|