catalystwan 0.40.1.dev7__py3-none-any.whl → 2.0.0a0__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/core/__init__.py +2 -0
- catalystwan/core/abstractions.py +26 -0
- catalystwan/{apigw_auth.py → core/apigw_auth.py} +29 -14
- catalystwan/core/client.py +71 -0
- catalystwan/core/encoder.py +12 -0
- catalystwan/{exceptions.py → core/exceptions.py} +29 -9
- catalystwan/core/loader.py +37 -0
- catalystwan/{__init__.py → core/metadata.py} +9 -22
- catalystwan/core/models/deserialize.py +203 -0
- catalystwan/core/models/serialize.py +137 -0
- catalystwan/core/request_adapter.py +246 -0
- catalystwan/{request_limiter.py → core/request_limiter.py} +1 -2
- catalystwan/{response.py → core/response.py} +38 -85
- catalystwan/{session.py → core/session.py} +84 -101
- catalystwan/core/types.py +33 -0
- catalystwan/{version.py → core/version.py} +3 -5
- catalystwan/{vmanage_auth.py → core/vmanage_auth.py} +46 -21
- catalystwan-2.0.0a0.dist-info/METADATA +327 -0
- catalystwan-2.0.0a0.dist-info/RECORD +24 -0
- {catalystwan-0.40.1.dev7.dist-info → catalystwan-2.0.0a0.dist-info}/WHEEL +2 -1
- catalystwan-2.0.0a0.dist-info/top_level.txt +1 -0
- catalystwan/abstractions.py +0 -77
- catalystwan/api/admin_tech_api.py +0 -176
- catalystwan/api/administration.py +0 -434
- catalystwan/api/alarms_api.py +0 -186
- catalystwan/api/api_container.py +0 -73
- catalystwan/api/basic_api.py +0 -338
- catalystwan/api/builders/__init__.py +0 -14
- 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/other.py +0 -79
- catalystwan/api/builders/feature_profiles/report.py +0 -137
- catalystwan/api/builders/feature_profiles/service.py +0 -213
- catalystwan/api/builders/feature_profiles/system.py +0 -80
- catalystwan/api/builders/feature_profiles/transport.py +0 -214
- catalystwan/api/builders/feature_profiles/uc_voice.py +0 -287
- catalystwan/api/config_device_inventory_api.py +0 -58
- catalystwan/api/config_group_api.py +0 -150
- catalystwan/api/configuration_groups/parcel.py +0 -206
- catalystwan/api/dashboard_api.py +0 -215
- catalystwan/api/device_action_api.py +0 -216
- catalystwan/api/feature_profile_api.py +0 -2401
- catalystwan/api/logs_api.py +0 -63
- catalystwan/api/monitoring_status_api.py +0 -76
- catalystwan/api/mtt_aaa_api.py +0 -197
- catalystwan/api/omp_api.py +0 -124
- catalystwan/api/packet_capture_api.py +0 -152
- catalystwan/api/parcel_api.py +0 -42
- catalystwan/api/partition_manager_api.py +0 -143
- catalystwan/api/policy_api.py +0 -1163
- catalystwan/api/resource_pool_api.py +0 -74
- catalystwan/api/software_action_api.py +0 -269
- catalystwan/api/speedtest_api.py +0 -153
- catalystwan/api/task_status_api.py +0 -171
- catalystwan/api/template_api.py +0 -761
- catalystwan/api/templates/README.md +0 -101
- catalystwan/api/templates/bool_str.py +0 -6
- catalystwan/api/templates/cli_template.py +0 -236
- catalystwan/api/templates/device_template/device_template.py +0 -181
- catalystwan/api/templates/device_variable.py +0 -7
- catalystwan/api/templates/feature_template.py +0 -133
- catalystwan/api/templates/feature_template_field.py +0 -175
- catalystwan/api/templates/feature_template_payload.py +0 -17
- catalystwan/api/templates/models/aaa_model.py +0 -387
- catalystwan/api/templates/models/cisco_aaa_model.py +0 -331
- catalystwan/api/templates/models/cisco_banner_model.py +0 -27
- catalystwan/api/templates/models/cisco_bfd_model.py +0 -61
- catalystwan/api/templates/models/cisco_bgp_model.py +0 -510
- catalystwan/api/templates/models/cisco_logging_model.py +0 -122
- catalystwan/api/templates/models/cisco_ntp_model.py +0 -60
- catalystwan/api/templates/models/cisco_omp_model.py +0 -121
- catalystwan/api/templates/models/cisco_ospf.py +0 -241
- catalystwan/api/templates/models/cisco_ospfv3.py +0 -498
- catalystwan/api/templates/models/cisco_secure_internet_gateway.py +0 -385
- catalystwan/api/templates/models/cisco_snmp_model.py +0 -102
- catalystwan/api/templates/models/cisco_system.py +0 -318
- catalystwan/api/templates/models/cisco_vpn_interface_model.py +0 -822
- catalystwan/api/templates/models/cisco_vpn_model.py +0 -603
- catalystwan/api/templates/models/cli_template.py +0 -18
- catalystwan/api/templates/models/omp_vsmart_model.py +0 -73
- catalystwan/api/templates/models/security_vsmart_model.py +0 -28
- catalystwan/api/templates/models/supported.py +0 -42
- catalystwan/api/templates/models/system_vsmart_model.py +0 -182
- catalystwan/api/templates/models/vpn_vsmart_interface_model.py +0 -198
- catalystwan/api/templates/models/vpn_vsmart_model.py +0 -124
- catalystwan/api/templates/payloads/aaa/aaa_model.py +0 -91
- catalystwan/api/templates/payloads/aaa/feature/aaa.json.j2 +0 -373
- catalystwan/api/templates/payloads/aaa/feature/accounting.json.j2 +0 -40
- catalystwan/api/templates/payloads/aaa/feature/radius.json.j2 +0 -107
- catalystwan/api/templates/payloads/aaa/feature/tacacs.json.j2 +0 -95
- catalystwan/api/templates/payloads/aaa/feature/user.json.j2 +0 -60
- catalystwan/api/templates/payloads/cisco_vpn/cisco_vpn_model.py +0 -92
- catalystwan/api/templates/payloads/cisco_vpn/feature/cisco_vpn.json.j2 +0 -224
- catalystwan/api/templates/payloads/cisco_vpn/feature/dns.json.j2 +0 -86
- catalystwan/api/templates/payloads/cisco_vpn/feature/ipv4route.json.j2 +0 -59
- catalystwan/api/templates/payloads/cisco_vpn/feature/ipv6route.json.j2 +0 -58
- catalystwan/api/templates/payloads/cisco_vpn/feature/mapping.json.j2 +0 -24
- catalystwan/api/templates/payloads/tenant/tenant.json.j2 +0 -127
- catalystwan/api/templates/payloads/tenant/tenant_model.py +0 -43
- catalystwan/api/tenant_backup_restore_api.py +0 -154
- catalystwan/api/tenant_management_api.py +0 -127
- catalystwan/api/tenant_migration_api.py +0 -121
- catalystwan/api/versions_utils.py +0 -414
- catalystwan/api/virtual_image_action_api.py +0 -200
- catalystwan/dataclasses.py +0 -493
- catalystwan/endpoints/__init__.py +0 -606
- catalystwan/endpoints/administration_user_and_group.py +0 -341
- catalystwan/endpoints/api_gateway.py +0 -24
- catalystwan/endpoints/certificate_management_device.py +0 -137
- catalystwan/endpoints/certificate_management_vmanage.py +0 -48
- catalystwan/endpoints/client.py +0 -96
- catalystwan/endpoints/cluster_management.py +0 -130
- catalystwan/endpoints/configuration/device/software_update.py +0 -31
- catalystwan/endpoints/configuration/disaster_recovery.py +0 -305
- 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/policy_object.py +0 -105
- catalystwan/endpoints/configuration/feature_profile/sdwan/service.py +0 -137
- catalystwan/endpoints/configuration/feature_profile/sdwan/sig_security.py +0 -88
- catalystwan/endpoints/configuration/feature_profile/sdwan/system.py +0 -205
- catalystwan/endpoints/configuration/feature_profile/sdwan/topology.py +0 -93
- catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py +0 -214
- catalystwan/endpoints/configuration/feature_profile/sdwan/uc_voice.py +0 -77
- catalystwan/endpoints/configuration/network_hierarchy.py +0 -32
- catalystwan/endpoints/configuration/policy/abstractions.py +0 -49
- catalystwan/endpoints/configuration/policy/definition/access_control_list.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py +0 -57
- 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/control.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/device_access.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py +0 -59
- 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/hub_and_spoke.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/intrusion_prevention.py +0 -52
- catalystwan/endpoints/configuration/policy/definition/mesh.py +0 -53
- catalystwan/endpoints/configuration/policy/definition/pri_isdn_port.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/qos_map.py +0 -53
- catalystwan/endpoints/configuration/policy/definition/rewrite.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/route_policy.py +0 -50
- catalystwan/endpoints/configuration/policy/definition/rule_set.py +0 -53
- catalystwan/endpoints/configuration/policy/definition/security_group.py +0 -57
- 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/traffic_data.py +0 -58
- catalystwan/endpoints/configuration/policy/definition/url_filtering.py +0 -50
- catalystwan/endpoints/configuration/policy/definition/vpn_membership.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/vpn_qos_map.py +0 -50
- catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py +0 -57
- catalystwan/endpoints/configuration/policy/list/app.py +0 -48
- catalystwan/endpoints/configuration/policy/list/app_probe.py +0 -52
- catalystwan/endpoints/configuration/policy/list/as_path.py +0 -48
- catalystwan/endpoints/configuration/policy/list/class_map.py +0 -48
- catalystwan/endpoints/configuration/policy/list/color.py +0 -48
- catalystwan/endpoints/configuration/policy/list/community.py +0 -48
- catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py +0 -52
- catalystwan/endpoints/configuration/policy/list/data_prefix.py +0 -48
- catalystwan/endpoints/configuration/policy/list/expanded_community.py +0 -52
- 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/fqdn.py +0 -48
- catalystwan/endpoints/configuration/policy/list/geo_location.py +0 -48
- catalystwan/endpoints/configuration/policy/list/identity.py +0 -48
- catalystwan/endpoints/configuration/policy/list/ips_signature.py +0 -52
- catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py +0 -48
- catalystwan/endpoints/configuration/policy/list/local_app.py +0 -48
- catalystwan/endpoints/configuration/policy/list/local_domain.py +0 -48
- catalystwan/endpoints/configuration/policy/list/media_profile.py +0 -52
- catalystwan/endpoints/configuration/policy/list/mirror.py +0 -48
- catalystwan/endpoints/configuration/policy/list/modem_pass_through.py +0 -52
- catalystwan/endpoints/configuration/policy/list/policer.py +0 -48
- catalystwan/endpoints/configuration/policy/list/port.py +0 -48
- catalystwan/endpoints/configuration/policy/list/preferred_color_group.py +0 -52
- catalystwan/endpoints/configuration/policy/list/prefix.py +0 -49
- catalystwan/endpoints/configuration/policy/list/protocol_name.py +0 -52
- catalystwan/endpoints/configuration/policy/list/region.py +0 -47
- catalystwan/endpoints/configuration/policy/list/scalable_group_tag.py +0 -52
- catalystwan/endpoints/configuration/policy/list/site.py +0 -52
- catalystwan/endpoints/configuration/policy/list/sla.py +0 -48
- 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/tloc.py +0 -48
- 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/list/url_allow_list.py +0 -48
- catalystwan/endpoints/configuration/policy/list/url_block_list.py +0 -48
- catalystwan/endpoints/configuration/policy/list/vpn.py +0 -50
- catalystwan/endpoints/configuration/policy/list/zone.py +0 -48
- catalystwan/endpoints/configuration/policy/security_template.py +0 -55
- catalystwan/endpoints/configuration/policy/vedge_template.py +0 -52
- catalystwan/endpoints/configuration/policy/voice_template.py +0 -39
- catalystwan/endpoints/configuration/policy/vsmart_template.py +0 -79
- catalystwan/endpoints/configuration/policy_group.py +0 -30
- catalystwan/endpoints/configuration/software_actions.py +0 -201
- catalystwan/endpoints/configuration/topology_group.py +0 -51
- catalystwan/endpoints/configuration_dashboard_status.py +0 -127
- catalystwan/endpoints/configuration_device_actions.py +0 -385
- catalystwan/endpoints/configuration_device_inventory.py +0 -309
- catalystwan/endpoints/configuration_device_template.py +0 -39
- catalystwan/endpoints/configuration_feature_profile.py +0 -135
- catalystwan/endpoints/configuration_general_template.py +0 -31
- catalystwan/endpoints/configuration_group.py +0 -197
- catalystwan/endpoints/configuration_settings.py +0 -749
- catalystwan/endpoints/configuration_template_master.py +0 -48
- catalystwan/endpoints/endpoints_container.py +0 -279
- catalystwan/endpoints/misc.py +0 -21
- catalystwan/endpoints/monitoring/device_details.py +0 -246
- catalystwan/endpoints/monitoring/security_policy.py +0 -12
- catalystwan/endpoints/monitoring/server_info.py +0 -12
- catalystwan/endpoints/monitoring/status.py +0 -76
- catalystwan/endpoints/real_time_monitoring/reboot_history.py +0 -35
- catalystwan/endpoints/sdavc_cloud_connector.py +0 -43
- catalystwan/endpoints/tenant_backup_restore.py +0 -40
- catalystwan/endpoints/tenant_management.py +0 -215
- catalystwan/endpoints/tenant_migration.py +0 -102
- catalystwan/endpoints/troubleshooting_tools/device_connectivity.py +0 -128
- catalystwan/endpoints/url_monitoring.py +0 -26
- catalystwan/integration_tests/__init__.py +0 -0
- 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_transport.py +0 -1700
- catalystwan/integration_tests/feature_profile/sdwan/topology/test_topology.py +0 -93
- catalystwan/integration_tests/profile_builder/__init__.py +0 -0
- catalystwan/integration_tests/profile_builder/test_pb_service.py +0 -78
- catalystwan/integration_tests/profile_builder/test_pb_transport.py +0 -56
- 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_find_template_values.py +0 -38
- catalystwan/integration_tests/test_network_hierarchy.py +0 -82
- catalystwan/integration_tests/test_settings.py +0 -30
- catalystwan/logging.conf +0 -37
- catalystwan/models/common.py +0 -1508
- catalystwan/models/configuration/common.py +0 -11
- catalystwan/models/configuration/feature_profile/README.md +0 -344
- catalystwan/models/configuration/feature_profile/builder.py +0 -22
- catalystwan/models/configuration/feature_profile/common.py +0 -749
- catalystwan/models/configuration/feature_profile/parcel.py +0 -232
- 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 -215
- 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 -1054
- 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 -107
- catalystwan/models/configuration/feature_profile/sdwan/embedded_security/__init__.py +0 -23
- catalystwan/models/configuration/feature_profile/sdwan/embedded_security/ngfirewall.py +0 -915
- catalystwan/models/configuration/feature_profile/sdwan/embedded_security/policy.py +0 -171
- catalystwan/models/configuration/feature_profile/sdwan/other/__init__.py +0 -23
- 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/__init__.py +0 -175
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/app_probe.py +0 -56
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/application_list.py +0 -31
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/as_path.py +0 -22
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/color_list.py +0 -21
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/data_prefix.py +0 -35
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/expanded_community_list.py +0 -25
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/extended_community.py +0 -34
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/fowarding_class.py +0 -26
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_data_prefix.py +0 -28
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_prefix_list.py +0 -38
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/mirror.py +0 -27
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/policer.py +0 -42
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefered_group_color.py +0 -83
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefix_list.py +0 -28
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/sla_class.py +0 -130
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/standard_community.py +0 -30
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/tloc_list.py +0 -44
- 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/application_list.py +0 -31
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/data_prefix.py +0 -22
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/fqdn.py +0 -24
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/geolocation_list.py +0 -32
- 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/ips_signature.py +0 -44
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/local_domain.py +0 -24
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/protocol_list.py +0 -21
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/scalable_group_tag.py +0 -26
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/security_port.py +0 -45
- 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.py +0 -32
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url_filtering.py +0 -148
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/zone.py +0 -44
- catalystwan/models/configuration/feature_profile/sdwan/routing/__init__.py +0 -26
- catalystwan/models/configuration/feature_profile/sdwan/routing/bgp.py +0 -594
- catalystwan/models/configuration/feature_profile/sdwan/routing/ospf.py +0 -170
- catalystwan/models/configuration/feature_profile/sdwan/routing/ospfv3.py +0 -298
- catalystwan/models/configuration/feature_profile/sdwan/service/__init__.py +0 -85
- catalystwan/models/configuration/feature_profile/sdwan/service/appqoe.py +0 -270
- catalystwan/models/configuration/feature_profile/sdwan/service/dhcp_server.py +0 -127
- catalystwan/models/configuration/feature_profile/sdwan/service/eigrp.py +0 -103
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/common.py +0 -33
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/ethernet.py +0 -275
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/gre.py +0 -136
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/ipsec.py +0 -119
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/multilink.py +0 -101
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/svi.py +0 -172
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/vpn.py +0 -627
- catalystwan/models/configuration/feature_profile/sdwan/service/multicast.py +0 -242
- catalystwan/models/configuration/feature_profile/sdwan/service/object_tracker.py +0 -84
- catalystwan/models/configuration/feature_profile/sdwan/service/route_policy.py +0 -419
- catalystwan/models/configuration/feature_profile/sdwan/service/service_insertion_attachment.py +0 -184
- catalystwan/models/configuration/feature_profile/sdwan/service/switchport.py +0 -112
- catalystwan/models/configuration/feature_profile/sdwan/service/tracker.py +0 -92
- catalystwan/models/configuration/feature_profile/sdwan/service/wireless_lan.py +0 -216
- 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/aaa.py +0 -406
- 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 -149
- 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 -111
- 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/transport/__init__.py +0 -93
- catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_controller.py +0 -58
- 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 -166
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ethernet.py +0 -281
- 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 -98
- 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 -329
- 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 -25
- 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 -68
- 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 -55
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_tenant.py +0 -40
- catalystwan/models/configuration/network_hierarchy/__init__.py +0 -22
- catalystwan/models/configuration/network_hierarchy/cflowd.py +0 -120
- catalystwan/models/configuration/network_hierarchy/node.py +0 -88
- catalystwan/models/configuration/policy_group.py +0 -74
- catalystwan/models/configuration/profile_type.py +0 -5
- catalystwan/models/configuration/topology_group.py +0 -52
- catalystwan/models/device_inventory.py +0 -30
- catalystwan/models/feature_profile_parcel.py +0 -15
- catalystwan/models/misc/application_protocols.py +0 -29
- catalystwan/models/monitoring/security_policy.py +0 -16
- catalystwan/models/monitoring/server_info.py +0 -12
- catalystwan/models/policy/__init__.py +0 -392
- catalystwan/models/policy/centralized.py +0 -265
- catalystwan/models/policy/definition/access_control_list.py +0 -193
- catalystwan/models/policy/definition/access_control_list_ipv6.py +0 -187
- 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/control.py +0 -366
- catalystwan/models/policy/definition/device_access.py +0 -117
- catalystwan/models/policy/definition/device_access_ipv6.py +0 -115
- 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/hub_and_spoke.py +0 -87
- catalystwan/models/policy/definition/intrusion_prevention.py +0 -55
- catalystwan/models/policy/definition/mesh.py +0 -47
- catalystwan/models/policy/definition/pri_isdn_port.py +0 -48
- catalystwan/models/policy/definition/qos_map.py +0 -111
- catalystwan/models/policy/definition/rewrite.py +0 -47
- catalystwan/models/policy/definition/route_policy.py +0 -187
- catalystwan/models/policy/definition/rule_set.py +0 -270
- catalystwan/models/policy/definition/security_group.py +0 -93
- 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 -87
- catalystwan/models/policy/definition/traffic_data.py +0 -496
- catalystwan/models/policy/definition/url_filtering.py +0 -70
- catalystwan/models/policy/definition/vpn_membership.py +0 -42
- catalystwan/models/policy/definition/vpn_qos_map.py +0 -46
- catalystwan/models/policy/definition/zone_based_firewall.py +0 -301
- 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 -45
- catalystwan/models/policy/localized.py +0 -154
- catalystwan/models/policy/policy.py +0 -100
- catalystwan/models/policy/policy_definition.py +0 -1624
- catalystwan/models/policy/policy_list.py +0 -47
- catalystwan/models/policy/security.py +0 -279
- catalystwan/models/policy/voice.py +0 -71
- catalystwan/models/settings.py +0 -41
- catalystwan/models/templates.py +0 -79
- catalystwan/models/tenant.py +0 -105
- catalystwan/models/url_monitoring.py +0 -28
- catalystwan/tests/__init__.py +0 -0
- catalystwan/tests/builders/uc_voice.py +0 -85
- catalystwan/tests/models/__init__.py +0 -0
- catalystwan/tests/templates/__init__.py +0 -0
- catalystwan/tests/templates/definitions/__init__.py +0 -0
- catalystwan/tests/templates/definitions/aaa_basic.json +0 -96
- catalystwan/tests/templates/definitions/aaa_complex.json +0 -464
- catalystwan/tests/templates/definitions/basic/__init__.py +0 -0
- catalystwan/tests/templates/definitions/basic/alias.json +0 -7
- catalystwan/tests/templates/definitions/basic/basic.json +0 -7
- catalystwan/tests/templates/definitions/basic/basic_no_value.json +0 -7
- catalystwan/tests/templates/definitions/basic/children.json +0 -39
- catalystwan/tests/templates/definitions/basic/children_nested.json +0 -72
- catalystwan/tests/templates/definitions/basic/children_nested_datapath.json +0 -72
- catalystwan/tests/templates/definitions/basic/data_path.json +0 -13
- catalystwan/tests/templates/definitions/cisco_aaa.json +0 -178
- catalystwan/tests/templates/definitions/cisco_aaa_complex.json +0 -361
- catalystwan/tests/templates/definitions/cisco_banner.json +0 -20
- catalystwan/tests/templates/definitions/cisco_bfd.json +0 -90
- 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_basic.json +0 -17
- catalystwan/tests/templates/definitions/cisco_vpn_complex.json +0 -1081
- catalystwan/tests/templates/definitions/cisco_vpn_interface_complex.json +0 -821
- catalystwan/tests/templates/definitions/default_cisco_system.json +0 -184
- catalystwan/tests/templates/definitions/omp_vsmart_1.json +0 -26
- catalystwan/tests/templates/definitions/omp_vsmart_2.json +0 -48
- catalystwan/tests/templates/definitions/omp_vsmart_3.json +0 -71
- 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/__init__.py +0 -53
- catalystwan/tests/templates/models/aaa.py +0 -106
- catalystwan/tests/templates/models/cisco_aaa.py +0 -124
- catalystwan/tests/templates/models/cisco_banner.py +0 -7
- catalystwan/tests/templates/models/cisco_bfd.py +0 -15
- 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_system.py +0 -113
- catalystwan/tests/templates/models/cisco_vpn.py +0 -240
- catalystwan/tests/templates/models/cisco_vpn_interface.py +0 -200
- catalystwan/tests/templates/models/omp_vsmart.py +0 -53
- 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/basic/alias.json +0 -24
- catalystwan/tests/templates/schemas/basic/basic.json +0 -23
- catalystwan/tests/templates/schemas/basic/children.json +0 -59
- catalystwan/tests/templates/schemas/basic/children_nested.json +0 -112
- catalystwan/tests/templates/schemas/basic/children_nested_datapath.json +0 -112
- catalystwan/tests/templates/schemas/basic/data_path.json +0 -29
- catalystwan/tests/templates/schemas/cedge_aaa.json +0 -1185
- catalystwan/tests/templates/schemas/cisco_banner.json +0 -44
- catalystwan/tests/templates/schemas/cisco_bfd.json +0 -266
- 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_system.json +0 -3099
- catalystwan/tests/templates/schemas/cisco_vpn.json +0 -2504
- catalystwan/tests/templates/schemas/cisco_vpn_interface.json +0 -3348
- catalystwan/tests/templates/schemas/omp-vsmart.json +0 -222
- 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_chose_model.py +0 -32
- catalystwan/tests/templates/test_deserialize_model.py +0 -69
- catalystwan/tests/templates/test_find_template_values.py +0 -193
- catalystwan/tests/templates/test_find_template_values_2.py +0 -193
- catalystwan/tests/templates/test_generate_payload.py +0 -137
- catalystwan/tests/templates/test_serialize_model.py +0 -52
- catalystwan/tests/test_admin_tech_api.py +0 -198
- catalystwan/tests/test_administration.py +0 -470
- catalystwan/tests/test_alarms_api.py +0 -251
- catalystwan/tests/test_cli_template.py +0 -218
- catalystwan/tests/test_creation_tools.py +0 -155
- catalystwan/tests/test_device_action_api.py +0 -117
- catalystwan/tests/test_devices_api.py +0 -674
- catalystwan/tests/test_endpoints.py +0 -907
- catalystwan/tests/test_feature_profile_api.py +0 -282
- catalystwan/tests/test_feature_template_field.py +0 -33
- catalystwan/tests/test_logs_api.py +0 -40
- catalystwan/tests/test_models_common.py +0 -53
- catalystwan/tests/test_monitoring_security_policy.py +0 -65
- catalystwan/tests/test_monitoring_server_info.py +0 -49
- catalystwan/tests/test_monitoring_status_api.py +0 -118
- catalystwan/tests/test_mtt_aaa_api.py +0 -293
- catalystwan/tests/test_omp_api.py +0 -438
- catalystwan/tests/test_packet_capture.py +0 -125
- catalystwan/tests/test_partition_manager_api.py +0 -121
- catalystwan/tests/test_response.py +0 -183
- catalystwan/tests/test_session.py +0 -102
- catalystwan/tests/test_software_action_api.py +0 -154
- catalystwan/tests/test_speed_test_api.py +0 -143
- catalystwan/tests/test_task_status_api.py +0 -381
- catalystwan/tests/test_templates.py +0 -405
- catalystwan/tests/test_tenant_backup_restore_api.py +0 -88
- catalystwan/tests/test_tenant_management_api.py +0 -153
- catalystwan/tests/test_tenant_migration_api.py +0 -102
- catalystwan/tests/test_typed_list.py +0 -426
- catalystwan/tests/test_url_monitoring.py +0 -80
- catalystwan/tests/test_version.py +0 -99
- catalystwan/tests/test_version_utils.py +0 -240
- catalystwan/tests/test_vmanage_auth.py +0 -149
- catalystwan/typed_list.py +0 -288
- catalystwan/utils/__init__.py +0 -0
- catalystwan/utils/alarm_status.py +0 -16
- catalystwan/utils/certificate_status.py +0 -13
- catalystwan/utils/colors.py +0 -12
- catalystwan/utils/config_status.py +0 -8
- catalystwan/utils/creation_tools.py +0 -136
- catalystwan/utils/dashboard.py +0 -255
- catalystwan/utils/device_model.py +0 -322
- catalystwan/utils/dict.py +0 -61
- catalystwan/utils/feature_template/choose_model.py +0 -30
- catalystwan/utils/feature_template/find_template_values.py +0 -111
- catalystwan/utils/model.py +0 -45
- catalystwan/utils/operation_status.py +0 -22
- catalystwan/utils/persona.py +0 -5
- catalystwan/utils/personality.py +0 -10
- catalystwan/utils/pydantic_field.py +0 -12
- catalystwan/utils/reachability.py +0 -14
- catalystwan/utils/session_type.py +0 -17
- catalystwan/utils/template_type.py +0 -8
- catalystwan/utils/type_check.py +0 -22
- catalystwan/utils/upgrades_helper.py +0 -95
- catalystwan/utils/validate_status.py +0 -8
- catalystwan/workflows/backup_restore_device_templates.py +0 -467
- catalystwan/workflows/tenant_migration.py +0 -203
- catalystwan-0.40.1.dev7.dist-info/METADATA +0 -539
- catalystwan-0.40.1.dev7.dist-info/RECORD +0 -618
- /catalystwan/{api → core/models}/__init__.py +0 -0
- /catalystwan/{api/builders/feature_profiles/__init__.py → core/py.typed} +0 -0
- {catalystwan-0.40.1.dev7.dist-info → catalystwan-2.0.0a0.dist-info}/LICENSE +0 -0
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
# Copyright 2024 Cisco Systems, Inc. and its affiliates
|
|
2
|
-
from __future__ import annotations
|
|
3
|
-
|
|
4
|
-
import logging
|
|
5
|
-
from dataclasses import dataclass
|
|
6
|
-
from typing import TYPE_CHECKING, Dict, List, Optional, Union
|
|
7
|
-
from uuid import UUID
|
|
8
|
-
|
|
9
|
-
from catalystwan.api.builders.feature_profiles.report import FeatureProfileBuildReport, handle_build_report
|
|
10
|
-
from catalystwan.api.configuration_groups.parcel import as_default
|
|
11
|
-
from catalystwan.api.feature_profile_api import UcVoiceFeatureProfileAPI
|
|
12
|
-
from catalystwan.endpoints.configuration.feature_profile.sdwan.uc_voice import UcVoiceFeatureProfile
|
|
13
|
-
from catalystwan.models.configuration.feature_profile.common import FeatureProfileCreationPayload, RefIdItem
|
|
14
|
-
from catalystwan.models.configuration.feature_profile.sdwan.uc_voice import (
|
|
15
|
-
AnalogInterfaceParcel,
|
|
16
|
-
AnyUcVoiceParcel,
|
|
17
|
-
CallRoutingParcel,
|
|
18
|
-
DigitalInterfaceParcel,
|
|
19
|
-
MediaProfileParcel,
|
|
20
|
-
ServerGroupParcel,
|
|
21
|
-
SrstParcel,
|
|
22
|
-
TranslationProfileParcel,
|
|
23
|
-
TranslationRuleParcel,
|
|
24
|
-
TrunkGroupParcel,
|
|
25
|
-
VoiceGlobalParcel,
|
|
26
|
-
VoiceTenantParcel,
|
|
27
|
-
)
|
|
28
|
-
from catalystwan.models.configuration.feature_profile.sdwan.uc_voice.analog_interface import (
|
|
29
|
-
Association as AnalogInterfaceAssociation,
|
|
30
|
-
)
|
|
31
|
-
from catalystwan.models.configuration.feature_profile.sdwan.uc_voice.call_routing import (
|
|
32
|
-
Association as CallRoutingAssociation,
|
|
33
|
-
)
|
|
34
|
-
from catalystwan.models.configuration.feature_profile.sdwan.uc_voice.digital_interface import (
|
|
35
|
-
Association as DigitalInterfaceAssociation,
|
|
36
|
-
)
|
|
37
|
-
from catalystwan.models.configuration.feature_profile.sdwan.uc_voice.srst import Association as SrstAssociation
|
|
38
|
-
from catalystwan.models.configuration.feature_profile.sdwan.uc_voice.translation_profile import CallType
|
|
39
|
-
|
|
40
|
-
logger = logging.getLogger(__name__)
|
|
41
|
-
|
|
42
|
-
if TYPE_CHECKING:
|
|
43
|
-
from catalystwan.session import ManagerSession
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
ParcelWithAssociations = Union[CallRoutingParcel, DigitalInterfaceParcel, AnalogInterfaceParcel, SrstParcel]
|
|
47
|
-
Association = Union[
|
|
48
|
-
List[DigitalInterfaceAssociation],
|
|
49
|
-
List[AnalogInterfaceAssociation],
|
|
50
|
-
List[CallRoutingAssociation],
|
|
51
|
-
List[SrstAssociation],
|
|
52
|
-
]
|
|
53
|
-
AssociableParcel = Union[
|
|
54
|
-
MediaProfileParcel,
|
|
55
|
-
ServerGroupParcel,
|
|
56
|
-
SrstParcel,
|
|
57
|
-
TranslationProfileParcel,
|
|
58
|
-
TranslationRuleParcel,
|
|
59
|
-
TrunkGroupParcel,
|
|
60
|
-
VoiceGlobalParcel,
|
|
61
|
-
VoiceTenantParcel,
|
|
62
|
-
]
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
@dataclass
|
|
66
|
-
class TranslationProfile:
|
|
67
|
-
tpp: TranslationProfileParcel
|
|
68
|
-
calling: Optional[TranslationRuleParcel] = None
|
|
69
|
-
called: Optional[TranslationRuleParcel] = None
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
def is_uuid(uuid: Optional[Union[str, UUID]]) -> bool:
|
|
73
|
-
if isinstance(uuid, UUID) or uuid is None:
|
|
74
|
-
return True
|
|
75
|
-
try:
|
|
76
|
-
UUID(uuid)
|
|
77
|
-
return True
|
|
78
|
-
except ValueError:
|
|
79
|
-
return False
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
class UcVoiceFeatureProfileBuilder:
|
|
83
|
-
"""
|
|
84
|
-
A class for building UC Voice feature profiles with a modular approach.
|
|
85
|
-
|
|
86
|
-
This class provides methods to construct, associate, and manage various parcels and
|
|
87
|
-
configurations required for UC Voice feature profiles.
|
|
88
|
-
"""
|
|
89
|
-
|
|
90
|
-
ASSOCIABLE_PARCELS = (
|
|
91
|
-
MediaProfileParcel,
|
|
92
|
-
ServerGroupParcel,
|
|
93
|
-
SrstParcel,
|
|
94
|
-
TranslationProfileParcel,
|
|
95
|
-
TranslationRuleParcel,
|
|
96
|
-
TrunkGroupParcel,
|
|
97
|
-
VoiceGlobalParcel,
|
|
98
|
-
VoiceTenantParcel,
|
|
99
|
-
)
|
|
100
|
-
|
|
101
|
-
ASSOCIATON_FIELDS = {
|
|
102
|
-
"media_profile",
|
|
103
|
-
"server_group",
|
|
104
|
-
"translation_profile",
|
|
105
|
-
"trunk_group",
|
|
106
|
-
"voice_tenant",
|
|
107
|
-
"supervisory_disconnect",
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
def __init__(self, session: ManagerSession) -> None:
|
|
111
|
-
"""
|
|
112
|
-
Initializes a new instance of the UC Voice Feature Profile Builder.
|
|
113
|
-
|
|
114
|
-
Args:
|
|
115
|
-
session (ManagerSession): The session object used for API communication.
|
|
116
|
-
"""
|
|
117
|
-
self._profile: FeatureProfileCreationPayload
|
|
118
|
-
self._api = UcVoiceFeatureProfileAPI(session)
|
|
119
|
-
self._endpoints = UcVoiceFeatureProfile(session)
|
|
120
|
-
self._independent_parcels: List[AnyUcVoiceParcel] = []
|
|
121
|
-
self._associable_parcles: List[AssociableParcel] = []
|
|
122
|
-
self._translation_profiles: Dict[str, TranslationProfile] = dict()
|
|
123
|
-
self._pushed_associable_parcels: Dict[str, UUID] = {} # Maps parcel names to their created UUIDs.
|
|
124
|
-
self._parcels_with_associations: List[ParcelWithAssociations] = []
|
|
125
|
-
|
|
126
|
-
def add_profile_name_and_description(self, feature_profile: FeatureProfileCreationPayload) -> None:
|
|
127
|
-
"""
|
|
128
|
-
Adds a name and description to the feature profile being built.
|
|
129
|
-
|
|
130
|
-
Args:
|
|
131
|
-
feature_profile (FeatureProfileCreationPayload): The feature profile payload containing
|
|
132
|
-
the name and description.
|
|
133
|
-
"""
|
|
134
|
-
self._profile = feature_profile
|
|
135
|
-
|
|
136
|
-
def add_independent_parcel(self, parcel: AnyUcVoiceParcel) -> None:
|
|
137
|
-
"""
|
|
138
|
-
Adds an independent parcel to the feature profile.
|
|
139
|
-
|
|
140
|
-
Args:
|
|
141
|
-
parcel (AnyUcVoiceParcel): The parcel to be added. Parcels are independent configurations
|
|
142
|
-
that do not require associations with other parcels.
|
|
143
|
-
"""
|
|
144
|
-
self._independent_parcels.append(parcel)
|
|
145
|
-
|
|
146
|
-
def add_associable_parcel(self, parcel: AssociableParcel) -> None:
|
|
147
|
-
self._associable_parcles.append(parcel)
|
|
148
|
-
|
|
149
|
-
def add_translation_profile(
|
|
150
|
-
self,
|
|
151
|
-
tpp: TranslationProfileParcel,
|
|
152
|
-
calling: Optional[TranslationRuleParcel] = None,
|
|
153
|
-
called: Optional[TranslationRuleParcel] = None,
|
|
154
|
-
) -> None:
|
|
155
|
-
"""
|
|
156
|
-
Adds a translation profile to the feature profile.
|
|
157
|
-
|
|
158
|
-
Args:
|
|
159
|
-
tpp (TranslationProfileParcel): The main translation profile parcel.
|
|
160
|
-
calling (Optional[TranslationRuleParcel]): The calling rule parcel. Optional.
|
|
161
|
-
called (Optional[TranslationRuleParcel]): The called rule parcel. Optional.
|
|
162
|
-
|
|
163
|
-
Raises:
|
|
164
|
-
ValueError: If neither a calling nor a called rule is provided.
|
|
165
|
-
"""
|
|
166
|
-
if not calling and not called:
|
|
167
|
-
raise ValueError("There must be at least one translation rule to create a translation profile.")
|
|
168
|
-
if tpp.parcel_name in self._translation_profiles:
|
|
169
|
-
logger.warning(f"Translation profile {tpp.parcel_name} was already added.")
|
|
170
|
-
else:
|
|
171
|
-
self._translation_profiles[tpp.parcel_name] = TranslationProfile(tpp=tpp, called=called, calling=calling)
|
|
172
|
-
|
|
173
|
-
def add_parcel_with_associations(self, parcel: ParcelWithAssociations) -> None:
|
|
174
|
-
"""
|
|
175
|
-
Adds a parcel with associations to the feature profile.
|
|
176
|
-
|
|
177
|
-
Args:
|
|
178
|
-
parcel (ParcelWithAssociations): A parcel that includes associations with other entities.
|
|
179
|
-
Associations are relationships between parcels and other resources.
|
|
180
|
-
"""
|
|
181
|
-
self._parcels_with_associations.append(parcel)
|
|
182
|
-
|
|
183
|
-
def build(self) -> FeatureProfileBuildReport:
|
|
184
|
-
"""
|
|
185
|
-
Builds the complete UC Voice feature profile.
|
|
186
|
-
|
|
187
|
-
This method creates the feature profile on the system and processes all added parcels
|
|
188
|
-
and translation profiles, resolving associations as needed.
|
|
189
|
-
|
|
190
|
-
Returns:
|
|
191
|
-
FeatureProfileBuildReport: A report containing the details of the created feature profile.
|
|
192
|
-
"""
|
|
193
|
-
profile_uuid = self._endpoints.create_uc_voice_feature_profile(self._profile).id
|
|
194
|
-
self.build_report = FeatureProfileBuildReport(profile_uuid=profile_uuid, profile_name=self._profile.name)
|
|
195
|
-
|
|
196
|
-
# Create independent parcels
|
|
197
|
-
for ip in self._independent_parcels:
|
|
198
|
-
self._create_parcel(profile_uuid, ip)
|
|
199
|
-
|
|
200
|
-
# Create translation profiles
|
|
201
|
-
for _, tp in self._translation_profiles.items():
|
|
202
|
-
tp_parcel_uuid = self._create_translation_profile(profile_uuid, tp)
|
|
203
|
-
if tp_parcel_uuid:
|
|
204
|
-
self._pushed_associable_parcels[tp.tpp.parcel_name] = tp_parcel_uuid
|
|
205
|
-
|
|
206
|
-
for ap in self._associable_parcles:
|
|
207
|
-
ap_parcel_uuid = self._create_parcel(profile_uuid, ap)
|
|
208
|
-
if ap_parcel_uuid:
|
|
209
|
-
self._pushed_associable_parcels[ap.parcel_name] = ap_parcel_uuid
|
|
210
|
-
|
|
211
|
-
# Create parcels with associations
|
|
212
|
-
for pwa in self._parcels_with_associations:
|
|
213
|
-
if pwa.association:
|
|
214
|
-
self._populate_association(pwa.association)
|
|
215
|
-
self._create_parcel(profile_uuid, pwa)
|
|
216
|
-
|
|
217
|
-
return self.build_report
|
|
218
|
-
|
|
219
|
-
@handle_build_report
|
|
220
|
-
def _create_parcel(self, profile_uuid: UUID, parcel: AnyUcVoiceParcel) -> UUID:
|
|
221
|
-
"""
|
|
222
|
-
Internal method to create a parcel.
|
|
223
|
-
|
|
224
|
-
Args:
|
|
225
|
-
profile_uuid (UUID): The UUID of the feature profile being built.
|
|
226
|
-
parcel (AnyUcVoiceParcel): The parcel to create.
|
|
227
|
-
|
|
228
|
-
Returns:
|
|
229
|
-
UUID: The UUID of the created parcel.
|
|
230
|
-
"""
|
|
231
|
-
return self._api.create_parcel(profile_uuid, parcel).id
|
|
232
|
-
|
|
233
|
-
def _create_translation_profile(self, profile_uuid: UUID, tp: TranslationProfile) -> UUID:
|
|
234
|
-
"""
|
|
235
|
-
Internal method to create a translation profile.
|
|
236
|
-
|
|
237
|
-
Args:
|
|
238
|
-
profile_uuid (UUID): The UUID of the feature profile being built.
|
|
239
|
-
tp (TranslationProfile): The translation profile to create.
|
|
240
|
-
|
|
241
|
-
Returns:
|
|
242
|
-
UUID: The UUID of the created translation profile parcel.
|
|
243
|
-
"""
|
|
244
|
-
|
|
245
|
-
def process_parcel(parcel: Optional[TranslationRuleParcel], parcel_type: CallType):
|
|
246
|
-
if not parcel:
|
|
247
|
-
return
|
|
248
|
-
parcel_name = parcel.parcel_name
|
|
249
|
-
if parcel_name in self._pushed_associable_parcels:
|
|
250
|
-
logger.debug(f"Translation rule {parcel_name} was already referenced in other profile.")
|
|
251
|
-
tp.tpp.set_ref_by_call_type(self._pushed_associable_parcels[parcel_name], parcel_type)
|
|
252
|
-
else:
|
|
253
|
-
parcel_uuid = self._create_parcel(profile_uuid, parcel)
|
|
254
|
-
if parcel_uuid:
|
|
255
|
-
tp.tpp.set_ref_by_call_type(parcel_uuid, parcel_type)
|
|
256
|
-
self._pushed_associable_parcels[parcel_name] = parcel_uuid
|
|
257
|
-
|
|
258
|
-
process_parcel(tp.called, "called")
|
|
259
|
-
process_parcel(tp.calling, "calling")
|
|
260
|
-
|
|
261
|
-
return self._create_parcel(profile_uuid, tp.tpp)
|
|
262
|
-
|
|
263
|
-
def _populate_association(self, association: Association) -> None:
|
|
264
|
-
"""
|
|
265
|
-
Resolves associations for a parcel.
|
|
266
|
-
|
|
267
|
-
Updates references in the parcel's associations to use the actual UUIDs of previously
|
|
268
|
-
created parcels.
|
|
269
|
-
|
|
270
|
-
Args:
|
|
271
|
-
association (Association): A list of associations to resolve.
|
|
272
|
-
"""
|
|
273
|
-
for model in association:
|
|
274
|
-
for field_name in self.ASSOCIATON_FIELDS.intersection(model.model_fields_set):
|
|
275
|
-
attr = getattr(model, field_name)
|
|
276
|
-
if isinstance(attr, RefIdItem):
|
|
277
|
-
if is_uuid(attr.ref_id.value) or attr.ref_id.value is None:
|
|
278
|
-
continue
|
|
279
|
-
resolved_uuid = self._pushed_associable_parcels.get(attr.ref_id.value)
|
|
280
|
-
if resolved_uuid:
|
|
281
|
-
attr.ref_id.value = str(resolved_uuid)
|
|
282
|
-
else:
|
|
283
|
-
logger.warning(
|
|
284
|
-
f"Unresolved reference in field '{field_name}' with value '{attr.ref_id.value}' "
|
|
285
|
-
f"for model '{model.__class__.__name__}'. Setting to Default[None]."
|
|
286
|
-
)
|
|
287
|
-
attr.ref_id = as_default(None)
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
# Copyright 2023 Cisco Systems, Inc. and its affiliates
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
from typing import TYPE_CHECKING
|
|
6
|
-
from uuid import UUID
|
|
7
|
-
|
|
8
|
-
if TYPE_CHECKING:
|
|
9
|
-
from catalystwan.session import ManagerSession
|
|
10
|
-
|
|
11
|
-
from catalystwan.api.task_status_api import Task
|
|
12
|
-
from catalystwan.endpoints.configuration_device_inventory import (
|
|
13
|
-
ConfigType,
|
|
14
|
-
ConfigurationDeviceInventory,
|
|
15
|
-
DeviceUnlockPayload,
|
|
16
|
-
GenerateBoostrapConfigurationQueryParams,
|
|
17
|
-
UnlockDeviceDetail,
|
|
18
|
-
)
|
|
19
|
-
from catalystwan.models.device_inventory import BoostrapConfigurationDetails
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class ConfigurationDeviceInventoryAPI:
|
|
23
|
-
def __init__(self, session: ManagerSession):
|
|
24
|
-
self.session = session
|
|
25
|
-
self.endpoint = ConfigurationDeviceInventory(session)
|
|
26
|
-
|
|
27
|
-
def unlock(self, device_uuid: str, device_type: str, device_details: list) -> Task:
|
|
28
|
-
"""
|
|
29
|
-
Unlocks device from config-group
|
|
30
|
-
"""
|
|
31
|
-
devices = []
|
|
32
|
-
for device_detail in device_details:
|
|
33
|
-
unlock_device_detail = UnlockDeviceDetail(
|
|
34
|
-
device_id=device_detail["deviceId"], device_ip=device_detail["deviceIP"]
|
|
35
|
-
)
|
|
36
|
-
devices.append(unlock_device_detail)
|
|
37
|
-
|
|
38
|
-
payload = DeviceUnlockPayload(device_type=device_type, devices=devices)
|
|
39
|
-
|
|
40
|
-
task_id = self.endpoint.unlock(device_uuid=device_uuid, payload=payload).parentTaskId
|
|
41
|
-
return Task(self.session, task_id=task_id)
|
|
42
|
-
|
|
43
|
-
def generate_bootstrap_cfg(
|
|
44
|
-
self,
|
|
45
|
-
device_uuid: UUID,
|
|
46
|
-
configtype: ConfigType = "cloudinit",
|
|
47
|
-
incl_def_root_cert: bool = False,
|
|
48
|
-
version: str = "v1",
|
|
49
|
-
) -> BoostrapConfigurationDetails:
|
|
50
|
-
"""
|
|
51
|
-
Returns handy model of generated bootstrap config
|
|
52
|
-
"""
|
|
53
|
-
params = GenerateBoostrapConfigurationQueryParams(
|
|
54
|
-
configtype=configtype, incl_def_root_cert=incl_def_root_cert, version=version
|
|
55
|
-
)
|
|
56
|
-
reponse = self.endpoint.generate_bootstrap_configuration(uuid=device_uuid, params=params)
|
|
57
|
-
|
|
58
|
-
return BoostrapConfigurationDetails(bootstrap_config=reponse.bootstrap_config)
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
# Copyright 2023 Cisco Systems, Inc. and its affiliates
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
from typing import TYPE_CHECKING, Any, Optional, overload
|
|
6
|
-
from uuid import UUID
|
|
7
|
-
|
|
8
|
-
from catalystwan.typed_list import DataSequence
|
|
9
|
-
|
|
10
|
-
if TYPE_CHECKING:
|
|
11
|
-
from catalystwan.session import ManagerSession
|
|
12
|
-
|
|
13
|
-
from catalystwan.endpoints.configuration_group import (
|
|
14
|
-
ConfigGroup,
|
|
15
|
-
ConfigGroupAssociatePayload,
|
|
16
|
-
ConfigGroupCreationPayload,
|
|
17
|
-
ConfigGroupCreationResponse,
|
|
18
|
-
ConfigGroupDeployPayload,
|
|
19
|
-
ConfigGroupDeployResponse,
|
|
20
|
-
ConfigGroupDisassociateResponse,
|
|
21
|
-
ConfigGroupEditPayload,
|
|
22
|
-
ConfigGroupEditResponse,
|
|
23
|
-
ConfigGroupVariablesCreatePayload,
|
|
24
|
-
ConfigGroupVariablesCreateResponse,
|
|
25
|
-
ConfigGroupVariablesEditPayload,
|
|
26
|
-
ConfigurationGroup,
|
|
27
|
-
DeviceId,
|
|
28
|
-
ProfileId,
|
|
29
|
-
Solution,
|
|
30
|
-
)
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
class ConfigGroupAPI:
|
|
34
|
-
def __init__(self, session: ManagerSession):
|
|
35
|
-
self._session = session
|
|
36
|
-
self._endpoints = ConfigurationGroup(session)
|
|
37
|
-
|
|
38
|
-
def associate(self, cg_id: str, device_ids: list) -> None:
|
|
39
|
-
"""
|
|
40
|
-
Associates given config-group to specified list of devices
|
|
41
|
-
"""
|
|
42
|
-
devices = []
|
|
43
|
-
|
|
44
|
-
for device_id in device_ids:
|
|
45
|
-
devices.append(DeviceId(id=device_id))
|
|
46
|
-
|
|
47
|
-
payload = ConfigGroupAssociatePayload(devices=devices)
|
|
48
|
-
|
|
49
|
-
self._endpoints.associate(config_group_id=cg_id, payload=payload)
|
|
50
|
-
|
|
51
|
-
def create(self, name: str, description: str, solution: Solution, profile_ids: list) -> ConfigGroupCreationResponse:
|
|
52
|
-
"""
|
|
53
|
-
Creates new config-group
|
|
54
|
-
"""
|
|
55
|
-
profiles = []
|
|
56
|
-
|
|
57
|
-
for profile_id in profile_ids:
|
|
58
|
-
profiles.append(ProfileId(id=profile_id))
|
|
59
|
-
cg_payload = ConfigGroupCreationPayload(
|
|
60
|
-
name=name, description=description, solution=solution, profiles=profiles
|
|
61
|
-
)
|
|
62
|
-
|
|
63
|
-
return self._endpoints.create_config_group(cg_payload)
|
|
64
|
-
|
|
65
|
-
def create_variables(
|
|
66
|
-
self, cg_id: str, device_ids: list, suggestions: bool = True
|
|
67
|
-
) -> ConfigGroupVariablesCreateResponse:
|
|
68
|
-
"""
|
|
69
|
-
Creates device specific variable data in given config-group
|
|
70
|
-
"""
|
|
71
|
-
payload = ConfigGroupVariablesCreatePayload(deviceIds=device_ids, suggestions=suggestions)
|
|
72
|
-
return self._endpoints.create_variables(config_group_id=cg_id, payload=payload)
|
|
73
|
-
|
|
74
|
-
def delete(self, cg_id: UUID) -> None:
|
|
75
|
-
"""
|
|
76
|
-
Deletes existing config-group with given ID
|
|
77
|
-
"""
|
|
78
|
-
self._endpoints.delete_config_group(cg_id)
|
|
79
|
-
|
|
80
|
-
def deploy(self, cg_id: str, device_ids: list) -> ConfigGroupDeployResponse:
|
|
81
|
-
"""
|
|
82
|
-
Deploys specified config-group config to given list of devices
|
|
83
|
-
"""
|
|
84
|
-
devices = []
|
|
85
|
-
for device_id in device_ids:
|
|
86
|
-
devices.append(DeviceId(id=device_id))
|
|
87
|
-
|
|
88
|
-
payload = ConfigGroupDeployPayload(devices=devices)
|
|
89
|
-
return self._endpoints.deploy(config_group_id=cg_id, payload=payload)
|
|
90
|
-
|
|
91
|
-
def disassociate(self, cg_id: str, device_ids: list) -> ConfigGroupDisassociateResponse:
|
|
92
|
-
"""
|
|
93
|
-
Disassociates given list of devices from the specified config-group
|
|
94
|
-
"""
|
|
95
|
-
devices = []
|
|
96
|
-
for device_id in device_ids:
|
|
97
|
-
devices.append(DeviceId(id=device_id))
|
|
98
|
-
|
|
99
|
-
payload = ConfigGroupAssociatePayload(devices=devices)
|
|
100
|
-
return self._endpoints.disassociate(config_group_id=cg_id, payload=payload)
|
|
101
|
-
|
|
102
|
-
def edit(
|
|
103
|
-
self, cg_id: str, name: str, description: str, solution: Solution, profile_ids: list
|
|
104
|
-
) -> ConfigGroupEditResponse:
|
|
105
|
-
"""
|
|
106
|
-
Modifies feature profiles in existing config-group
|
|
107
|
-
"""
|
|
108
|
-
profiles = []
|
|
109
|
-
|
|
110
|
-
for profile_id in profile_ids:
|
|
111
|
-
profiles.append(ProfileId(id=profile_id))
|
|
112
|
-
payload = ConfigGroupEditPayload(name=name, description=description, solution=solution, profiles=profiles)
|
|
113
|
-
|
|
114
|
-
return self._endpoints.edit_config_group(config_group_id=cg_id, payload=payload)
|
|
115
|
-
|
|
116
|
-
@overload
|
|
117
|
-
def get(self) -> DataSequence[ConfigGroup]:
|
|
118
|
-
...
|
|
119
|
-
|
|
120
|
-
@overload
|
|
121
|
-
def get(self, group_id: UUID) -> ConfigGroup:
|
|
122
|
-
...
|
|
123
|
-
|
|
124
|
-
def get(self, group_id: Optional[UUID] = None) -> Any:
|
|
125
|
-
"""
|
|
126
|
-
Gets list of existing config-groups or single config-group with given ID
|
|
127
|
-
If given ID is not correct return None
|
|
128
|
-
"""
|
|
129
|
-
if group_id is None:
|
|
130
|
-
return self._endpoints.get()
|
|
131
|
-
return self._endpoints.get().filter(id=group_id).single_or_default()
|
|
132
|
-
|
|
133
|
-
def update_variables(self, cg_id: str, solution: Solution, device_variables: list) -> None:
|
|
134
|
-
"""
|
|
135
|
-
Updates device specific variable data in given config-group
|
|
136
|
-
"""
|
|
137
|
-
payload = ConfigGroupVariablesEditPayload(solution=solution, devices=device_variables)
|
|
138
|
-
|
|
139
|
-
self._endpoints.update_variables(config_group_id=cg_id, payload=payload)
|
|
140
|
-
|
|
141
|
-
def delete_all(self) -> None:
|
|
142
|
-
"""
|
|
143
|
-
Deletes all config-group
|
|
144
|
-
"""
|
|
145
|
-
config_groups = self.get()
|
|
146
|
-
for config_group in config_groups:
|
|
147
|
-
if config_group.devices:
|
|
148
|
-
self.disassociate(str(config_group.id), config_group.devices)
|
|
149
|
-
|
|
150
|
-
self.delete(config_group.id)
|
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
# Copyright 2024 Cisco Systems, Inc. and its affiliates
|
|
2
|
-
|
|
3
|
-
from typing import Any, Dict, Generic, List, Literal, Optional, Sequence, Tuple, TypeVar
|
|
4
|
-
|
|
5
|
-
from pydantic import (
|
|
6
|
-
AliasPath,
|
|
7
|
-
BaseModel,
|
|
8
|
-
ConfigDict,
|
|
9
|
-
Field,
|
|
10
|
-
PrivateAttr,
|
|
11
|
-
SerializationInfo,
|
|
12
|
-
SerializerFunctionWrapHandler,
|
|
13
|
-
model_serializer,
|
|
14
|
-
)
|
|
15
|
-
from pydantic.alias_generators import to_camel
|
|
16
|
-
from typing_extensions import get_origin
|
|
17
|
-
|
|
18
|
-
from catalystwan.exceptions import CatalystwanException
|
|
19
|
-
from catalystwan.models.common import VersionedField
|
|
20
|
-
|
|
21
|
-
T = TypeVar("T")
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
class _ParcelEntry(BaseModel):
|
|
25
|
-
def __hash__(self) -> int:
|
|
26
|
-
return hash(self.model_dump_json())
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
class _ParcelBase(BaseModel):
|
|
30
|
-
model_config = ConfigDict(
|
|
31
|
-
extra="allow", arbitrary_types_allowed=True, populate_by_name=True, json_schema_mode_override="validation"
|
|
32
|
-
)
|
|
33
|
-
parcel_name: str = Field(
|
|
34
|
-
min_length=1,
|
|
35
|
-
max_length=128,
|
|
36
|
-
pattern=r'^[^&<>! "]+$',
|
|
37
|
-
serialization_alias="name",
|
|
38
|
-
validation_alias="name",
|
|
39
|
-
)
|
|
40
|
-
parcel_description: Optional[str] = Field(
|
|
41
|
-
default=None,
|
|
42
|
-
serialization_alias="description",
|
|
43
|
-
validation_alias="description",
|
|
44
|
-
description="Set the parcel description",
|
|
45
|
-
)
|
|
46
|
-
data: Optional[Any] = None
|
|
47
|
-
entries: Optional[Sequence[_ParcelEntry]] = Field(default=None, validation_alias=AliasPath("data", "entries"))
|
|
48
|
-
_parcel_data_key: str = PrivateAttr(default="data")
|
|
49
|
-
|
|
50
|
-
@model_serializer(mode="wrap")
|
|
51
|
-
def envelope_parcel_data(self, handler: SerializerFunctionWrapHandler, info: SerializationInfo) -> Dict[str, Any]:
|
|
52
|
-
"""
|
|
53
|
-
serializes model fields with respect to field validation_alias,
|
|
54
|
-
sub-classing parcel fields can be defined like following:
|
|
55
|
-
>>> entries: List[SecurityZoneListEntry] = Field(default=[], validation_alias=AliasPath("data", "entries"))
|
|
56
|
-
|
|
57
|
-
"data" is default _parcel_data_key which must match validation_alias prefix,
|
|
58
|
-
this attribute can be overriden in sub-class when needed
|
|
59
|
-
"""
|
|
60
|
-
model_dict = handler(self)
|
|
61
|
-
model_dict[self._parcel_data_key] = {}
|
|
62
|
-
remove_keys = []
|
|
63
|
-
replaced_keys: Dict[str, Tuple[str, str]] = {}
|
|
64
|
-
|
|
65
|
-
# enveloping
|
|
66
|
-
for key in model_dict.keys():
|
|
67
|
-
field_info = self.model_fields.get(key)
|
|
68
|
-
if field_info and isinstance(field_info.validation_alias, AliasPath):
|
|
69
|
-
aliases = field_info.validation_alias.convert_to_aliases()
|
|
70
|
-
if aliases and aliases[0] == self._parcel_data_key and len(aliases) == 2:
|
|
71
|
-
model_dict[self._parcel_data_key][aliases[1]] = model_dict[key]
|
|
72
|
-
replaced_keys[key] = (self._parcel_data_key, str(aliases[1]))
|
|
73
|
-
remove_keys.append(key)
|
|
74
|
-
for key in remove_keys:
|
|
75
|
-
del model_dict[key]
|
|
76
|
-
|
|
77
|
-
# versioned field update
|
|
78
|
-
model_dict = VersionedField.dump(self.model_fields, model_dict, info, replaced_keys)
|
|
79
|
-
|
|
80
|
-
return model_dict
|
|
81
|
-
|
|
82
|
-
@classmethod
|
|
83
|
-
def _get_parcel_type(cls) -> str:
|
|
84
|
-
field_info = cls.model_fields.get("type_")
|
|
85
|
-
if field_info is not None:
|
|
86
|
-
return str(field_info.default)
|
|
87
|
-
raise CatalystwanException(f"{cls.__name__} field parcel type is not set.")
|
|
88
|
-
|
|
89
|
-
def remove_duplicated_entries(self) -> None:
|
|
90
|
-
if self.entries:
|
|
91
|
-
self.entries = list(set(self.entries))
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
# https://github.com/pydantic/pydantic/discussions/6090
|
|
95
|
-
# Usage: Global[str](value="test")
|
|
96
|
-
class Global(BaseModel, Generic[T]):
|
|
97
|
-
model_config = ConfigDict(populate_by_name=True, alias_generator=to_camel)
|
|
98
|
-
option_type: Literal["global"] = "global"
|
|
99
|
-
value: T
|
|
100
|
-
|
|
101
|
-
def __bool__(self) -> bool:
|
|
102
|
-
# if statements use __len__ when __bool__ is not defined
|
|
103
|
-
return True
|
|
104
|
-
|
|
105
|
-
def __len__(self) -> int:
|
|
106
|
-
if isinstance(self.value, (str, list)):
|
|
107
|
-
return len(self.value)
|
|
108
|
-
return -1
|
|
109
|
-
|
|
110
|
-
def __ge__(self, other: Any) -> bool:
|
|
111
|
-
if isinstance(self.value, int):
|
|
112
|
-
return self.value >= other
|
|
113
|
-
return False
|
|
114
|
-
|
|
115
|
-
def __le__(self, other: Any) -> bool:
|
|
116
|
-
if isinstance(self.value, int):
|
|
117
|
-
return self.value <= other
|
|
118
|
-
return False
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
class Variable(BaseModel):
|
|
122
|
-
model_config = ConfigDict(populate_by_name=True, alias_generator=to_camel)
|
|
123
|
-
option_type: Literal["variable"] = "variable"
|
|
124
|
-
value: str = Field(pattern=r"^\{\{[.\/\[\]a-zA-Z0-9_-]+\}\}$", min_length=1, max_length=64)
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
class Default(BaseModel, Generic[T]):
|
|
128
|
-
model_config = ConfigDict(populate_by_name=True, alias_generator=to_camel)
|
|
129
|
-
option_type: Literal["default"] = "default"
|
|
130
|
-
value: Optional[T] = None
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
def as_optional_global(value: Any, generic_alias: Any = None):
|
|
134
|
-
if value is None:
|
|
135
|
-
return None
|
|
136
|
-
|
|
137
|
-
return as_global(value, generic_alias)
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
def as_global(value: Any, generic_alias: Any = None):
|
|
141
|
-
"""Produces Global object given only value (type is induced from value)
|
|
142
|
-
|
|
143
|
-
Args:
|
|
144
|
-
value (Any): value of Global object to be produced
|
|
145
|
-
generic_alias (Any, optional): specify alias type like Literal. Defaults to None.
|
|
146
|
-
|
|
147
|
-
Returns:
|
|
148
|
-
Global[Any]: global option type object
|
|
149
|
-
"""
|
|
150
|
-
if generic_alias is None:
|
|
151
|
-
if isinstance(value, list):
|
|
152
|
-
if len(value) == 0:
|
|
153
|
-
return Global[List](value=list()) # type: ignore
|
|
154
|
-
return Global[List[type(value[0])]](value=value) # type: ignore
|
|
155
|
-
return Global[type(value)](value=value) # type: ignore
|
|
156
|
-
elif get_origin(generic_alias) is Literal:
|
|
157
|
-
return Global[generic_alias](value=value) # type: ignore
|
|
158
|
-
raise TypeError(
|
|
159
|
-
f"Inappropriate type origin: {generic_alias} {get_origin(generic_alias)} for argument generic_alias"
|
|
160
|
-
)
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
def as_variable(value: str):
|
|
164
|
-
"""Produces Variable object from variable name string
|
|
165
|
-
|
|
166
|
-
Args:
|
|
167
|
-
value (str): value of Variable object to be produced
|
|
168
|
-
|
|
169
|
-
Returns:
|
|
170
|
-
Variable: variable option type object
|
|
171
|
-
"""
|
|
172
|
-
if not value.startswith("{{") and not value.endswith("}}"):
|
|
173
|
-
value = "{{" + value + "}}"
|
|
174
|
-
return Variable(value=value)
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
def as_default(value: Any, generic_alias: Any = None):
|
|
178
|
-
"""Produces Default object given only value (type is induced from value)
|
|
179
|
-
|
|
180
|
-
Args:
|
|
181
|
-
value (Any): value of Default object to be produced
|
|
182
|
-
generic_alias (Any, optional): specify alias type like Literal. Defaults to None.
|
|
183
|
-
|
|
184
|
-
Returns:
|
|
185
|
-
Default[Any]: default option type object
|
|
186
|
-
"""
|
|
187
|
-
if value is None:
|
|
188
|
-
return Default[None](value=None)
|
|
189
|
-
if generic_alias is None:
|
|
190
|
-
if isinstance(value, list):
|
|
191
|
-
if len(value) == 0:
|
|
192
|
-
return Default[List](value=list()) # type: ignore
|
|
193
|
-
return Default[List[type(value[0])]](value=value) # type: ignore
|
|
194
|
-
return Default[type(value)](value=value) # type: ignore
|
|
195
|
-
elif get_origin(generic_alias) is Literal:
|
|
196
|
-
return Default[generic_alias](value=value) # type: ignore
|
|
197
|
-
raise TypeError(
|
|
198
|
-
f"Inappropriate type origin: {generic_alias} {get_origin(generic_alias)} for argument generic_alias"
|
|
199
|
-
)
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
def as_optional_global_or_variable(value: Any, generic_alias: Any = None):
|
|
203
|
-
if isinstance(value, str) and value.startswith("{{") and value.endswith("}}"):
|
|
204
|
-
return as_variable(value)
|
|
205
|
-
else:
|
|
206
|
-
return as_optional_global(value, generic_alias)
|