catalystwan 0.40.1.dev6__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.dev6.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 -624
- 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.dev6.dist-info/METADATA +0 -539
- catalystwan-0.40.1.dev6.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.dev6.dist-info → catalystwan-2.0.0a0.dist-info}/LICENSE +0 -0
|
@@ -1,414 +0,0 @@
|
|
|
1
|
-
# Copyright 2023 Cisco Systems, Inc. and its affiliates
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
import logging
|
|
6
|
-
from pathlib import PurePath
|
|
7
|
-
from typing import TYPE_CHECKING, Dict, List, Union
|
|
8
|
-
|
|
9
|
-
from pydantic import BaseModel, ConfigDict, Field
|
|
10
|
-
|
|
11
|
-
from catalystwan.endpoints.configuration.software_actions import SoftwareImageDetails
|
|
12
|
-
from catalystwan.endpoints.configuration_device_actions import (
|
|
13
|
-
InstallLxcImage,
|
|
14
|
-
LxcActivateDevice,
|
|
15
|
-
LxcUpgradeDevice,
|
|
16
|
-
PartitionDevice,
|
|
17
|
-
)
|
|
18
|
-
from catalystwan.endpoints.configuration_device_inventory import DeviceDetailsResponse
|
|
19
|
-
from catalystwan.exceptions import ImageNotInRepositoryError
|
|
20
|
-
from catalystwan.typed_list import DataSequence
|
|
21
|
-
from catalystwan.utils.upgrades_helper import SoftwarePackageUploadPayload
|
|
22
|
-
|
|
23
|
-
if TYPE_CHECKING:
|
|
24
|
-
from catalystwan.session import ManagerSession
|
|
25
|
-
|
|
26
|
-
logger = logging.getLogger(__name__)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
class DeviceSoftwareRepository(BaseModel):
|
|
30
|
-
model_config = ConfigDict(extra="ignore")
|
|
31
|
-
|
|
32
|
-
installed_versions: List[str] = Field(default_factory=list)
|
|
33
|
-
available_versions: List[str] = Field(
|
|
34
|
-
default_factory=list, serialization_alias="availableVersions", validation_alias="availableVersions"
|
|
35
|
-
)
|
|
36
|
-
current_version: str = Field(
|
|
37
|
-
default="",
|
|
38
|
-
serialization_alias="version",
|
|
39
|
-
validation_alias="version",
|
|
40
|
-
description="Current active version of software on device",
|
|
41
|
-
)
|
|
42
|
-
default_version: str = Field(default="", serialization_alias="defaultVersion", validation_alias="defaultVersion")
|
|
43
|
-
device_id: str = Field(default="", serialization_alias="uuid", validation_alias="uuid")
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
class RepositoryAPI:
|
|
47
|
-
"""
|
|
48
|
-
API methods to get information about images and devices software versions
|
|
49
|
-
|
|
50
|
-
Usage example:
|
|
51
|
-
# Create session
|
|
52
|
-
session = create_manager_session(...)
|
|
53
|
-
|
|
54
|
-
# Upload image
|
|
55
|
-
software_image = <path_to_your_image>
|
|
56
|
-
RepositoryAPI(provider).upload_image(software_image)
|
|
57
|
-
"""
|
|
58
|
-
|
|
59
|
-
def __init__(
|
|
60
|
-
self,
|
|
61
|
-
session: ManagerSession,
|
|
62
|
-
):
|
|
63
|
-
self.session = session
|
|
64
|
-
|
|
65
|
-
def get_all_software_images(self) -> DataSequence[SoftwareImageDetails]:
|
|
66
|
-
"""
|
|
67
|
-
Get all info about all software images stored in Vmanage repository
|
|
68
|
-
|
|
69
|
-
Returns:
|
|
70
|
-
list: software images list
|
|
71
|
-
"""
|
|
72
|
-
software_images = self.session.endpoints.configuration_software_actions.get_list_of_all_images()
|
|
73
|
-
return software_images
|
|
74
|
-
|
|
75
|
-
def get_all_virtual_images(self) -> DataSequence[SoftwareImageDetails]:
|
|
76
|
-
"""
|
|
77
|
-
Get all info about all software images stored in Vmanage repository
|
|
78
|
-
|
|
79
|
-
Returns:
|
|
80
|
-
list: software images list
|
|
81
|
-
"""
|
|
82
|
-
software_images = self.session.endpoints.configuration_software_actions.get_list_of_all_images(
|
|
83
|
-
"imageType=virtualmachine"
|
|
84
|
-
)
|
|
85
|
-
return software_images
|
|
86
|
-
|
|
87
|
-
def get_devices_versions_repository(self) -> Dict[str, DeviceSoftwareRepository]:
|
|
88
|
-
"""
|
|
89
|
-
Create DeviceSoftwareRepository dataclass,
|
|
90
|
-
which cointains information about all possible version types for certain devices
|
|
91
|
-
|
|
92
|
-
Returns:
|
|
93
|
-
Dict[str, DeviceSoftwareRepository]: Dictionary containing all versions
|
|
94
|
-
information
|
|
95
|
-
"""
|
|
96
|
-
|
|
97
|
-
controllers_versions_info = self.session.endpoints.configuration_device_actions.get_list_of_installed_devices(
|
|
98
|
-
device_type="controller"
|
|
99
|
-
)
|
|
100
|
-
edges_versions_info = self.session.endpoints.configuration_device_actions.get_list_of_installed_devices(
|
|
101
|
-
device_type="vedge"
|
|
102
|
-
)
|
|
103
|
-
vmanages_versions_info = self.session.endpoints.configuration_device_actions.get_list_of_installed_devices(
|
|
104
|
-
device_type="vmanage"
|
|
105
|
-
)
|
|
106
|
-
devices_versions_repository = {}
|
|
107
|
-
for device in controllers_versions_info + edges_versions_info + vmanages_versions_info:
|
|
108
|
-
device_software_repository = DeviceSoftwareRepository(**device.model_dump(by_alias=True))
|
|
109
|
-
device_software_repository.installed_versions = [a for a in device_software_repository.available_versions]
|
|
110
|
-
device_software_repository.installed_versions.append(device_software_repository.current_version)
|
|
111
|
-
devices_versions_repository[device_software_repository.device_id] = device_software_repository
|
|
112
|
-
return devices_versions_repository
|
|
113
|
-
|
|
114
|
-
def get_image_version(self, software_image: str) -> Union[str, None]:
|
|
115
|
-
"""
|
|
116
|
-
Get proper software image version, based on name in available files.
|
|
117
|
-
|
|
118
|
-
If software_image detected in available files, but doesn't include version_name, software_image won't be used.
|
|
119
|
-
|
|
120
|
-
Args:
|
|
121
|
-
software_image (str): path to software image
|
|
122
|
-
|
|
123
|
-
Returns:
|
|
124
|
-
Union[str, None]: image version or None
|
|
125
|
-
"""
|
|
126
|
-
|
|
127
|
-
image_name = PurePath(software_image).name
|
|
128
|
-
software_images = self.get_all_software_images()
|
|
129
|
-
for image in software_images:
|
|
130
|
-
if image.available_files and image_name in image.available_files:
|
|
131
|
-
if image.version_name and not image.version_name == "--":
|
|
132
|
-
return image.version_name
|
|
133
|
-
logger.warning(
|
|
134
|
-
f"Detected image {image_name} in available files has version_name: {image.version_name} as value."
|
|
135
|
-
"Image will not be used and image version won't be returned."
|
|
136
|
-
)
|
|
137
|
-
logger.error(f"Software image {image_name} is not in available images")
|
|
138
|
-
return None
|
|
139
|
-
|
|
140
|
-
def get_remote_image(
|
|
141
|
-
self, remote_image_filename: str, remote_server_name: str
|
|
142
|
-
) -> Union[SoftwareImageDetails, None]:
|
|
143
|
-
"""
|
|
144
|
-
Get remote software image details, based on name in available files and remote server name.
|
|
145
|
-
|
|
146
|
-
Args:
|
|
147
|
-
remote_image_filename (str): path to software image on remote server
|
|
148
|
-
remote_server_name (str): remote server name
|
|
149
|
-
|
|
150
|
-
Returns:
|
|
151
|
-
Union[SoftwareImageDetails, None]: remote image image details
|
|
152
|
-
"""
|
|
153
|
-
|
|
154
|
-
image_name = PurePath(remote_image_filename).name
|
|
155
|
-
software_images = self.get_all_software_images()
|
|
156
|
-
for image_details in software_images:
|
|
157
|
-
if (
|
|
158
|
-
image_details.available_files
|
|
159
|
-
and image_details.version_type
|
|
160
|
-
and image_name in image_details.available_files
|
|
161
|
-
and remote_server_name in image_details.version_type
|
|
162
|
-
):
|
|
163
|
-
if not (image_details.remote_server_id and image_details.version_id):
|
|
164
|
-
raise ValueError(
|
|
165
|
-
f"Requested image: '{image_name}' does not include include required fields for this operation: "
|
|
166
|
-
f"image_details.remote_server_id - (current value: {image_details.remote_server_id})"
|
|
167
|
-
f"image_details.version_id - (current value: {image_details.version_id})"
|
|
168
|
-
)
|
|
169
|
-
return image_details
|
|
170
|
-
logger.error(
|
|
171
|
-
f"Software image {image_name} is not in available in images from remote server {remote_server_name}"
|
|
172
|
-
)
|
|
173
|
-
return None
|
|
174
|
-
|
|
175
|
-
def upload_image(self, image_path: str) -> None:
|
|
176
|
-
"""
|
|
177
|
-
Upload software image ('tar.gz' or 'SPA.bin') to vManage software repository
|
|
178
|
-
|
|
179
|
-
Args:
|
|
180
|
-
image_path (str): path to software image
|
|
181
|
-
|
|
182
|
-
Returns:
|
|
183
|
-
str: Response status code
|
|
184
|
-
"""
|
|
185
|
-
self.session.endpoints.configuration_device_software_update.upload_software_to_manager(
|
|
186
|
-
payload=SoftwarePackageUploadPayload(image_path=image_path)
|
|
187
|
-
)
|
|
188
|
-
|
|
189
|
-
def delete_image(self, image_name: str) -> None:
|
|
190
|
-
"""
|
|
191
|
-
Delete image from vManage software repository
|
|
192
|
-
|
|
193
|
-
Args:
|
|
194
|
-
image_name (str): image name (in available files)
|
|
195
|
-
|
|
196
|
-
Raises:
|
|
197
|
-
ImageNotInRepositoryError: raise error if image not in repository
|
|
198
|
-
|
|
199
|
-
Returns:
|
|
200
|
-
int: Reponse status code
|
|
201
|
-
"""
|
|
202
|
-
for image in self.get_all_software_images():
|
|
203
|
-
if image.available_files and image_name in image.available_files:
|
|
204
|
-
version_id = image.version_id
|
|
205
|
-
self.session.endpoints.configuration_software_actions.delete_software_from_software_repository(
|
|
206
|
-
version_id=version_id
|
|
207
|
-
)
|
|
208
|
-
return None
|
|
209
|
-
raise ImageNotInRepositoryError(f"Image: {image_name} is not the vManage software repository")
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
class DeviceVersions:
|
|
213
|
-
"""
|
|
214
|
-
Methods to prepare devices list for payload
|
|
215
|
-
"""
|
|
216
|
-
|
|
217
|
-
def __init__(self, session: ManagerSession):
|
|
218
|
-
self.repository = RepositoryAPI(session)
|
|
219
|
-
|
|
220
|
-
def _validate_devices_required_fields(self, devices: DataSequence[DeviceDetailsResponse]):
|
|
221
|
-
for device in devices:
|
|
222
|
-
if not device.uuid or not device.local_system_ip:
|
|
223
|
-
raise ValueError(
|
|
224
|
-
f"Provided device '{device.host_name}' doesn't include required fields for this operation: "
|
|
225
|
-
f"device.uuid (current value: {device.uuid})"
|
|
226
|
-
f"device.local_system_ip (current value: {device.local_system_ip})"
|
|
227
|
-
)
|
|
228
|
-
|
|
229
|
-
def get_lxcactivate_device_list(
|
|
230
|
-
self,
|
|
231
|
-
version_to_set_up: str,
|
|
232
|
-
devices: DataSequence[DeviceDetailsResponse],
|
|
233
|
-
) -> DataSequence[LxcActivateDevice]:
|
|
234
|
-
self._validate_devices_required_fields(devices)
|
|
235
|
-
install_image_payload = [
|
|
236
|
-
InstallLxcImage(
|
|
237
|
-
network_function_type="app-hosting",
|
|
238
|
-
version_name=version_to_set_up,
|
|
239
|
-
version_type_name="UTD-Snort-Feature",
|
|
240
|
-
)
|
|
241
|
-
]
|
|
242
|
-
devices_payload = DataSequence(
|
|
243
|
-
LxcActivateDevice,
|
|
244
|
-
[
|
|
245
|
-
LxcActivateDevice(
|
|
246
|
-
device_id=str(device.uuid),
|
|
247
|
-
device_ip=str(device.local_system_ip),
|
|
248
|
-
install_images=install_image_payload,
|
|
249
|
-
)
|
|
250
|
-
for device in devices
|
|
251
|
-
], # type: ignore
|
|
252
|
-
)
|
|
253
|
-
|
|
254
|
-
return devices_payload
|
|
255
|
-
|
|
256
|
-
def get_lxcupgrade_device_list(
|
|
257
|
-
self,
|
|
258
|
-
version_to_set_up: str,
|
|
259
|
-
devices: DataSequence[DeviceDetailsResponse],
|
|
260
|
-
) -> DataSequence[LxcUpgradeDevice]:
|
|
261
|
-
self._validate_devices_required_fields(devices)
|
|
262
|
-
install_image_payload = [InstallLxcImage(version_name=version_to_set_up)]
|
|
263
|
-
devices_payload = DataSequence(
|
|
264
|
-
LxcUpgradeDevice,
|
|
265
|
-
[
|
|
266
|
-
LxcUpgradeDevice(
|
|
267
|
-
device_id=str(device.uuid),
|
|
268
|
-
device_ip=str(device.local_system_ip),
|
|
269
|
-
install_images=install_image_payload,
|
|
270
|
-
)
|
|
271
|
-
for device in devices
|
|
272
|
-
], # type: ignore
|
|
273
|
-
)
|
|
274
|
-
|
|
275
|
-
return devices_payload
|
|
276
|
-
|
|
277
|
-
def _get_device_list_in(
|
|
278
|
-
self, version_to_set_up: str, devices: DataSequence[DeviceDetailsResponse], version_type: str
|
|
279
|
-
) -> DataSequence[PartitionDevice]:
|
|
280
|
-
"""
|
|
281
|
-
Create devices payload list included requested version, if requested version
|
|
282
|
-
is in specified version type
|
|
283
|
-
|
|
284
|
-
Args:
|
|
285
|
-
version_to_set_up (str): requested version
|
|
286
|
-
devices List[DeviceDetailsResponse]: list of Device dataclass instances
|
|
287
|
-
version_type: type of version (installed, available, etc.)
|
|
288
|
-
|
|
289
|
-
Returns:
|
|
290
|
-
list : list of devices
|
|
291
|
-
"""
|
|
292
|
-
self._validate_devices_required_fields(devices)
|
|
293
|
-
devices_payload = DataSequence(
|
|
294
|
-
PartitionDevice,
|
|
295
|
-
[PartitionDevice(device_id=str(device.uuid), device_ip=str(device.local_system_ip)) for device in devices],
|
|
296
|
-
# type: ignore
|
|
297
|
-
)
|
|
298
|
-
|
|
299
|
-
all_dev_versions = self.repository.get_devices_versions_repository()
|
|
300
|
-
for device in devices_payload:
|
|
301
|
-
device_versions = getattr(all_dev_versions[device.device_id], version_type)
|
|
302
|
-
try:
|
|
303
|
-
for version in device_versions:
|
|
304
|
-
if version_to_set_up in version:
|
|
305
|
-
device.version = version
|
|
306
|
-
break
|
|
307
|
-
except IndexError:
|
|
308
|
-
logger.error(
|
|
309
|
-
f"Software version {version_to_set_up} for {device} is not included in {version_type}."
|
|
310
|
-
"Action for that device is not going to proceed."
|
|
311
|
-
)
|
|
312
|
-
return devices_payload
|
|
313
|
-
|
|
314
|
-
def get_device_list_in_installed(
|
|
315
|
-
self, version_to_set_up: str, devices: DataSequence[DeviceDetailsResponse]
|
|
316
|
-
) -> DataSequence[PartitionDevice]:
|
|
317
|
-
"""
|
|
318
|
-
Create devices payload list included requested version, if requested version
|
|
319
|
-
is in installed versions
|
|
320
|
-
|
|
321
|
-
Args:
|
|
322
|
-
version_to_set_up (str): requested version
|
|
323
|
-
devices (List[DeviceDetailsResponse]): devices on which action going to be performed
|
|
324
|
-
|
|
325
|
-
Returns:
|
|
326
|
-
list : list of devices
|
|
327
|
-
"""
|
|
328
|
-
return self._get_device_list_in(version_to_set_up, devices, "installed_versions")
|
|
329
|
-
|
|
330
|
-
def get_device_available(
|
|
331
|
-
self, version_to_set_up: str, devices: DataSequence[DeviceDetailsResponse]
|
|
332
|
-
) -> DataSequence[PartitionDevice]:
|
|
333
|
-
"""
|
|
334
|
-
Create devices payload list included requested, if requested version
|
|
335
|
-
is in available versions
|
|
336
|
-
|
|
337
|
-
Args:
|
|
338
|
-
version_to_set_up (str): requested version
|
|
339
|
-
devices (List[DeviceDetailsResponse]): devices on which action going to be performed
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
Returns:
|
|
343
|
-
list : list of devices
|
|
344
|
-
"""
|
|
345
|
-
return self._get_device_list_in(version_to_set_up, devices, "available_versions")
|
|
346
|
-
|
|
347
|
-
def _get_devices_chosen_version(
|
|
348
|
-
self, devices: DataSequence[DeviceDetailsResponse], version_type: str
|
|
349
|
-
) -> DataSequence[PartitionDevice]:
|
|
350
|
-
"""
|
|
351
|
-
Create devices payload list included software version key
|
|
352
|
-
for every device in devices list
|
|
353
|
-
|
|
354
|
-
Args:
|
|
355
|
-
version_to_set_up (str): requested version
|
|
356
|
-
devices (List[DeviceDetailsResponse]): devices on which action going to be performed
|
|
357
|
-
|
|
358
|
-
Returns:
|
|
359
|
-
list : list of devices
|
|
360
|
-
"""
|
|
361
|
-
self._validate_devices_required_fields(devices)
|
|
362
|
-
|
|
363
|
-
devices_payload = DataSequence(
|
|
364
|
-
PartitionDevice,
|
|
365
|
-
[
|
|
366
|
-
PartitionDevice(device_id=device.uuid, device_ip=device.local_system_ip) # type: ignore
|
|
367
|
-
for device in devices
|
|
368
|
-
], # type: ignore
|
|
369
|
-
)
|
|
370
|
-
all_dev_versions = self.repository.get_devices_versions_repository()
|
|
371
|
-
for device in devices_payload:
|
|
372
|
-
device.version = getattr(all_dev_versions[device.device_id], version_type)
|
|
373
|
-
return devices_payload
|
|
374
|
-
|
|
375
|
-
def get_devices_current_version(
|
|
376
|
-
self, devices: DataSequence[DeviceDetailsResponse]
|
|
377
|
-
) -> DataSequence[PartitionDevice]:
|
|
378
|
-
"""
|
|
379
|
-
Create devices payload list included current software version key
|
|
380
|
-
for every device in devices list
|
|
381
|
-
|
|
382
|
-
Args:
|
|
383
|
-
version_to_set_up (str): requested version
|
|
384
|
-
devices (List[DeviceDetailsResponse]): devices on which action going to be performed
|
|
385
|
-
|
|
386
|
-
Returns:
|
|
387
|
-
list : list of devices
|
|
388
|
-
"""
|
|
389
|
-
|
|
390
|
-
return self._get_devices_chosen_version(devices, "current_version")
|
|
391
|
-
|
|
392
|
-
def get_devices_available_versions(
|
|
393
|
-
self, devices: DataSequence[DeviceDetailsResponse]
|
|
394
|
-
) -> DataSequence[PartitionDevice]:
|
|
395
|
-
"""
|
|
396
|
-
Create devices payload list included available software versions key
|
|
397
|
-
for every device in devices list
|
|
398
|
-
|
|
399
|
-
Args:
|
|
400
|
-
devices (List[DeviceDetailsResponse]): devices on which action going to be performed
|
|
401
|
-
|
|
402
|
-
Returns:
|
|
403
|
-
list : list of devices
|
|
404
|
-
"""
|
|
405
|
-
|
|
406
|
-
return self._get_devices_chosen_version(devices, "available_versions")
|
|
407
|
-
|
|
408
|
-
def get_device_list(self, devices: DataSequence[DeviceDetailsResponse]) -> List[PartitionDevice]:
|
|
409
|
-
self._validate_devices_required_fields(devices)
|
|
410
|
-
|
|
411
|
-
return [
|
|
412
|
-
PartitionDevice(device_id=device.uuid, device_ip=device.local_system_ip) # type: ignore
|
|
413
|
-
for device in devices
|
|
414
|
-
]
|
|
@@ -1,200 +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, 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
|
-
LxcImageActivatePayload,
|
|
12
|
-
LxcImageDeletePayload,
|
|
13
|
-
LxcImageUpgradePayload,
|
|
14
|
-
LxcInstallInput,
|
|
15
|
-
)
|
|
16
|
-
from catalystwan.endpoints.configuration_device_inventory import DeviceDetailsResponse
|
|
17
|
-
from catalystwan.exceptions import EmptyVersionPayloadError, ImageNotInRepositoryError # type: ignore
|
|
18
|
-
from catalystwan.typed_list import DataSequence
|
|
19
|
-
from catalystwan.utils.upgrades_helper import get_install_specification, validate_personality_homogeneity
|
|
20
|
-
|
|
21
|
-
logger = logging.getLogger(__name__)
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if TYPE_CHECKING:
|
|
25
|
-
from catalystwan.session import ManagerSession
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
class LxcActionAPI:
|
|
29
|
-
"""
|
|
30
|
-
API methods for virtual software actions. All methods
|
|
31
|
-
are executable on all device categories.
|
|
32
|
-
|
|
33
|
-
Usage example:
|
|
34
|
-
# Create session
|
|
35
|
-
session = create_manager_session(...)
|
|
36
|
-
|
|
37
|
-
# Prepare specific device for Lxc image actions
|
|
38
|
-
all_dev = session.api.devices.get()
|
|
39
|
-
dev = all_dev.filter(hostname="pm1044")
|
|
40
|
-
ver = "1.0.0_SV3.1.67.0_XE17.14"
|
|
41
|
-
|
|
42
|
-
# Upgrade
|
|
43
|
-
del_id = session.api.lxcsoftware.lxcdelete(dev,ver)
|
|
44
|
-
up_id = session.api.lxcsoftware.lxcupgrade(dev,ver)
|
|
45
|
-
act_id = session.api.lxcsoftware.lxcactivate(dev,ver)
|
|
46
|
-
|
|
47
|
-
# Check upgrade status
|
|
48
|
-
TaskAPI(session, software_action_id).wait_for_completed()
|
|
49
|
-
"""
|
|
50
|
-
|
|
51
|
-
def __init__(self, session: ManagerSession) -> None:
|
|
52
|
-
self.session = session
|
|
53
|
-
self.repository = RepositoryAPI(self.session)
|
|
54
|
-
self.device_versions = DeviceVersions(self.session)
|
|
55
|
-
|
|
56
|
-
def lxcactivate(
|
|
57
|
-
self,
|
|
58
|
-
devices: DataSequence[DeviceDetailsResponse],
|
|
59
|
-
version_to_activate: str,
|
|
60
|
-
) -> Task:
|
|
61
|
-
"""
|
|
62
|
-
Requires that selected devices have already version_to_activate installed(upgraded)
|
|
63
|
-
|
|
64
|
-
Args:
|
|
65
|
-
devices (List[DeviceDetailsResponse]): For those devices software will be activated
|
|
66
|
-
version_to_activate (Optional[str]): version to be set as current version
|
|
67
|
-
|
|
68
|
-
Notice: Have to pass one of those arguments (version_to_activate, image)
|
|
69
|
-
|
|
70
|
-
Raises:
|
|
71
|
-
EmptyVersionPayloadError: If selected version_to_activate or image not detected in available files
|
|
72
|
-
|
|
73
|
-
Returns:
|
|
74
|
-
str: Activate software action id
|
|
75
|
-
"""
|
|
76
|
-
validate_personality_homogeneity(devices)
|
|
77
|
-
version = cast(str, version_to_activate)
|
|
78
|
-
|
|
79
|
-
if not version:
|
|
80
|
-
raise ImageNotInRepositoryError(
|
|
81
|
-
"Based on provided arguments, virtual software version to activate on device(s) cannot be detected."
|
|
82
|
-
)
|
|
83
|
-
|
|
84
|
-
payload_devices = self.device_versions.get_lxcactivate_device_list(version, devices)
|
|
85
|
-
for device in payload_devices:
|
|
86
|
-
if not device.install_images[0].version_name:
|
|
87
|
-
raise EmptyVersionPayloadError("lxc activate payload contains entry with empty version field.")
|
|
88
|
-
|
|
89
|
-
device_type = get_install_specification(devices.first()).device_type.value
|
|
90
|
-
install_input = LxcInstallInput(v_edge_vpn="0", version_type="vmanage")
|
|
91
|
-
partition_payload = LxcImageActivatePayload(
|
|
92
|
-
action="lxc_activate",
|
|
93
|
-
devices=[dev for dev in payload_devices],
|
|
94
|
-
device_type=device_type,
|
|
95
|
-
input=install_input,
|
|
96
|
-
)
|
|
97
|
-
|
|
98
|
-
partition_action = self.session.endpoints.configuration_device_actions.process_lxc_activate(
|
|
99
|
-
payload=partition_payload
|
|
100
|
-
)
|
|
101
|
-
|
|
102
|
-
return Task(self.session, partition_action.id)
|
|
103
|
-
|
|
104
|
-
def lxcupgrade(
|
|
105
|
-
self,
|
|
106
|
-
devices: DataSequence[DeviceDetailsResponse],
|
|
107
|
-
version_to_upgrade: Optional[str] = "",
|
|
108
|
-
image: Optional[str] = "",
|
|
109
|
-
) -> Task:
|
|
110
|
-
"""
|
|
111
|
-
Requires that selected devices have already version_to_upgrade
|
|
112
|
-
|
|
113
|
-
Args:
|
|
114
|
-
devices (List[DeviceDetailsResponse]): For those devices software will be activated
|
|
115
|
-
version_to_upgrade (Optional[str]): version to be set as current version
|
|
116
|
-
image (Optional[str]): software image name in available files
|
|
117
|
-
|
|
118
|
-
Notice: Have to pass one of those arguments (version_to_activate, image)
|
|
119
|
-
|
|
120
|
-
Raises:
|
|
121
|
-
EmptyVersionPayloadError: If selected version_to_activate or image not detected in available files
|
|
122
|
-
|
|
123
|
-
Returns:
|
|
124
|
-
str: Activate software action id
|
|
125
|
-
"""
|
|
126
|
-
validate_personality_homogeneity(devices)
|
|
127
|
-
if image and not version_to_upgrade:
|
|
128
|
-
version = cast(str, self.repository.get_image_version(image))
|
|
129
|
-
elif version_to_upgrade and not image:
|
|
130
|
-
version = cast(str, version_to_upgrade)
|
|
131
|
-
else:
|
|
132
|
-
raise ValueError("You can not provide software_image and image version at the same time!")
|
|
133
|
-
|
|
134
|
-
if not version:
|
|
135
|
-
raise ImageNotInRepositoryError(
|
|
136
|
-
"Based on provided arguments, virtual software version to activate on device(s) cannot be detected."
|
|
137
|
-
)
|
|
138
|
-
|
|
139
|
-
payload_devices = self.device_versions.get_lxcupgrade_device_list(version, devices)
|
|
140
|
-
for device in payload_devices:
|
|
141
|
-
if not device.install_images[0].version_name:
|
|
142
|
-
raise EmptyVersionPayloadError("lxc upgrade payload contains entry with empty version field.")
|
|
143
|
-
|
|
144
|
-
device_type = get_install_specification(devices.first()).device_type.value
|
|
145
|
-
install_input = LxcInstallInput(v_edge_vpn="0", version_type="vmanage")
|
|
146
|
-
partition_payload = LxcImageUpgradePayload(
|
|
147
|
-
action="lxc_upgrade", devices=[dev for dev in payload_devices], device_type=device_type, input=install_input
|
|
148
|
-
)
|
|
149
|
-
|
|
150
|
-
partition_action = self.session.endpoints.configuration_device_actions.process_lxc_upgrade(
|
|
151
|
-
payload=partition_payload
|
|
152
|
-
)
|
|
153
|
-
|
|
154
|
-
return Task(self.session, partition_action.id)
|
|
155
|
-
|
|
156
|
-
def lxcdelete(
|
|
157
|
-
self,
|
|
158
|
-
devices: DataSequence[DeviceDetailsResponse],
|
|
159
|
-
version_to_delete: str,
|
|
160
|
-
) -> Task:
|
|
161
|
-
"""
|
|
162
|
-
Requires that selected devices have already version_to_delete
|
|
163
|
-
|
|
164
|
-
Args:
|
|
165
|
-
devices (List[DeviceDetailsResponse]): For those devices lxc software will be deleted
|
|
166
|
-
version_to_delete (Optional[str]): version to delete
|
|
167
|
-
|
|
168
|
-
Notice: Have to pass one of those arguments (version_to_delete)
|
|
169
|
-
|
|
170
|
-
Raises:
|
|
171
|
-
EmptyVersionPayloadError: If selected version_to_activate or image not detected in available files
|
|
172
|
-
|
|
173
|
-
Returns:
|
|
174
|
-
str: Delete software action id
|
|
175
|
-
"""
|
|
176
|
-
validate_personality_homogeneity(devices)
|
|
177
|
-
version = cast(str, version_to_delete)
|
|
178
|
-
|
|
179
|
-
if not version:
|
|
180
|
-
raise ImageNotInRepositoryError(
|
|
181
|
-
"Based on provided arguments, virtual software version to delete on device(s) cannot be detected."
|
|
182
|
-
)
|
|
183
|
-
|
|
184
|
-
payload_devices = self.device_versions.get_lxcupgrade_device_list(version, devices)
|
|
185
|
-
for device in payload_devices:
|
|
186
|
-
if not device.install_images[0].version_name:
|
|
187
|
-
raise EmptyVersionPayloadError("lxc device payload contains entry with empty version field.")
|
|
188
|
-
|
|
189
|
-
device_type = get_install_specification(devices.first()).device_type.value
|
|
190
|
-
partition_payload = LxcImageDeletePayload(
|
|
191
|
-
action="lxc_delete",
|
|
192
|
-
devices=[dev for dev in payload_devices],
|
|
193
|
-
device_type=device_type,
|
|
194
|
-
)
|
|
195
|
-
|
|
196
|
-
partition_action = self.session.endpoints.configuration_device_actions.process_lxc_delete(
|
|
197
|
-
payload=partition_payload
|
|
198
|
-
)
|
|
199
|
-
|
|
200
|
-
return Task(self.session, partition_action.id)
|