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,74 +0,0 @@
|
|
|
1
|
-
# Copyright 2023 Cisco Systems, Inc. and its affiliates
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
import logging
|
|
6
|
-
from typing import TYPE_CHECKING
|
|
7
|
-
|
|
8
|
-
from catalystwan.dataclasses import ResourcePoolData
|
|
9
|
-
from catalystwan.typed_list import DataSequence
|
|
10
|
-
|
|
11
|
-
if TYPE_CHECKING:
|
|
12
|
-
from catalystwan.session import ManagerSession
|
|
13
|
-
|
|
14
|
-
logger = logging.getLogger(__name__)
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class ResourcePoolAPI:
|
|
18
|
-
"""API methods of Resource Pool.
|
|
19
|
-
|
|
20
|
-
Attributes:
|
|
21
|
-
session: logged in API client session
|
|
22
|
-
Usage example:
|
|
23
|
-
# Create session
|
|
24
|
-
session = create_manager_session(...)
|
|
25
|
-
# Create device vpn
|
|
26
|
-
resource_poold_data = session.api.resource_pool.create()
|
|
27
|
-
"""
|
|
28
|
-
|
|
29
|
-
URL = "/dataservice/resourcepool/resource/vpn"
|
|
30
|
-
|
|
31
|
-
def __init__(self, session: ManagerSession):
|
|
32
|
-
self.session = session
|
|
33
|
-
|
|
34
|
-
def get(self, tenant_id: str, tenant_vpn: int) -> DataSequence[ResourcePoolData]:
|
|
35
|
-
"""Get device vpn for tenant.
|
|
36
|
-
|
|
37
|
-
Args:
|
|
38
|
-
tenant_id: The tenant id.
|
|
39
|
-
tenant_vpn: The number of tenant vpn.
|
|
40
|
-
|
|
41
|
-
Returns:
|
|
42
|
-
DataSequence[ResourcePoolData] for tenant.
|
|
43
|
-
|
|
44
|
-
TODO note - tenant id doesn't work, need to enter tenant organization name.
|
|
45
|
-
"""
|
|
46
|
-
parameters = {"tenantId": tenant_id, "tenantVpn": tenant_vpn}
|
|
47
|
-
response = self.session.get(url=ResourcePoolAPI.URL, params=parameters)
|
|
48
|
-
return response.dataseq(ResourcePoolData)
|
|
49
|
-
|
|
50
|
-
def create(self) -> DataSequence[ResourcePoolData]:
|
|
51
|
-
"""Create device vpn.
|
|
52
|
-
|
|
53
|
-
Returns:
|
|
54
|
-
DataSequence[ResourcePoolData].
|
|
55
|
-
"""
|
|
56
|
-
response = self.session.put(url=ResourcePoolAPI.URL)
|
|
57
|
-
logger.info("Create Resource poll vpn.")
|
|
58
|
-
return response.dataseq(ResourcePoolData)
|
|
59
|
-
|
|
60
|
-
def delete(self, tenant_id: str, tenant_vpn: int) -> bool:
|
|
61
|
-
"""Delete device vpn for tenant.
|
|
62
|
-
|
|
63
|
-
Args:
|
|
64
|
-
tenant_id: The tenant id.
|
|
65
|
-
tenant_vpn: The number of tenant vpn.
|
|
66
|
-
|
|
67
|
-
Returns:
|
|
68
|
-
bool: True if all ok, False like something wrong
|
|
69
|
-
|
|
70
|
-
TODO note - tenant id doesn't work, need to enter tenant organization name.
|
|
71
|
-
"""
|
|
72
|
-
parameters = {"tenantId": tenant_id, "tenant_vpn": tenant_vpn}
|
|
73
|
-
response = self.session.delete(url=ResourcePoolAPI.URL, params=parameters)
|
|
74
|
-
return response.ok
|
|
@@ -1,269 +0,0 @@
|
|
|
1
|
-
# Copyright 2023 Cisco Systems, Inc. and its affiliates
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
import logging
|
|
6
|
-
from typing import TYPE_CHECKING, List, Optional, cast
|
|
7
|
-
|
|
8
|
-
from catalystwan.api.task_status_api import Task
|
|
9
|
-
from catalystwan.api.versions_utils import DeviceVersions, RepositoryAPI
|
|
10
|
-
from catalystwan.endpoints.configuration_device_actions import (
|
|
11
|
-
InstallActionPayload,
|
|
12
|
-
InstallData,
|
|
13
|
-
InstallDevice,
|
|
14
|
-
InstallInput,
|
|
15
|
-
PartitionActionPayload,
|
|
16
|
-
)
|
|
17
|
-
from catalystwan.endpoints.configuration_device_inventory import DeviceDetailsResponse
|
|
18
|
-
from catalystwan.exceptions import EmptyVersionPayloadError, ImageNotInRepositoryError # type: ignore
|
|
19
|
-
from catalystwan.typed_list import DataSequence
|
|
20
|
-
from catalystwan.utils.personality import Personality
|
|
21
|
-
from catalystwan.utils.upgrades_helper import get_install_specification, validate_personality_homogeneity
|
|
22
|
-
from catalystwan.version import parse_vmanage_version
|
|
23
|
-
|
|
24
|
-
logger = logging.getLogger(__name__)
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if TYPE_CHECKING:
|
|
28
|
-
from catalystwan.session import ManagerSession
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
class SoftwareActionAPI:
|
|
32
|
-
"""
|
|
33
|
-
API methods for software actions. All methods
|
|
34
|
-
are exececutable on all device categories.
|
|
35
|
-
|
|
36
|
-
Usage example:
|
|
37
|
-
# Create session
|
|
38
|
-
session = create_manager_session(...)
|
|
39
|
-
|
|
40
|
-
# Prepare devices list
|
|
41
|
-
controllers = session.endpoints.configuration_device_inventory.get_device_details('controllers')
|
|
42
|
-
vsmarts = controllers.filter(personality=Personality.VSMART)
|
|
43
|
-
software_image = "viptela-20.7.2-x86_64.tar.gz"
|
|
44
|
-
|
|
45
|
-
# Upgrade
|
|
46
|
-
upgrade_id = SoftwareActionAPI(session).install(devices = vsmarts, software_image=software_image)
|
|
47
|
-
|
|
48
|
-
# Check upgrade status
|
|
49
|
-
TaskAPI(session, software_action_id).wait_for_completed()
|
|
50
|
-
"""
|
|
51
|
-
|
|
52
|
-
def __init__(self, session: ManagerSession) -> None:
|
|
53
|
-
self.session = session
|
|
54
|
-
self.repository = RepositoryAPI(self.session)
|
|
55
|
-
self.device_versions = DeviceVersions(self.session)
|
|
56
|
-
|
|
57
|
-
def activate(
|
|
58
|
-
self,
|
|
59
|
-
devices: DataSequence[DeviceDetailsResponse],
|
|
60
|
-
version_to_activate: Optional[str] = "",
|
|
61
|
-
image: Optional[str] = "",
|
|
62
|
-
) -> Task:
|
|
63
|
-
"""
|
|
64
|
-
Set chosen version as current version. Requires that selected devices have already version_to_activate
|
|
65
|
-
or image present in their available files.
|
|
66
|
-
|
|
67
|
-
Args:
|
|
68
|
-
devices (List[DeviceDetailsResponse]): For those devices software will be activated
|
|
69
|
-
version_to_activate (Optional[str]): version to be set as current version
|
|
70
|
-
image (Optional[str]): software image name in available files
|
|
71
|
-
|
|
72
|
-
Notice: Have to pass one of those arguments (version_to_activate, image)
|
|
73
|
-
|
|
74
|
-
Raises:
|
|
75
|
-
EmptyVersionPayloadError: If selected version_to_activate or image not detected in available files
|
|
76
|
-
|
|
77
|
-
Returns:
|
|
78
|
-
str: Activate software action id
|
|
79
|
-
"""
|
|
80
|
-
validate_personality_homogeneity(devices)
|
|
81
|
-
if image and not version_to_activate:
|
|
82
|
-
version = cast(str, self.repository.get_image_version(image))
|
|
83
|
-
elif version_to_activate and not image:
|
|
84
|
-
version = cast(str, version_to_activate)
|
|
85
|
-
else:
|
|
86
|
-
raise ValueError("You can not provide software_image and image version at the same time!")
|
|
87
|
-
|
|
88
|
-
if not version:
|
|
89
|
-
raise ImageNotInRepositoryError(
|
|
90
|
-
"Based on provided arguments, software version to activate on device(s) cannot be detected."
|
|
91
|
-
)
|
|
92
|
-
|
|
93
|
-
payload_devices = self.device_versions.get_device_available(version, devices)
|
|
94
|
-
for device in payload_devices:
|
|
95
|
-
if not device.version:
|
|
96
|
-
raise EmptyVersionPayloadError("PartitionDevice payload contains entry with empty version field.")
|
|
97
|
-
|
|
98
|
-
device_type = get_install_specification(devices.first()).device_type.value
|
|
99
|
-
partition_payload = PartitionActionPayload(
|
|
100
|
-
action="changepartition", devices=[dev for dev in payload_devices], device_type=device_type
|
|
101
|
-
)
|
|
102
|
-
|
|
103
|
-
partition_action = self.session.endpoints.configuration_device_actions.process_mark_change_partition(
|
|
104
|
-
payload=partition_payload
|
|
105
|
-
)
|
|
106
|
-
|
|
107
|
-
return Task(self.session, partition_action.id)
|
|
108
|
-
|
|
109
|
-
def install(
|
|
110
|
-
self,
|
|
111
|
-
devices: DataSequence[DeviceDetailsResponse],
|
|
112
|
-
reboot: bool = False,
|
|
113
|
-
sync: bool = True,
|
|
114
|
-
v_edge_vpn: int = 0,
|
|
115
|
-
v_smart_vpn: int = 0,
|
|
116
|
-
image: Optional[str] = None,
|
|
117
|
-
image_version: Optional[str] = None,
|
|
118
|
-
downgrade_check: bool = True,
|
|
119
|
-
remote_server_name: Optional[str] = None,
|
|
120
|
-
remote_image_filename: Optional[str] = None,
|
|
121
|
-
) -> Task:
|
|
122
|
-
"""
|
|
123
|
-
Method to install new software
|
|
124
|
-
|
|
125
|
-
Args:
|
|
126
|
-
devices (List[DeviceDetailsResponse]): For those devices software will be activated
|
|
127
|
-
reboot (bool, optional): reboot device after action end
|
|
128
|
-
sync (bool, optional): Synchronize settings. Defaults to True.
|
|
129
|
-
v_edge_vpn (int, optional): vEdge VPN
|
|
130
|
-
v_smart_vpn (int, optional): vSmart VPN
|
|
131
|
-
image (str): path to software image or its name from available files
|
|
132
|
-
image_version (str): version of software image
|
|
133
|
-
downgrade_check (bool, optional): perform a downgrade check when applicable
|
|
134
|
-
remote_server_name (str): name of configured Remote Server
|
|
135
|
-
remote_image_filename (str): filename to choose from selected Remote Server
|
|
136
|
-
|
|
137
|
-
Notice: Have to pass one of those:
|
|
138
|
-
- image_version
|
|
139
|
-
- image
|
|
140
|
-
- remote_server_name and remote_image_filename
|
|
141
|
-
|
|
142
|
-
Raises:
|
|
143
|
-
ValueError: Raise error if downgrade in certain cases or wrong arguments combination provided
|
|
144
|
-
ImageNotInRepositoryError: If selected image, image_version or remote_image_filename not found
|
|
145
|
-
|
|
146
|
-
Returns:
|
|
147
|
-
Task: Task object representing started install process
|
|
148
|
-
"""
|
|
149
|
-
validate_personality_homogeneity(devices)
|
|
150
|
-
|
|
151
|
-
if (
|
|
152
|
-
sum(
|
|
153
|
-
[
|
|
154
|
-
image is not None,
|
|
155
|
-
image_version is not None,
|
|
156
|
-
all([remote_server_name is not None, remote_image_filename is not None]),
|
|
157
|
-
]
|
|
158
|
-
)
|
|
159
|
-
!= 1
|
|
160
|
-
):
|
|
161
|
-
raise ValueError(
|
|
162
|
-
"Please provide one option to detect software to install. "
|
|
163
|
-
"Pick either 'image', 'image_version', or both 'remote_server_name' and 'remote_image_filename'."
|
|
164
|
-
)
|
|
165
|
-
|
|
166
|
-
# FIXME downgrade_check will be supported when software images from Remote Server will have versions fields
|
|
167
|
-
if remote_server_name and remote_image_filename and downgrade_check:
|
|
168
|
-
raise ValueError("Downgrade check is not supported for install action for images from Remote Server.")
|
|
169
|
-
|
|
170
|
-
version, remote_image_details = None, None
|
|
171
|
-
if image:
|
|
172
|
-
version = cast(str, self.repository.get_image_version(image))
|
|
173
|
-
if image_version:
|
|
174
|
-
version = cast(str, image_version)
|
|
175
|
-
if remote_server_name and remote_image_filename:
|
|
176
|
-
remote_image_details = self.repository.get_remote_image(remote_image_filename, remote_server_name)
|
|
177
|
-
|
|
178
|
-
if not any([version, remote_image_details]):
|
|
179
|
-
raise ImageNotInRepositoryError(
|
|
180
|
-
"Based on provided arguments, software version to install on device(s) cannot be detected."
|
|
181
|
-
)
|
|
182
|
-
|
|
183
|
-
install_specification = get_install_specification(devices.first(), remote=bool(remote_image_details))
|
|
184
|
-
install_devices = [
|
|
185
|
-
InstallDevice(**device.model_dump(by_alias=True))
|
|
186
|
-
for device in self.device_versions.get_device_list(devices)
|
|
187
|
-
]
|
|
188
|
-
|
|
189
|
-
if version:
|
|
190
|
-
input = InstallInput(
|
|
191
|
-
v_edge_vpn=v_edge_vpn,
|
|
192
|
-
v_smart_vpn=v_smart_vpn,
|
|
193
|
-
family=install_specification.family.value,
|
|
194
|
-
version=version,
|
|
195
|
-
version_type=install_specification.version_type.value,
|
|
196
|
-
reboot=reboot,
|
|
197
|
-
sync=sync,
|
|
198
|
-
)
|
|
199
|
-
else:
|
|
200
|
-
input = InstallInput(
|
|
201
|
-
v_edge_vpn=v_edge_vpn,
|
|
202
|
-
v_smart_vpn=v_smart_vpn,
|
|
203
|
-
data=[
|
|
204
|
-
InstallData(
|
|
205
|
-
family=install_specification.family.value,
|
|
206
|
-
version=remote_image_details.version_id, # type: ignore
|
|
207
|
-
remote_server_id=remote_image_details.remote_server_id, # type: ignore
|
|
208
|
-
version_id=remote_image_details.version_id, # type: ignore
|
|
209
|
-
)
|
|
210
|
-
],
|
|
211
|
-
version_type=install_specification.version_type.value,
|
|
212
|
-
reboot=reboot,
|
|
213
|
-
sync=sync,
|
|
214
|
-
)
|
|
215
|
-
|
|
216
|
-
device_type = install_specification.device_type.value
|
|
217
|
-
install_payload = InstallActionPayload(
|
|
218
|
-
action="install", input=input, devices=install_devices, device_type=device_type
|
|
219
|
-
)
|
|
220
|
-
|
|
221
|
-
if downgrade_check and devices.first().personality in (Personality.VMANAGE, Personality.EDGE):
|
|
222
|
-
self._downgrade_check(
|
|
223
|
-
install_payload.devices,
|
|
224
|
-
install_payload.input.version, # type: ignore
|
|
225
|
-
install_specification.family.value, # type: ignore
|
|
226
|
-
)
|
|
227
|
-
|
|
228
|
-
install_action = self.session.endpoints.configuration_device_actions.process_install_operation(
|
|
229
|
-
payload=install_payload
|
|
230
|
-
)
|
|
231
|
-
|
|
232
|
-
return Task(self.session, install_action.id)
|
|
233
|
-
|
|
234
|
-
def _downgrade_check(self, payload_devices: List[InstallDevice], version_to_upgrade: str, family: str) -> None:
|
|
235
|
-
"""
|
|
236
|
-
Check if upgrade operation is not actually a downgrade opeartion.
|
|
237
|
-
If so, in some cases action is being blocked.
|
|
238
|
-
|
|
239
|
-
Args:
|
|
240
|
-
version_to_upgrade (str): version to upgrade
|
|
241
|
-
payload_devices List[InstallDevice]: list of Devices to check downgrade possibility
|
|
242
|
-
|
|
243
|
-
Raises:
|
|
244
|
-
ValueError: If for any of the devices upgrade action is denied
|
|
245
|
-
"""
|
|
246
|
-
incorrect_devices = []
|
|
247
|
-
devices_versions_repo = self.repository.get_devices_versions_repository()
|
|
248
|
-
for device in payload_devices:
|
|
249
|
-
current_version = parse_vmanage_version(devices_versions_repo[device.device_id].current_version)
|
|
250
|
-
upgrade_version = parse_vmanage_version(version_to_upgrade)
|
|
251
|
-
# check if downgrade
|
|
252
|
-
if current_version > upgrade_version:
|
|
253
|
-
logger.warning(
|
|
254
|
-
f"Requested to downgrade device: {device.device_id} from {current_version} to {upgrade_version}"
|
|
255
|
-
)
|
|
256
|
-
# allow vmanage downgrade only if major and minor version match, downgrade for other devices is allowed
|
|
257
|
-
if family == "vmanage":
|
|
258
|
-
if not current_version.release[:2] == upgrade_version.release[:2]:
|
|
259
|
-
logger.error(
|
|
260
|
-
f"Blocking downgrade of device: {device.device_id} "
|
|
261
|
-
f"from {current_version.release} to {upgrade_version.release}"
|
|
262
|
-
)
|
|
263
|
-
incorrect_devices.append(device)
|
|
264
|
-
|
|
265
|
-
if incorrect_devices:
|
|
266
|
-
raise ValueError(
|
|
267
|
-
f"Current version of devices with id's {incorrect_devices} is "
|
|
268
|
-
"higher than upgrade version. Action denied!"
|
|
269
|
-
)
|
catalystwan/api/speedtest_api.py
DELETED
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
# Copyright 2022 Cisco Systems, Inc. and its affiliates
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
import logging
|
|
6
|
-
import math
|
|
7
|
-
from time import sleep
|
|
8
|
-
from typing import TYPE_CHECKING, cast
|
|
9
|
-
from urllib.error import HTTPError
|
|
10
|
-
|
|
11
|
-
from catalystwan.api.basic_api import DeviceStateAPI
|
|
12
|
-
from catalystwan.dataclasses import Device, Speedtest
|
|
13
|
-
|
|
14
|
-
logger = logging.getLogger(__name__)
|
|
15
|
-
|
|
16
|
-
if TYPE_CHECKING:
|
|
17
|
-
from catalystwan.session import ManagerSession
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class SpeedtestAPI:
|
|
21
|
-
"""
|
|
22
|
-
API methods to perform speedtest between 2 edge devices.
|
|
23
|
-
|
|
24
|
-
Example:
|
|
25
|
-
session = create_manager_session(...)
|
|
26
|
-
devices = session.api.basic_api.devices
|
|
27
|
-
speedtest = session.api.speedtest.speedtest(devices[0], devices[1])
|
|
28
|
-
|
|
29
|
-
print(f"Upload speed from {speedtest.device_name} is {speedtest.up_speed} Mbps.)
|
|
30
|
-
|
|
31
|
-
# example output: Upload speed from vm2 is 217.82 Mbps.
|
|
32
|
-
|
|
33
|
-
speedtest is a Speedtest object containing source and destination device info and
|
|
34
|
-
upload and download speed between them
|
|
35
|
-
"""
|
|
36
|
-
|
|
37
|
-
def __init__(self, session: ManagerSession):
|
|
38
|
-
self.session = session
|
|
39
|
-
|
|
40
|
-
def speedtest(
|
|
41
|
-
self,
|
|
42
|
-
source_device: Device,
|
|
43
|
-
destination_device: Device,
|
|
44
|
-
test_duration_seconds: int = 300,
|
|
45
|
-
) -> Speedtest:
|
|
46
|
-
"""
|
|
47
|
-
Performs speedtest between 2 edge devices.
|
|
48
|
-
|
|
49
|
-
Args:
|
|
50
|
-
source_device (Device): device from which the speed will be measured
|
|
51
|
-
destination_device (Device): device to which the speed will be measured
|
|
52
|
-
test_duration_seconds (int): duration of the speed measuring in seconds, defaults to 300 (5 minutes)
|
|
53
|
-
"""
|
|
54
|
-
|
|
55
|
-
source_color = DeviceStateAPI(self.session).get_colors(source_device.id)[0]
|
|
56
|
-
destination_color = DeviceStateAPI(self.session).get_colors(destination_device.id)[0]
|
|
57
|
-
|
|
58
|
-
self.speedtest_output = Speedtest(
|
|
59
|
-
device_ip=source_device.local_system_ip,
|
|
60
|
-
device_name=source_device.hostname,
|
|
61
|
-
destination_ip=destination_device.local_system_ip,
|
|
62
|
-
destination_name=destination_device.hostname,
|
|
63
|
-
status="",
|
|
64
|
-
up_speed=0.0,
|
|
65
|
-
down_speed=0.0,
|
|
66
|
-
) # type: ignore
|
|
67
|
-
|
|
68
|
-
if source_device.is_reachable and destination_device.is_reachable:
|
|
69
|
-
with DeviceStateAPI(self.session).enable_data_stream():
|
|
70
|
-
try:
|
|
71
|
-
self.__perform(
|
|
72
|
-
source_device,
|
|
73
|
-
destination_device,
|
|
74
|
-
source_color,
|
|
75
|
-
destination_color,
|
|
76
|
-
test_duration_seconds,
|
|
77
|
-
)
|
|
78
|
-
except HTTPError as e:
|
|
79
|
-
self.speedtest_output.status = str(e)
|
|
80
|
-
else:
|
|
81
|
-
self.speedtest_output.status = (
|
|
82
|
-
f"Source is {source_device.reachability.value} and "
|
|
83
|
-
f"destination device is {destination_device.reachability.value}"
|
|
84
|
-
)
|
|
85
|
-
|
|
86
|
-
return self.speedtest_output
|
|
87
|
-
|
|
88
|
-
def __perform(
|
|
89
|
-
self,
|
|
90
|
-
source_device: Device,
|
|
91
|
-
destination_device: Device,
|
|
92
|
-
source_color: str,
|
|
93
|
-
destination_color: str,
|
|
94
|
-
test_duration_seconds: int = 300,
|
|
95
|
-
) -> None:
|
|
96
|
-
start_query = {
|
|
97
|
-
"deviceUUID": f"{source_device.uuid}",
|
|
98
|
-
"sourceIp": f"{source_device.local_system_ip}",
|
|
99
|
-
"sourceColor": f"{source_color}",
|
|
100
|
-
"destinationIp": f"{destination_device.local_system_ip}",
|
|
101
|
-
"destinationColor": f"{destination_color}",
|
|
102
|
-
"port": "80",
|
|
103
|
-
}
|
|
104
|
-
url_path = "/dataservice/stream/device/speed"
|
|
105
|
-
setup_speedtest = self.session.post(url_path, json=start_query).json()
|
|
106
|
-
|
|
107
|
-
speedtest_session = setup_speedtest["sessionId"]
|
|
108
|
-
|
|
109
|
-
self.session.get_json(f"/dataservice/stream/device/speed/start/{speedtest_session}")
|
|
110
|
-
|
|
111
|
-
duration = math.ceil(test_duration_seconds / 5)
|
|
112
|
-
for _ in range(duration):
|
|
113
|
-
self.session.get_json(f"/dataservice/stream/device/speed/{speedtest_session}?logId=2")
|
|
114
|
-
sleep(5)
|
|
115
|
-
|
|
116
|
-
disable_speedtest = cast(
|
|
117
|
-
dict,
|
|
118
|
-
self.session.get_json(f"/dataservice/stream/device/speed/disable/{speedtest_session}"),
|
|
119
|
-
)
|
|
120
|
-
|
|
121
|
-
end_query = {
|
|
122
|
-
"query": {
|
|
123
|
-
"condition": "AND",
|
|
124
|
-
"rules": [
|
|
125
|
-
{
|
|
126
|
-
"value": [f"{source_device.local_system_ip}"],
|
|
127
|
-
"field": "source_local_ip",
|
|
128
|
-
"type": "string",
|
|
129
|
-
"operator": "in",
|
|
130
|
-
},
|
|
131
|
-
{
|
|
132
|
-
"value": ["completed"],
|
|
133
|
-
"field": "status",
|
|
134
|
-
"type": "string",
|
|
135
|
-
"operator": "in",
|
|
136
|
-
},
|
|
137
|
-
],
|
|
138
|
-
},
|
|
139
|
-
"size": 10000,
|
|
140
|
-
}
|
|
141
|
-
url_path = "/dataservice/statistics/speedtest"
|
|
142
|
-
post_speedtest = self.session.post(url_path, json=end_query).json()
|
|
143
|
-
|
|
144
|
-
try:
|
|
145
|
-
self.speedtest_output.status = disable_speedtest["status"]
|
|
146
|
-
self.speedtest_output.up_speed = post_speedtest["data"][0]["up_speed"]
|
|
147
|
-
self.speedtest_output.down_speed = post_speedtest["data"][0]["down_speed"]
|
|
148
|
-
|
|
149
|
-
logger.info(
|
|
150
|
-
f"Speedtest from {source_device.local_system_ip} " f"to {destination_device.local_system_ip} succeeded."
|
|
151
|
-
)
|
|
152
|
-
except IndexError:
|
|
153
|
-
self.speedtest_output.status = "No speed received"
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
# Copyright 2023 Cisco Systems, Inc. and its affiliates
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
import logging
|
|
6
|
-
from typing import TYPE_CHECKING, List, cast
|
|
7
|
-
|
|
8
|
-
from tenacity import retry, retry_if_result, stop_after_attempt, wait_fixed # type: ignore
|
|
9
|
-
|
|
10
|
-
from catalystwan.exceptions import TaskValidationError
|
|
11
|
-
|
|
12
|
-
if TYPE_CHECKING:
|
|
13
|
-
from catalystwan.session import ManagerSession
|
|
14
|
-
|
|
15
|
-
from catalystwan.endpoints.configuration_dashboard_status import (
|
|
16
|
-
ConfigurationDashboardStatus,
|
|
17
|
-
SubTaskData,
|
|
18
|
-
TaskData,
|
|
19
|
-
TaskResult,
|
|
20
|
-
)
|
|
21
|
-
from catalystwan.utils.operation_status import OperationStatus, OperationStatusId
|
|
22
|
-
|
|
23
|
-
logger = logging.getLogger(__name__)
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
class Task:
|
|
27
|
-
"""
|
|
28
|
-
API class for getting data about task/sub-tasks
|
|
29
|
-
"""
|
|
30
|
-
|
|
31
|
-
def __init__(self, session: ManagerSession, task_id: str):
|
|
32
|
-
self.session = session
|
|
33
|
-
self.task_id = task_id
|
|
34
|
-
self.url = f"/dataservice/device/action/status/{self.task_id}"
|
|
35
|
-
self.task_data: List[SubTaskData]
|
|
36
|
-
|
|
37
|
-
def __check_validation_status(self, task: TaskData):
|
|
38
|
-
if not task.validation:
|
|
39
|
-
return None
|
|
40
|
-
if task.validation.status in (OperationStatus.FAILURE, OperationStatus.VALIDATION_FAILURE):
|
|
41
|
-
raise TaskValidationError(
|
|
42
|
-
f"Task status validation failed, validation status is: {task.validation.status}"
|
|
43
|
-
f"\n{task.validation.activity}"
|
|
44
|
-
)
|
|
45
|
-
|
|
46
|
-
def wait_for_completed(
|
|
47
|
-
self,
|
|
48
|
-
timeout_seconds: int = 300,
|
|
49
|
-
interval_seconds: int = 5,
|
|
50
|
-
success_statuses: List[OperationStatus] = [
|
|
51
|
-
OperationStatus.SUCCESS,
|
|
52
|
-
],
|
|
53
|
-
failure_statuses: List[OperationStatus] = [
|
|
54
|
-
OperationStatus.FAILURE,
|
|
55
|
-
],
|
|
56
|
-
success_statuses_ids: List[OperationStatusId] = [
|
|
57
|
-
OperationStatusId.SUCCESS,
|
|
58
|
-
],
|
|
59
|
-
failure_statuses_ids: List[OperationStatusId] = [
|
|
60
|
-
OperationStatusId.FAILURE,
|
|
61
|
-
],
|
|
62
|
-
) -> TaskResult:
|
|
63
|
-
"""
|
|
64
|
-
Method to check subtasks statuses of the task
|
|
65
|
-
|
|
66
|
-
Example:
|
|
67
|
-
# create session
|
|
68
|
-
session = create_manager_session(ip_address,admin_username,password,port=port)
|
|
69
|
-
devices = DevicesAPI(session).get()
|
|
70
|
-
vsmart = devices.filter(personality= Personality.VSMART]).single_or_default()
|
|
71
|
-
|
|
72
|
-
# Prepare some action, and get it's id
|
|
73
|
-
upgrade_id = SoftwareAction().upgrade_software()
|
|
74
|
-
|
|
75
|
-
# Keep asking for reboot status until it's not in exit_statuses (Failure or Success)
|
|
76
|
-
or timeout is not achieved (3000s)
|
|
77
|
-
task = Task(session,upgrade_id).wait_for_completed()
|
|
78
|
-
if task.result:
|
|
79
|
-
#do something
|
|
80
|
-
else:
|
|
81
|
-
#do something else
|
|
82
|
-
|
|
83
|
-
Args:
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
timeout_seconds (int): After this time, function will stop requesting action status
|
|
87
|
-
interval_seconds (int): interval between action status requests
|
|
88
|
-
validation_timeout_seconds (int): After this time, task validation call will be send
|
|
89
|
-
delay_seconds (int): if Vmanage didn't report task status, after this time api call would be repeated
|
|
90
|
-
success_statuses (Union[List[OperationStatus], str]): list of positive sub-tasks statuses
|
|
91
|
-
success_statuses_ids (Union[List[OperationStatus], str]): list of positive sub-tasks statuses id's
|
|
92
|
-
fails_statuses_id (Union[List[OperationStatusId], str]): list of negative sub-tasks statuses
|
|
93
|
-
fails_statuses_ids (Union[List[OperationStatusId], str]): list of negative sub-tasks statuses id's
|
|
94
|
-
|
|
95
|
-
Returns:
|
|
96
|
-
TaskResult(): result attr is True if all subtasks are success
|
|
97
|
-
or is False if at least one is failed
|
|
98
|
-
"""
|
|
99
|
-
success_statuses = [cast(OperationStatus, exit_status.value) for exit_status in success_statuses]
|
|
100
|
-
failure_statuses = [cast(OperationStatus, exit_status.value) for exit_status in failure_statuses]
|
|
101
|
-
success_statuses_ids = [
|
|
102
|
-
cast(OperationStatusId, exit_status_id.value) for exit_status_id in success_statuses_ids
|
|
103
|
-
]
|
|
104
|
-
failure_statuses_ids = [
|
|
105
|
-
cast(OperationStatusId, exit_status_id.value) for exit_status_id in failure_statuses_ids
|
|
106
|
-
]
|
|
107
|
-
|
|
108
|
-
def check_status(task_data: List[SubTaskData]) -> bool:
|
|
109
|
-
"""
|
|
110
|
-
Function checks if condition is met. If so,
|
|
111
|
-
wait_for_completed stops asking for task status
|
|
112
|
-
|
|
113
|
-
Args:
|
|
114
|
-
task_data (List[SubTaskData]): list of all sub_tasks
|
|
115
|
-
|
|
116
|
-
Returns:
|
|
117
|
-
bool: False if condition is met
|
|
118
|
-
"""
|
|
119
|
-
if not task_data:
|
|
120
|
-
return True
|
|
121
|
-
task_statuses_success = [task.status in success_statuses for task in task_data]
|
|
122
|
-
task_statuses_failure = [task.status in failure_statuses for task in task_data]
|
|
123
|
-
task_statuses_id_success = [task.status_id in success_statuses_ids for task in task_data]
|
|
124
|
-
task_statuses_id_failure = [task.status_id in failure_statuses_ids for task in task_data]
|
|
125
|
-
|
|
126
|
-
all_subtasks_completed_status: List[bool] = [
|
|
127
|
-
any(task_status) for task_status in zip(task_statuses_success, task_statuses_failure)
|
|
128
|
-
]
|
|
129
|
-
all_subtasks_completed_status_id: List[bool] = [
|
|
130
|
-
any(task_status_id) for task_status_id in zip(task_statuses_id_success, task_statuses_id_failure)
|
|
131
|
-
]
|
|
132
|
-
if all(all_subtasks_completed_status) or all(all_subtasks_completed_status_id):
|
|
133
|
-
return False
|
|
134
|
-
return True
|
|
135
|
-
|
|
136
|
-
def log_exception(self) -> None:
|
|
137
|
-
logger.error("Operation status not achieved in given time")
|
|
138
|
-
|
|
139
|
-
@retry(
|
|
140
|
-
wait=wait_fixed(interval_seconds),
|
|
141
|
-
stop=stop_after_attempt(int(timeout_seconds / interval_seconds)),
|
|
142
|
-
retry=retry_if_result(check_status),
|
|
143
|
-
retry_error_callback=log_exception,
|
|
144
|
-
)
|
|
145
|
-
def wait_for_action_finish() -> List[SubTaskData]:
|
|
146
|
-
"""
|
|
147
|
-
Keep asking for task status, status_id,
|
|
148
|
-
activity(optional), untill check_status is True
|
|
149
|
-
|
|
150
|
-
Returns:
|
|
151
|
-
List[SubTaskData]
|
|
152
|
-
"""
|
|
153
|
-
task = ConfigurationDashboardStatus(self.session).find_status(self.task_id)
|
|
154
|
-
self.__check_validation_status(task)
|
|
155
|
-
self.task_data = task.data
|
|
156
|
-
sub_task_statuses = [task.status for task in self.task_data]
|
|
157
|
-
sub_task_statuses_id = [task.status_id for task in self.task_data]
|
|
158
|
-
sub_task_activities = [task.activity for task in self.task_data]
|
|
159
|
-
logger.info(
|
|
160
|
-
f"Sub-tasks data for task {self.task_id}: \n "
|
|
161
|
-
f"statuses: {sub_task_statuses}, status_ids: {sub_task_statuses_id}, activities: {sub_task_activities}."
|
|
162
|
-
)
|
|
163
|
-
return self.task_data
|
|
164
|
-
|
|
165
|
-
wait_for_action_finish()
|
|
166
|
-
result = all([sub_task.status in success_statuses for sub_task in self.task_data])
|
|
167
|
-
if result:
|
|
168
|
-
logger.info("Task polling finished, because all subtasks successfully finished.")
|
|
169
|
-
else:
|
|
170
|
-
logger.info("Task polling finished, because at least one subtask failed or task is timeout.")
|
|
171
|
-
return TaskResult(result=result, sub_tasks_data=self.task_data)
|