diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 6ff7079d8..d7275d2b1 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -4,4 +4,4 @@ # These owners will be the default owners for everything in # the repo. Unless a later match takes precedence -* @kagrski @JimOverholt @igosoft @sbasan @bboot2 +* @kagrski @JimOverholt @igosoft @sbasan @bboot2 @jkrajew diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index af57e50af..f610bf7e3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,8 +3,7 @@ We're really glad you want to help. ## Here are some important resources: - - * Want to add something from yourself? [Make a PR](https://github.com/CiscoDevNet/catalystwan/pulls) - remember to follow code guidelines. + * Want to add something from yourself? [Make a PR](https://github.com/CiscoDevNet/catalystwan/pulls) - remember to follow [code guidelines](#code-guidelines). ### Contributors from CiscoDevNet organization: To make a PR - pull the repository, create branch for your changes, make said changes and make the pull request. Now just wait for the review and feedback from our developers. ### Contributors outside CiscoDevNet organization diff --git a/ENDPOINTS.md b/ENDPOINTS.md index 9f5932ddf..ca0433dc9 100644 --- a/ENDPOINTS.md +++ b/ENDPOINTS.md @@ -1,597 +1,602 @@ **THIS FILE WAS AUTO-GENERATED DO NOT EDIT** -Generated for: catalystwan-0.30.1 +Generated for: catalystwan-0.31.0 All URIs are relative to */dataservice* HTTP request | Supported Versions | Method | Payload Type | Return Type | Tenancy Mode ------------ | ------------------ | ------ | ------------ | ----------- | ------------ -POST /admin/user||[**AdministrationUserAndGroup.create_user**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L207)|[**User**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L11)|None| -POST /admin/usergroup||[**AdministrationUserAndGroup.create_user_group**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L211)|[**UserGroup**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L82)|None| -DELETE /admin/user/{username}||[**AdministrationUserAndGroup.delete_user**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L223)||None| -DELETE /admin/usergroup/{group_name}||[**AdministrationUserAndGroup.delete_user_group**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L227)||None| -GET /admin/user/userAuthType||[**AdministrationUserAndGroup.find_user_auth_type**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L243)||[**UserAuthType**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L70)| -GET /admin/usergroup||[**AdministrationUserAndGroup.find_user_groups**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L247)||DataSequence[[**UserGroup**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L82)]| -GET /admin/user/role||[**AdministrationUserAndGroup.find_user_role**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L255)||[**UserRole**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L65)| -GET /admin/user||[**AdministrationUserAndGroup.find_users**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L259)||DataSequence[[**User**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L11)]| -GET /admin/user/activeSessions||[**AdministrationUserAndGroup.get_active_sessions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L263)||DataSequence[[**ActiveSession**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L125)]| -DELETE /admin/user/removeSessions||[**AdministrationUserAndGroup.remove_sessions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L275)|[**SessionsDeleteRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L148)|[**InvalidateSessionMessage**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L161)| -POST /admin/user/reset||[**AdministrationUserAndGroup.reset_user**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L279)|[**UserResetRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L120)|None| -GET /admin/resourcegroup|<20.13,>20.4|[**AdministrationUserAndGroup.find_resource_groups**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L283)||DataSequence[[**ResourceGroup**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L170)]| -POST /admin/resourcegroup/switch|<20.13,>20.4|[**AdministrationUserAndGroup.switch_resource_group**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L288)|[**ResourceGroupSwitchRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L193)|None| -PUT /admin/resourcegroup/{group_id}|<20.13,>20.4|[**AdministrationUserAndGroup.update_resource_group**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L293)|[**ResourceGroupUpdateRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L185)|None| -DELETE /admin/resourcegroup/{group_id}|<20.13,>20.4|[**AdministrationUserAndGroup.delete_resource_group**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L298)||None| -POST /admin/resourcegroup|<20.13,>20.4|[**AdministrationUserAndGroup.create_resource_group**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L303)|[**ResourceGroup**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L170)|None| -PUT /admin/user/password/{username}||[**AdministrationUserAndGroup.update_password**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L317)|[**UserUpdateRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L32)|None| -PUT /admin/user/profile/password||[**AdministrationUserAndGroup.update_profile_password**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L325)|[**ProfilePasswordUpdateRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L165)|None| -PUT /admin/user/{username}||[**AdministrationUserAndGroup.update_user**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L329)|[**UserUpdateRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L32)|None| -PUT /admin/usergroup/{group_name}||[**AdministrationUserAndGroup.update_user_group**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L333)|[**UserGroup**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L82)|None| -DELETE /certificate/{uuid}||[**CertificateManagementDevice.delete_configuration**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L110)||[**DeviceDeletionResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L13)| -POST /certificate/generate/csr||[**CertificateManagementDevice.generate_csr**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L114)|[**TargetDevice**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L20)|DataSequence[[**DeviceCsrGenerationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L26)]| -POST /certificate/save/vedge/list||[**CertificateManagementDevice.change_vedge_list_validity**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L118)|list[[**VedgeListValidityPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L97)]|[**CertActionResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L105)| -POST /certificate/vedge/list?action={action}||[**CertificateManagementDevice.send_to_controllers**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L122)||[**CertActionResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L105)| -POST /certificate/vsmart/list||[**CertificateManagementDevice.send_to_vbond**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L126)||[**CertActionResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L105)| -GET /setting/configuration/webserver/certificate||[**CertificateManagementVManage.show_info**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_vmanage.py#L43)||[**WebServerCertificateInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_vmanage.py#L9)| -GET /client/server||[**Client.server**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/client.py#L65)||[**ServerInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/client.py#L21)| -GET /client/server/ready||[**Client.server_ready**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/client.py#L69)||[**ServerReady**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/client.py#L60)| -GET /client/about||[**Client.about**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/client.py#L73)||[**AboutInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/client.py#L49)| -GET /clusterManagement/tenancy/mode||[**ClusterManagement.get_tenancy_mode**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/cluster_management.py#L67)||[**TenancyMode**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/cluster_management.py#L17)| -GET /clusterManagement/vManage/details/{vmanageIP}||[**ClusterManagement.get_vmanage_details**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/cluster_management.py#L75)||DataSequence[[**VManageDetails**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/cluster_management.py#L24)]| -POST /device/action/software/package||[**ConfigurationDeviceSoftwareUpdate.upload_software_to_manager**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/device/software_update.py#L23)|[**SoftwarePackageUploadPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/utils/upgrades_helper.py#L68)|None| -POST /disasterrecovery/activate||[**ConfigurationDisasterRecovery.activate**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L145)||[**ActivateDisasterRecoveryTaskId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L24)| -POST /disasterrecovery/deregister||[**ConfigurationDisasterRecovery.delete**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L149)||[**DeregisterDisasterRecoveryTaskId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L20)| -GET /disasterrecovery/details||[**ConfigurationDisasterRecovery.get_details**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L193)||[**DisasterRecoveryDetailsResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L42)| -GET /disasterrecovery/schedule||[**ConfigurationDisasterRecovery.get_disaster_recovery_local_replication_schedule**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L197)||[**DisasterRecoveryScheduleResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L111)| -GET /disasterrecovery/drstatus||[**ConfigurationDisasterRecovery.get_disaster_recovery_status**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L201)||DataSequence[[**DisasterRecoveryDataCenterStatus**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L127)]| -GET /disasterrecovery/localLatestHistory||[**ConfigurationDisasterRecovery.get_local_history**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L213)||[**LastestLocalHistory**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L134)| -POST /disasterrecovery/validateNodes||[**ConfigurationDisasterRecovery.get_reachability_info**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L217)|list[[**ValidateNodePayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L46)]|DataSequence[[**ValidatedNodeEntry**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L52)]| -GET /disasterrecovery/remotedc||[**ConfigurationDisasterRecovery.get_remote_data_center_details**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L221)||DataSequence[[**RemoteDataCenterDetails**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L119)]| -GET /disasterrecovery/remotedc/swversion||[**ConfigurationDisasterRecovery.get_remote_data_center_version**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L225)||[**RemoteDataCentervManageVersionResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L115)| -GET /disasterrecovery/status||[**ConfigurationDisasterRecovery.get_dr_status**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L233)||[**DisasterRecoveryStatusResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L105)| -POST /disasterrecovery/pause||[**ConfigurationDisasterRecovery.pause_dr**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L237)||[**DisasterRecoveryPauseResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L57)| -POST /disasterrecovery/register||[**ConfigurationDisasterRecovery.register**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L253)|[**DisasterRecoveryRegisterPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L87)|[**RegisterDisasterRecoveryTaskId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L16)| -POST /disasterrecovery/unpause||[**ConfigurationDisasterRecovery.unpause_dr**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L265)||[**UnpauseDisasterRecoveryTaskId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L28)| -GET /v1/feature-profile/sdwan/system/aaa/schema|>=20.9|[**SystemFeatureProfile.get_sdwan_system_aaa_parcel_schema**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/system.py#L18)||None| -GET /v1/feature-profile/sdwan/system|>=20.9|[**SystemFeatureProfile.get_sdwan_system_feature_profiles**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/system.py#L23)|Optional[[**GetFeatureProfilesPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L174)]|DataSequence[[**FeatureProfileInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L77)]| -POST /v1/feature-profile/sdwan/system|>=20.9|[**SystemFeatureProfile.create_sdwan_system_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/system.py#L30)|[**FeatureProfileCreationPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L109)|[**FeatureProfileCreationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L120)| -DELETE /v1/feature-profile/sdwan/system/{system_id}|>=20.9|[**SystemFeatureProfile.delete_sdwan_system_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/system.py#L37)||None| -POST /v1/feature-profile/sdwan/system/{system_id}/aaa|>=20.9|[**SystemFeatureProfile.create_aaa_profile_parcel_for_system**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/system.py#L42)|[**_ParcelBase**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/api/configuration_groups/parcel.py#L9)|[**ParcelId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L170)| -PUT /v1/feature-profile/sdwan/system/{system_id}/aaa/{parcel_id}|>=20.9|[**SystemFeatureProfile.edit_aaa_profile_parcel_for_system**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/system.py#L47)|[**_ParcelBase**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/api/configuration_groups/parcel.py#L9)|[**ParcelId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L170)| -POST /v1/feature-profile/sdwan/transport|>=20.13|[**TransportFeatureProfile.create_transport_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L23)|[**FeatureProfileCreationPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L109)|[**FeatureProfileCreationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L120)| -GET /v1/feature-profile/sdwan/transport|>=20.13|[**TransportFeatureProfile.get_transport_feature_profiles**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L30)||DataSequence[[**FeatureProfileInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L77)]| -GET /v1/feature-profile/sdwan/transport/{profile_id}|>=20.13|[**TransportFeatureProfile.get_transport_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L35)||[**FeatureProfileDetail**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L89)| -PUT /v1/feature-profile/sdwan/transport/{profile_id}|>=20.13|[**TransportFeatureProfile.edit_transport_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L40)|[**FeatureProfileEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L115)|[**FeatureProfileCreationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L120)| -DELETE /v1/feature-profile/sdwan/transport/{profile_id}|>=20.13|[**TransportFeatureProfile.delete_transport_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L47)||None| -POST /v1/feature-profile/sdwan/transport/{profile_id}/management/vpn|>=20.13|[**TransportFeatureProfile.create_management_vpn_parcel**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L55)|[**_ParcelBase**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/api/configuration_groups/parcel.py#L9)|[**ParcelCreationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L124)| -PUT /v1/feature-profile/sdwan/transport/{profile_id}/management/vpn/{parcel_id}|>=20.13|[**TransportFeatureProfile.edit_management_vpn_parcel**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L70)|[**ManagementVPN**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/sdwan/management/vpn.py#L15)|[**ParcelCreationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L124)| -DELETE /v1/feature-profile/sdwan/transport/{profile_id}/management/vpn/{parcel_id}|>=20.13|[**TransportFeatureProfile.delete_management_vpn_parcel**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L77)||None| -GET /v1/feature-profile/sdwan/transport|>=20.9|[**TransportFeatureProfile.get_sdwan_transport_feature_profiles**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L82)|Optional[[**GetFeatureProfilesPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L174)]|DataSequence[[**FeatureProfileInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L77)]| -GET /v1/feature-profile/sdwan/transport/cellular-controller/schema|>=20.9|[**TransportFeatureProfile.get_sdwan_transport_cellular_controller_parcel_schema**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L89)||None| -POST /v1/feature-profile/sdwan/transport|>=20.9|[**TransportFeatureProfile.create_sdwan_transport_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L94)|[**FeatureProfileCreationPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L109)|[**FeatureProfileCreationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L120)| -DELETE /v1/feature-profile/sdwan/transport/{transport_id}|>=20.9|[**TransportFeatureProfile.delete_sdwan_transport_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L101)||None| -POST /v1/feature-profile/sdwan/transport/{transport_id}/cellular-controller|>=20.9|[**TransportFeatureProfile.create_cellular_controller_profile_parcel_for_transport**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L106)|[**CellularController**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_controller.py#L40)|[**ParcelId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L170)| -POST /template/policy/definition/acl||[**ConfigurationPolicyAclDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list.py#L26)|[**AclPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/access_control_list.py#L143)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1015)| -DELETE /template/policy/definition/acl/{id}||[**ConfigurationPolicyAclDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list.py#L30)||None| -PUT /template/policy/definition/acl/{id}||[**ConfigurationPolicyAclDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list.py#L38)|[**AclPolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list.py#L17)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1102)| -GET /template/policy/definition/acl||[**ConfigurationPolicyAclDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list.py#L42)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1089)]| -GET /template/policy/definition/acl/{id}||[**ConfigurationPolicyAclDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list.py#L46)||[**AclPolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list.py#L21)| -POST /template/policy/definition/acl/preview||[**ConfigurationPolicyAclDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list.py#L50)|[**AclPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/access_control_list.py#L143)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -GET /template/policy/definition/acl/preview/{id}||[**ConfigurationPolicyAclDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list.py#L54)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -POST /template/policy/definition/aclv6||[**ConfigurationPolicyAclIPv6Definition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py#L26)|[**AclIPv6Policy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/access_control_list_ipv6.py#L143)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1015)| -DELETE /template/policy/definition/aclv6/{id}||[**ConfigurationPolicyAclIPv6Definition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py#L30)||None| -PUT /template/policy/definition/aclv6/{id}||[**ConfigurationPolicyAclIPv6Definition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py#L38)|[**AclIPv6PolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py#L17)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1102)| -GET /template/policy/definition/aclv6||[**ConfigurationPolicyAclIPv6Definition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py#L42)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1089)]| -GET /template/policy/definition/aclv6/{id}||[**ConfigurationPolicyAclIPv6Definition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py#L46)||[**AclIPv6PolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py#L21)| -POST /template/policy/definition/aclv6/preview||[**ConfigurationPolicyAclIPv6Definition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py#L50)|[**AclIPv6Policy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/access_control_list_ipv6.py#L143)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -GET /template/policy/definition/aclv6/preview/{id}||[**ConfigurationPolicyAclIPv6Definition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py#L54)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -POST /template/policy/definition/control||[**ConfigurationPolicyControlDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/control.py#L26)|[**ControlPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/control.py#L312)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1015)| -DELETE /template/policy/definition/control/{id}||[**ConfigurationPolicyControlDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/control.py#L30)||None| -PUT /template/policy/definition/control/{id}||[**ConfigurationPolicyControlDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/control.py#L38)|[**ControlPolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/control.py#L17)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1102)| -GET /template/policy/definition/control||[**ConfigurationPolicyControlDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/control.py#L42)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1089)]| -GET /template/policy/definition/control/{id}||[**ConfigurationPolicyControlDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/control.py#L46)||[**ControlPolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/control.py#L21)| -POST /template/policy/definition/control/preview||[**ConfigurationPolicyControlDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/control.py#L50)|[**ControlPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/control.py#L312)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -GET /template/policy/definition/control/preview/{id}||[**ConfigurationPolicyControlDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/control.py#L54)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -POST /template/policy/definition/deviceaccesspolicy||[**ConfigurationPolicyDeviceAccessDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access.py#L26)|[**DeviceAccessPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/device_access.py#L81)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1015)| -DELETE /template/policy/definition/deviceaccesspolicy/{id}||[**ConfigurationPolicyDeviceAccessDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access.py#L30)||None| -PUT /template/policy/definition/deviceaccesspolicy/{id}||[**ConfigurationPolicyDeviceAccessDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access.py#L38)|[**DeviceAccessPolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access.py#L17)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1102)| -GET /template/policy/definition/deviceaccesspolicy||[**ConfigurationPolicyDeviceAccessDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access.py#L42)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1089)]| -GET /template/policy/definition/deviceaccesspolicy/{id}||[**ConfigurationPolicyDeviceAccessDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access.py#L46)||[**DeviceAccessPolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access.py#L21)| -POST /template/policy/definition/deviceaccesspolicy/preview||[**ConfigurationPolicyDeviceAccessDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access.py#L50)|[**DeviceAccessPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/device_access.py#L81)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -GET /template/policy/definition/deviceaccesspolicy/preview/{id}||[**ConfigurationPolicyDeviceAccessDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access.py#L54)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -POST /template/policy/definition/deviceaccesspolicyv6||[**ConfigurationPolicyDeviceAccessIPv6Definition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py#L26)|[**DeviceAccessIPv6Policy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/device_access_ipv6.py#L81)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1015)| -DELETE /template/policy/definition/deviceaccesspolicyv6/{id}||[**ConfigurationPolicyDeviceAccessIPv6Definition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py#L30)||None| -PUT /template/policy/definition/deviceaccesspolicyv6/{id}||[**ConfigurationPolicyDeviceAccessIPv6Definition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py#L38)|[**DeviceAccessIPv6PolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py#L17)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1102)| -GET /template/policy/definition/deviceaccesspolicyv6||[**ConfigurationPolicyDeviceAccessIPv6Definition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py#L44)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1089)]| -GET /template/policy/definition/deviceaccesspolicyv6/{id}||[**ConfigurationPolicyDeviceAccessIPv6Definition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py#L48)||[**DeviceAccessIPv6PolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py#L21)| -POST /template/policy/definition/deviceaccesspolicyv6/preview||[**ConfigurationPolicyDeviceAccessIPv6Definition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py#L52)|[**DeviceAccessIPv6Policy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/device_access_ipv6.py#L81)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -GET /template/policy/definition/deviceaccesspolicyv6/preview/{id}||[**ConfigurationPolicyDeviceAccessIPv6Definition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py#L56)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -POST /template/policy/definition/hubandspoke||[**ConfigurationPolicyHubAndSpokeDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py#L26)|[**HubAndSpokePolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/hub_and_spoke.py#L44)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1015)| -DELETE /template/policy/definition/hubandspoke/{id}||[**ConfigurationPolicyHubAndSpokeDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py#L30)||None| -PUT /template/policy/definition/hubandspoke/{id}||[**ConfigurationPolicyHubAndSpokeDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py#L38)|[**HubAndSpokePolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py#L17)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1102)| -GET /template/policy/definition/hubandspoke||[**ConfigurationPolicyHubAndSpokeDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py#L42)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1089)]| -GET /template/policy/definition/hubandspoke/{id}||[**ConfigurationPolicyHubAndSpokeDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py#L46)||[**HubAndSpokePolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py#L21)| -POST /template/policy/definition/hubandspoke/preview||[**ConfigurationPolicyHubAndSpokeDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py#L50)|[**HubAndSpokePolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/hub_and_spoke.py#L44)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -GET /template/policy/definition/hubandspoke/preview/{id}||[**ConfigurationPolicyHubAndSpokeDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py#L54)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -POST /template/policy/definition/mesh||[**ConfigurationPolicyMeshDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/mesh.py#L26)|[**MeshPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/mesh.py#L21)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1015)| -DELETE /template/policy/definition/mesh/{id}||[**ConfigurationPolicyMeshDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/mesh.py#L30)||None| -PUT /template/policy/definition/mesh/{id}||[**ConfigurationPolicyMeshDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/mesh.py#L38)|[**MeshPolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/mesh.py#L17)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1102)| -GET /template/policy/definition/mesh||[**ConfigurationPolicyMeshDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/mesh.py#L42)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1089)]| -GET /template/policy/definition/mesh/{id}||[**ConfigurationPolicyMeshDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/mesh.py#L46)||[**MeshPolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/mesh.py#L21)| -POST /template/policy/definition/mesh/preview||[**ConfigurationPolicyMeshDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/mesh.py#L50)|[**MeshPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/mesh.py#L21)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -GET /template/policy/definition/mesh/preview/{id}||[**ConfigurationPolicyMeshDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/mesh.py#L54)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -POST /template/policy/definition/qosmap||[**ConfigurationPolicyQoSMapDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/qos_map.py#L26)|[**QoSMapPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/qos_map.py#L70)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1015)| -DELETE /template/policy/definition/qosmap/{id}||[**ConfigurationPolicyQoSMapDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/qos_map.py#L30)||None| -PUT /template/policy/definition/qosmap/{id}||[**ConfigurationPolicyQoSMapDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/qos_map.py#L38)|[**QoSMapPolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/qos_map.py#L17)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1102)| -GET /template/policy/definition/qosmap||[**ConfigurationPolicyQoSMapDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/qos_map.py#L42)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1089)]| -GET /template/policy/definition/qosmap/{id}||[**ConfigurationPolicyQoSMapDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/qos_map.py#L46)||[**QoSMapPolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/qos_map.py#L21)| -POST /template/policy/definition/qosmap/preview||[**ConfigurationPolicyQoSMapDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/qos_map.py#L50)|[**QoSMapPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/qos_map.py#L70)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -GET /template/policy/definition/qosmap/preview/{id}||[**ConfigurationPolicyQoSMapDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/qos_map.py#L54)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -POST /template/policy/definition/rewriterule||[**ConfigurationPolicyRewriteRuleDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rewrite.py#L26)|[**RewritePolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/rewrite.py#L29)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1015)| -DELETE /template/policy/definition/rewriterule/{id}||[**ConfigurationPolicyRewriteRuleDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rewrite.py#L30)||None| -PUT /template/policy/definition/rewriterule/{id}||[**ConfigurationPolicyRewriteRuleDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rewrite.py#L38)|[**RewritePolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rewrite.py#L17)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1102)| -GET /template/policy/definition/rewriterule||[**ConfigurationPolicyRewriteRuleDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rewrite.py#L42)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1089)]| -GET /template/policy/definition/rewriterule/{id}||[**ConfigurationPolicyRewriteRuleDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rewrite.py#L46)||[**RewritePolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rewrite.py#L21)| -POST /template/policy/definition/rewriterule/preview||[**ConfigurationPolicyRewriteRuleDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rewrite.py#L50)|[**RewritePolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/rewrite.py#L29)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -GET /template/policy/definition/rewriterule/preview/{id}||[**ConfigurationPolicyRewriteRuleDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rewrite.py#L54)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -POST /template/policy/definition/ruleset||[**ConfigurationPolicyRuleSetDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rule_set.py#L26)|[**RuleSet**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/rule_set.py#L152)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1015)| -DELETE /template/policy/definition/ruleset/{id}||[**ConfigurationPolicyRuleSetDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rule_set.py#L30)||None| -PUT /template/policy/definition/ruleset/{id}||[**ConfigurationPolicyRuleSetDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rule_set.py#L38)|[**RuleSetEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rule_set.py#L17)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1102)| -GET /template/policy/definition/ruleset||[**ConfigurationPolicyRuleSetDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rule_set.py#L42)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1089)]| -GET /template/policy/definition/ruleset/{id}||[**ConfigurationPolicyRuleSetDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rule_set.py#L46)||[**RuleSetGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rule_set.py#L21)| -POST /template/policy/definition/ruleset/preview||[**ConfigurationPolicyRuleSetDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rule_set.py#L50)|[**RuleSet**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/rule_set.py#L152)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -GET /template/policy/definition/ruleset/preview/{id}||[**ConfigurationPolicyRuleSetDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rule_set.py#L54)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -POST /template/policy/definition/securitygroup||[**ConfigurationPolicySecurityGroupDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/security_group.py#L26)|[**SecurityGroup**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/security_group.py#L51)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1015)| -DELETE /template/policy/definition/securitygroup/{id}||[**ConfigurationPolicySecurityGroupDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/security_group.py#L30)||None| -PUT /template/policy/definition/securitygroup/{id}||[**ConfigurationPolicySecurityGroupDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/security_group.py#L38)|[**SecurityGroupEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/security_group.py#L17)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1102)| -GET /template/policy/definition/securitygroup||[**ConfigurationPolicySecurityGroupDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/security_group.py#L42)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1089)]| -GET /template/policy/definition/securitygroup/{id}||[**ConfigurationPolicySecurityGroupDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/security_group.py#L46)||[**SecurityGroupGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/security_group.py#L21)| -POST /template/policy/definition/securitygroup/preview||[**ConfigurationPolicySecurityGroupDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/security_group.py#L50)|[**SecurityGroup**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/security_group.py#L51)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -GET /template/policy/definition/securitygroup/preview/{id}||[**ConfigurationPolicySecurityGroupDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/security_group.py#L54)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -POST /template/policy/definition/data||[**ConfigurationPolicyDataDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/traffic_data.py#L27)|[**TrafficDataPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/traffic_data.py#L358)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1015)| -DELETE /template/policy/definition/data/{id}||[**ConfigurationPolicyDataDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/traffic_data.py#L31)||None| -PUT /template/policy/definition/data/{id}||[**ConfigurationPolicyDataDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/traffic_data.py#L39)|[**TrafficDataPolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/traffic_data.py#L18)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1102)| -GET /template/policy/definition/data||[**ConfigurationPolicyDataDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/traffic_data.py#L43)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1089)]| -GET /template/policy/definition/data/{id}||[**ConfigurationPolicyDataDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/traffic_data.py#L47)||[**TrafficDataPolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/traffic_data.py#L22)| -POST /template/policy/definition/data/preview||[**ConfigurationPolicyDataDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/traffic_data.py#L51)|[**TrafficDataPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/traffic_data.py#L358)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -GET /template/policy/definition/data/preview/{id}||[**ConfigurationPolicyDataDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/traffic_data.py#L55)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -POST /template/policy/definition/vpnmembershipgroup||[**ConfigurationPolicyVPNMembershipGroupDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py#L26)|[**VPNMembershipPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/vpn_membership.py#L20)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1015)| -DELETE /template/policy/definition/vpnmembershipgroup/{id}||[**ConfigurationPolicyVPNMembershipGroupDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py#L30)||None| -PUT /template/policy/definition/vpnmembershipgroup/{id}||[**ConfigurationPolicyVPNMembershipGroupDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py#L38)|[**VPNMembershipPolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py#L17)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1102)| -GET /template/policy/definition/vpnmembershipgroup||[**ConfigurationPolicyVPNMembershipGroupDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py#L42)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1089)]| -GET /template/policy/definition/vpnmembershipgroup/{id}||[**ConfigurationPolicyVPNMembershipGroupDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py#L46)||[**VPNMembershipPolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py#L21)| -POST /template/policy/definition/vpnmembershipgroup/preview||[**ConfigurationPolicyVPNMembershipGroupDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py#L50)|[**VPNMembershipPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/vpn_membership.py#L20)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -GET /template/policy/definition/vpnmembershipgroup/preview/{id}||[**ConfigurationPolicyVPNMembershipGroupDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py#L54)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -POST /template/policy/definition/zonebasedfw||[**ConfigurationPolicyZoneBasedFirewallDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py#L26)|[**ZoneBasedFWPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/zone_based_firewall.py#L190)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1015)| -DELETE /template/policy/definition/zonebasedfw/{id}||[**ConfigurationPolicyZoneBasedFirewallDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py#L30)||None| -PUT /template/policy/definition/zonebasedfw/{id}||[**ConfigurationPolicyZoneBasedFirewallDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py#L38)|[**ZoneBasedFWPolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py#L17)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1102)| -GET /template/policy/definition/zonebasedfw||[**ConfigurationPolicyZoneBasedFirewallDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py#L42)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1089)]| -GET /template/policy/definition/zonebasedfw/{id}||[**ConfigurationPolicyZoneBasedFirewallDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py#L46)||[**ZoneBasedFWPolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py#L21)| -POST /template/policy/definition/zonebasedfw/preview||[**ConfigurationPolicyZoneBasedFirewallDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py#L50)|[**ZoneBasedFWPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/zone_based_firewall.py#L190)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -GET /template/policy/definition/zonebasedfw/preview/{id}||[**ConfigurationPolicyZoneBasedFirewallDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py#L54)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1108)| -POST /template/policy/list/app||[**ConfigurationPolicyApplicationList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L25)|[**AppList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L129)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/app/{id}||[**ConfigurationPolicyApplicationList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L29)||None| -DELETE /template/policy/list/app||[**ConfigurationPolicyApplicationList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L33)||None| -PUT /template/policy/list/app/{id}||[**ConfigurationPolicyApplicationList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L37)|[**AppListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L16)|None| -GET /template/policy/list/app/{id}||[**ConfigurationPolicyApplicationList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L41)||[**AppListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L20)| -GET /template/policy/list/app||[**ConfigurationPolicyApplicationList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L45)||DataSequence[[**AppListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L20)]| -GET /template/policy/list/app/filtered||[**ConfigurationPolicyApplicationList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L49)||DataSequence[[**AppListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L20)]| -POST /template/policy/list/app/preview||[**ConfigurationPolicyApplicationList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L53)|[**AppList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L129)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/app/preview/{id}||[**ConfigurationPolicyApplicationList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/appprobe||[**ConfigurationPolicyAppProbeClassList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L25)|[**AppProbeClassList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L224)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/appprobe/{id}||[**ConfigurationPolicyAppProbeClassList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L29)||None| -DELETE /template/policy/list/appprobe||[**ConfigurationPolicyAppProbeClassList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L33)||None| -PUT /template/policy/list/appprobe/{id}||[**ConfigurationPolicyAppProbeClassList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L37)|[**AppProbeClassListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L16)|None| -GET /template/policy/list/appprobe/{id}||[**ConfigurationPolicyAppProbeClassList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L41)||[**AppProbeClassListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L20)| -GET /template/policy/list/appprobe||[**ConfigurationPolicyAppProbeClassList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L45)||DataSequence[[**AppProbeClassListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L20)]| -GET /template/policy/list/appprobe/filtered||[**ConfigurationPolicyAppProbeClassList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L49)||DataSequence[[**AppProbeClassListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L20)]| -POST /template/policy/list/appprobe/preview||[**ConfigurationPolicyAppProbeClassList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L53)|[**AppProbeClassList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L224)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/appprobe/preview/{id}||[**ConfigurationPolicyAppProbeClassList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/aspath||[**ConfigurationPolicyASPathList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L25)|[**ASPathList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L204)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/aspath/{id}||[**ConfigurationPolicyASPathList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L29)||None| -DELETE /template/policy/list/aspath||[**ConfigurationPolicyASPathList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L33)||None| -PUT /template/policy/list/aspath/{id}||[**ConfigurationPolicyASPathList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L37)|[**ASPathListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L16)|None| -GET /template/policy/list/aspath/{id}||[**ConfigurationPolicyASPathList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L41)||[**ASPathListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L20)| -GET /template/policy/list/aspath||[**ConfigurationPolicyASPathList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L45)||DataSequence[[**ASPathListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L20)]| -GET /template/policy/list/aspath/filtered||[**ConfigurationPolicyASPathList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L49)||DataSequence[[**ASPathListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L20)]| -POST /template/policy/list/aspath/preview||[**ConfigurationPolicyASPathList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L53)|[**ASPathList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L204)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/aspath/preview/{id}||[**ConfigurationPolicyASPathList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/class||[**ConfigurationPolicyForwardingClassList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L25)|[**ClassMapList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L209)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/class/{id}||[**ConfigurationPolicyForwardingClassList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L29)||None| -DELETE /template/policy/list/class||[**ConfigurationPolicyForwardingClassList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L33)||None| -PUT /template/policy/list/class/{id}||[**ConfigurationPolicyForwardingClassList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L37)|[**ClassMapListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L16)|None| -GET /template/policy/list/class/{id}||[**ConfigurationPolicyForwardingClassList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L41)||[**ClassMapListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L20)| -GET /template/policy/list/class||[**ConfigurationPolicyForwardingClassList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L45)||DataSequence[[**ClassMapListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L20)]| -GET /template/policy/list/class/filtered||[**ConfigurationPolicyForwardingClassList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L49)||DataSequence[[**ClassMapListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L20)]| -POST /template/policy/list/class/preview||[**ConfigurationPolicyForwardingClassList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L53)|[**ClassMapList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L209)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/class/preview/{id}||[**ConfigurationPolicyForwardingClassList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/color||[**ConfigurationPolicyColorList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L25)|[**ColorList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L140)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/color/{id}||[**ConfigurationPolicyColorList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L29)||None| -DELETE /template/policy/list/color||[**ConfigurationPolicyColorList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L33)||None| -PUT /template/policy/list/color/{id}||[**ConfigurationPolicyColorList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L37)|[**ColorListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L16)|None| -GET /template/policy/list/color/{id}||[**ConfigurationPolicyColorList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L41)||[**ColorListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L20)| -GET /template/policy/list/color||[**ConfigurationPolicyColorList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L45)||DataSequence[[**ColorListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L20)]| -GET /template/policy/list/color/filtered||[**ConfigurationPolicyColorList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L49)||DataSequence[[**ColorListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L20)]| -POST /template/policy/list/color/preview||[**ConfigurationPolicyColorList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L53)|[**ColorList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L140)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/color/preview/{id}||[**ConfigurationPolicyColorList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/community||[**ConfigurationPolicyCommunityList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L25)|[**CommunityList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L186)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/community/{id}||[**ConfigurationPolicyCommunityList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L29)||None| -DELETE /template/policy/list/community||[**ConfigurationPolicyCommunityList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L33)||None| -PUT /template/policy/list/community/{id}||[**ConfigurationPolicyCommunityList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L37)|[**CommunityListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L16)|None| -GET /template/policy/list/community/{id}||[**ConfigurationPolicyCommunityList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L41)||[**CommunityListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L20)| -GET /template/policy/list/community||[**ConfigurationPolicyCommunityList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L45)||DataSequence[[**CommunityListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L20)]| -GET /template/policy/list/community/filtered||[**ConfigurationPolicyCommunityList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L49)||DataSequence[[**CommunityListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L20)]| -POST /template/policy/list/community/preview||[**ConfigurationPolicyCommunityList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L53)|[**CommunityList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L186)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/community/preview/{id}||[**ConfigurationPolicyCommunityList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/dataipv6prefix||[**ConfigurationPolicyDataIPv6PrefixList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L25)|[**DataIPv6PrefixList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L148)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/dataipv6prefix/{id}||[**ConfigurationPolicyDataIPv6PrefixList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L29)||None| -DELETE /template/policy/list/dataipv6prefix||[**ConfigurationPolicyDataIPv6PrefixList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L33)||None| -PUT /template/policy/list/dataipv6prefix/{id}||[**ConfigurationPolicyDataIPv6PrefixList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L37)|[**DataIPv6PrefixListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L16)|None| -GET /template/policy/list/dataipv6prefix/{id}||[**ConfigurationPolicyDataIPv6PrefixList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L41)||[**DataIPv6PrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L20)| -GET /template/policy/list/dataipv6prefix||[**ConfigurationPolicyDataIPv6PrefixList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L45)||DataSequence[[**DataIPv6PrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L20)]| -GET /template/policy/list/dataipv6prefix/filtered||[**ConfigurationPolicyDataIPv6PrefixList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L49)||DataSequence[[**DataIPv6PrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L20)]| -POST /template/policy/list/dataipv6prefix/preview||[**ConfigurationPolicyDataIPv6PrefixList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L53)|[**DataIPv6PrefixList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L148)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/dataipv6prefix/preview/{id}||[**ConfigurationPolicyDataIPv6PrefixList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/dataprefix||[**ConfigurationPolicyDataPrefixList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L25)|[**DataPrefixList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L59)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/dataprefix/{id}||[**ConfigurationPolicyDataPrefixList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L29)||None| -DELETE /template/policy/list/dataprefix||[**ConfigurationPolicyDataPrefixList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L33)||None| -PUT /template/policy/list/dataprefix/{id}||[**ConfigurationPolicyDataPrefixList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L37)|[**DataPrefixListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L16)|None| -GET /template/policy/list/dataprefix/{id}||[**ConfigurationPolicyDataPrefixList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L41)||[**DataPrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L20)| -GET /template/policy/list/dataprefix||[**ConfigurationPolicyDataPrefixList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L45)||DataSequence[[**DataPrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L20)]| -GET /template/policy/list/dataprefix/filtered||[**ConfigurationPolicyDataPrefixList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L49)||DataSequence[[**DataPrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L20)]| -POST /template/policy/list/dataprefix/preview||[**ConfigurationPolicyDataPrefixList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L53)|[**DataPrefixList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L59)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/dataprefix/preview/{id}||[**ConfigurationPolicyDataPrefixList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/expandedcommunity||[**ConfigurationPolicyExpandedCommunityList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L25)|[**ExpandedCommunityList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L190)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/expandedcommunity/{id}||[**ConfigurationPolicyExpandedCommunityList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L29)||None| -DELETE /template/policy/list/expandedcommunity||[**ConfigurationPolicyExpandedCommunityList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L33)||None| -PUT /template/policy/list/expandedcommunity/{id}||[**ConfigurationPolicyExpandedCommunityList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L37)|[**ExpandedCommunityListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L16)|None| -GET /template/policy/list/expandedcommunity/{id}||[**ConfigurationPolicyExpandedCommunityList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L41)||[**ExpandedCommunityListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L20)| -GET /template/policy/list/expandedcommunity||[**ConfigurationPolicyExpandedCommunityList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L45)||DataSequence[[**ExpandedCommunityListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L20)]| -GET /template/policy/list/expandedcommunity/filtered||[**ConfigurationPolicyExpandedCommunityList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L49)||DataSequence[[**ExpandedCommunityListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L20)]| -POST /template/policy/list/expandedcommunity/preview||[**ConfigurationPolicyExpandedCommunityList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L53)|[**ExpandedCommunityList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L190)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/expandedcommunity/preview/{id}||[**ConfigurationPolicyExpandedCommunityList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/fqdn||[**ConfigurationPolicyFQDNList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L25)|[**FQDNList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L104)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/fqdn/{id}||[**ConfigurationPolicyFQDNList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L29)||None| -DELETE /template/policy/list/fqdn||[**ConfigurationPolicyFQDNList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L33)||None| -PUT /template/policy/list/fqdn/{id}||[**ConfigurationPolicyFQDNList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L37)|[**FQDNListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L16)|None| -GET /template/policy/list/fqdn/{id}||[**ConfigurationPolicyFQDNList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L41)||[**FQDNListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L20)| -GET /template/policy/list/fqdn||[**ConfigurationPolicyFQDNList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L45)||DataSequence[[**FQDNListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L20)]| -GET /template/policy/list/fqdn/filtered||[**ConfigurationPolicyFQDNList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L49)||DataSequence[[**FQDNListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L20)]| -POST /template/policy/list/fqdn/preview||[**ConfigurationPolicyFQDNList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L53)|[**FQDNList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L104)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/fqdn/preview/{id}||[**ConfigurationPolicyFQDNList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/geolocation||[**ConfigurationPolicyGeoLocationList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L25)|[**GeoLocationList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L109)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/geolocation/{id}||[**ConfigurationPolicyGeoLocationList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L29)||None| -DELETE /template/policy/list/geolocation||[**ConfigurationPolicyGeoLocationList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L33)||None| -PUT /template/policy/list/geolocation/{id}||[**ConfigurationPolicyGeoLocationList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L37)|[**GeoLocationListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L16)|None| -GET /template/policy/list/geolocation/{id}||[**ConfigurationPolicyGeoLocationList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L41)||[**GeoLocationListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L20)| -GET /template/policy/list/geolocation||[**ConfigurationPolicyGeoLocationList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L45)||DataSequence[[**GeoLocationListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L20)]| -GET /template/policy/list/geolocation/filtered||[**ConfigurationPolicyGeoLocationList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L49)||DataSequence[[**GeoLocationListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L20)]| -POST /template/policy/list/geolocation/preview||[**ConfigurationPolicyGeoLocationList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L53)|[**GeoLocationList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L109)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/geolocation/preview/{id}||[**ConfigurationPolicyGeoLocationList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/ipssignature||[**ConfigurationPolicyIPSSignatureList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L25)|[**IPSSignatureList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L161)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/ipssignature/{id}||[**ConfigurationPolicyIPSSignatureList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L29)||None| -DELETE /template/policy/list/ipssignature||[**ConfigurationPolicyIPSSignatureList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L33)||None| -PUT /template/policy/list/ipssignature/{id}||[**ConfigurationPolicyIPSSignatureList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L37)|[**IPSSignatureListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L16)|None| -GET /template/policy/list/ipssignature/{id}||[**ConfigurationPolicyIPSSignatureList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L41)||[**IPSSignatureListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L20)| -GET /template/policy/list/ipssignature||[**ConfigurationPolicyIPSSignatureList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L45)||DataSequence[[**IPSSignatureListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L20)]| -GET /template/policy/list/ipssignature/filtered||[**ConfigurationPolicyIPSSignatureList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L49)||DataSequence[[**IPSSignatureListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L20)]| -POST /template/policy/list/ipssignature/preview||[**ConfigurationPolicyIPSSignatureList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L53)|[**IPSSignatureList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L161)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/ipssignature/preview/{id}||[**ConfigurationPolicyIPSSignatureList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/ipv6prefix||[**ConfigurationPolicyIPv6PrefixList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L25)|[**IPv6PrefixList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L313)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/ipv6prefix/{id}||[**ConfigurationPolicyIPv6PrefixList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L29)||None| -DELETE /template/policy/list/ipv6prefix||[**ConfigurationPolicyIPv6PrefixList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L33)||None| -PUT /template/policy/list/ipv6prefix/{id}||[**ConfigurationPolicyIPv6PrefixList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L37)|[**IPv6PrefixListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L16)|None| -GET /template/policy/list/ipv6prefix/{id}||[**ConfigurationPolicyIPv6PrefixList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L41)||[**IPv6PrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L20)| -GET /template/policy/list/ipv6prefix||[**ConfigurationPolicyIPv6PrefixList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L45)||DataSequence[[**IPv6PrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L20)]| -GET /template/policy/list/ipv6prefix/filtered||[**ConfigurationPolicyIPv6PrefixList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L49)||DataSequence[[**IPv6PrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L20)]| -POST /template/policy/list/ipv6prefix/preview||[**ConfigurationPolicyIPv6PrefixList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L53)|[**IPv6PrefixList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L313)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/ipv6prefix/preview/{id}||[**ConfigurationPolicyIPv6PrefixList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/localapp||[**ConfigurationPolicyLocalAppList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L25)|[**LocalAppList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L124)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/localapp/{id}||[**ConfigurationPolicyLocalAppList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L29)||None| -DELETE /template/policy/list/localapp||[**ConfigurationPolicyLocalAppList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L33)||None| -PUT /template/policy/list/localapp/{id}||[**ConfigurationPolicyLocalAppList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L37)|[**LocalAppListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L16)|None| -GET /template/policy/list/localapp/{id}||[**ConfigurationPolicyLocalAppList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L41)||[**LocalAppListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L20)| -GET /template/policy/list/localapp||[**ConfigurationPolicyLocalAppList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L45)||DataSequence[[**LocalAppListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L20)]| -GET /template/policy/list/localapp/filtered||[**ConfigurationPolicyLocalAppList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L49)||DataSequence[[**LocalAppListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L20)]| -POST /template/policy/list/localapp/preview||[**ConfigurationPolicyLocalAppList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L53)|[**LocalAppList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L124)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/localapp/preview/{id}||[**ConfigurationPolicyLocalAppList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/localdomain||[**ConfigurationPolicyLocalDomainList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L25)|[**LocalDomainList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L156)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/localdomain/{id}||[**ConfigurationPolicyLocalDomainList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L29)||None| -DELETE /template/policy/list/localdomain||[**ConfigurationPolicyLocalDomainList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L33)||None| -PUT /template/policy/list/localdomain/{id}||[**ConfigurationPolicyLocalDomainList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L37)|[**LocalDomainListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L16)|None| -GET /template/policy/list/localdomain/{id}||[**ConfigurationPolicyLocalDomainList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L41)||[**LocalDomainListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L20)| -GET /template/policy/list/localdomain||[**ConfigurationPolicyLocalDomainList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L45)||DataSequence[[**LocalDomainListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L20)]| -GET /template/policy/list/localdomain/filtered||[**ConfigurationPolicyLocalDomainList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L49)||DataSequence[[**LocalDomainListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L20)]| -POST /template/policy/list/localdomain/preview||[**ConfigurationPolicyLocalDomainList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L53)|[**LocalDomainList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L156)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/localdomain/preview/{id}||[**ConfigurationPolicyLocalDomainList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/mirror||[**ConfigurationPolicyMirrorList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L25)|[**MirrorList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L219)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/mirror/{id}||[**ConfigurationPolicyMirrorList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L29)||None| -DELETE /template/policy/list/mirror||[**ConfigurationPolicyMirrorList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L33)||None| -PUT /template/policy/list/mirror/{id}||[**ConfigurationPolicyMirrorList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L37)|[**MirrorListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L16)|None| -GET /template/policy/list/mirror/{id}||[**ConfigurationPolicyMirrorList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L41)||[**MirrorListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L20)| -GET /template/policy/list/mirror||[**ConfigurationPolicyMirrorList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L45)||DataSequence[[**MirrorListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L20)]| -GET /template/policy/list/mirror/filtered||[**ConfigurationPolicyMirrorList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L49)||DataSequence[[**MirrorListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L20)]| -POST /template/policy/list/mirror/preview||[**ConfigurationPolicyMirrorList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L53)|[**MirrorList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L219)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/mirror/preview/{id}||[**ConfigurationPolicyMirrorList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/policer||[**ConfigurationPolicyPolicerClassList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L25)|[**PolicerList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L194)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/policer/{id}||[**ConfigurationPolicyPolicerClassList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L29)||None| -DELETE /template/policy/list/policer||[**ConfigurationPolicyPolicerClassList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L33)||None| -PUT /template/policy/list/policer/{id}||[**ConfigurationPolicyPolicerClassList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L37)|[**PolicerListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L16)|None| -GET /template/policy/list/policer/{id}||[**ConfigurationPolicyPolicerClassList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L41)||[**PolicerListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L20)| -GET /template/policy/list/policer||[**ConfigurationPolicyPolicerClassList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L45)||DataSequence[[**PolicerListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L20)]| -GET /template/policy/list/policer/filtered||[**ConfigurationPolicyPolicerClassList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L49)||DataSequence[[**PolicerListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L20)]| -POST /template/policy/list/policer/preview||[**ConfigurationPolicyPolicerClassList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L53)|[**PolicerList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L194)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/policer/preview/{id}||[**ConfigurationPolicyPolicerClassList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/port||[**ConfigurationPolicyPortList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L25)|[**PortList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L114)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/port/{id}||[**ConfigurationPolicyPortList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L29)||None| -DELETE /template/policy/list/port||[**ConfigurationPolicyPortList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L33)||None| -PUT /template/policy/list/port/{id}||[**ConfigurationPolicyPortList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L37)|[**PortListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L16)|None| -GET /template/policy/list/port/{id}||[**ConfigurationPolicyPortList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L41)||[**PortListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L20)| -GET /template/policy/list/port||[**ConfigurationPolicyPortList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L45)||DataSequence[[**PortListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L20)]| -GET /template/policy/list/port/filtered||[**ConfigurationPolicyPortList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L49)||DataSequence[[**PortListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L20)]| -POST /template/policy/list/port/preview||[**ConfigurationPolicyPortList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L53)|[**PortList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L114)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/port/preview/{id}||[**ConfigurationPolicyPortList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/preferredcolorgroup||[**ConfigurationPreferredColorGroupList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L25)|[**PreferredColorGroupList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L276)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/preferredcolorgroup/{id}||[**ConfigurationPreferredColorGroupList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L29)||None| -DELETE /template/policy/list/preferredcolorgroup||[**ConfigurationPreferredColorGroupList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L33)||None| -PUT /template/policy/list/preferredcolorgroup/{id}||[**ConfigurationPreferredColorGroupList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L37)|[**PreferredColorGroupListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L16)|None| -GET /template/policy/list/preferredcolorgroup/{id}||[**ConfigurationPreferredColorGroupList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L41)||[**PreferredColorGroupListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L20)| -GET /template/policy/list/preferredcolorgroup||[**ConfigurationPreferredColorGroupList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L45)||DataSequence[[**PreferredColorGroupListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L20)]| -GET /template/policy/list/preferredcolorgroup/filtered||[**ConfigurationPreferredColorGroupList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L49)||DataSequence[[**PreferredColorGroupListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L20)]| -POST /template/policy/list/preferredcolorgroup/preview||[**ConfigurationPreferredColorGroupList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L53)|[**PreferredColorGroupList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L276)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/preferredcolorgroup/preview/{id}||[**ConfigurationPreferredColorGroupList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/prefix||[**ConfigurationPolicyPrefixList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L25)|[**PrefixList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L303)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/prefix/{id}||[**ConfigurationPolicyPrefixList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L29)||None| -DELETE /template/policy/list/prefix||[**ConfigurationPolicyPrefixList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L33)||None| -PUT /template/policy/list/prefix/{id}||[**ConfigurationPolicyPrefixList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L37)|[**PrefixListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L16)|None| -GET /template/policy/list/prefix/{id}||[**ConfigurationPolicyPrefixList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L41)||[**PrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L20)| -GET /template/policy/list/prefix||[**ConfigurationPolicyPrefixList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L45)||DataSequence[[**PrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L20)]| -GET /template/policy/list/prefix/filtered||[**ConfigurationPolicyPrefixList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L49)||DataSequence[[**PrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L20)]| -POST /template/policy/list/prefix/preview||[**ConfigurationPolicyPrefixList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L53)|[**PrefixList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L303)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/prefix/preview/{id}||[**ConfigurationPolicyPrefixList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/protocolname||[**ConfigurationPolicyProtocolNameList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L25)|[**ProtocolNameList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L119)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/protocolname/{id}||[**ConfigurationPolicyProtocolNameList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L29)||None| -DELETE /template/policy/list/protocolname||[**ConfigurationPolicyProtocolNameList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L33)||None| -PUT /template/policy/list/protocolname/{id}||[**ConfigurationPolicyProtocolNameList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L37)|[**ProtocolNameListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L16)|None| -GET /template/policy/list/protocolname/{id}||[**ConfigurationPolicyProtocolNameList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L41)||[**ProtocolNameListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L20)| -GET /template/policy/list/protocolname||[**ConfigurationPolicyProtocolNameList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L45)||DataSequence[[**ProtocolNameListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L20)]| -GET /template/policy/list/protocolname/filtered||[**ConfigurationPolicyProtocolNameList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L49)||DataSequence[[**ProtocolNameListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L20)]| -POST /template/policy/list/protocolname/preview||[**ConfigurationPolicyProtocolNameList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L53)|[**ProtocolNameList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L119)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/protocolname/preview/{id}||[**ConfigurationPolicyProtocolNameList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/region||[**ConfigurationPolicyRegionList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L19)|[**RegionList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L318)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/region/{id}||[**ConfigurationPolicyRegionList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L23)||None| -DELETE /template/policy/list/region||[**ConfigurationPolicyRegionList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L27)||None| -PUT /template/policy/list/region/{id}||[**ConfigurationPolicyRegionList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L31)|[**RegionListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L10)|None| -GET /template/policy/list/region/{id}||[**ConfigurationPolicyRegionList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L35)||[**RegionListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L14)| -GET /template/policy/list/region||[**ConfigurationPolicyRegionList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L39)||DataSequence[[**RegionListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L14)]| -GET /template/policy/list/region/filtered||[**ConfigurationPolicyRegionList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L43)||DataSequence[[**RegionListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L14)]| -POST /template/policy/list/region/preview||[**ConfigurationPolicyRegionList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L47)|[**RegionList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L318)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/region/preview/{id}||[**ConfigurationPolicyRegionList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L51)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/site/defaultsite||[**ConfigurationPolicySiteList.create_default_site_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L25)|[**SiteList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L67)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -POST /template/policy/list/site||[**ConfigurationPolicySiteList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L29)|[**SiteList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L67)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/site/{id}||[**ConfigurationPolicySiteList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L33)||None| -DELETE /template/policy/list/site||[**ConfigurationPolicySiteList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L37)||None| -PUT /template/policy/list/site/{id}||[**ConfigurationPolicySiteList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L41)|[**SiteListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L16)|None| -GET /template/policy/list/site/{id}||[**ConfigurationPolicySiteList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L45)||[**SiteListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L20)| -GET /template/policy/list/site||[**ConfigurationPolicySiteList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L49)||DataSequence[[**SiteListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L20)]| -GET /template/policy/list/site/filtered||[**ConfigurationPolicySiteList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L53)||DataSequence[[**SiteListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L20)]| -POST /template/policy/list/site/preview||[**ConfigurationPolicySiteList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L57)|[**SiteList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L67)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/site/preview/{id}||[**ConfigurationPolicySiteList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L61)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/sla||[**ConfigurationPolicySLAClassList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L25)|[**SLAClassList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L235)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/sla/{id}||[**ConfigurationPolicySLAClassList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L29)||None| -DELETE /template/policy/list/sla||[**ConfigurationPolicySLAClassList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L33)||None| -PUT /template/policy/list/sla/{id}||[**ConfigurationPolicySLAClassList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L37)|[**SLAClassListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L16)|None| -GET /template/policy/list/sla/{id}||[**ConfigurationPolicySLAClassList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L41)||[**SLAClassListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L20)| -GET /template/policy/list/sla||[**ConfigurationPolicySLAClassList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L45)||DataSequence[[**SLAClassListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L20)]| -GET /template/policy/list/sla/filtered||[**ConfigurationPolicySLAClassList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L49)||DataSequence[[**SLAClassListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L20)]| -POST /template/policy/list/sla/preview||[**ConfigurationPolicySLAClassList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L53)|[**SLAClassList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L235)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/sla/preview/{id}||[**ConfigurationPolicySLAClassList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/tloc||[**ConfigurationPolicyTLOCList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L25)|[**TLOCList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L267)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/tloc/{id}||[**ConfigurationPolicyTLOCList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L29)||None| -DELETE /template/policy/list/tloc||[**ConfigurationPolicyTLOCList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L33)||None| -PUT /template/policy/list/tloc/{id}||[**ConfigurationPolicyTLOCList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L37)|[**TLOCListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L16)|None| -GET /template/policy/list/tloc/{id}||[**ConfigurationPolicyTLOCList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L41)||[**TLOCListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L20)| -GET /template/policy/list/tloc||[**ConfigurationPolicyTLOCList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L45)||DataSequence[[**TLOCListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L20)]| -GET /template/policy/list/tloc/filtered||[**ConfigurationPolicyTLOCList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L49)||DataSequence[[**TLOCListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L20)]| -POST /template/policy/list/tloc/preview||[**ConfigurationPolicyTLOCList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L53)|[**TLOCList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L267)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/tloc/preview/{id}||[**ConfigurationPolicyTLOCList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/urlblacklist||[**ConfigurationPolicyURLBlackList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_black_list.py#L25)|[**URLBlackList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L171)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/urlblacklist/{id}||[**ConfigurationPolicyURLBlackList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_black_list.py#L29)||None| -DELETE /template/policy/list/urlblacklist||[**ConfigurationPolicyURLBlackList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_black_list.py#L33)||None| -PUT /template/policy/list/urlblacklist/{id}||[**ConfigurationPolicyURLBlackList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_black_list.py#L37)|[**URLBlackListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_black_list.py#L16)|None| -GET /template/policy/list/urlblacklist/{id}||[**ConfigurationPolicyURLBlackList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_black_list.py#L41)||[**URLBlackListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_black_list.py#L20)| -GET /template/policy/list/urlblacklist||[**ConfigurationPolicyURLBlackList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_black_list.py#L45)||DataSequence[[**URLBlackListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_black_list.py#L20)]| -GET /template/policy/list/urlblacklist/filtered||[**ConfigurationPolicyURLBlackList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_black_list.py#L49)||DataSequence[[**URLBlackListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_black_list.py#L20)]| -POST /template/policy/list/urlblacklist/preview||[**ConfigurationPolicyURLBlackList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_black_list.py#L53)|[**URLBlackList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L171)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/urlblacklist/preview/{id}||[**ConfigurationPolicyURLBlackList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_black_list.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/urlwhitelist||[**ConfigurationPolicyURLWhiteList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_white_list.py#L25)|[**URLWhiteList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L166)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/urlwhitelist/{id}||[**ConfigurationPolicyURLWhiteList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_white_list.py#L29)||None| -DELETE /template/policy/list/urlwhitelist||[**ConfigurationPolicyURLWhiteList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_white_list.py#L33)||None| -PUT /template/policy/list/urlwhitelist/{id}||[**ConfigurationPolicyURLWhiteList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_white_list.py#L37)|[**URLWhiteListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_white_list.py#L16)|None| -GET /template/policy/list/urlwhitelist/{id}||[**ConfigurationPolicyURLWhiteList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_white_list.py#L41)||[**URLWhiteListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_white_list.py#L20)| -GET /template/policy/list/urlwhitelist||[**ConfigurationPolicyURLWhiteList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_white_list.py#L45)||DataSequence[[**URLWhiteListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_white_list.py#L20)]| -GET /template/policy/list/urlwhitelist/filtered||[**ConfigurationPolicyURLWhiteList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_white_list.py#L49)||DataSequence[[**URLWhiteListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_white_list.py#L20)]| -POST /template/policy/list/urlwhitelist/preview||[**ConfigurationPolicyURLWhiteList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_white_list.py#L53)|[**URLWhiteList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L166)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/urlwhitelist/preview/{id}||[**ConfigurationPolicyURLWhiteList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_white_list.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/vpn||[**ConfigurationPolicyVPNList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L27)|[**VPNList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L80)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/vpn/{id}||[**ConfigurationPolicyVPNList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L31)||None| -DELETE /template/policy/list/vpn||[**ConfigurationPolicyVPNList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L35)||None| -PUT /template/policy/list/vpn/{id}||[**ConfigurationPolicyVPNList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L39)|[**VPNListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L18)|None| -GET /template/policy/list/vpn/{id}||[**ConfigurationPolicyVPNList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L43)||[**VPNListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L22)| -GET /template/policy/list/vpn||[**ConfigurationPolicyVPNList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L47)||DataSequence[[**VPNListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L22)]| -GET /template/policy/list/vpn/filtered||[**ConfigurationPolicyVPNList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L51)||DataSequence[[**VPNListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L22)]| -POST /template/policy/list/vpn/preview||[**ConfigurationPolicyVPNList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L55)|[**VPNList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L80)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/vpn/preview/{id}||[**ConfigurationPolicyVPNList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/list/zone||[**ConfigurationPolicyZoneList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L25)|[**ZoneList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L93)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L15)| -DELETE /template/policy/list/zone/{id}||[**ConfigurationPolicyZoneList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L29)||None| -DELETE /template/policy/list/zone||[**ConfigurationPolicyZoneList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L33)||None| -PUT /template/policy/list/zone/{id}||[**ConfigurationPolicyZoneList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L37)|[**ZoneListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L16)|None| -GET /template/policy/list/zone/{id}||[**ConfigurationPolicyZoneList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L41)||[**ZoneListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L20)| -GET /template/policy/list/zone||[**ConfigurationPolicyZoneList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L45)||DataSequence[[**ZoneListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L20)]| -GET /template/policy/list/zone/filtered||[**ConfigurationPolicyZoneList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L49)||DataSequence[[**ZoneListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L20)]| -POST /template/policy/list/zone/preview||[**ConfigurationPolicyZoneList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L53)|[**ZoneList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L93)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -GET /template/policy/list/zone/preview/{id}||[**ConfigurationPolicyZoneList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L57)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L29)| -POST /template/policy/security||[**ConfigurationSecurityTemplatePolicy.create_security_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/security_template.py#L15)|[**SecurityPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/security.py#L99), [**UnifiedSecurityPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/security.py#L134)|None| -DELETE /template/policy/security/{id}||[**ConfigurationSecurityTemplatePolicy.delete_security_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/security_template.py#L19)|None|None| -PUT /template/policy/security/{id}||[**ConfigurationSecurityTemplatePolicy.edit_security_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/security_template.py#L23)|[**SecurityPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/security.py#L99), [**UnifiedSecurityPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/security.py#L134)|[**SecurityPolicyEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/security.py#L168)| -GET /template/policy/security||[**ConfigurationSecurityTemplatePolicy.generate_security_template_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/security_template.py#L36)||DataSequence[[**SecurityPolicyInfoRoot**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/security.py#L187)]| -GET /template/policy/security/definition/{id}||[**ConfigurationSecurityTemplatePolicy.get_security_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/security_template.py#L48)||[**SecurityPolicyRoot**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/security.py#L164)| -POST /template/policy/vedge||[**ConfigurationVEdgeTemplatePolicy.create_vedge_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vedge_template.py#L20)|[**LocalizedPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/localized.py#L73)|[**PolicyId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy.py#L8)| -DELETE /template/policy/vedge/{id}||[**ConfigurationVEdgeTemplatePolicy.delete_vedge_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vedge_template.py#L24)||None| -PUT /template/policy/vedge/{id}||[**ConfigurationVEdgeTemplatePolicy.edit_vedge_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vedge_template.py#L28)|[**LocalizedPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/localized.py#L73)|[**LocalizedPolicyEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/localized.py#L123)| -GET /template/policy/vedge||[**ConfigurationVEdgeTemplatePolicy.generate_policy_template_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vedge_template.py#L32)||DataSequence[[**LocalizedPolicyInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/localized.py#L119)]| -GET /template/policy/vedge/devices/{id}||[**ConfigurationVEdgeTemplatePolicy.get_device_list_by_policy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vedge_template.py#L36)||DataSequence[[**LocalizedPolicyDeviceInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/localized.py#L129)]| -GET /template/policy/vedge/devices||[**ConfigurationVEdgeTemplatePolicy.get_vedge_policy_device_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vedge_template.py#L40)||DataSequence[[**LocalizedPolicyDeviceInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/localized.py#L129)]| -GET /template/policy/vedge/definition/{id}||[**ConfigurationVEdgeTemplatePolicy.get_vedge_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vedge_template.py#L44)||[**LocalizedPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/localized.py#L73)| -GET /template/policy/assembly/vedge/{id}||[**ConfigurationVEdgeTemplatePolicy.preview_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vedge_template.py#L48)||[**PolicyPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy.py#L92)| -POST /template/policy/vsmart/activate/{id}||[**ConfigurationVSmartTemplatePolicy.activate_policy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L30)|None|[**ActivateDeactivateTaskId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L25)| -GET /template/policy/vsmart/connectivity/status||[**ConfigurationVSmartTemplatePolicy.check_vsmart_connectivity_status**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L40)||DataSequence[[**VSmartConnectivityStatus**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L13)]| -POST /template/policy/vsmart||[**ConfigurationVSmartTemplatePolicy.create_vsmart_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L44)|[**CentralizedPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/centralized.py#L181)|[**PolicyId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy.py#L8)| -POST /template/policy/vsmart/deactivate/{id}||[**ConfigurationVSmartTemplatePolicy.deactivate_policy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L48)|None|[**ActivateDeactivateTaskId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L25)| -DELETE /template/policy/vsmart/{id}||[**ConfigurationVSmartTemplatePolicy.delete_vsmart_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L54)||None| -PUT /template/policy/vsmart/central/{id}||[**ConfigurationVSmartTemplatePolicy.edit_template_without_lock_checks**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L58)|[**CentralizedPolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/centralized.py#L218)|None| -PUT /template/policy/vsmart/{id}||[**ConfigurationVSmartTemplatePolicy.edit_vsmart_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L62)|[**CentralizedPolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/centralized.py#L218)|None| -GET /template/policy/vsmart||[**ConfigurationVSmartTemplatePolicy.generate_vsmart_policy_template_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L66)||DataSequence[[**CentralizedPolicyInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/centralized.py#L222)]| -GET /template/policy/vsmart/definition/{id}||[**ConfigurationVSmartTemplatePolicy.get_template_by_policy_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L70)||[**CentralizedPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/centralized.py#L181)| -GET /device/action/remote-server||[**ConfigurationSoftwareActions.get_list_of_remote_servers**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L162)||DataSequence[[**RemoteServerInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L68)]| -POST /device/action/remote-server||[**ConfigurationSoftwareActions.add_new_remote_server**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L166)|[**RemoteServer**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L43)|None| -GET /device/action/remote-server/{id}||[**ConfigurationSoftwareActions.get_remote_server**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L170)||[**RemoteServerInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L68)| -PUT /device/action/remote-server/{id}||[**ConfigurationSoftwareActions.update_remote_server**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L174)|[**SoftwareRemoteServer**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L98)|None| -DELETE /device/action/remote-server/{id}||[**ConfigurationSoftwareActions.remove_remote_server**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L178)||None| -GET /device/action/software||[**ConfigurationSoftwareActions.get_software_images**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L182)||DataSequence[[**SoftwareImageDetails**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L109)]| -POST /device/action/software||[**ConfigurationSoftwareActions.upload_software_from_remote_server**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L186)|[**SoftwareRemoteServer**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L98)|None| -DELETE /device/action/software/{version_id}||[**ConfigurationSoftwareActions.delete_software_from_software_repository**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L190)||None| -GET /device/action/software/images||[**ConfigurationSoftwareActions.get_list_of_all_images**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L194)||DataSequence[[**SoftwareImageDetails**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L109)]| -GET /device/action/status/{task_id}||[**ConfigurationDashboardStatus.find_status**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_dashboard_status.py#L89)||[**TaskData**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_dashboard_status.py#L76)| -GET /device/action/status/tasks||[**ConfigurationDashboardStatus.find_running_tasks**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_dashboard_status.py#L93)||[**TasksData**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_dashboard_status.py#L84)| -GET /device/action/ztp/upgrade/setting||[**ConfigurationDeviceActions.get_ztp_upgrade_config_setting**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_actions.py#L74)||DataSequence[[**ZTPUpgradeSettings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_actions.py#L10)]| -POST /system/device/{device_uuid}/unlock|>=20.9|[**ConfigurationDeviceInventory.unlock**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L271)|[**DeviceUnlockPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L18)|[**DeviceUnlockResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L23)| -POST /system/device||[**ConfigurationDeviceInventory.create_device**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L276)|[**DeviceCreationPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L30)|None| -DELETE /system/device/{uuid}||[**ConfigurationDeviceInventory.delete_device**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L280)||[**DeviceDeletionResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L42)| -GET /system/device/{device_category}||[**ConfigurationDeviceInventory.get_device_details**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L287)||DataSequence[[**DeviceDetailsResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L55)]| -POST /system/device/smartaccount/sync||[**ConfigurationDeviceInventory.sync_devices_from_smart_account**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L293)|[**SmartAccountSyncParams**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L208)|[**ProcessId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L216)| -POST /system/device/fileupload||[**ConfigurationDeviceInventory.upload_wan_edge_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L297)|[**SerialFilePayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L220)|[**UploadSerialFileResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L252)| -GET /system/device/bootstrap/device/{uuid}||[**ConfigurationDeviceInventory.generate_bootstrap_configuration**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L301)||[**BoostrapConfiguration**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L244)| -POST /template/device/config/config/||[**ConfigurationDeviceTemplate.get_device_configuration_preview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_template.py#L19)|[**FeatureToCLIPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_template.py#L10)|str|PROVIDER -GET /v1/feature-profile/sdwan/system/aaa/schema|>=20.9|[**ConfigurationFeatureProfile.get_sdwan_system_aaa_parcel_schema**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L39)||None| -GET /v1/feature-profile/sdwan/transport/cellular-controller/schema|>=20.9|[**ConfigurationFeatureProfile.get_sdwan_transport_cellular_controller_parcel_schema**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L44)||None| -GET /v1/feature-profile/sdwan/transport|>=20.9|[**ConfigurationFeatureProfile.get_sdwan_transport_feature_profiles**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L49)|Optional[[**GetFeatureProfilesPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L33)]|DataSequence[[**FeatureProfileInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L77)]| -POST /v1/feature-profile/sdwan/transport|>=20.9|[**ConfigurationFeatureProfile.create_sdwan_transport_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L56)|[**FeatureProfileCreationPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L109)|[**FeatureProfileCreationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L120)| -DELETE /v1/feature-profile/sdwan/transport/{transport_id}|>=20.9|[**ConfigurationFeatureProfile.delete_sdwan_transport_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L63)||None| -GET /v1/feature-profile/sdwan/system|>=20.9|[**ConfigurationFeatureProfile.get_sdwan_system_feature_profiles**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L68)|Optional[[**GetFeatureProfilesPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L33)]|DataSequence[[**FeatureProfileInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L77)]| -POST /v1/feature-profile/sdwan/system|>=20.9|[**ConfigurationFeatureProfile.create_sdwan_system_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L75)|[**FeatureProfileCreationPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L109)|[**FeatureProfileCreationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L120)| -DELETE /v1/feature-profile/sdwan/system/{system_id}|>=20.9|[**ConfigurationFeatureProfile.delete_sdwan_system_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L82)||None| -POST /v1/feature-profile/sdwan/system/{system_id}/aaa|>=20.9|[**ConfigurationFeatureProfile.create_aaa_profile_parcel_for_system**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L87)|[**_ParcelBase**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/api/configuration_groups/parcel.py#L9)|[**ParcelId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L29)| -POST /v1/feature-profile/sdwan/transport/{transport_id}/cellular-controller|>=20.9|[**ConfigurationFeatureProfile.create_cellular_controller_profile_parcel_for_transport**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L92)|[**_ParcelBase**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/api/configuration_groups/parcel.py#L9)|[**ParcelId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L29)| -GET /v1/feature-profile/sdwan|>=20.9|[**ConfigurationFeatureProfile.get_sdwan_feature_profiles**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L99)||DataSequence[[**FeatureProfileInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L77)]| -POST /v1/feature-profile/sd-routing/cli|>=20.13|[**SDRoutingConfigurationFeatureProfile.create_cli_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L106)|[**FeatureProfileCreationPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L109)|[**FeatureProfileCreationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L120)| -POST /v1/feature-profile/sd-routing/cli/{cli_fp_id}/full-config|>=20.13|[**SDRoutingConfigurationFeatureProfile.create_cli_full_config_parcel**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L111)|[**FullConfigParcel**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/feature_profile_parcel.py#L10)|[**ParcelId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L29)| -DELETE /v1/feature-profile/sd-routing/cli/{cli_fp_id}|>=20.13|[**SDRoutingConfigurationFeatureProfile.delete_cli_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L116)||None| -DELETE /v1/feature-profile/sd-routing/cli/{cli_fp_id}/full-config/{parcel_id}|>=20.13|[**SDRoutingConfigurationFeatureProfile.delete_cli_full_config_parcel**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L121)||None| -PUT /v1/feature-profile/sd-routing/cli/{cli_fp_id}/full-config/{parcel_id}|>=20.13|[**SDRoutingConfigurationFeatureProfile.edit_cli_full_config_parcel**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L126)|[**FullConfigParcel**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/feature_profile_parcel.py#L10)|None| -GET /v1/feature-profile/sd-routing/cli|>=20.13|[**SDRoutingConfigurationFeatureProfile.get_cli_feature_profiles**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L131)|Optional[[**GetFeatureProfilesPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L33)]|DataSequence[[**FeatureProfileInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L77)]| -PUT /v1/config-group/{config_group_id}/device/associate|>=20.9|[**ConfigurationGroup.associate**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L120)|[**ConfigGroupAssociatePayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L59)|None| -POST /v1/config-group|>=20.9|[**ConfigurationGroup.create_config_group**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L125)|[**ConfigGroupCreationPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L18)|[**ConfigGroupCreationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L106)| -POST /v1/config-group/{config_group_id}/device/variables|>=20.9|[**ConfigurationGroup.create_variables**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L130)|[**ConfigGroupVariablesCreatePayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L63)|[**ConfigGroupVariablesCreateResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L83)| -DELETE /v1/config-group/{config_group_id}|>=20.9|[**ConfigurationGroup.delete_config_group**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L137)||None| -POST /v1/config-group/{config_group_id}/device/deploy|>=20.9|[**ConfigurationGroup.deploy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L142)|[**ConfigGroupDeployPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L94)|[**ConfigGroupDeployResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L98)| -DELETE /v1/config-group/{config_group_id}/device/associate|>=20.9|[**ConfigurationGroup.disassociate**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L147)|[**ConfigGroupAssociatePayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L59)|[**ConfigGroupDisassociateResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L102)| -PUT /v1/config-group/{config_group_id}|>=20.9|[**ConfigurationGroup.edit_config_group**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L154)|[**ConfigGroupEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L48)|[**ConfigGroupEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L114)| -GET /v1/config-group|>=20.9|[**ConfigurationGroup.get**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L159)||DataSequence[[**ConfigGroup**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L37)]| -PUT /v1/config-group/{config_group_id}/device/variables|>=20.9|[**ConfigurationGroup.update_variables**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L164)|[**ConfigGroupVariablesEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L89)|None| -GET /settings/configuration/{setting_type}||[**ConfigurationSettings.get_configuration_by_setting_type**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L355)||None| -GET /settings/configuration/organization||[**ConfigurationSettings.get_organizations**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L359)||DataSequence[[**Organization**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L42)]| -GET /settings/configuration/device||[**ConfigurationSettings.get_devices**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L363)||DataSequence[[**Device**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L51)]|PROVIDER, SINGLE_TENANT -GET /settings/configuration/emailNotificationSettings||[**ConfigurationSettings.get_email_notification_settings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L368)||DataSequence[[**EmailNotificationSettings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L59)]| -GET /settings/configuration/hardwarerootca||[**ConfigurationSettings.get_hardware_root_cas**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L372)||DataSequence[[**HardwareRootCA**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L63)]|PROVIDER, SINGLE_TENANT -GET /settings/configuration/certificate||[**ConfigurationSettings.get_certificates**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L377)||DataSequence[[**Certificate**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L71)]|PROVIDER, SINGLE_TENANT -GET /settings/configuration/vedgecloud||[**ConfigurationSettings.get_vedge_cloud**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L382)||DataSequence[[**VEdgeCloud**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L83)]|PROVIDER, SINGLE_TENANT -GET /settings/configuration/crlSetting||[**ConfigurationSettings.get_clr_settings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L387)||DataSequence[[**CRLSettings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L314)]|PROVIDER, SINGLE_TENANT -GET /settings/configuration/banner||[**ConfigurationSettings.get_banner**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L392)||DataSequence[[**Banner**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L87)]| -GET /settings/configuration/proxyHttpServer||[**ConfigurationSettings.get_proxy_http_servers**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L396)||DataSequence[[**ProxyHTTPServer**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L95)]| -GET /settings/configuration/reverseproxy||[**ConfigurationSettings.get_reverse_proxies**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L400)||DataSequence[[**ReverseProxy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L104)]| -GET /settings/configuration/cloudx||[**ConfigurationSettings.get_cloudx**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L404)||DataSequence[[**CloudX**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L108)]| -GET /settings/configuration/manageEncryptedPassword||[**ConfigurationSettings.get_manage_encrypted_password**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L408)||DataSequence[[**ManageEncryptedPassword**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L112)]| -GET /settings/configuration/cloudservices||[**ConfigurationSettings.get_cloudservices**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L412)||DataSequence[[**CloudServices**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L119)]|PROVIDER, SINGLE_TENANT -GET /settings/configuration/clientSessionTimeout||[**ConfigurationSettings.get_client_session_timeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L417)||DataSequence[[**ClientSessionTimeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L132)]| -GET /settings/configuration/sessionLifeTime||[**ConfigurationSettings.get_session_life_time**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L421)||DataSequence[[**SessionLifeTime**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L140)]| -GET /settings/configuration/serverSessionTimeout||[**ConfigurationSettings.get_server_session_timeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L425)||DataSequence[[**ServerSessionTimeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L147)]| -GET /settings/configuration/maxSessionsPerUser||[**ConfigurationSettings.get_max_sessions_per_user**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L429)||DataSequence[[**MaxSessionsPerUser**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L154)]| -GET /settings/configuration/passwordPolicy||[**ConfigurationSettings.get_password_policy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L433)||DataSequence[[**PasswordPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L161)]| -GET /settings/configuration/vmanagedatastream||[**ConfigurationSettings.get_vmanage_data_stream**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L437)||DataSequence[[**VManageDataStream**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L171)]|PROVIDER, SINGLE_TENANT -GET /settings/configuration/dataCollectionOnNotification||[**ConfigurationSettings.get_data_collection_on_notification**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L442)||DataSequence[[**DataCollectionOnNotification**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L181)]|PROVIDER, SINGLE_TENANT -GET /settings/configuration/sdWanTelemetry||[**ConfigurationSettings.get_sdwan_telemetry**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L447)||DataSequence[[**SDWANTelemetry**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L185)]|PROVIDER, SINGLE_TENANT -GET /management/statsconfig||[**ConfigurationSettings.get_stats_config**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L452)||DataSequence[[**StatsOperation**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L189)]|PROVIDER, SINGLE_TENANT -GET /settings/configuration/spMetadata||[**ConfigurationSettings.get_sp_metadata**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L457)||str| -GET /management/elasticsearch/index/size||[**ConfigurationSettings.get_elasticsearch_db_size**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L461)||DataSequence[[**ElasticSearchDBSize**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L209)]| -GET /settings/configuration/googleMapKey||[**ConfigurationSettings.get_google_map_key**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L465)||DataSequence[[**GoogleMapKey**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L217)]| -GET /settings/configuration/maintenanceWindow||[**ConfigurationSettings.get_maintenance_window**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L469)||DataSequence[[**MaintenanceWindow**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L199)]|PROVIDER, SINGLE_TENANT -GET /settings/configuration/softwareMaintenance||[**ConfigurationSettings.get_software_install_timeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L474)||DataSequence[[**SoftwareInstallTimeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L221)]| -GET /settings/configuration/credentials||[**ConfigurationSettings.get_ips_signature_settings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L478)||DataSequence[[**IPSSignatureSettings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L251)]| -GET /settings/configuration/smartaccountcredentials||[**ConfigurationSettings.get_smart_account_credentials**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L482)||DataSequence[[**SmartAccountCredentials**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L262)]|PROVIDER, SINGLE_TENANT -GET /settings/configuration/pnpConnectSync||[**ConfigurationSettings.get_pnp_connect_sync**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L487)||DataSequence[[**PnPConnectSync**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L267)]|PROVIDER, SINGLE_TENANT -GET /settings/configuration/claimDevice||[**ConfigurationSettings.get_claim_device**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L492)||DataSequence[[**ClaimDevice**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L271)]| -GET /settings/configuration/walkme||[**ConfigurationSettings.get_walkme**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L496)||DataSequence[[**WalkMe**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L275)]| -GET /settings/configuration/smartLicensing||[**ConfigurationSettings.get_smart_licensing_settings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L500)||DataSequence[[**SmartLicensingSetting**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L283)]|PROVIDER, SINGLE_TENANT -PUT /settings/configuration/{setting_type}||[**ConfigurationSettings.edit_configuration_by_setting_type**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L513)|None|None| -PUT /settings/configuration/organization||[**ConfigurationSettings.edit_organizations**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L517)|[**Organization**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L42)|DataSequence[[**Organization**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L42)]| -PUT /settings/configuration/device||[**ConfigurationSettings.edit_devices**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L521)|[**Device**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L51)|DataSequence[[**Device**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L51)]|PROVIDER, SINGLE_TENANT -PUT /settings/configuration/emailNotificationSettings||[**ConfigurationSettings.edit_email_notification_settings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L526)|[**EmailNotificationSettings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L59)|DataSequence[[**EmailNotificationSettings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L59)]| -PUT /settings/configuration/hardwarerootca||[**ConfigurationSettings.edit_hardware_root_cas**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L532)|[**HardwareRootCA**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L63)|DataSequence[[**HardwareRootCA**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L63)]|PROVIDER, SINGLE_TENANT -PUT /settings/configuration/certificate||[**ConfigurationSettings.edit_certificates**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L537)|[**Certificate**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L71)|DataSequence[[**Certificate**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L71)]|PROVIDER, SINGLE_TENANT -PUT /settings/configuration/vedgecloud||[**ConfigurationSettings.edit_vedge_cloud**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L542)|[**VEdgeCloud**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L83)|DataSequence[[**VEdgeCloud**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L83)]|PROVIDER, SINGLE_TENANT -PUT /settings/configuration/banner||[**ConfigurationSettings.edit_banner**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L547)|[**Banner**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L87)|DataSequence[[**Banner**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L87)]| -PUT /settings/configuration/proxyHttpServer||[**ConfigurationSettings.edit_proxy_http_servers**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L551)|[**ProxyHTTPServer**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L95)|DataSequence[[**ProxyHTTPServer**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L95)]| -PUT /settings/configuration/reverseproxy||[**ConfigurationSettings.edit_reverse_proxies**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L555)|[**ReverseProxy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L104)|DataSequence[[**ReverseProxy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L104)]| -PUT /settings/configuration/cloudx||[**ConfigurationSettings.edit_cloudx**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L559)|[**CloudX**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L108)|DataSequence[[**CloudX**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L108)]| -PUT /settings/configuration/manageEncryptedPassword||[**ConfigurationSettings.edit_manage_encrypted_password**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L563)|[**ManageEncryptedPassword**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L112)|DataSequence[[**ManageEncryptedPassword**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L112)]| -PUT /settings/configuration/cloudservices||[**ConfigurationSettings.edit_cloudservices**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L567)|[**CloudServices**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L119)|DataSequence[[**CloudServices**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L119)]|PROVIDER, SINGLE_TENANT -PUT /settings/configuration/clientSessionTimeout||[**ConfigurationSettings.edit_client_session_timeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L572)|[**ClientSessionTimeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L132)|DataSequence[[**ClientSessionTimeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L132)]| -PUT /settings/configuration/sessionLifeTime||[**ConfigurationSettings.edit_session_life_time**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L576)|[**SessionLifeTime**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L140)|DataSequence[[**SessionLifeTime**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L140)]| -PUT /settings/configuration/serverSessionTimeout||[**ConfigurationSettings.edit_server_session_timeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L580)|[**ServerSessionTimeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L147)|DataSequence[[**ServerSessionTimeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L147)]| -PUT /settings/configuration/maxSessionsPerUser||[**ConfigurationSettings.edit_max_sessions_per_user**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L584)|[**MaxSessionsPerUser**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L154)|DataSequence[[**MaxSessionsPerUser**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L154)]| -PUT /settings/configuration/passwordPolicy||[**ConfigurationSettings.edit_password_policy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L588)|[**PasswordPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L161)|DataSequence[[**PasswordPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L161)]| -PUT /settings/configuration/vmanagedatastream||[**ConfigurationSettings.edit_vmanage_data_stream**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L592)|[**VManageDataStream**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L171)|DataSequence[[**VManageDataStream**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L171)]|PROVIDER, SINGLE_TENANT -PUT /settings/configuration/dataCollectionOnNotification||[**ConfigurationSettings.edit_data_collection_on_notification**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L597)|[**DataCollectionOnNotification**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L181)|DataSequence[[**DataCollectionOnNotification**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L181)]|PROVIDER, SINGLE_TENANT -PUT /settings/configuration/sdWanTelemetry||[**ConfigurationSettings.edit_sdwan_telemetry**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L604)|[**SDWANTelemetry**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L185)|DataSequence[[**SDWANTelemetry**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L185)]|PROVIDER, SINGLE_TENANT -POST /management/statsconfig||[**ConfigurationSettings.edit_stats_config**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L609)|[**StatsConfig**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L306)|DataSequence[[**StatsOperation**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L189)]|PROVIDER, SINGLE_TENANT -PUT /settings/configuration/spMetadata||[**ConfigurationSettings.edit_sp_metadata**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L614)|str|str| -PUT /management/elasticsearch/index/size||[**ConfigurationSettings.edit_elasticsearch_db_size**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L618)|[**ElasticSearchDBSize**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L209)|DataSequence[[**ElasticSearchDBSize**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L209)]| -PUT /settings/configuration/googleMapKey||[**ConfigurationSettings.edit_google_map_key**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L622)|[**GoogleMapKey**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L217)|DataSequence[[**GoogleMapKey**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L217)]| -PUT /settings/configuration/maintenanceWindow||[**ConfigurationSettings.edit_maintenance_window**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L626)|[**MaintenanceWindow**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L199)|DataSequence[[**MaintenanceWindow**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L199)]|PROVIDER, SINGLE_TENANT -PUT /settings/configuration/softwareMaintenance||[**ConfigurationSettings.edit_software_install_timeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L631)|[**SoftwareInstallTimeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L221)|DataSequence[[**SoftwareInstallTimeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L221)]| -PUT /settings/configuration/credentials||[**ConfigurationSettings.edit_ips_signature_settings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L635)|[**IPSSignatureSettings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L251)|DataSequence[[**IPSSignatureSettings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L251)]| -PUT /settings/configuration/smartaccountcredentials||[**ConfigurationSettings.edit_smart_account_credentials**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L639)|[**SmartAccountCredentials**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L262)|DataSequence[[**SmartAccountCredentials**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L262)]|PROVIDER, SINGLE_TENANT -PUT /settings/configuration/pnpConnectSync||[**ConfigurationSettings.edit_pnp_connect_sync**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L644)|[**PnPConnectSync**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L267)|DataSequence[[**PnPConnectSync**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L267)]|PROVIDER, SINGLE_TENANT -PUT /settings/configuration/claimDevice||[**ConfigurationSettings.edit_claim_device**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L649)|[**ClaimDevice**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L271)|DataSequence[[**ClaimDevice**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L271)]| -PUT /settings/configuration/walkme||[**ConfigurationSettings.edit_walkme**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L653)|[**WalkMe**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L275)|DataSequence[[**WalkMe**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L275)]| -PUT /settings/configuration/smartLicensing||[**ConfigurationSettings.edit_smart_licensing_settings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L657)|[**SmartLicensingSetting**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L283)|DataSequence[[**SmartLicensingSetting**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L283)]|PROVIDER, SINGLE_TENANT -GET /app/json/application_protocol.json||[**MiscellaneousEndpoints.get_application_protocols**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/misc.py#L12)||DataSequence[[**ApplicationProtocolMap**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/misc/application_protocols.py#L26)]| -GET /device/tier||[**MonitoringDeviceDetails.get_tiers**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_device_details.py#L157)||DataSequence[[**Tier**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_device_details.py#L15)]| -GET /device||[**MonitoringDeviceDetails.list_all_devices**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_device_details.py#L181)||DataSequence[[**DeviceData**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_device_details.py#L35)]| -GET /statistics/settings/disable/devicelist/{indexName}||[**MonitoringStatus.get_disabled_device_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L56)||[**DisabledDeviceListResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L43)| -PUT /statistics/settings/disable/devicelist/{indexName}||[**MonitoringStatus.update_statistics_device_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L60)|[**DisabledDeviceList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L39)|[**UpdateIndexResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L47)| -GET /statistics/settings/status||[**MonitoringStatus.get_statistics_settings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L64)||DataSequence[[**Status**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L21)]| -PUT /statistics/settings/status||[**MonitoringStatus.update_statistics_settings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L68)|list[[**UpdateStatus**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L27)]|DataSequence[[**Status**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L21)]| -GET /statistics/settings/status/device||[**MonitoringStatus.get_enabled_index_for_device**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L72)||[**EnabledIndexDeviceListResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L51)| -GET /device/reboothistory||[**RealTimeMonitoringRebootHistory.create_reboot_history_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/real_time_monitoring/reboot_history.py#L23)||DataSequence[[**RebootEntry**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/real_time_monitoring/reboot_history.py#L11)]| -GET /sdavc/cloudconnector||[**SDAVCCloudConnector.get_cloud_connector**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/sdavc_cloud_connector.py#L28)||[**CloudConnector**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/sdavc_cloud_connector.py#L10)| -GET /tenantbackup/list||[**TenantBackupRestore.list_tenant_backup**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_backup_restore.py#L35)||[**BackupFiles**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_backup_restore.py#L10)|PROVIDER_AS_TENANT, TENANT -POST /tenant||[**TenantManagement.create_tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L118)|[**Tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/tenant.py#L21)|[**Tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/tenant.py#L21)|PROVIDER -POST /tenant/async||[**TenantManagement.create_tenant_async**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L123)|[**Tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/tenant.py#L21)|[**TenantTaskId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L21)|PROVIDER -POST /tenant/bulk/async|>=20.4|[**TenantManagement.create_tenant_async_bulk**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L128)|list[[**Tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/tenant.py#L21)]|[**TenantTaskId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L21)|PROVIDER -DELETE /tenant/{tenant_id}/delete||[**TenantManagement.delete_tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L134)|[**TenantDeleteRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L12)|None|PROVIDER -DELETE /tenant/bulk/async|>=20.4|[**TenantManagement.delete_tenant_async_bulk**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L139)|[**TenantBulkDeleteRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L16)|[**TenantTaskId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L21)|PROVIDER -GET /tenantstatus||[**TenantManagement.get_all_tenant_statuses**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L149)||DataSequence[[**TenantStatus**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L54)]|PROVIDER, PROVIDER_AS_TENANT -GET /tenant||[**TenantManagement.get_all_tenants**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L154)||DataSequence[[**Tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/tenant.py#L21)]|PROVIDER, PROVIDER_AS_TENANT -GET /tenant/{tenant_id}||[**TenantManagement.get_tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L159)||[**Tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/tenant.py#L21)|PROVIDER, PROVIDER_AS_TENANT -GET /tenant/vsmart/capacity||[**TenantManagement.get_tenant_hosting_capacity_on_vsmarts**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L164)||DataSequence[[**vSmartTenantCapacity**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L103)]|PROVIDER -GET /tenant/vsmart||[**TenantManagement.get_tenant_vsmart_mapping**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L169)||[**vSmartTenantMap**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L109)|PROVIDER, PROVIDER_AS_TENANT -PUT /tenant/{tenant_id}||[**TenantManagement.update_tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L182)|[**TenantUpdateRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L63)|[**Tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/tenant.py#L21)|PROVIDER -PUT /tenant/{tenant_id}/vsmart||[**TenantManagement.update_tenant_vsmart_placement**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L187)|[**vSmartPlacementUpdateRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L98)|None|PROVIDER -POST /tenant/{tenant_id}/vsessionid||[**TenantManagement.vsession_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L192)||[**vSessionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L113)|PROVIDER -GET /tenantmigration/download/{path}|>=20.6|[**TenantMigration.download_tenant_data**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L48)||bytes|PROVIDER, SINGLE_TENANT -POST /tenantmigration/export|>=20.6|[**TenantMigration.export_tenant_data**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L54)|[**TenantExport**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/tenant.py#L52)|[**ExportInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L16)|PROVIDER, SINGLE_TENANT -GET /tenantmigration/migrationToken|>=20.6|[**TenantMigration.get_migration_token**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L60)||str|PROVIDER, SINGLE_TENANT -POST /tenantmigration/import|<20.13,>=20.6|[**TenantMigration.import_tenant_data**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L66)|[**MigrationFile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L38)|[**ImportInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L20)|PROVIDER, SINGLE_TENANT -POST /tenantmigration/import/{migration_key}|>=20.13|[**TenantMigration.import_tenant_data_with_key**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L72)|[**MigrationFile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L38)|[**ImportInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L20)|PROVIDER, SINGLE_TENANT -POST /tenantmigration/networkMigration|>=20.6|[**TenantMigration.migrate_network**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L78)|str|[**MigrationInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L34)|PROVIDER, SINGLE_TENANT -POST /device/tools/nping/{device_ip}||[**TroubleshootingToolsDeviceConnectivity.nping_device**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/troubleshooting_tools/device_connectivity.py#L92)|[**NPingRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/troubleshooting_tools/device_connectivity.py#L16)|[**NPingResult**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/troubleshooting_tools/device_connectivity.py#L35)| +POST /admin/user||[**AdministrationUserAndGroup.create_user**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L209)|[**User**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L13)|None| +POST /admin/usergroup||[**AdministrationUserAndGroup.create_user_group**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L213)|[**UserGroup**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L84)|None| +DELETE /admin/user/{username}||[**AdministrationUserAndGroup.delete_user**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L225)||None| +DELETE /admin/usergroup/{group_name}||[**AdministrationUserAndGroup.delete_user_group**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L229)||None| +GET /admin/user/userAuthType||[**AdministrationUserAndGroup.find_user_auth_type**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L245)||[**UserAuthType**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L72)| +GET /admin/usergroup||[**AdministrationUserAndGroup.find_user_groups**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L249)||DataSequence[[**UserGroup**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L84)]| +GET /admin/user/role||[**AdministrationUserAndGroup.find_user_role**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L257)||[**UserRole**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L67)| +GET /admin/user||[**AdministrationUserAndGroup.find_users**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L261)||DataSequence[[**User**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L13)]| +GET /admin/user/activeSessions||[**AdministrationUserAndGroup.get_active_sessions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L265)||DataSequence[[**ActiveSession**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L127)]| +DELETE /admin/user/removeSessions||[**AdministrationUserAndGroup.remove_sessions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L277)|[**SessionsDeleteRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L150)|[**InvalidateSessionMessage**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L163)| +POST /admin/user/reset||[**AdministrationUserAndGroup.reset_user**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L281)|[**UserResetRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L122)|None| +GET /admin/resourcegroup|<20.13,>20.4|[**AdministrationUserAndGroup.find_resource_groups**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L285)||DataSequence[[**ResourceGroup**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L172)]| +POST /admin/resourcegroup/switch|<20.13,>20.4|[**AdministrationUserAndGroup.switch_resource_group**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L290)|[**ResourceGroupSwitchRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L195)|None| +PUT /admin/resourcegroup/{group_id}|<20.13,>20.4|[**AdministrationUserAndGroup.update_resource_group**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L295)|[**ResourceGroupUpdateRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L187)|None| +DELETE /admin/resourcegroup/{group_id}|<20.13,>20.4|[**AdministrationUserAndGroup.delete_resource_group**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L300)||None| +POST /admin/resourcegroup|<20.13,>20.4|[**AdministrationUserAndGroup.create_resource_group**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L305)|[**ResourceGroup**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L172)|None| +PUT /admin/user/password/{username}||[**AdministrationUserAndGroup.update_password**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L319)|[**UserUpdateRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L34)|None| +PUT /admin/user/profile/password||[**AdministrationUserAndGroup.update_profile_password**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L327)|[**ProfilePasswordUpdateRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L167)|None| +PUT /admin/user/{username}||[**AdministrationUserAndGroup.update_user**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L331)|[**UserUpdateRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L34)|None| +PUT /admin/usergroup/{group_name}||[**AdministrationUserAndGroup.update_user_group**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L335)|[**UserGroup**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/administration_user_and_group.py#L84)|None| +DELETE /certificate/{uuid}||[**CertificateManagementDevice.delete_configuration**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L112)||[**DeviceDeletionResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L15)| +POST /certificate/generate/csr||[**CertificateManagementDevice.generate_csr**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L116)|[**TargetDevice**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L22)|DataSequence[[**DeviceCsrGenerationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L28)]| +POST /certificate/save/vedge/list||[**CertificateManagementDevice.change_vedge_list_validity**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L120)|list[[**VedgeListValidityPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L99)]|[**CertActionResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L107)| +POST /certificate/vedge/list?action={action}||[**CertificateManagementDevice.send_to_controllers**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L124)||[**CertActionResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L107)| +POST /certificate/vsmart/list||[**CertificateManagementDevice.send_to_vbond**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L128)||[**CertActionResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_device.py#L107)| +GET /setting/configuration/webserver/certificate||[**CertificateManagementVManage.show_info**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_vmanage.py#L45)||[**WebServerCertificateInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/certificate_management_vmanage.py#L11)| +GET /client/server||[**Client.server**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/client.py#L67)||[**ServerInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/client.py#L23)| +GET /client/server/ready||[**Client.server_ready**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/client.py#L71)||[**ServerReady**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/client.py#L62)| +GET /client/about||[**Client.about**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/client.py#L75)||[**AboutInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/client.py#L51)| +GET /clusterManagement/tenancy/mode||[**ClusterManagement.get_tenancy_mode**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/cluster_management.py#L69)||[**TenancyMode**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/cluster_management.py#L19)| +GET /clusterManagement/vManage/details/{vmanageIP}||[**ClusterManagement.get_vmanage_details**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/cluster_management.py#L77)||DataSequence[[**VManageDetails**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/cluster_management.py#L26)]| +POST /system/device/{device_uuid}/unlock|>=20.9|[**ConfigurationDeviceInventory.unlock**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L275)|[**DeviceUnlockPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L20)|[**DeviceUnlockResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L25)| +POST /system/device||[**ConfigurationDeviceInventory.create_device**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L280)|[**DeviceCreationPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L32)|None| +DELETE /system/device/{uuid}||[**ConfigurationDeviceInventory.delete_device**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L284)||[**DeviceDeletionResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L44)| +GET /system/device/{device_category}||[**ConfigurationDeviceInventory.get_device_details**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L291)||DataSequence[[**DeviceDetailsResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L57)]| +POST /system/device/smartaccount/sync||[**ConfigurationDeviceInventory.sync_devices_from_smart_account**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L297)|[**SmartAccountSyncParams**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L212)|[**ProcessId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L220)| +POST /system/device/fileupload||[**ConfigurationDeviceInventory.upload_wan_edge_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L301)|[**SerialFilePayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L224)|[**UploadSerialFileResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L256)| +GET /system/device/bootstrap/device/{uuid}||[**ConfigurationDeviceInventory.generate_bootstrap_configuration**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L305)||[**BoostrapConfiguration**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_inventory.py#L248)| +POST /device/action/software/package||[**ConfigurationDeviceSoftwareUpdate.upload_software_to_manager**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/device/software_update.py#L25)|[**SoftwarePackageUploadPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/utils/upgrades_helper.py#L77)|None| +POST /disasterrecovery/activate||[**ConfigurationDisasterRecovery.activate**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L147)||[**ActivateDisasterRecoveryTaskId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L26)| +POST /disasterrecovery/deregister||[**ConfigurationDisasterRecovery.delete**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L151)||[**DeregisterDisasterRecoveryTaskId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L22)| +GET /disasterrecovery/details||[**ConfigurationDisasterRecovery.get_details**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L195)||[**DisasterRecoveryDetailsResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L44)| +GET /disasterrecovery/schedule||[**ConfigurationDisasterRecovery.get_disaster_recovery_local_replication_schedule**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L199)||[**DisasterRecoveryScheduleResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L113)| +GET /disasterrecovery/drstatus||[**ConfigurationDisasterRecovery.get_disaster_recovery_status**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L203)||DataSequence[[**DisasterRecoveryDataCenterStatus**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L129)]| +GET /disasterrecovery/localLatestHistory||[**ConfigurationDisasterRecovery.get_local_history**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L215)||[**LastestLocalHistory**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L136)| +POST /disasterrecovery/validateNodes||[**ConfigurationDisasterRecovery.get_reachability_info**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L219)|list[[**ValidateNodePayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L48)]|DataSequence[[**ValidatedNodeEntry**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L54)]| +GET /disasterrecovery/remotedc||[**ConfigurationDisasterRecovery.get_remote_data_center_details**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L223)||DataSequence[[**RemoteDataCenterDetails**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L121)]| +GET /disasterrecovery/remotedc/swversion||[**ConfigurationDisasterRecovery.get_remote_data_center_version**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L227)||[**RemoteDataCentervManageVersionResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L117)| +GET /disasterrecovery/status||[**ConfigurationDisasterRecovery.get_dr_status**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L235)||[**DisasterRecoveryStatusResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L107)| +POST /disasterrecovery/pause||[**ConfigurationDisasterRecovery.pause_dr**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L239)||[**DisasterRecoveryPauseResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L59)| +POST /disasterrecovery/register||[**ConfigurationDisasterRecovery.register**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L255)|[**DisasterRecoveryRegisterPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L89)|[**RegisterDisasterRecoveryTaskId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L18)| +POST /disasterrecovery/unpause||[**ConfigurationDisasterRecovery.unpause_dr**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L267)||[**UnpauseDisasterRecoveryTaskId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/disaster_recovery.py#L30)| +GET /v1/feature-profile/sdwan/system/aaa/schema|>=20.9|[**SystemFeatureProfile.get_sdwan_system_aaa_parcel_schema**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/system.py#L20)||None| +GET /v1/feature-profile/sdwan/system|>=20.9|[**SystemFeatureProfile.get_sdwan_system_feature_profiles**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/system.py#L25)|Optional[[**GetFeatureProfilesPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L176)]|DataSequence[[**FeatureProfileInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L79)]| +POST /v1/feature-profile/sdwan/system|>=20.9|[**SystemFeatureProfile.create_sdwan_system_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/system.py#L32)|[**FeatureProfileCreationPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L111)|[**FeatureProfileCreationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L122)| +DELETE /v1/feature-profile/sdwan/system/{system_id}|>=20.9|[**SystemFeatureProfile.delete_sdwan_system_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/system.py#L39)||None| +POST /v1/feature-profile/sdwan/system/{system_id}/aaa|>=20.9|[**SystemFeatureProfile.create_aaa_profile_parcel_for_system**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/system.py#L44)|[**_ParcelBase**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/api/configuration_groups/parcel.py#L11)|[**ParcelId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L172)| +PUT /v1/feature-profile/sdwan/system/{system_id}/aaa/{parcel_id}|>=20.9|[**SystemFeatureProfile.edit_aaa_profile_parcel_for_system**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/system.py#L49)|[**_ParcelBase**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/api/configuration_groups/parcel.py#L11)|[**ParcelId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L172)| +POST /v1/feature-profile/sdwan/transport|>=20.13|[**TransportFeatureProfile.create_transport_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L25)|[**FeatureProfileCreationPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L111)|[**FeatureProfileCreationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L122)| +GET /v1/feature-profile/sdwan/transport|>=20.13|[**TransportFeatureProfile.get_transport_feature_profiles**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L32)||DataSequence[[**FeatureProfileInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L79)]| +GET /v1/feature-profile/sdwan/transport/{profile_id}|>=20.13|[**TransportFeatureProfile.get_transport_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L37)||[**FeatureProfileDetail**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L91)| +PUT /v1/feature-profile/sdwan/transport/{profile_id}|>=20.13|[**TransportFeatureProfile.edit_transport_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L42)|[**FeatureProfileEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L117)|[**FeatureProfileCreationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L122)| +DELETE /v1/feature-profile/sdwan/transport/{profile_id}|>=20.13|[**TransportFeatureProfile.delete_transport_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L49)||None| +POST /v1/feature-profile/sdwan/transport/{profile_id}/management/vpn|>=20.13|[**TransportFeatureProfile.create_management_vpn_parcel**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L57)|[**_ParcelBase**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/api/configuration_groups/parcel.py#L11)|[**ParcelCreationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L126)| +PUT /v1/feature-profile/sdwan/transport/{profile_id}/management/vpn/{parcel_id}|>=20.13|[**TransportFeatureProfile.edit_management_vpn_parcel**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L72)|[**ManagementVPN**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/sdwan/management/vpn.py#L17)|[**ParcelCreationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L126)| +DELETE /v1/feature-profile/sdwan/transport/{profile_id}/management/vpn/{parcel_id}|>=20.13|[**TransportFeatureProfile.delete_management_vpn_parcel**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L79)||None| +GET /v1/feature-profile/sdwan/transport|>=20.9|[**TransportFeatureProfile.get_sdwan_transport_feature_profiles**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L84)|Optional[[**GetFeatureProfilesPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L176)]|DataSequence[[**FeatureProfileInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L79)]| +GET /v1/feature-profile/sdwan/transport/cellular-controller/schema|>=20.9|[**TransportFeatureProfile.get_sdwan_transport_cellular_controller_parcel_schema**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L91)||None| +POST /v1/feature-profile/sdwan/transport|>=20.9|[**TransportFeatureProfile.create_sdwan_transport_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L96)|[**FeatureProfileCreationPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L111)|[**FeatureProfileCreationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L122)| +DELETE /v1/feature-profile/sdwan/transport/{transport_id}|>=20.9|[**TransportFeatureProfile.delete_sdwan_transport_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L103)||None| +POST /v1/feature-profile/sdwan/transport/{transport_id}/cellular-controller|>=20.9|[**TransportFeatureProfile.create_cellular_controller_profile_parcel_for_transport**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py#L108)|[**CellularController**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_controller.py#L42)|[**ParcelId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L172)| +POST /template/policy/definition/acl||[**ConfigurationPolicyAclDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list.py#L28)|[**AclPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/access_control_list.py#L145)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1017)| +DELETE /template/policy/definition/acl/{id}||[**ConfigurationPolicyAclDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list.py#L32)||None| +PUT /template/policy/definition/acl/{id}||[**ConfigurationPolicyAclDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list.py#L40)|[**AclPolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list.py#L19)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1104)| +GET /template/policy/definition/acl||[**ConfigurationPolicyAclDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list.py#L44)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1091)]| +GET /template/policy/definition/acl/{id}||[**ConfigurationPolicyAclDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list.py#L48)||[**AclPolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list.py#L23)| +POST /template/policy/definition/acl/preview||[**ConfigurationPolicyAclDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list.py#L52)|[**AclPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/access_control_list.py#L145)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +GET /template/policy/definition/acl/preview/{id}||[**ConfigurationPolicyAclDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list.py#L56)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +POST /template/policy/definition/aclv6||[**ConfigurationPolicyAclIPv6Definition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py#L28)|[**AclIPv6Policy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/access_control_list_ipv6.py#L145)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1017)| +DELETE /template/policy/definition/aclv6/{id}||[**ConfigurationPolicyAclIPv6Definition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py#L32)||None| +PUT /template/policy/definition/aclv6/{id}||[**ConfigurationPolicyAclIPv6Definition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py#L40)|[**AclIPv6PolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py#L19)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1104)| +GET /template/policy/definition/aclv6||[**ConfigurationPolicyAclIPv6Definition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py#L44)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1091)]| +GET /template/policy/definition/aclv6/{id}||[**ConfigurationPolicyAclIPv6Definition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py#L48)||[**AclIPv6PolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py#L23)| +POST /template/policy/definition/aclv6/preview||[**ConfigurationPolicyAclIPv6Definition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py#L52)|[**AclIPv6Policy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/access_control_list_ipv6.py#L145)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +GET /template/policy/definition/aclv6/preview/{id}||[**ConfigurationPolicyAclIPv6Definition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py#L56)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +POST /template/policy/definition/control||[**ConfigurationPolicyControlDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/control.py#L28)|[**ControlPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/control.py#L314)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1017)| +DELETE /template/policy/definition/control/{id}||[**ConfigurationPolicyControlDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/control.py#L32)||None| +PUT /template/policy/definition/control/{id}||[**ConfigurationPolicyControlDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/control.py#L40)|[**ControlPolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/control.py#L19)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1104)| +GET /template/policy/definition/control||[**ConfigurationPolicyControlDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/control.py#L44)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1091)]| +GET /template/policy/definition/control/{id}||[**ConfigurationPolicyControlDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/control.py#L48)||[**ControlPolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/control.py#L23)| +POST /template/policy/definition/control/preview||[**ConfigurationPolicyControlDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/control.py#L52)|[**ControlPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/control.py#L314)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +GET /template/policy/definition/control/preview/{id}||[**ConfigurationPolicyControlDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/control.py#L56)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +POST /template/policy/definition/deviceaccesspolicy||[**ConfigurationPolicyDeviceAccessDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access.py#L28)|[**DeviceAccessPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/device_access.py#L83)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1017)| +DELETE /template/policy/definition/deviceaccesspolicy/{id}||[**ConfigurationPolicyDeviceAccessDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access.py#L32)||None| +PUT /template/policy/definition/deviceaccesspolicy/{id}||[**ConfigurationPolicyDeviceAccessDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access.py#L40)|[**DeviceAccessPolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access.py#L19)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1104)| +GET /template/policy/definition/deviceaccesspolicy||[**ConfigurationPolicyDeviceAccessDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access.py#L44)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1091)]| +GET /template/policy/definition/deviceaccesspolicy/{id}||[**ConfigurationPolicyDeviceAccessDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access.py#L48)||[**DeviceAccessPolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access.py#L23)| +POST /template/policy/definition/deviceaccesspolicy/preview||[**ConfigurationPolicyDeviceAccessDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access.py#L52)|[**DeviceAccessPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/device_access.py#L83)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +GET /template/policy/definition/deviceaccesspolicy/preview/{id}||[**ConfigurationPolicyDeviceAccessDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access.py#L56)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +POST /template/policy/definition/deviceaccesspolicyv6||[**ConfigurationPolicyDeviceAccessIPv6Definition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py#L28)|[**DeviceAccessIPv6Policy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/device_access_ipv6.py#L83)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1017)| +DELETE /template/policy/definition/deviceaccesspolicyv6/{id}||[**ConfigurationPolicyDeviceAccessIPv6Definition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py#L32)||None| +PUT /template/policy/definition/deviceaccesspolicyv6/{id}||[**ConfigurationPolicyDeviceAccessIPv6Definition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py#L40)|[**DeviceAccessIPv6PolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py#L19)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1104)| +GET /template/policy/definition/deviceaccesspolicyv6||[**ConfigurationPolicyDeviceAccessIPv6Definition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py#L46)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1091)]| +GET /template/policy/definition/deviceaccesspolicyv6/{id}||[**ConfigurationPolicyDeviceAccessIPv6Definition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py#L50)||[**DeviceAccessIPv6PolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py#L23)| +POST /template/policy/definition/deviceaccesspolicyv6/preview||[**ConfigurationPolicyDeviceAccessIPv6Definition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py#L54)|[**DeviceAccessIPv6Policy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/device_access_ipv6.py#L83)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +GET /template/policy/definition/deviceaccesspolicyv6/preview/{id}||[**ConfigurationPolicyDeviceAccessIPv6Definition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py#L58)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +POST /template/policy/definition/hubandspoke||[**ConfigurationPolicyHubAndSpokeDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py#L28)|[**HubAndSpokePolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/hub_and_spoke.py#L46)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1017)| +DELETE /template/policy/definition/hubandspoke/{id}||[**ConfigurationPolicyHubAndSpokeDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py#L32)||None| +PUT /template/policy/definition/hubandspoke/{id}||[**ConfigurationPolicyHubAndSpokeDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py#L40)|[**HubAndSpokePolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py#L19)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1104)| +GET /template/policy/definition/hubandspoke||[**ConfigurationPolicyHubAndSpokeDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py#L44)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1091)]| +GET /template/policy/definition/hubandspoke/{id}||[**ConfigurationPolicyHubAndSpokeDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py#L48)||[**HubAndSpokePolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py#L23)| +POST /template/policy/definition/hubandspoke/preview||[**ConfigurationPolicyHubAndSpokeDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py#L52)|[**HubAndSpokePolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/hub_and_spoke.py#L46)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +GET /template/policy/definition/hubandspoke/preview/{id}||[**ConfigurationPolicyHubAndSpokeDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py#L56)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +POST /template/policy/definition/mesh||[**ConfigurationPolicyMeshDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/mesh.py#L28)|[**MeshPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/mesh.py#L23)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1017)| +DELETE /template/policy/definition/mesh/{id}||[**ConfigurationPolicyMeshDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/mesh.py#L32)||None| +PUT /template/policy/definition/mesh/{id}||[**ConfigurationPolicyMeshDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/mesh.py#L40)|[**MeshPolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/mesh.py#L19)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1104)| +GET /template/policy/definition/mesh||[**ConfigurationPolicyMeshDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/mesh.py#L44)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1091)]| +GET /template/policy/definition/mesh/{id}||[**ConfigurationPolicyMeshDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/mesh.py#L48)||[**MeshPolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/mesh.py#L23)| +POST /template/policy/definition/mesh/preview||[**ConfigurationPolicyMeshDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/mesh.py#L52)|[**MeshPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/mesh.py#L23)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +GET /template/policy/definition/mesh/preview/{id}||[**ConfigurationPolicyMeshDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/mesh.py#L56)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +POST /template/policy/definition/qosmap||[**ConfigurationPolicyQoSMapDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/qos_map.py#L28)|[**QoSMapPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/qos_map.py#L72)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1017)| +DELETE /template/policy/definition/qosmap/{id}||[**ConfigurationPolicyQoSMapDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/qos_map.py#L32)||None| +PUT /template/policy/definition/qosmap/{id}||[**ConfigurationPolicyQoSMapDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/qos_map.py#L40)|[**QoSMapPolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/qos_map.py#L19)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1104)| +GET /template/policy/definition/qosmap||[**ConfigurationPolicyQoSMapDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/qos_map.py#L44)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1091)]| +GET /template/policy/definition/qosmap/{id}||[**ConfigurationPolicyQoSMapDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/qos_map.py#L48)||[**QoSMapPolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/qos_map.py#L23)| +POST /template/policy/definition/qosmap/preview||[**ConfigurationPolicyQoSMapDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/qos_map.py#L52)|[**QoSMapPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/qos_map.py#L72)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +GET /template/policy/definition/qosmap/preview/{id}||[**ConfigurationPolicyQoSMapDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/qos_map.py#L56)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +POST /template/policy/definition/rewriterule||[**ConfigurationPolicyRewriteRuleDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rewrite.py#L28)|[**RewritePolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/rewrite.py#L31)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1017)| +DELETE /template/policy/definition/rewriterule/{id}||[**ConfigurationPolicyRewriteRuleDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rewrite.py#L32)||None| +PUT /template/policy/definition/rewriterule/{id}||[**ConfigurationPolicyRewriteRuleDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rewrite.py#L40)|[**RewritePolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rewrite.py#L19)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1104)| +GET /template/policy/definition/rewriterule||[**ConfigurationPolicyRewriteRuleDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rewrite.py#L44)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1091)]| +GET /template/policy/definition/rewriterule/{id}||[**ConfigurationPolicyRewriteRuleDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rewrite.py#L48)||[**RewritePolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rewrite.py#L23)| +POST /template/policy/definition/rewriterule/preview||[**ConfigurationPolicyRewriteRuleDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rewrite.py#L52)|[**RewritePolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/rewrite.py#L31)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +GET /template/policy/definition/rewriterule/preview/{id}||[**ConfigurationPolicyRewriteRuleDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rewrite.py#L56)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +POST /template/policy/definition/ruleset||[**ConfigurationPolicyRuleSetDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rule_set.py#L28)|[**RuleSet**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/rule_set.py#L154)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1017)| +DELETE /template/policy/definition/ruleset/{id}||[**ConfigurationPolicyRuleSetDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rule_set.py#L32)||None| +PUT /template/policy/definition/ruleset/{id}||[**ConfigurationPolicyRuleSetDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rule_set.py#L40)|[**RuleSetEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rule_set.py#L19)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1104)| +GET /template/policy/definition/ruleset||[**ConfigurationPolicyRuleSetDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rule_set.py#L44)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1091)]| +GET /template/policy/definition/ruleset/{id}||[**ConfigurationPolicyRuleSetDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rule_set.py#L48)||[**RuleSetGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rule_set.py#L23)| +POST /template/policy/definition/ruleset/preview||[**ConfigurationPolicyRuleSetDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rule_set.py#L52)|[**RuleSet**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/rule_set.py#L154)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +GET /template/policy/definition/ruleset/preview/{id}||[**ConfigurationPolicyRuleSetDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/rule_set.py#L56)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +POST /template/policy/definition/securitygroup||[**ConfigurationPolicySecurityGroupDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/security_group.py#L28)|[**SecurityGroup**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/security_group.py#L53)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1017)| +DELETE /template/policy/definition/securitygroup/{id}||[**ConfigurationPolicySecurityGroupDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/security_group.py#L32)||None| +PUT /template/policy/definition/securitygroup/{id}||[**ConfigurationPolicySecurityGroupDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/security_group.py#L40)|[**SecurityGroupEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/security_group.py#L19)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1104)| +GET /template/policy/definition/securitygroup||[**ConfigurationPolicySecurityGroupDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/security_group.py#L44)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1091)]| +GET /template/policy/definition/securitygroup/{id}||[**ConfigurationPolicySecurityGroupDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/security_group.py#L48)||[**SecurityGroupGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/security_group.py#L23)| +POST /template/policy/definition/securitygroup/preview||[**ConfigurationPolicySecurityGroupDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/security_group.py#L52)|[**SecurityGroup**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/security_group.py#L53)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +GET /template/policy/definition/securitygroup/preview/{id}||[**ConfigurationPolicySecurityGroupDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/security_group.py#L56)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +POST /template/policy/definition/data||[**ConfigurationPolicyDataDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/traffic_data.py#L29)|[**TrafficDataPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/traffic_data.py#L360)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1017)| +DELETE /template/policy/definition/data/{id}||[**ConfigurationPolicyDataDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/traffic_data.py#L33)||None| +PUT /template/policy/definition/data/{id}||[**ConfigurationPolicyDataDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/traffic_data.py#L41)|[**TrafficDataPolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/traffic_data.py#L20)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1104)| +GET /template/policy/definition/data||[**ConfigurationPolicyDataDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/traffic_data.py#L45)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1091)]| +GET /template/policy/definition/data/{id}||[**ConfigurationPolicyDataDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/traffic_data.py#L49)||[**TrafficDataPolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/traffic_data.py#L24)| +POST /template/policy/definition/data/preview||[**ConfigurationPolicyDataDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/traffic_data.py#L53)|[**TrafficDataPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/traffic_data.py#L360)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +GET /template/policy/definition/data/preview/{id}||[**ConfigurationPolicyDataDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/traffic_data.py#L57)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +POST /template/policy/definition/vpnmembershipgroup||[**ConfigurationPolicyVPNMembershipGroupDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py#L28)|[**VPNMembershipPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/vpn_membership.py#L22)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1017)| +DELETE /template/policy/definition/vpnmembershipgroup/{id}||[**ConfigurationPolicyVPNMembershipGroupDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py#L32)||None| +PUT /template/policy/definition/vpnmembershipgroup/{id}||[**ConfigurationPolicyVPNMembershipGroupDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py#L40)|[**VPNMembershipPolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py#L19)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1104)| +GET /template/policy/definition/vpnmembershipgroup||[**ConfigurationPolicyVPNMembershipGroupDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py#L44)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1091)]| +GET /template/policy/definition/vpnmembershipgroup/{id}||[**ConfigurationPolicyVPNMembershipGroupDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py#L48)||[**VPNMembershipPolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py#L23)| +POST /template/policy/definition/vpnmembershipgroup/preview||[**ConfigurationPolicyVPNMembershipGroupDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py#L52)|[**VPNMembershipPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/vpn_membership.py#L22)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +GET /template/policy/definition/vpnmembershipgroup/preview/{id}||[**ConfigurationPolicyVPNMembershipGroupDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py#L56)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +POST /template/policy/definition/zonebasedfw||[**ConfigurationPolicyZoneBasedFirewallDefinition.create_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py#L28)|[**ZoneBasedFWPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/zone_based_firewall.py#L192)|[**PolicyDefinitionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1017)| +DELETE /template/policy/definition/zonebasedfw/{id}||[**ConfigurationPolicyZoneBasedFirewallDefinition.delete_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py#L32)||None| +PUT /template/policy/definition/zonebasedfw/{id}||[**ConfigurationPolicyZoneBasedFirewallDefinition.edit_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py#L40)|[**ZoneBasedFWPolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py#L19)|[**PolicyDefinitionEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1104)| +GET /template/policy/definition/zonebasedfw||[**ConfigurationPolicyZoneBasedFirewallDefinition.get_definitions**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py#L44)||DataSequence[[**PolicyDefinitionInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1091)]| +GET /template/policy/definition/zonebasedfw/{id}||[**ConfigurationPolicyZoneBasedFirewallDefinition.get_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py#L48)||[**ZoneBasedFWPolicyGetResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py#L23)| +POST /template/policy/definition/zonebasedfw/preview||[**ConfigurationPolicyZoneBasedFirewallDefinition.preview_policy_definition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py#L52)|[**ZoneBasedFWPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/definitions/zone_based_firewall.py#L192)|[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +GET /template/policy/definition/zonebasedfw/preview/{id}||[**ConfigurationPolicyZoneBasedFirewallDefinition.preview_policy_definition_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py#L56)||[**PolicyDefinitionPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_definition.py#L1110)| +POST /template/policy/list/app||[**ConfigurationPolicyApplicationList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L27)|[**AppList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L131)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/app/{id}||[**ConfigurationPolicyApplicationList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L31)||None| +DELETE /template/policy/list/app||[**ConfigurationPolicyApplicationList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L35)||None| +PUT /template/policy/list/app/{id}||[**ConfigurationPolicyApplicationList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L39)|[**AppListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L18)|None| +GET /template/policy/list/app/{id}||[**ConfigurationPolicyApplicationList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L43)||[**AppListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L22)| +GET /template/policy/list/app||[**ConfigurationPolicyApplicationList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L47)||DataSequence[[**AppListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L22)]| +GET /template/policy/list/app/filtered||[**ConfigurationPolicyApplicationList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L51)||DataSequence[[**AppListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L22)]| +POST /template/policy/list/app/preview||[**ConfigurationPolicyApplicationList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L55)|[**AppList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L131)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/app/preview/{id}||[**ConfigurationPolicyApplicationList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/appprobe||[**ConfigurationPolicyAppProbeClassList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L27)|[**AppProbeClassList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L226)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/appprobe/{id}||[**ConfigurationPolicyAppProbeClassList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L31)||None| +DELETE /template/policy/list/appprobe||[**ConfigurationPolicyAppProbeClassList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L35)||None| +PUT /template/policy/list/appprobe/{id}||[**ConfigurationPolicyAppProbeClassList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L39)|[**AppProbeClassListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L18)|None| +GET /template/policy/list/appprobe/{id}||[**ConfigurationPolicyAppProbeClassList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L43)||[**AppProbeClassListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L22)| +GET /template/policy/list/appprobe||[**ConfigurationPolicyAppProbeClassList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L47)||DataSequence[[**AppProbeClassListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L22)]| +GET /template/policy/list/appprobe/filtered||[**ConfigurationPolicyAppProbeClassList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L51)||DataSequence[[**AppProbeClassListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L22)]| +POST /template/policy/list/appprobe/preview||[**ConfigurationPolicyAppProbeClassList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L55)|[**AppProbeClassList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L226)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/appprobe/preview/{id}||[**ConfigurationPolicyAppProbeClassList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/app_probe.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/aspath||[**ConfigurationPolicyASPathList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L27)|[**ASPathList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L206)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/aspath/{id}||[**ConfigurationPolicyASPathList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L31)||None| +DELETE /template/policy/list/aspath||[**ConfigurationPolicyASPathList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L35)||None| +PUT /template/policy/list/aspath/{id}||[**ConfigurationPolicyASPathList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L39)|[**ASPathListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L18)|None| +GET /template/policy/list/aspath/{id}||[**ConfigurationPolicyASPathList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L43)||[**ASPathListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L22)| +GET /template/policy/list/aspath||[**ConfigurationPolicyASPathList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L47)||DataSequence[[**ASPathListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L22)]| +GET /template/policy/list/aspath/filtered||[**ConfigurationPolicyASPathList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L51)||DataSequence[[**ASPathListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L22)]| +POST /template/policy/list/aspath/preview||[**ConfigurationPolicyASPathList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L55)|[**ASPathList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L206)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/aspath/preview/{id}||[**ConfigurationPolicyASPathList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/as_path.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/class||[**ConfigurationPolicyForwardingClassList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L27)|[**ClassMapList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L211)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/class/{id}||[**ConfigurationPolicyForwardingClassList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L31)||None| +DELETE /template/policy/list/class||[**ConfigurationPolicyForwardingClassList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L35)||None| +PUT /template/policy/list/class/{id}||[**ConfigurationPolicyForwardingClassList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L39)|[**ClassMapListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L18)|None| +GET /template/policy/list/class/{id}||[**ConfigurationPolicyForwardingClassList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L43)||[**ClassMapListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L22)| +GET /template/policy/list/class||[**ConfigurationPolicyForwardingClassList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L47)||DataSequence[[**ClassMapListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L22)]| +GET /template/policy/list/class/filtered||[**ConfigurationPolicyForwardingClassList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L51)||DataSequence[[**ClassMapListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L22)]| +POST /template/policy/list/class/preview||[**ConfigurationPolicyForwardingClassList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L55)|[**ClassMapList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L211)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/class/preview/{id}||[**ConfigurationPolicyForwardingClassList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/class_map.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/color||[**ConfigurationPolicyColorList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L27)|[**ColorList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L142)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/color/{id}||[**ConfigurationPolicyColorList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L31)||None| +DELETE /template/policy/list/color||[**ConfigurationPolicyColorList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L35)||None| +PUT /template/policy/list/color/{id}||[**ConfigurationPolicyColorList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L39)|[**ColorListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L18)|None| +GET /template/policy/list/color/{id}||[**ConfigurationPolicyColorList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L43)||[**ColorListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L22)| +GET /template/policy/list/color||[**ConfigurationPolicyColorList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L47)||DataSequence[[**ColorListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L22)]| +GET /template/policy/list/color/filtered||[**ConfigurationPolicyColorList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L51)||DataSequence[[**ColorListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L22)]| +POST /template/policy/list/color/preview||[**ConfigurationPolicyColorList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L55)|[**ColorList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L142)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/color/preview/{id}||[**ConfigurationPolicyColorList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/color.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/community||[**ConfigurationPolicyCommunityList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L27)|[**CommunityList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L188)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/community/{id}||[**ConfigurationPolicyCommunityList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L31)||None| +DELETE /template/policy/list/community||[**ConfigurationPolicyCommunityList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L35)||None| +PUT /template/policy/list/community/{id}||[**ConfigurationPolicyCommunityList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L39)|[**CommunityListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L18)|None| +GET /template/policy/list/community/{id}||[**ConfigurationPolicyCommunityList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L43)||[**CommunityListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L22)| +GET /template/policy/list/community||[**ConfigurationPolicyCommunityList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L47)||DataSequence[[**CommunityListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L22)]| +GET /template/policy/list/community/filtered||[**ConfigurationPolicyCommunityList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L51)||DataSequence[[**CommunityListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L22)]| +POST /template/policy/list/community/preview||[**ConfigurationPolicyCommunityList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L55)|[**CommunityList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L188)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/community/preview/{id}||[**ConfigurationPolicyCommunityList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/community.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/dataipv6prefix||[**ConfigurationPolicyDataIPv6PrefixList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L27)|[**DataIPv6PrefixList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L150)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/dataipv6prefix/{id}||[**ConfigurationPolicyDataIPv6PrefixList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L31)||None| +DELETE /template/policy/list/dataipv6prefix||[**ConfigurationPolicyDataIPv6PrefixList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L35)||None| +PUT /template/policy/list/dataipv6prefix/{id}||[**ConfigurationPolicyDataIPv6PrefixList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L39)|[**DataIPv6PrefixListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L18)|None| +GET /template/policy/list/dataipv6prefix/{id}||[**ConfigurationPolicyDataIPv6PrefixList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L43)||[**DataIPv6PrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L22)| +GET /template/policy/list/dataipv6prefix||[**ConfigurationPolicyDataIPv6PrefixList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L47)||DataSequence[[**DataIPv6PrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L22)]| +GET /template/policy/list/dataipv6prefix/filtered||[**ConfigurationPolicyDataIPv6PrefixList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L51)||DataSequence[[**DataIPv6PrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L22)]| +POST /template/policy/list/dataipv6prefix/preview||[**ConfigurationPolicyDataIPv6PrefixList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L55)|[**DataIPv6PrefixList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L150)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/dataipv6prefix/preview/{id}||[**ConfigurationPolicyDataIPv6PrefixList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/dataprefix||[**ConfigurationPolicyDataPrefixList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L27)|[**DataPrefixList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L61)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/dataprefix/{id}||[**ConfigurationPolicyDataPrefixList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L31)||None| +DELETE /template/policy/list/dataprefix||[**ConfigurationPolicyDataPrefixList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L35)||None| +PUT /template/policy/list/dataprefix/{id}||[**ConfigurationPolicyDataPrefixList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L39)|[**DataPrefixListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L18)|None| +GET /template/policy/list/dataprefix/{id}||[**ConfigurationPolicyDataPrefixList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L43)||[**DataPrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L22)| +GET /template/policy/list/dataprefix||[**ConfigurationPolicyDataPrefixList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L47)||DataSequence[[**DataPrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L22)]| +GET /template/policy/list/dataprefix/filtered||[**ConfigurationPolicyDataPrefixList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L51)||DataSequence[[**DataPrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L22)]| +POST /template/policy/list/dataprefix/preview||[**ConfigurationPolicyDataPrefixList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L55)|[**DataPrefixList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L61)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/dataprefix/preview/{id}||[**ConfigurationPolicyDataPrefixList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/data_prefix.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/expandedcommunity||[**ConfigurationPolicyExpandedCommunityList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L27)|[**ExpandedCommunityList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L192)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/expandedcommunity/{id}||[**ConfigurationPolicyExpandedCommunityList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L31)||None| +DELETE /template/policy/list/expandedcommunity||[**ConfigurationPolicyExpandedCommunityList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L35)||None| +PUT /template/policy/list/expandedcommunity/{id}||[**ConfigurationPolicyExpandedCommunityList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L39)|[**ExpandedCommunityListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L18)|None| +GET /template/policy/list/expandedcommunity/{id}||[**ConfigurationPolicyExpandedCommunityList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L43)||[**ExpandedCommunityListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L22)| +GET /template/policy/list/expandedcommunity||[**ConfigurationPolicyExpandedCommunityList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L47)||DataSequence[[**ExpandedCommunityListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L22)]| +GET /template/policy/list/expandedcommunity/filtered||[**ConfigurationPolicyExpandedCommunityList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L51)||DataSequence[[**ExpandedCommunityListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L22)]| +POST /template/policy/list/expandedcommunity/preview||[**ConfigurationPolicyExpandedCommunityList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L55)|[**ExpandedCommunityList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L192)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/expandedcommunity/preview/{id}||[**ConfigurationPolicyExpandedCommunityList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/expanded_community.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/fqdn||[**ConfigurationPolicyFQDNList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L27)|[**FQDNList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L106)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/fqdn/{id}||[**ConfigurationPolicyFQDNList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L31)||None| +DELETE /template/policy/list/fqdn||[**ConfigurationPolicyFQDNList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L35)||None| +PUT /template/policy/list/fqdn/{id}||[**ConfigurationPolicyFQDNList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L39)|[**FQDNListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L18)|None| +GET /template/policy/list/fqdn/{id}||[**ConfigurationPolicyFQDNList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L43)||[**FQDNListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L22)| +GET /template/policy/list/fqdn||[**ConfigurationPolicyFQDNList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L47)||DataSequence[[**FQDNListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L22)]| +GET /template/policy/list/fqdn/filtered||[**ConfigurationPolicyFQDNList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L51)||DataSequence[[**FQDNListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L22)]| +POST /template/policy/list/fqdn/preview||[**ConfigurationPolicyFQDNList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L55)|[**FQDNList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L106)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/fqdn/preview/{id}||[**ConfigurationPolicyFQDNList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/fqdn.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/geolocation||[**ConfigurationPolicyGeoLocationList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L27)|[**GeoLocationList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L111)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/geolocation/{id}||[**ConfigurationPolicyGeoLocationList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L31)||None| +DELETE /template/policy/list/geolocation||[**ConfigurationPolicyGeoLocationList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L35)||None| +PUT /template/policy/list/geolocation/{id}||[**ConfigurationPolicyGeoLocationList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L39)|[**GeoLocationListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L18)|None| +GET /template/policy/list/geolocation/{id}||[**ConfigurationPolicyGeoLocationList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L43)||[**GeoLocationListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L22)| +GET /template/policy/list/geolocation||[**ConfigurationPolicyGeoLocationList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L47)||DataSequence[[**GeoLocationListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L22)]| +GET /template/policy/list/geolocation/filtered||[**ConfigurationPolicyGeoLocationList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L51)||DataSequence[[**GeoLocationListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L22)]| +POST /template/policy/list/geolocation/preview||[**ConfigurationPolicyGeoLocationList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L55)|[**GeoLocationList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L111)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/geolocation/preview/{id}||[**ConfigurationPolicyGeoLocationList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/geo_location.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/ipssignature||[**ConfigurationPolicyIPSSignatureList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L27)|[**IPSSignatureList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L163)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/ipssignature/{id}||[**ConfigurationPolicyIPSSignatureList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L31)||None| +DELETE /template/policy/list/ipssignature||[**ConfigurationPolicyIPSSignatureList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L35)||None| +PUT /template/policy/list/ipssignature/{id}||[**ConfigurationPolicyIPSSignatureList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L39)|[**IPSSignatureListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L18)|None| +GET /template/policy/list/ipssignature/{id}||[**ConfigurationPolicyIPSSignatureList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L43)||[**IPSSignatureListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L22)| +GET /template/policy/list/ipssignature||[**ConfigurationPolicyIPSSignatureList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L47)||DataSequence[[**IPSSignatureListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L22)]| +GET /template/policy/list/ipssignature/filtered||[**ConfigurationPolicyIPSSignatureList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L51)||DataSequence[[**IPSSignatureListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L22)]| +POST /template/policy/list/ipssignature/preview||[**ConfigurationPolicyIPSSignatureList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L55)|[**IPSSignatureList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L163)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/ipssignature/preview/{id}||[**ConfigurationPolicyIPSSignatureList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ips_signature.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/ipv6prefix||[**ConfigurationPolicyIPv6PrefixList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L27)|[**IPv6PrefixList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L315)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/ipv6prefix/{id}||[**ConfigurationPolicyIPv6PrefixList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L31)||None| +DELETE /template/policy/list/ipv6prefix||[**ConfigurationPolicyIPv6PrefixList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L35)||None| +PUT /template/policy/list/ipv6prefix/{id}||[**ConfigurationPolicyIPv6PrefixList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L39)|[**IPv6PrefixListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L18)|None| +GET /template/policy/list/ipv6prefix/{id}||[**ConfigurationPolicyIPv6PrefixList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L43)||[**IPv6PrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L22)| +GET /template/policy/list/ipv6prefix||[**ConfigurationPolicyIPv6PrefixList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L47)||DataSequence[[**IPv6PrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L22)]| +GET /template/policy/list/ipv6prefix/filtered||[**ConfigurationPolicyIPv6PrefixList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L51)||DataSequence[[**IPv6PrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L22)]| +POST /template/policy/list/ipv6prefix/preview||[**ConfigurationPolicyIPv6PrefixList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L55)|[**IPv6PrefixList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L315)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/ipv6prefix/preview/{id}||[**ConfigurationPolicyIPv6PrefixList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/localapp||[**ConfigurationPolicyLocalAppList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L27)|[**LocalAppList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L126)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/localapp/{id}||[**ConfigurationPolicyLocalAppList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L31)||None| +DELETE /template/policy/list/localapp||[**ConfigurationPolicyLocalAppList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L35)||None| +PUT /template/policy/list/localapp/{id}||[**ConfigurationPolicyLocalAppList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L39)|[**LocalAppListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L18)|None| +GET /template/policy/list/localapp/{id}||[**ConfigurationPolicyLocalAppList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L43)||[**LocalAppListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L22)| +GET /template/policy/list/localapp||[**ConfigurationPolicyLocalAppList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L47)||DataSequence[[**LocalAppListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L22)]| +GET /template/policy/list/localapp/filtered||[**ConfigurationPolicyLocalAppList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L51)||DataSequence[[**LocalAppListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L22)]| +POST /template/policy/list/localapp/preview||[**ConfigurationPolicyLocalAppList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L55)|[**LocalAppList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L126)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/localapp/preview/{id}||[**ConfigurationPolicyLocalAppList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_app.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/localdomain||[**ConfigurationPolicyLocalDomainList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L27)|[**LocalDomainList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L158)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/localdomain/{id}||[**ConfigurationPolicyLocalDomainList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L31)||None| +DELETE /template/policy/list/localdomain||[**ConfigurationPolicyLocalDomainList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L35)||None| +PUT /template/policy/list/localdomain/{id}||[**ConfigurationPolicyLocalDomainList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L39)|[**LocalDomainListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L18)|None| +GET /template/policy/list/localdomain/{id}||[**ConfigurationPolicyLocalDomainList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L43)||[**LocalDomainListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L22)| +GET /template/policy/list/localdomain||[**ConfigurationPolicyLocalDomainList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L47)||DataSequence[[**LocalDomainListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L22)]| +GET /template/policy/list/localdomain/filtered||[**ConfigurationPolicyLocalDomainList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L51)||DataSequence[[**LocalDomainListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L22)]| +POST /template/policy/list/localdomain/preview||[**ConfigurationPolicyLocalDomainList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L55)|[**LocalDomainList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L158)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/localdomain/preview/{id}||[**ConfigurationPolicyLocalDomainList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/local_domain.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/mirror||[**ConfigurationPolicyMirrorList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L27)|[**MirrorList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L221)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/mirror/{id}||[**ConfigurationPolicyMirrorList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L31)||None| +DELETE /template/policy/list/mirror||[**ConfigurationPolicyMirrorList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L35)||None| +PUT /template/policy/list/mirror/{id}||[**ConfigurationPolicyMirrorList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L39)|[**MirrorListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L18)|None| +GET /template/policy/list/mirror/{id}||[**ConfigurationPolicyMirrorList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L43)||[**MirrorListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L22)| +GET /template/policy/list/mirror||[**ConfigurationPolicyMirrorList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L47)||DataSequence[[**MirrorListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L22)]| +GET /template/policy/list/mirror/filtered||[**ConfigurationPolicyMirrorList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L51)||DataSequence[[**MirrorListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L22)]| +POST /template/policy/list/mirror/preview||[**ConfigurationPolicyMirrorList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L55)|[**MirrorList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L221)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/mirror/preview/{id}||[**ConfigurationPolicyMirrorList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/mirror.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/policer||[**ConfigurationPolicyPolicerClassList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L27)|[**PolicerList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L196)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/policer/{id}||[**ConfigurationPolicyPolicerClassList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L31)||None| +DELETE /template/policy/list/policer||[**ConfigurationPolicyPolicerClassList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L35)||None| +PUT /template/policy/list/policer/{id}||[**ConfigurationPolicyPolicerClassList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L39)|[**PolicerListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L18)|None| +GET /template/policy/list/policer/{id}||[**ConfigurationPolicyPolicerClassList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L43)||[**PolicerListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L22)| +GET /template/policy/list/policer||[**ConfigurationPolicyPolicerClassList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L47)||DataSequence[[**PolicerListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L22)]| +GET /template/policy/list/policer/filtered||[**ConfigurationPolicyPolicerClassList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L51)||DataSequence[[**PolicerListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L22)]| +POST /template/policy/list/policer/preview||[**ConfigurationPolicyPolicerClassList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L55)|[**PolicerList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L196)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/policer/preview/{id}||[**ConfigurationPolicyPolicerClassList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/policer.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/port||[**ConfigurationPolicyPortList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L27)|[**PortList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L116)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/port/{id}||[**ConfigurationPolicyPortList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L31)||None| +DELETE /template/policy/list/port||[**ConfigurationPolicyPortList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L35)||None| +PUT /template/policy/list/port/{id}||[**ConfigurationPolicyPortList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L39)|[**PortListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L18)|None| +GET /template/policy/list/port/{id}||[**ConfigurationPolicyPortList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L43)||[**PortListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L22)| +GET /template/policy/list/port||[**ConfigurationPolicyPortList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L47)||DataSequence[[**PortListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L22)]| +GET /template/policy/list/port/filtered||[**ConfigurationPolicyPortList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L51)||DataSequence[[**PortListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L22)]| +POST /template/policy/list/port/preview||[**ConfigurationPolicyPortList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L55)|[**PortList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L116)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/port/preview/{id}||[**ConfigurationPolicyPortList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/port.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/preferredcolorgroup||[**ConfigurationPreferredColorGroupList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L27)|[**PreferredColorGroupList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L278)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/preferredcolorgroup/{id}||[**ConfigurationPreferredColorGroupList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L31)||None| +DELETE /template/policy/list/preferredcolorgroup||[**ConfigurationPreferredColorGroupList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L35)||None| +PUT /template/policy/list/preferredcolorgroup/{id}||[**ConfigurationPreferredColorGroupList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L39)|[**PreferredColorGroupListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L18)|None| +GET /template/policy/list/preferredcolorgroup/{id}||[**ConfigurationPreferredColorGroupList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L43)||[**PreferredColorGroupListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L22)| +GET /template/policy/list/preferredcolorgroup||[**ConfigurationPreferredColorGroupList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L47)||DataSequence[[**PreferredColorGroupListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L22)]| +GET /template/policy/list/preferredcolorgroup/filtered||[**ConfigurationPreferredColorGroupList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L51)||DataSequence[[**PreferredColorGroupListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L22)]| +POST /template/policy/list/preferredcolorgroup/preview||[**ConfigurationPreferredColorGroupList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L55)|[**PreferredColorGroupList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L278)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/preferredcolorgroup/preview/{id}||[**ConfigurationPreferredColorGroupList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/prefix||[**ConfigurationPolicyPrefixList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L27)|[**PrefixList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L305)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/prefix/{id}||[**ConfigurationPolicyPrefixList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L31)||None| +DELETE /template/policy/list/prefix||[**ConfigurationPolicyPrefixList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L35)||None| +PUT /template/policy/list/prefix/{id}||[**ConfigurationPolicyPrefixList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L39)|[**PrefixListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L18)|None| +GET /template/policy/list/prefix/{id}||[**ConfigurationPolicyPrefixList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L43)||[**PrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L22)| +GET /template/policy/list/prefix||[**ConfigurationPolicyPrefixList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L47)||DataSequence[[**PrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L22)]| +GET /template/policy/list/prefix/filtered||[**ConfigurationPolicyPrefixList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L51)||DataSequence[[**PrefixListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L22)]| +POST /template/policy/list/prefix/preview||[**ConfigurationPolicyPrefixList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L55)|[**PrefixList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L305)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/prefix/preview/{id}||[**ConfigurationPolicyPrefixList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/prefix.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/protocolname||[**ConfigurationPolicyProtocolNameList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L27)|[**ProtocolNameList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L121)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/protocolname/{id}||[**ConfigurationPolicyProtocolNameList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L31)||None| +DELETE /template/policy/list/protocolname||[**ConfigurationPolicyProtocolNameList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L35)||None| +PUT /template/policy/list/protocolname/{id}||[**ConfigurationPolicyProtocolNameList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L39)|[**ProtocolNameListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L18)|None| +GET /template/policy/list/protocolname/{id}||[**ConfigurationPolicyProtocolNameList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L43)||[**ProtocolNameListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L22)| +GET /template/policy/list/protocolname||[**ConfigurationPolicyProtocolNameList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L47)||DataSequence[[**ProtocolNameListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L22)]| +GET /template/policy/list/protocolname/filtered||[**ConfigurationPolicyProtocolNameList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L51)||DataSequence[[**ProtocolNameListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L22)]| +POST /template/policy/list/protocolname/preview||[**ConfigurationPolicyProtocolNameList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L55)|[**ProtocolNameList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L121)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/protocolname/preview/{id}||[**ConfigurationPolicyProtocolNameList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/protocol_name.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/region||[**ConfigurationPolicyRegionList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L21)|[**RegionList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L320)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/region/{id}||[**ConfigurationPolicyRegionList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L25)||None| +DELETE /template/policy/list/region||[**ConfigurationPolicyRegionList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L29)||None| +PUT /template/policy/list/region/{id}||[**ConfigurationPolicyRegionList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L33)|[**RegionListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L12)|None| +GET /template/policy/list/region/{id}||[**ConfigurationPolicyRegionList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L37)||[**RegionListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L16)| +GET /template/policy/list/region||[**ConfigurationPolicyRegionList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L41)||DataSequence[[**RegionListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L16)]| +GET /template/policy/list/region/filtered||[**ConfigurationPolicyRegionList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L45)||DataSequence[[**RegionListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L16)]| +POST /template/policy/list/region/preview||[**ConfigurationPolicyRegionList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L49)|[**RegionList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L320)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/region/preview/{id}||[**ConfigurationPolicyRegionList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/region.py#L53)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/site/defaultsite||[**ConfigurationPolicySiteList.create_default_site_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L27)|[**SiteList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L69)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +POST /template/policy/list/site||[**ConfigurationPolicySiteList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L31)|[**SiteList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L69)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/site/{id}||[**ConfigurationPolicySiteList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L35)||None| +DELETE /template/policy/list/site||[**ConfigurationPolicySiteList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L39)||None| +PUT /template/policy/list/site/{id}||[**ConfigurationPolicySiteList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L43)|[**SiteListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L18)|None| +GET /template/policy/list/site/{id}||[**ConfigurationPolicySiteList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L47)||[**SiteListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L22)| +GET /template/policy/list/site||[**ConfigurationPolicySiteList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L51)||DataSequence[[**SiteListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L22)]| +GET /template/policy/list/site/filtered||[**ConfigurationPolicySiteList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L55)||DataSequence[[**SiteListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L22)]| +POST /template/policy/list/site/preview||[**ConfigurationPolicySiteList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L59)|[**SiteList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L69)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/site/preview/{id}||[**ConfigurationPolicySiteList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/site.py#L63)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/sla||[**ConfigurationPolicySLAClassList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L27)|[**SLAClassList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L237)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/sla/{id}||[**ConfigurationPolicySLAClassList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L31)||None| +DELETE /template/policy/list/sla||[**ConfigurationPolicySLAClassList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L35)||None| +PUT /template/policy/list/sla/{id}||[**ConfigurationPolicySLAClassList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L39)|[**SLAClassListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L18)|None| +GET /template/policy/list/sla/{id}||[**ConfigurationPolicySLAClassList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L43)||[**SLAClassListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L22)| +GET /template/policy/list/sla||[**ConfigurationPolicySLAClassList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L47)||DataSequence[[**SLAClassListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L22)]| +GET /template/policy/list/sla/filtered||[**ConfigurationPolicySLAClassList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L51)||DataSequence[[**SLAClassListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L22)]| +POST /template/policy/list/sla/preview||[**ConfigurationPolicySLAClassList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L55)|[**SLAClassList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L237)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/sla/preview/{id}||[**ConfigurationPolicySLAClassList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/sla.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/tloc||[**ConfigurationPolicyTLOCList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L27)|[**TLOCList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L269)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/tloc/{id}||[**ConfigurationPolicyTLOCList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L31)||None| +DELETE /template/policy/list/tloc||[**ConfigurationPolicyTLOCList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L35)||None| +PUT /template/policy/list/tloc/{id}||[**ConfigurationPolicyTLOCList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L39)|[**TLOCListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L18)|None| +GET /template/policy/list/tloc/{id}||[**ConfigurationPolicyTLOCList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L43)||[**TLOCListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L22)| +GET /template/policy/list/tloc||[**ConfigurationPolicyTLOCList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L47)||DataSequence[[**TLOCListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L22)]| +GET /template/policy/list/tloc/filtered||[**ConfigurationPolicyTLOCList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L51)||DataSequence[[**TLOCListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L22)]| +POST /template/policy/list/tloc/preview||[**ConfigurationPolicyTLOCList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L55)|[**TLOCList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L269)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/tloc/preview/{id}||[**ConfigurationPolicyTLOCList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/tloc.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/urlwhitelist||[**ConfigurationPolicyURLAllowList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_allow_list.py#L27)|[**URLAllowList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L168)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/urlwhitelist/{id}||[**ConfigurationPolicyURLAllowList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_allow_list.py#L31)||None| +DELETE /template/policy/list/urlwhitelist||[**ConfigurationPolicyURLAllowList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_allow_list.py#L35)||None| +PUT /template/policy/list/urlwhitelist/{id}||[**ConfigurationPolicyURLAllowList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_allow_list.py#L39)|[**URLAllowListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_allow_list.py#L18)|None| +GET /template/policy/list/urlwhitelist/{id}||[**ConfigurationPolicyURLAllowList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_allow_list.py#L43)||[**URLAllowListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_allow_list.py#L22)| +GET /template/policy/list/urlwhitelist||[**ConfigurationPolicyURLAllowList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_allow_list.py#L47)||DataSequence[[**URLAllowListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_allow_list.py#L22)]| +GET /template/policy/list/urlwhitelist/filtered||[**ConfigurationPolicyURLAllowList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_allow_list.py#L51)||DataSequence[[**URLAllowListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_allow_list.py#L22)]| +POST /template/policy/list/urlwhitelist/preview||[**ConfigurationPolicyURLAllowList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_allow_list.py#L55)|[**URLAllowList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L168)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/urlwhitelist/preview/{id}||[**ConfigurationPolicyURLAllowList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_allow_list.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/urlblacklist||[**ConfigurationPolicyURLBlockList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_block_list.py#L27)|[**URLBlockList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L173)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/urlblacklist/{id}||[**ConfigurationPolicyURLBlockList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_block_list.py#L31)||None| +DELETE /template/policy/list/urlblacklist||[**ConfigurationPolicyURLBlockList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_block_list.py#L35)||None| +PUT /template/policy/list/urlblacklist/{id}||[**ConfigurationPolicyURLBlockList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_block_list.py#L39)|[**URLBlockListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_block_list.py#L18)|None| +GET /template/policy/list/urlblacklist/{id}||[**ConfigurationPolicyURLBlockList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_block_list.py#L43)||[**URLBlockListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_block_list.py#L22)| +GET /template/policy/list/urlblacklist||[**ConfigurationPolicyURLBlockList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_block_list.py#L47)||DataSequence[[**URLBlockListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_block_list.py#L22)]| +GET /template/policy/list/urlblacklist/filtered||[**ConfigurationPolicyURLBlockList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_block_list.py#L51)||DataSequence[[**URLBlockListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_block_list.py#L22)]| +POST /template/policy/list/urlblacklist/preview||[**ConfigurationPolicyURLBlockList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_block_list.py#L55)|[**URLBlockList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L173)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/urlblacklist/preview/{id}||[**ConfigurationPolicyURLBlockList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/url_block_list.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/vpn||[**ConfigurationPolicyVPNList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L29)|[**VPNList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L82)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/vpn/{id}||[**ConfigurationPolicyVPNList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L33)||None| +DELETE /template/policy/list/vpn||[**ConfigurationPolicyVPNList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L37)||None| +PUT /template/policy/list/vpn/{id}||[**ConfigurationPolicyVPNList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L41)|[**VPNListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L20)|None| +GET /template/policy/list/vpn/{id}||[**ConfigurationPolicyVPNList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L45)||[**VPNListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L24)| +GET /template/policy/list/vpn||[**ConfigurationPolicyVPNList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L49)||DataSequence[[**VPNListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L24)]| +GET /template/policy/list/vpn/filtered||[**ConfigurationPolicyVPNList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L53)||DataSequence[[**VPNListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L24)]| +POST /template/policy/list/vpn/preview||[**ConfigurationPolicyVPNList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L57)|[**VPNList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L82)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/vpn/preview/{id}||[**ConfigurationPolicyVPNList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/vpn.py#L61)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/list/zone||[**ConfigurationPolicyZoneList.create_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L27)|[**ZoneList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L95)|[**PolicyListId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L17)| +DELETE /template/policy/list/zone/{id}||[**ConfigurationPolicyZoneList.delete_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L31)||None| +DELETE /template/policy/list/zone||[**ConfigurationPolicyZoneList.delete_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L35)||None| +PUT /template/policy/list/zone/{id}||[**ConfigurationPolicyZoneList.edit_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L39)|[**ZoneListEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L18)|None| +GET /template/policy/list/zone/{id}||[**ConfigurationPolicyZoneList.get_lists_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L43)||[**ZoneListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L22)| +GET /template/policy/list/zone||[**ConfigurationPolicyZoneList.get_policy_lists**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L47)||DataSequence[[**ZoneListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L22)]| +GET /template/policy/list/zone/filtered||[**ConfigurationPolicyZoneList.get_policy_lists_with_info_tag**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L51)||DataSequence[[**ZoneListInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L22)]| +POST /template/policy/list/zone/preview||[**ConfigurationPolicyZoneList.preview_policy_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L55)|[**ZoneList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/lists.py#L95)|[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +GET /template/policy/list/zone/preview/{id}||[**ConfigurationPolicyZoneList.preview_policy_list_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/list/zone.py#L59)||[**PolicyListPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy_list.py#L31)| +POST /template/policy/security||[**ConfigurationSecurityTemplatePolicy.create_security_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/security_template.py#L17)|[**SecurityPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/security.py#L101), [**UnifiedSecurityPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/security.py#L136)|None| +DELETE /template/policy/security/{id}||[**ConfigurationSecurityTemplatePolicy.delete_security_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/security_template.py#L21)|None|None| +PUT /template/policy/security/{id}||[**ConfigurationSecurityTemplatePolicy.edit_security_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/security_template.py#L25)|[**SecurityPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/security.py#L101), [**UnifiedSecurityPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/security.py#L136)|[**SecurityPolicyEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/security.py#L170)| +GET /template/policy/security||[**ConfigurationSecurityTemplatePolicy.generate_security_template_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/security_template.py#L38)||DataSequence[[**SecurityPolicyInfoRoot**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/security.py#L189)]| +GET /template/policy/security/definition/{id}||[**ConfigurationSecurityTemplatePolicy.get_security_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/security_template.py#L50)||[**SecurityPolicyRoot**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/security.py#L166)| +POST /template/policy/vedge||[**ConfigurationVEdgeTemplatePolicy.create_vedge_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vedge_template.py#L22)|[**LocalizedPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/localized.py#L75)|[**PolicyId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy.py#L10)| +DELETE /template/policy/vedge/{id}||[**ConfigurationVEdgeTemplatePolicy.delete_vedge_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vedge_template.py#L26)||None| +PUT /template/policy/vedge/{id}||[**ConfigurationVEdgeTemplatePolicy.edit_vedge_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vedge_template.py#L30)|[**LocalizedPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/localized.py#L75)|[**LocalizedPolicyEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/localized.py#L125)| +GET /template/policy/vedge||[**ConfigurationVEdgeTemplatePolicy.generate_policy_template_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vedge_template.py#L34)||DataSequence[[**LocalizedPolicyInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/localized.py#L121)]| +GET /template/policy/vedge/devices/{id}||[**ConfigurationVEdgeTemplatePolicy.get_device_list_by_policy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vedge_template.py#L38)||DataSequence[[**LocalizedPolicyDeviceInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/localized.py#L131)]| +GET /template/policy/vedge/devices||[**ConfigurationVEdgeTemplatePolicy.get_vedge_policy_device_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vedge_template.py#L42)||DataSequence[[**LocalizedPolicyDeviceInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/localized.py#L131)]| +GET /template/policy/vedge/definition/{id}||[**ConfigurationVEdgeTemplatePolicy.get_vedge_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vedge_template.py#L46)||[**LocalizedPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/localized.py#L75)| +GET /template/policy/assembly/vedge/{id}||[**ConfigurationVEdgeTemplatePolicy.preview_by_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vedge_template.py#L50)||[**PolicyPreview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy.py#L94)| +POST /template/policy/vsmart/activate/{id}||[**ConfigurationVSmartTemplatePolicy.activate_policy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L32)|None|[**ActivateDeactivateTaskId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L27)| +GET /template/policy/vsmart/connectivity/status||[**ConfigurationVSmartTemplatePolicy.check_vsmart_connectivity_status**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L42)||DataSequence[[**VSmartConnectivityStatus**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L15)]| +POST /template/policy/vsmart||[**ConfigurationVSmartTemplatePolicy.create_vsmart_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L46)|[**CentralizedPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/centralized.py#L183)|[**PolicyId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/policy.py#L10)| +POST /template/policy/vsmart/deactivate/{id}||[**ConfigurationVSmartTemplatePolicy.deactivate_policy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L50)|None|[**ActivateDeactivateTaskId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L27)| +DELETE /template/policy/vsmart/{id}||[**ConfigurationVSmartTemplatePolicy.delete_vsmart_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L56)||None| +PUT /template/policy/vsmart/central/{id}||[**ConfigurationVSmartTemplatePolicy.edit_template_without_lock_checks**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L60)|[**CentralizedPolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/centralized.py#L220)|None| +PUT /template/policy/vsmart/{id}||[**ConfigurationVSmartTemplatePolicy.edit_vsmart_template**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L64)|[**CentralizedPolicyEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/centralized.py#L220)|None| +GET /template/policy/vsmart||[**ConfigurationVSmartTemplatePolicy.generate_vsmart_policy_template_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L68)||DataSequence[[**CentralizedPolicyInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/centralized.py#L224)]| +GET /template/policy/vsmart/definition/{id}||[**ConfigurationVSmartTemplatePolicy.get_template_by_policy_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/policy/vsmart_template.py#L72)||[**CentralizedPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/policy/centralized.py#L183)| +GET /device/action/remote-server||[**ConfigurationSoftwareActions.get_list_of_remote_servers**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L165)||DataSequence[[**RemoteServerInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L70)]| +POST /device/action/remote-server||[**ConfigurationSoftwareActions.add_new_remote_server**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L169)|[**RemoteServer**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L45)|None| +GET /device/action/remote-server/{id}||[**ConfigurationSoftwareActions.get_remote_server**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L173)||[**RemoteServerInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L70)| +PUT /device/action/remote-server/{id}||[**ConfigurationSoftwareActions.update_remote_server**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L177)|[**SoftwareRemoteServer**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L100)|None| +DELETE /device/action/remote-server/{id}||[**ConfigurationSoftwareActions.remove_remote_server**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L181)||None| +GET /device/action/software||[**ConfigurationSoftwareActions.get_software_images**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L185)||DataSequence[[**SoftwareImageDetails**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L111)]| +POST /device/action/software||[**ConfigurationSoftwareActions.upload_software_from_remote_server**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L189)|[**SoftwareRemoteServer**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L100)|None| +DELETE /device/action/software/{version_id}||[**ConfigurationSoftwareActions.delete_software_from_software_repository**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L193)||None| +GET /device/action/software/images||[**ConfigurationSoftwareActions.get_list_of_all_images**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L197)||DataSequence[[**SoftwareImageDetails**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration/software_actions.py#L111)]| +GET /device/action/status/{task_id}||[**ConfigurationDashboardStatus.find_status**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_dashboard_status.py#L91)||[**TaskData**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_dashboard_status.py#L78)| +GET /device/action/status/tasks||[**ConfigurationDashboardStatus.find_running_tasks**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_dashboard_status.py#L95)||[**TasksData**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_dashboard_status.py#L86)| +GET /device/action/install/devices/{device_type}||[**ConfigurationDeviceActions.get_list_of_installed_devices**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_actions.py#L182)||DataSequence[[**InstalledDeviceData**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_actions.py#L118)]| +GET /device/action/ztp/upgrade/setting||[**ConfigurationDeviceActions.get_ztp_upgrade_config_setting**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_actions.py#L216)||DataSequence[[**ZTPUpgradeSettings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_actions.py#L33)]| +POST /device/action/changepartition||[**ConfigurationDeviceActions.process_mark_change_partition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_actions.py#L232)|[**PartitionActionPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_actions.py#L61)|[**ActionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_actions.py#L25)| +POST /device/action/defaultpartition||[**ConfigurationDeviceActions.process_mark_default_partition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_actions.py#L240)|[**PartitionActionPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_actions.py#L61)|[**ActionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_actions.py#L25)| +POST /device/action/install||[**ConfigurationDeviceActions.process_install_operation**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_actions.py#L248)|[**InstallActionPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_actions.py#L109)|[**ActionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_actions.py#L25)| +POST /device/action/removepartition||[**ConfigurationDeviceActions.process_remove_partition**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_actions.py#L280)|[**RemovePartitionActionPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_actions.py#L69)|[**ActionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_actions.py#L25)| +POST /template/device/config/config/||[**ConfigurationDeviceTemplate.get_device_configuration_preview**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_template.py#L21)|[**FeatureToCLIPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_device_template.py#L12)|str|PROVIDER +GET /v1/feature-profile/sdwan/system/aaa/schema|>=20.9|[**ConfigurationFeatureProfile.get_sdwan_system_aaa_parcel_schema**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L41)||None| +GET /v1/feature-profile/sdwan/transport/cellular-controller/schema|>=20.9|[**ConfigurationFeatureProfile.get_sdwan_transport_cellular_controller_parcel_schema**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L46)||None| +GET /v1/feature-profile/sdwan/transport|>=20.9|[**ConfigurationFeatureProfile.get_sdwan_transport_feature_profiles**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L51)|Optional[[**GetFeatureProfilesPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L35)]|DataSequence[[**FeatureProfileInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L79)]| +POST /v1/feature-profile/sdwan/transport|>=20.9|[**ConfigurationFeatureProfile.create_sdwan_transport_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L58)|[**FeatureProfileCreationPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L111)|[**FeatureProfileCreationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L122)| +DELETE /v1/feature-profile/sdwan/transport/{transport_id}|>=20.9|[**ConfigurationFeatureProfile.delete_sdwan_transport_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L65)||None| +GET /v1/feature-profile/sdwan/system|>=20.9|[**ConfigurationFeatureProfile.get_sdwan_system_feature_profiles**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L70)|Optional[[**GetFeatureProfilesPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L35)]|DataSequence[[**FeatureProfileInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L79)]| +POST /v1/feature-profile/sdwan/system|>=20.9|[**ConfigurationFeatureProfile.create_sdwan_system_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L77)|[**FeatureProfileCreationPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L111)|[**FeatureProfileCreationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L122)| +DELETE /v1/feature-profile/sdwan/system/{system_id}|>=20.9|[**ConfigurationFeatureProfile.delete_sdwan_system_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L84)||None| +POST /v1/feature-profile/sdwan/system/{system_id}/aaa|>=20.9|[**ConfigurationFeatureProfile.create_aaa_profile_parcel_for_system**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L89)|[**_ParcelBase**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/api/configuration_groups/parcel.py#L11)|[**ParcelId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L31)| +POST /v1/feature-profile/sdwan/transport/{transport_id}/cellular-controller|>=20.9|[**ConfigurationFeatureProfile.create_cellular_controller_profile_parcel_for_transport**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L94)|[**_ParcelBase**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/api/configuration_groups/parcel.py#L11)|[**ParcelId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L31)| +GET /v1/feature-profile/sdwan|>=20.9|[**ConfigurationFeatureProfile.get_sdwan_feature_profiles**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L101)||DataSequence[[**FeatureProfileInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L79)]| +POST /v1/feature-profile/sd-routing/cli|>=20.13|[**SDRoutingConfigurationFeatureProfile.create_cli_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L108)|[**FeatureProfileCreationPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L111)|[**FeatureProfileCreationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L122)| +POST /v1/feature-profile/sd-routing/cli/{cli_fp_id}/full-config|>=20.13|[**SDRoutingConfigurationFeatureProfile.create_cli_full_config_parcel**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L113)|[**FullConfigParcel**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/feature_profile_parcel.py#L12)|[**ParcelId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L31)| +DELETE /v1/feature-profile/sd-routing/cli/{cli_fp_id}|>=20.13|[**SDRoutingConfigurationFeatureProfile.delete_cli_feature_profile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L118)||None| +DELETE /v1/feature-profile/sd-routing/cli/{cli_fp_id}/full-config/{parcel_id}|>=20.13|[**SDRoutingConfigurationFeatureProfile.delete_cli_full_config_parcel**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L123)||None| +PUT /v1/feature-profile/sd-routing/cli/{cli_fp_id}/full-config/{parcel_id}|>=20.13|[**SDRoutingConfigurationFeatureProfile.edit_cli_full_config_parcel**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L128)|[**FullConfigParcel**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/feature_profile_parcel.py#L12)|None| +GET /v1/feature-profile/sd-routing/cli|>=20.13|[**SDRoutingConfigurationFeatureProfile.get_cli_feature_profiles**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L133)|Optional[[**GetFeatureProfilesPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_feature_profile.py#L35)]|DataSequence[[**FeatureProfileInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/configuration/feature_profile/common.py#L79)]| +PUT /v1/config-group/{config_group_id}/device/associate|>=20.9|[**ConfigurationGroup.associate**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L122)|[**ConfigGroupAssociatePayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L61)|None| +POST /v1/config-group|>=20.9|[**ConfigurationGroup.create_config_group**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L127)|[**ConfigGroupCreationPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L20)|[**ConfigGroupCreationResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L108)| +POST /v1/config-group/{config_group_id}/device/variables|>=20.9|[**ConfigurationGroup.create_variables**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L132)|[**ConfigGroupVariablesCreatePayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L65)|[**ConfigGroupVariablesCreateResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L85)| +DELETE /v1/config-group/{config_group_id}|>=20.9|[**ConfigurationGroup.delete_config_group**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L139)||None| +POST /v1/config-group/{config_group_id}/device/deploy|>=20.9|[**ConfigurationGroup.deploy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L144)|[**ConfigGroupDeployPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L96)|[**ConfigGroupDeployResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L100)| +DELETE /v1/config-group/{config_group_id}/device/associate|>=20.9|[**ConfigurationGroup.disassociate**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L149)|[**ConfigGroupAssociatePayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L61)|[**ConfigGroupDisassociateResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L104)| +PUT /v1/config-group/{config_group_id}|>=20.9|[**ConfigurationGroup.edit_config_group**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L156)|[**ConfigGroupEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L50)|[**ConfigGroupEditResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L116)| +GET /v1/config-group|>=20.9|[**ConfigurationGroup.get**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L161)||DataSequence[[**ConfigGroup**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L39)]| +PUT /v1/config-group/{config_group_id}/device/variables|>=20.9|[**ConfigurationGroup.update_variables**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L166)|[**ConfigGroupVariablesEditPayload**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_group.py#L91)|None| +GET /settings/configuration/{setting_type}||[**ConfigurationSettings.get_configuration_by_setting_type**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L357)||None| +GET /settings/configuration/organization||[**ConfigurationSettings.get_organizations**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L361)||DataSequence[[**Organization**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L44)]| +GET /settings/configuration/device||[**ConfigurationSettings.get_devices**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L365)||DataSequence[[**Device**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L53)]|PROVIDER, SINGLE_TENANT +GET /settings/configuration/emailNotificationSettings||[**ConfigurationSettings.get_email_notification_settings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L370)||DataSequence[[**EmailNotificationSettings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L61)]| +GET /settings/configuration/hardwarerootca||[**ConfigurationSettings.get_hardware_root_cas**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L374)||DataSequence[[**HardwareRootCA**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L65)]|PROVIDER, SINGLE_TENANT +GET /settings/configuration/certificate||[**ConfigurationSettings.get_certificates**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L379)||DataSequence[[**Certificate**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L73)]|PROVIDER, SINGLE_TENANT +GET /settings/configuration/vedgecloud||[**ConfigurationSettings.get_vedge_cloud**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L384)||DataSequence[[**VEdgeCloud**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L85)]|PROVIDER, SINGLE_TENANT +GET /settings/configuration/crlSetting||[**ConfigurationSettings.get_clr_settings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L389)||DataSequence[[**CRLSettings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L316)]|PROVIDER, SINGLE_TENANT +GET /settings/configuration/banner||[**ConfigurationSettings.get_banner**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L394)||DataSequence[[**Banner**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L89)]| +GET /settings/configuration/proxyHttpServer||[**ConfigurationSettings.get_proxy_http_servers**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L398)||DataSequence[[**ProxyHTTPServer**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L97)]| +GET /settings/configuration/reverseproxy||[**ConfigurationSettings.get_reverse_proxies**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L402)||DataSequence[[**ReverseProxy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L106)]| +GET /settings/configuration/cloudx||[**ConfigurationSettings.get_cloudx**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L406)||DataSequence[[**CloudX**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L110)]| +GET /settings/configuration/manageEncryptedPassword||[**ConfigurationSettings.get_manage_encrypted_password**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L410)||DataSequence[[**ManageEncryptedPassword**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L114)]| +GET /settings/configuration/cloudservices||[**ConfigurationSettings.get_cloudservices**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L414)||DataSequence[[**CloudServices**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L121)]|PROVIDER, SINGLE_TENANT +GET /settings/configuration/clientSessionTimeout||[**ConfigurationSettings.get_client_session_timeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L419)||DataSequence[[**ClientSessionTimeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L134)]| +GET /settings/configuration/sessionLifeTime||[**ConfigurationSettings.get_session_life_time**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L423)||DataSequence[[**SessionLifeTime**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L142)]| +GET /settings/configuration/serverSessionTimeout||[**ConfigurationSettings.get_server_session_timeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L427)||DataSequence[[**ServerSessionTimeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L149)]| +GET /settings/configuration/maxSessionsPerUser||[**ConfigurationSettings.get_max_sessions_per_user**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L431)||DataSequence[[**MaxSessionsPerUser**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L156)]| +GET /settings/configuration/passwordPolicy||[**ConfigurationSettings.get_password_policy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L435)||DataSequence[[**PasswordPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L163)]| +GET /settings/configuration/vmanagedatastream||[**ConfigurationSettings.get_vmanage_data_stream**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L439)||DataSequence[[**VManageDataStream**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L173)]|PROVIDER, SINGLE_TENANT +GET /settings/configuration/dataCollectionOnNotification||[**ConfigurationSettings.get_data_collection_on_notification**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L444)||DataSequence[[**DataCollectionOnNotification**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L183)]|PROVIDER, SINGLE_TENANT +GET /settings/configuration/sdWanTelemetry||[**ConfigurationSettings.get_sdwan_telemetry**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L449)||DataSequence[[**SDWANTelemetry**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L187)]|PROVIDER, SINGLE_TENANT +GET /management/statsconfig||[**ConfigurationSettings.get_stats_config**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L454)||DataSequence[[**StatsOperation**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L191)]|PROVIDER, SINGLE_TENANT +GET /settings/configuration/spMetadata||[**ConfigurationSettings.get_sp_metadata**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L459)||str| +GET /management/elasticsearch/index/size||[**ConfigurationSettings.get_elasticsearch_db_size**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L463)||DataSequence[[**ElasticSearchDBSize**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L211)]| +GET /settings/configuration/googleMapKey||[**ConfigurationSettings.get_google_map_key**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L467)||DataSequence[[**GoogleMapKey**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L219)]| +GET /settings/configuration/maintenanceWindow||[**ConfigurationSettings.get_maintenance_window**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L471)||DataSequence[[**MaintenanceWindow**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L201)]|PROVIDER, SINGLE_TENANT +GET /settings/configuration/softwareMaintenance||[**ConfigurationSettings.get_software_install_timeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L476)||DataSequence[[**SoftwareInstallTimeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L223)]| +GET /settings/configuration/credentials||[**ConfigurationSettings.get_ips_signature_settings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L480)||DataSequence[[**IPSSignatureSettings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L253)]| +GET /settings/configuration/smartaccountcredentials||[**ConfigurationSettings.get_smart_account_credentials**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L484)||DataSequence[[**SmartAccountCredentials**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L264)]|PROVIDER, SINGLE_TENANT +GET /settings/configuration/pnpConnectSync||[**ConfigurationSettings.get_pnp_connect_sync**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L489)||DataSequence[[**PnPConnectSync**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L269)]|PROVIDER, SINGLE_TENANT +GET /settings/configuration/claimDevice||[**ConfigurationSettings.get_claim_device**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L494)||DataSequence[[**ClaimDevice**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L273)]| +GET /settings/configuration/walkme||[**ConfigurationSettings.get_walkme**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L498)||DataSequence[[**WalkMe**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L277)]| +GET /settings/configuration/smartLicensing||[**ConfigurationSettings.get_smart_licensing_settings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L502)||DataSequence[[**SmartLicensingSetting**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L285)]|PROVIDER, SINGLE_TENANT +PUT /settings/configuration/{setting_type}||[**ConfigurationSettings.edit_configuration_by_setting_type**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L515)|None|None| +PUT /settings/configuration/organization||[**ConfigurationSettings.edit_organizations**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L519)|[**Organization**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L44)|DataSequence[[**Organization**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L44)]| +PUT /settings/configuration/device||[**ConfigurationSettings.edit_devices**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L523)|[**Device**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L53)|DataSequence[[**Device**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L53)]|PROVIDER, SINGLE_TENANT +PUT /settings/configuration/emailNotificationSettings||[**ConfigurationSettings.edit_email_notification_settings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L528)|[**EmailNotificationSettings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L61)|DataSequence[[**EmailNotificationSettings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L61)]| +PUT /settings/configuration/hardwarerootca||[**ConfigurationSettings.edit_hardware_root_cas**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L534)|[**HardwareRootCA**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L65)|DataSequence[[**HardwareRootCA**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L65)]|PROVIDER, SINGLE_TENANT +PUT /settings/configuration/certificate||[**ConfigurationSettings.edit_certificates**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L539)|[**Certificate**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L73)|DataSequence[[**Certificate**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L73)]|PROVIDER, SINGLE_TENANT +PUT /settings/configuration/vedgecloud||[**ConfigurationSettings.edit_vedge_cloud**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L544)|[**VEdgeCloud**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L85)|DataSequence[[**VEdgeCloud**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L85)]|PROVIDER, SINGLE_TENANT +PUT /settings/configuration/banner||[**ConfigurationSettings.edit_banner**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L549)|[**Banner**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L89)|DataSequence[[**Banner**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L89)]| +PUT /settings/configuration/proxyHttpServer||[**ConfigurationSettings.edit_proxy_http_servers**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L553)|[**ProxyHTTPServer**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L97)|DataSequence[[**ProxyHTTPServer**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L97)]| +PUT /settings/configuration/reverseproxy||[**ConfigurationSettings.edit_reverse_proxies**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L557)|[**ReverseProxy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L106)|DataSequence[[**ReverseProxy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L106)]| +PUT /settings/configuration/cloudx||[**ConfigurationSettings.edit_cloudx**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L561)|[**CloudX**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L110)|DataSequence[[**CloudX**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L110)]| +PUT /settings/configuration/manageEncryptedPassword||[**ConfigurationSettings.edit_manage_encrypted_password**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L565)|[**ManageEncryptedPassword**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L114)|DataSequence[[**ManageEncryptedPassword**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L114)]| +PUT /settings/configuration/cloudservices||[**ConfigurationSettings.edit_cloudservices**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L569)|[**CloudServices**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L121)|DataSequence[[**CloudServices**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L121)]|PROVIDER, SINGLE_TENANT +PUT /settings/configuration/clientSessionTimeout||[**ConfigurationSettings.edit_client_session_timeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L574)|[**ClientSessionTimeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L134)|DataSequence[[**ClientSessionTimeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L134)]| +PUT /settings/configuration/sessionLifeTime||[**ConfigurationSettings.edit_session_life_time**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L578)|[**SessionLifeTime**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L142)|DataSequence[[**SessionLifeTime**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L142)]| +PUT /settings/configuration/serverSessionTimeout||[**ConfigurationSettings.edit_server_session_timeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L582)|[**ServerSessionTimeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L149)|DataSequence[[**ServerSessionTimeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L149)]| +PUT /settings/configuration/maxSessionsPerUser||[**ConfigurationSettings.edit_max_sessions_per_user**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L586)|[**MaxSessionsPerUser**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L156)|DataSequence[[**MaxSessionsPerUser**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L156)]| +PUT /settings/configuration/passwordPolicy||[**ConfigurationSettings.edit_password_policy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L590)|[**PasswordPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L163)|DataSequence[[**PasswordPolicy**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L163)]| +PUT /settings/configuration/vmanagedatastream||[**ConfigurationSettings.edit_vmanage_data_stream**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L594)|[**VManageDataStream**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L173)|DataSequence[[**VManageDataStream**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L173)]|PROVIDER, SINGLE_TENANT +PUT /settings/configuration/dataCollectionOnNotification||[**ConfigurationSettings.edit_data_collection_on_notification**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L599)|[**DataCollectionOnNotification**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L183)|DataSequence[[**DataCollectionOnNotification**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L183)]|PROVIDER, SINGLE_TENANT +PUT /settings/configuration/sdWanTelemetry||[**ConfigurationSettings.edit_sdwan_telemetry**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L606)|[**SDWANTelemetry**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L187)|DataSequence[[**SDWANTelemetry**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L187)]|PROVIDER, SINGLE_TENANT +POST /management/statsconfig||[**ConfigurationSettings.edit_stats_config**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L611)|[**StatsConfig**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L308)|DataSequence[[**StatsOperation**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L191)]|PROVIDER, SINGLE_TENANT +PUT /settings/configuration/spMetadata||[**ConfigurationSettings.edit_sp_metadata**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L616)|str|str| +PUT /management/elasticsearch/index/size||[**ConfigurationSettings.edit_elasticsearch_db_size**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L620)|[**ElasticSearchDBSize**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L211)|DataSequence[[**ElasticSearchDBSize**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L211)]| +PUT /settings/configuration/googleMapKey||[**ConfigurationSettings.edit_google_map_key**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L624)|[**GoogleMapKey**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L219)|DataSequence[[**GoogleMapKey**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L219)]| +PUT /settings/configuration/maintenanceWindow||[**ConfigurationSettings.edit_maintenance_window**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L628)|[**MaintenanceWindow**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L201)|DataSequence[[**MaintenanceWindow**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L201)]|PROVIDER, SINGLE_TENANT +PUT /settings/configuration/softwareMaintenance||[**ConfigurationSettings.edit_software_install_timeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L633)|[**SoftwareInstallTimeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L223)|DataSequence[[**SoftwareInstallTimeout**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L223)]| +PUT /settings/configuration/credentials||[**ConfigurationSettings.edit_ips_signature_settings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L637)|[**IPSSignatureSettings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L253)|DataSequence[[**IPSSignatureSettings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L253)]| +PUT /settings/configuration/smartaccountcredentials||[**ConfigurationSettings.edit_smart_account_credentials**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L641)|[**SmartAccountCredentials**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L264)|DataSequence[[**SmartAccountCredentials**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L264)]|PROVIDER, SINGLE_TENANT +PUT /settings/configuration/pnpConnectSync||[**ConfigurationSettings.edit_pnp_connect_sync**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L646)|[**PnPConnectSync**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L269)|DataSequence[[**PnPConnectSync**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L269)]|PROVIDER, SINGLE_TENANT +PUT /settings/configuration/claimDevice||[**ConfigurationSettings.edit_claim_device**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L651)|[**ClaimDevice**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L273)|DataSequence[[**ClaimDevice**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L273)]| +PUT /settings/configuration/walkme||[**ConfigurationSettings.edit_walkme**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L655)|[**WalkMe**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L277)|DataSequence[[**WalkMe**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L277)]| +PUT /settings/configuration/smartLicensing||[**ConfigurationSettings.edit_smart_licensing_settings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L659)|[**SmartLicensingSetting**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L285)|DataSequence[[**SmartLicensingSetting**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/configuration_settings.py#L285)]|PROVIDER, SINGLE_TENANT +GET /app/json/application_protocol.json||[**MiscellaneousEndpoints.get_application_protocols**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/misc.py#L14)||DataSequence[[**ApplicationProtocolMap**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/misc/application_protocols.py#L28)]| +GET /device/tier||[**MonitoringDeviceDetails.get_tiers**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_device_details.py#L159)||DataSequence[[**Tier**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_device_details.py#L17)]| +GET /device||[**MonitoringDeviceDetails.list_all_devices**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_device_details.py#L183)||DataSequence[[**DeviceData**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_device_details.py#L37)]| +GET /statistics/settings/disable/devicelist/{indexName}||[**MonitoringStatus.get_disabled_device_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L58)||[**DisabledDeviceListResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L45)| +PUT /statistics/settings/disable/devicelist/{indexName}||[**MonitoringStatus.update_statistics_device_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L62)|[**DisabledDeviceList**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L41)|[**UpdateIndexResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L49)| +GET /statistics/settings/status||[**MonitoringStatus.get_statistics_settings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L66)||DataSequence[[**Status**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L23)]| +PUT /statistics/settings/status||[**MonitoringStatus.update_statistics_settings**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L70)|list[[**UpdateStatus**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L29)]|DataSequence[[**Status**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L23)]| +GET /statistics/settings/status/device||[**MonitoringStatus.get_enabled_index_for_device**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L74)||[**EnabledIndexDeviceListResponse**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/monitoring_status.py#L53)| +GET /device/reboothistory||[**RealTimeMonitoringRebootHistory.create_reboot_history_list**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/real_time_monitoring/reboot_history.py#L25)||DataSequence[[**RebootEntry**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/real_time_monitoring/reboot_history.py#L13)]| +GET /sdavc/cloudconnector||[**SDAVCCloudConnector.get_cloud_connector**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/sdavc_cloud_connector.py#L30)||[**CloudConnector**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/sdavc_cloud_connector.py#L12)| +GET /tenantbackup/list||[**TenantBackupRestore.list_tenant_backup**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_backup_restore.py#L37)||[**BackupFiles**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_backup_restore.py#L12)|PROVIDER_AS_TENANT, TENANT +POST /tenant||[**TenantManagement.create_tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L120)|[**Tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/tenant.py#L23)|[**Tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/tenant.py#L23)|PROVIDER +POST /tenant/async||[**TenantManagement.create_tenant_async**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L125)|[**Tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/tenant.py#L23)|[**TenantTaskId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L23)|PROVIDER +POST /tenant/bulk/async|>=20.4|[**TenantManagement.create_tenant_async_bulk**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L130)|list[[**Tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/tenant.py#L23)]|[**TenantTaskId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L23)|PROVIDER +DELETE /tenant/{tenant_id}/delete||[**TenantManagement.delete_tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L136)|[**TenantDeleteRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L14)|None|PROVIDER +DELETE /tenant/bulk/async|>=20.4|[**TenantManagement.delete_tenant_async_bulk**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L141)|[**TenantBulkDeleteRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L18)|[**TenantTaskId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L23)|PROVIDER +GET /tenantstatus||[**TenantManagement.get_all_tenant_statuses**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L151)||DataSequence[[**TenantStatus**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L56)]|PROVIDER, PROVIDER_AS_TENANT +GET /tenant||[**TenantManagement.get_all_tenants**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L156)||DataSequence[[**Tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/tenant.py#L23)]|PROVIDER, PROVIDER_AS_TENANT +GET /tenant/{tenant_id}||[**TenantManagement.get_tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L161)||[**Tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/tenant.py#L23)|PROVIDER, PROVIDER_AS_TENANT +GET /tenant/vsmart/capacity||[**TenantManagement.get_tenant_hosting_capacity_on_vsmarts**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L166)||DataSequence[[**vSmartTenantCapacity**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L105)]|PROVIDER +GET /tenant/vsmart||[**TenantManagement.get_tenant_vsmart_mapping**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L171)||[**vSmartTenantMap**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L111)|PROVIDER, PROVIDER_AS_TENANT +PUT /tenant/{tenant_id}||[**TenantManagement.update_tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L184)|[**TenantUpdateRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L65)|[**Tenant**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/tenant.py#L23)|PROVIDER +PUT /tenant/{tenant_id}/vsmart||[**TenantManagement.update_tenant_vsmart_placement**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L189)|[**vSmartPlacementUpdateRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L100)|None|PROVIDER +POST /tenant/{tenant_id}/vsessionid||[**TenantManagement.vsession_id**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L194)||[**vSessionId**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_management.py#L115)|PROVIDER +GET /tenantmigration/download/{path}|>=20.6|[**TenantMigration.download_tenant_data**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L50)||bytes|PROVIDER, SINGLE_TENANT +POST /tenantmigration/export|>=20.6|[**TenantMigration.export_tenant_data**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L56)|[**TenantExport**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/models/tenant.py#L54)|[**ExportInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L18)|PROVIDER, SINGLE_TENANT +GET /tenantmigration/migrationToken|>=20.6|[**TenantMigration.get_migration_token**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L62)||str|PROVIDER, SINGLE_TENANT +POST /tenantmigration/import|<20.13,>=20.6|[**TenantMigration.import_tenant_data**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L68)|[**MigrationFile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L40)|[**ImportInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L22)|PROVIDER, SINGLE_TENANT +POST /tenantmigration/import/{migration_key}|>=20.13|[**TenantMigration.import_tenant_data_with_key**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L74)|[**MigrationFile**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L40)|[**ImportInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L22)|PROVIDER, SINGLE_TENANT +POST /tenantmigration/networkMigration|>=20.6|[**TenantMigration.migrate_network**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L80)|str|[**MigrationInfo**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/tenant_migration.py#L36)|PROVIDER, SINGLE_TENANT +POST /device/tools/nping/{device_ip}||[**TroubleshootingToolsDeviceConnectivity.nping_device**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/troubleshooting_tools/device_connectivity.py#L94)|[**NPingRequest**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/troubleshooting_tools/device_connectivity.py#L18)|[**NPingResult**](https://github.com/CiscoDevNet/catalystwan/blob/main/catalystwan/endpoints/troubleshooting_tools/device_connectivity.py#L37)| diff --git a/README.md b/README.md index e13143b6c..3c93450f9 100644 --- a/README.md +++ b/README.md @@ -11,27 +11,89 @@ Cisco Catalyst WAN SDK is a package for creating simple and parallel automatic r pip install catalystwan ``` -## Session usage example -Our session is an extension to `requests.Session` designed to make it easier to communicate via API calls with SDWAN Manager. We provide ready to use authentication, you have to simply provide the Manager url, username and password as as if you were doing it through a GUI. +## Manager Session +In order to execute SDK APIs **ManagerSession** needs to be created. The fastest way to get started is to use `create_manager_session()` method which configures session, performs authentication for given credentials and returns **ManagerSession** instance in operational state. **ManagerSession** provides a collection of supported APIs in `api` instance variable. +Please check example below: + ```python from catalystwan.session import create_manager_session url = "example.com" username = "admin" password = "password123" + with create_manager_session(url=url, username=username, password=password) as session: - session.get("/dataservice/device") + devices = session.api.devices.get() + print(devices) +``` +**ManagerSession** extends [requests.Session](https://requests.readthedocs.io/en/latest/user/advanced/#session-objects) so all functionality from [requests](https://requests.readthedocs.io/en/latest/) library is avaiable to user, it also implements python [contextmanager](https://docs.python.org/3.8/library/contextlib.html#contextlib.contextmanager) and automatically frees server resources on exit. + +
+ Configure Manager Session before using (click to expand) + +It is possible to configure **ManagerSession** prior sending any request. -# When interacting with the SDWAN Manager API without using a context manager, it's important -# to manually execute the `close()` method to release the user session resource. +```python +from catalystwan.session import ManagerSession + +url = "example.com" +username = "admin" +password = "password123" -session = create_manager_session(url=url, username=username, password=password) +# configure session using constructor - nothing will be sent to target server yet +session = ManagerSession(url=url, username=username, password=password) +# login and send requests +session.login() session.get("/dataservice/device") session.close() ``` +When interacting with the SDWAN Manager API without using a context manager, it's important +to manually execute the `close()` method to release the user session resource. Ensure that the `close()` method is called after you have finished using the session to maintain optimal resource management and avoid potential errors. +
+ +
+ Login as Tenant (click to expand) + +Tenant domain needs to be provided in url together with Tenant credentials. + +```python +from catalystwan.session import create_manager_session + +url = "tenant.example.com" +username = "tenant_user" +password = "password123" + +with create_manager_session(url=url, username=username, password=password) as session: + print(session.session_type) +``` + +
+ +
+ Login as Provider-as-Tenant (click to expand) + +Tenant `subdomain` needs to be provided as additional argument together with Provider credentials. + +```python +from catalystwan.session import create_manager_session + +url = "example.com" +username = "provider" +password = "password123" +subdomain = "tenant.example.com" + +with create_manager_session(url=url, username=username, password=password, subdomain=subdomain) as session: + print(session.session_type) +``` + +
+ + + ## API usage examples +All examples below assumes `session` variable contains logged-in [Manager Session](#Manager-Session) instance.
Get devices (click to expand) @@ -67,7 +129,8 @@ speedtest = session.api.speedtest.speedtest(devices[0], devices[1]) ```python # Prepare devices list -vsmarts = session.api.devices.get().filter(personality=Personality.VSMART) +controllers = session.endpoints.configuration_device_inventory.get_device_details('controllers') +vsmarts = controllers.filter(personality=Personality.VSMART) image = "viptela-20.7.2-x86_64.tar.gz" # Upload image diff --git a/catalystwan/__init__.py b/catalystwan/__init__.py index 18d736345..80c519b83 100644 --- a/catalystwan/__init__.py +++ b/catalystwan/__init__.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + import logging import logging.config import multiprocessing @@ -11,6 +13,8 @@ import urllib3 +USER_AGENT = f"{__package__}/{metadata.version(__package__)}" + def with_proc_info_header(method: Callable[..., str]) -> Callable[..., str]: """ diff --git a/catalystwan/abstractions.py b/catalystwan/abstractions.py index 7dd6d3c6b..fb173536d 100644 --- a/catalystwan/abstractions.py +++ b/catalystwan/abstractions.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import Optional, Protocol, Type, TypeVar from packaging.version import Version # type: ignore diff --git a/catalystwan/api/admin_tech_api.py b/catalystwan/api/admin_tech_api.py index 16fa1f4c1..06e95c9fe 100644 --- a/catalystwan/api/admin_tech_api.py +++ b/catalystwan/api/admin_tech_api.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + """ Module for handling admintech logs for a device """ diff --git a/catalystwan/api/administration.py b/catalystwan/api/administration.py index 4a7076c42..14c793569 100644 --- a/catalystwan/api/administration.py +++ b/catalystwan/api/administration.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + from __future__ import annotations import logging diff --git a/catalystwan/api/alarms_api.py b/catalystwan/api/alarms_api.py index 3e04921a8..d461c22c7 100644 --- a/catalystwan/api/alarms_api.py +++ b/catalystwan/api/alarms_api.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + from __future__ import annotations import logging diff --git a/catalystwan/api/api_container.py b/catalystwan/api/api_container.py index fce5a21a0..290a0b26b 100644 --- a/catalystwan/api/api_container.py +++ b/catalystwan/api/api_container.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations from typing import TYPE_CHECKING diff --git a/catalystwan/api/basic_api.py b/catalystwan/api/basic_api.py index 39da0506b..bf1057b23 100644 --- a/catalystwan/api/basic_api.py +++ b/catalystwan/api/basic_api.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + """Methods covering essential API endpoints and related data classes.""" from __future__ import annotations diff --git a/catalystwan/api/config_device_inventory_api.py b/catalystwan/api/config_device_inventory_api.py index cf6d6fd5d..1d794416a 100644 --- a/catalystwan/api/config_device_inventory_api.py +++ b/catalystwan/api/config_device_inventory_api.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations from typing import TYPE_CHECKING diff --git a/catalystwan/api/config_group_api.py b/catalystwan/api/config_group_api.py index 1d7555bfe..9e3d9fbab 100644 --- a/catalystwan/api/config_group_api.py +++ b/catalystwan/api/config_group_api.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations from typing import TYPE_CHECKING diff --git a/catalystwan/api/configuration_groups/parcel.py b/catalystwan/api/configuration_groups/parcel.py index a48a2c6e6..df4c20a59 100644 --- a/catalystwan/api/configuration_groups/parcel.py +++ b/catalystwan/api/configuration_groups/parcel.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from enum import Enum from typing import Any, Dict, Generic, Literal, Optional, TypeVar, get_origin diff --git a/catalystwan/api/configuration_groups/parcels/cellular_controller.py b/catalystwan/api/configuration_groups/parcels/cellular_controller.py index 39281a50f..d0d753482 100644 --- a/catalystwan/api/configuration_groups/parcels/cellular_controller.py +++ b/catalystwan/api/configuration_groups/parcels/cellular_controller.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from enum import Enum from typing import Union diff --git a/catalystwan/api/dashboard_api.py b/catalystwan/api/dashboard_api.py index f40be3df8..c9e51adcc 100644 --- a/catalystwan/api/dashboard_api.py +++ b/catalystwan/api/dashboard_api.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations from typing import TYPE_CHECKING diff --git a/catalystwan/api/device_action_api.py b/catalystwan/api/device_action_api.py index ea38547ca..91c572cf8 100644 --- a/catalystwan/api/device_action_api.py +++ b/catalystwan/api/device_action_api.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + from __future__ import annotations import logging diff --git a/catalystwan/api/feature_profile_api.py b/catalystwan/api/feature_profile_api.py index abdf84871..bd14d3928 100644 --- a/catalystwan/api/feature_profile_api.py +++ b/catalystwan/api/feature_profile_api.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations from typing import TYPE_CHECKING, Any, Protocol, Type, Union, overload diff --git a/catalystwan/api/logs_api.py b/catalystwan/api/logs_api.py index 7cb069a0a..557a7d16b 100644 --- a/catalystwan/api/logs_api.py +++ b/catalystwan/api/logs_api.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + from __future__ import annotations import logging diff --git a/catalystwan/api/monitoring_status_api.py b/catalystwan/api/monitoring_status_api.py index 12987fa11..ebc5d111c 100644 --- a/catalystwan/api/monitoring_status_api.py +++ b/catalystwan/api/monitoring_status_api.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from __future__ import annotations import logging diff --git a/catalystwan/api/mtt_aaa_api.py b/catalystwan/api/mtt_aaa_api.py index e196fecd8..c219c02b2 100644 --- a/catalystwan/api/mtt_aaa_api.py +++ b/catalystwan/api/mtt_aaa_api.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations import logging diff --git a/catalystwan/api/omp_api.py b/catalystwan/api/omp_api.py index cdc2507b1..e87f491a8 100644 --- a/catalystwan/api/omp_api.py +++ b/catalystwan/api/omp_api.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + from __future__ import annotations from typing import TYPE_CHECKING, List diff --git a/catalystwan/api/packet_capture_api.py b/catalystwan/api/packet_capture_api.py index b5a34ff05..b8236640c 100644 --- a/catalystwan/api/packet_capture_api.py +++ b/catalystwan/api/packet_capture_api.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + from __future__ import annotations import logging diff --git a/catalystwan/api/parcel_api.py b/catalystwan/api/parcel_api.py index 64a6294da..5417c63df 100644 --- a/catalystwan/api/parcel_api.py +++ b/catalystwan/api/parcel_api.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations from typing import TYPE_CHECKING, Protocol diff --git a/catalystwan/api/partition_manager_api.py b/catalystwan/api/partition_manager_api.py index 63b855630..6299d8b59 100644 --- a/catalystwan/api/partition_manager_api.py +++ b/catalystwan/api/partition_manager_api.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations import logging @@ -5,12 +7,12 @@ from catalystwan.api.task_status_api import Task from catalystwan.api.versions_utils import DeviceVersions, RepositoryAPI -from catalystwan.dataclasses import Device from catalystwan.endpoints.configuration_device_actions import ( PartitionActionPayload, RemovePartitionActionPayload, RemovePartitionDevice, ) +from catalystwan.endpoints.configuration_device_inventory import DeviceDetailsResponse from catalystwan.exceptions import EmptyVersionPayloadError from catalystwan.typed_list import DataSequence from catalystwan.utils.upgrades_helper import get_install_specification, validate_personality_homogeneity @@ -48,7 +50,9 @@ def __init__(self, session: ManagerSession) -> None: self.repository = RepositoryAPI(self.session) self.device_version = DeviceVersions(self.session) - def set_default_partition(self, devices: DataSequence[Device], partition: Optional[str] = None) -> Task: + def set_default_partition( + self, devices: DataSequence[DeviceDetailsResponse], partition: Optional[str] = None + ) -> Task: """ Set default software versions for devices @@ -82,7 +86,7 @@ def set_default_partition(self, devices: DataSequence[Device], partition: Option return Task(self.session, partition_action.id) def remove_partition( - self, devices: DataSequence[Device], partition: Optional[str] = None, force: bool = False + self, devices: DataSequence[DeviceDetailsResponse], partition: Optional[str] = None, force: bool = False ) -> Task: """ Remove chosen software version from device diff --git a/catalystwan/api/policy_api.py b/catalystwan/api/policy_api.py index bb73b2931..ff6d40cb0 100644 --- a/catalystwan/api/policy_api.py +++ b/catalystwan/api/policy_api.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations from typing import TYPE_CHECKING, Any, Dict, List, Mapping, Optional, Type, overload @@ -122,13 +124,13 @@ from catalystwan.endpoints.configuration.policy.list.site import ConfigurationPolicySiteList, SiteListInfo from catalystwan.endpoints.configuration.policy.list.sla import ConfigurationPolicySLAClassList, SLAClassListInfo from catalystwan.endpoints.configuration.policy.list.tloc import ConfigurationPolicyTLOCList, TLOCListInfo -from catalystwan.endpoints.configuration.policy.list.url_black_list import ( - ConfigurationPolicyURLBlackList, - URLBlackListInfo, +from catalystwan.endpoints.configuration.policy.list.url_allow_list import ( + ConfigurationPolicyURLAllowList, + URLAllowListInfo, ) -from catalystwan.endpoints.configuration.policy.list.url_white_list import ( - ConfigurationPolicyURLWhiteList, - URLWhiteListInfo, +from catalystwan.endpoints.configuration.policy.list.url_block_list import ( + ConfigurationPolicyURLBlockList, + URLBlockListInfo, ) from catalystwan.endpoints.configuration.policy.list.vpn import ConfigurationPolicyVPNList, VPNListInfo from catalystwan.endpoints.configuration.policy.list.zone import ConfigurationPolicyZoneList, ZoneListInfo @@ -181,8 +183,8 @@ SiteList, SLAClassList, TLOCList, - URLBlackList, - URLWhiteList, + URLAllowList, + URLBlockList, VPNList, ZoneList, ) @@ -238,8 +240,8 @@ SiteList: ConfigurationPolicySiteList, SLAClassList: ConfigurationPolicySLAClassList, TLOCList: ConfigurationPolicyTLOCList, - URLBlackList: ConfigurationPolicyURLBlackList, - URLWhiteList: ConfigurationPolicyURLWhiteList, + URLBlockList: ConfigurationPolicyURLBlockList, + URLAllowList: ConfigurationPolicyURLAllowList, VPNList: ConfigurationPolicyVPNList, ZoneList: ConfigurationPolicyZoneList, } @@ -498,11 +500,11 @@ def get(self, type: Type[TLOCList]) -> DataSequence[TLOCListInfo]: ... @overload - def get(self, type: Type[URLBlackList]) -> DataSequence[URLBlackListInfo]: + def get(self, type: Type[URLBlockList]) -> DataSequence[URLBlockListInfo]: ... @overload - def get(self, type: Type[URLWhiteList]) -> DataSequence[URLWhiteListInfo]: + def get(self, type: Type[URLAllowList]) -> DataSequence[URLAllowListInfo]: ... @overload @@ -616,11 +618,11 @@ def get(self, type: Type[TLOCList], id: UUID) -> TLOCListInfo: ... @overload - def get(self, type: Type[URLBlackList], id: UUID) -> URLBlackListInfo: + def get(self, type: Type[URLBlockList], id: UUID) -> URLBlockListInfo: ... @overload - def get(self, type: Type[URLWhiteList], id: UUID) -> URLWhiteListInfo: + def get(self, type: Type[URLAllowList], id: UUID) -> URLAllowListInfo: ... @overload diff --git a/catalystwan/api/resource_pool_api.py b/catalystwan/api/resource_pool_api.py index 19b2d1aa4..9802bb6ee 100644 --- a/catalystwan/api/resource_pool_api.py +++ b/catalystwan/api/resource_pool_api.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations import logging diff --git a/catalystwan/api/software_action_api.py b/catalystwan/api/software_action_api.py index 398730139..b7d1502ca 100644 --- a/catalystwan/api/software_action_api.py +++ b/catalystwan/api/software_action_api.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations import logging @@ -5,14 +7,15 @@ from catalystwan.api.task_status_api import Task from catalystwan.api.versions_utils import DeviceVersions, RepositoryAPI -from catalystwan.dataclasses import Device from catalystwan.endpoints.configuration_device_actions import ( InstallActionPayload, + InstallData, InstallDevice, InstallInput, PartitionActionPayload, ) -from catalystwan.exceptions import EmptyVersionPayloadError, VersionDeclarationError # type: ignore +from catalystwan.endpoints.configuration_device_inventory import DeviceDetailsResponse +from catalystwan.exceptions import EmptyVersionPayloadError, ImageNotInRepositoryError # type: ignore from catalystwan.typed_list import DataSequence from catalystwan.utils.personality import Personality from catalystwan.utils.upgrades_helper import get_install_specification, validate_personality_homogeneity @@ -35,13 +38,12 @@ class SoftwareActionAPI: session = create_manager_session(...) # Prepare devices list - devices = session.api.devices.get() - vsmarts = devices.filter(personality=Personality.VSMART) + controllers = session.endpoints.configuration_device_inventory.get_device_details('controllers') + vsmarts = controllers.filter(personality=Personality.VSMART) software_image = "viptela-20.7.2-x86_64.tar.gz" # Upgrade - upgrade_id = SoftwareActionAPI(session).install(devices = vmanages, - software_image=software_image) + upgrade_id = SoftwareActionAPI(session).install(devices = vsmarts, software_image=software_image) # Check upgrade status TaskAPI(session, software_action_id).wait_for_completed() @@ -54,20 +56,23 @@ def __init__(self, session: ManagerSession) -> None: def activate( self, - devices: DataSequence[Device], + devices: DataSequence[DeviceDetailsResponse], version_to_activate: Optional[str] = "", image: Optional[str] = "", ) -> Task: """ - Set chosen version as current version + Set chosen version as current version. Requires that selected devices have already version_to_activate + or image present in their available files. Args: - devices (List[Device]): For those devices software will be activated + devices (List[DeviceDetailsResponse]): For those devices software will be activated version_to_activate (Optional[str]): version to be set as current version - image (Optional[str]): path to software image or its name from available files + image (Optional[str]): software image name in available files + + Notice: Have to pass one of those arguments (version_to_activate, image) - Notice: Have to pass one of those arguments (version_to_activate, - image) + Raises: + EmptyVersionPayloadError: If selected version_to_activate or image not detected in available files Returns: str: Activate software action id @@ -78,7 +83,12 @@ def activate( elif version_to_activate and not image: version = cast(str, version_to_activate) else: - raise VersionDeclarationError("You can not provide software_image and image version at the same time!") + raise ValueError("You can not provide software_image and image version at the same time!") + + if not version: + raise ImageNotInRepositoryError( + "Based on provided arguments, software version to activate on device(s) cannot be detected." + ) payload_devices = self.device_versions.get_device_available(version, devices) for device in payload_devices: @@ -98,55 +108,111 @@ def activate( def install( self, - devices: DataSequence[Device], + devices: DataSequence[DeviceDetailsResponse], reboot: bool = False, sync: bool = True, - image: str = "", - image_version: str = "", + v_edge_vpn: int = 0, + v_smart_vpn: int = 0, + image: Optional[str] = None, + image_version: Optional[str] = None, downgrade_check: bool = True, + remote_server_name: Optional[str] = None, + remote_image_filename: Optional[str] = None, ) -> Task: """ Method to install new software Args: - devices (List[Device]): For those devices software will be activated - reboot (bool): reboot device after action end + devices (List[DeviceDetailsResponse]): For those devices software will be activated + reboot (bool, optional): reboot device after action end sync (bool, optional): Synchronize settings. Defaults to True. + v_edge_vpn (int, optional): vEdge VPN + v_smart_vpn (int, optional): vSmart VPN image (str): path to software image or its name from available files image_version (str): version of software image - downgrade_check (bool): perform a downgrade check when applicable + downgrade_check (bool, optional): perform a downgrade check when applicable + remote_server_name (str): name of configured Remote Server + remote_image_filename (str): filename to choose from selected Remote Server - Notice: Have to pass one of those arguments (image_version, - image) + Notice: Have to pass one of those: + - image_version + - image + - remote_server_name and remote_image_filename Raises: - ValueError: Raise error if downgrade in certain cases + ValueError: Raise error if downgrade in certain cases or wrong arguments combination provided + ImageNotInRepositoryError: If selected image, image_version or remote_image_filename not found Returns: Task: Task object representing started install process """ validate_personality_homogeneity(devices) - if image and not image_version: + + if ( + sum( + [ + image is not None, + image_version is not None, + all([remote_server_name is not None, remote_image_filename is not None]), + ] + ) + != 1 + ): + raise ValueError( + "Please provide one option to detect software to install. " + "Pick either 'image', 'image_version', or both 'remote_server_name' and 'remote_image_filename'." + ) + + # FIXME downgrade_check will be supported when software images from Remote Server will have versions fields + if remote_server_name and remote_image_filename and downgrade_check: + raise ValueError("Downgrade check is not supported for install action for images from Remote Server.") + + version, remote_image_details = None, None + if image: version = cast(str, self.repository.get_image_version(image)) - elif image_version and not image: + if image_version: version = cast(str, image_version) - else: - raise VersionDeclarationError("You can not provide image and image version at the same time") + if remote_server_name and remote_image_filename: + remote_image_details = self.repository.get_remote_image(remote_image_filename, remote_server_name) + + if not any([version, remote_image_details]): + raise ImageNotInRepositoryError( + "Based on provided arguments, software version to install on device(s) cannot be detected." + ) - install_specification = get_install_specification(devices.first()) + install_specification = get_install_specification(devices.first(), remote=bool(remote_image_details)) install_devices = [ InstallDevice(**device.model_dump(by_alias=True)) for device in self.device_versions.get_device_list(devices) ] - input = InstallInput( - v_edge_vpn=0, - v_smart_vpn=0, - family=install_specification.family.value, - version=version, - version_type=install_specification.version_type.value, - reboot=reboot, - sync=sync, - ) + + if version: + input = InstallInput( + v_edge_vpn=v_edge_vpn, + v_smart_vpn=v_smart_vpn, + family=install_specification.family.value, + version=version, + version_type=install_specification.version_type.value, + reboot=reboot, + sync=sync, + ) + else: + input = InstallInput( + v_edge_vpn=v_edge_vpn, + v_smart_vpn=v_smart_vpn, + data=[ + InstallData( + family=install_specification.family.value, + version=remote_image_details.version_id, # type: ignore + remote_server_id=remote_image_details.remote_server_id, # type: ignore + version_id=remote_image_details.version_id, # type: ignore + ) + ], + version_type=install_specification.version_type.value, + reboot=reboot, + sync=sync, + ) + device_type = install_specification.device_type.value install_payload = InstallActionPayload( action="install", input=input, devices=install_devices, device_type=device_type @@ -154,7 +220,9 @@ def install( if downgrade_check and devices.first().personality in (Personality.VMANAGE, Personality.EDGE): self._downgrade_check( - install_payload.devices, install_payload.input.version, install_specification.family.value + install_payload.devices, + install_payload.input.version, # type: ignore + install_specification.family.value, # type: ignore ) install_action = self.session.endpoints.configuration_device_actions.process_install_operation( @@ -170,10 +238,10 @@ def _downgrade_check(self, payload_devices: List[InstallDevice], version_to_upgr Args: version_to_upgrade (str): version to upgrade - devices_category (DeviceCategory): devices category + payload_devices List[InstallDevice]: list of Devices to check downgrade possibility - Returns: - List[str]: list of devices with no permission to downgrade + Raises: + ValueError: If for any of the devices upgrade action is denied """ incorrect_devices = [] devices_versions_repo = self.repository.get_devices_versions_repository() diff --git a/catalystwan/api/speedtest_api.py b/catalystwan/api/speedtest_api.py index 327b60f70..4946e803d 100644 --- a/catalystwan/api/speedtest_api.py +++ b/catalystwan/api/speedtest_api.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + from __future__ import annotations import logging diff --git a/catalystwan/api/task_status_api.py b/catalystwan/api/task_status_api.py index 379bd1aef..8441a16c9 100644 --- a/catalystwan/api/task_status_api.py +++ b/catalystwan/api/task_status_api.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations import logging @@ -54,7 +56,6 @@ def wait_for_completed( failure_statuses_ids: List[OperationStatusId] = [ OperationStatusId.FAILURE, ], - activity_text: str = "", ) -> TaskResult: """ Method to check subtasks statuses of the task @@ -87,7 +88,6 @@ def wait_for_completed( success_statuses_ids (Union[List[OperationStatus], str]): list of positive sub-tasks statuses id's fails_statuses_id (Union[List[OperationStatusId], str]): list of negative sub-tasks statuses fails_statuses_ids (Union[List[OperationStatusId], str]): list of negative sub-tasks statuses id's - activity_text (str): activity text Returns: TaskResult(): result attr is True if all subtasks are success @@ -101,7 +101,6 @@ def wait_for_completed( failure_statuses_ids = [ cast(OperationStatusId, exit_status_id.value) for exit_status_id in failure_statuses_ids ] - activity_text = activity_text def check_status(task_data: List[SubTaskData]) -> bool: """ @@ -120,13 +119,15 @@ def check_status(task_data: List[SubTaskData]) -> bool: task_statuses_failure = [task.status in failure_statuses for task in task_data] task_statuses_id_success = [task.status_id in success_statuses_ids for task in task_data] task_statuses_id_failure = [task.status_id in failure_statuses_ids for task in task_data] - task_activities = [activity_text in task.activity for task in task_data] - if all(task_statuses_success + task_statuses_id_success) or any( - task_statuses_failure + task_statuses_id_failure - ): - if not activity_text or all(task_activities): - return False + all_subtasks_completed_status: List[bool] = [ + any(task_status) for task_status in zip(task_statuses_success, task_statuses_failure) + ] + all_subtasks_completed_status_id: List[bool] = [ + any(task_status_id) for task_status_id in zip(task_statuses_id_success, task_statuses_id_failure) + ] + if all(all_subtasks_completed_status) or all(all_subtasks_completed_status_id): + return False return True def log_exception(self) -> None: diff --git a/catalystwan/api/template_api.py b/catalystwan/api/template_api.py index 4fa20e0ea..31b5050e4 100644 --- a/catalystwan/api/template_api.py +++ b/catalystwan/api/template_api.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + from __future__ import annotations import json @@ -382,7 +384,9 @@ def _edit_feature_template(self, template: FeatureTemplate, data: FeatureTemplat if self.is_created_by_generator(template): debug = False schema = self.get_feature_template_schema(template, debug) - payload = self.generate_feature_template_payload(template, schema, debug).model_dump(by_alias=True) + payload = self.generate_feature_template_payload(template, schema, debug).model_dump( + by_alias=True, mode="json" + ) else: payload = json.loads(template.generate_payload(self.session)) @@ -541,7 +545,7 @@ def create_by_generator(self, template: FeatureTemplate, debug: bool) -> str: payload = self.generate_feature_template_payload(template, schema, debug) endpoint = "/dataservice/template/feature" - response = self.session.post(endpoint, json=payload.model_dump(by_alias=True, exclude_none=True)) + response = self.session.post(endpoint, json=payload.model_dump(by_alias=True, exclude_none=True, mode="json")) return response.json()["templateId"] @@ -557,9 +561,9 @@ def generate_feature_template_payload( ) # type: ignore fr_template_fields = [FeatureTemplateField(**field) for field in schema["fields"]] # TODO - + json_dumped_template = template.model_dump(mode="json") # "name" - for i, field in enumerate(fr_template_fields): + for field in fr_template_fields: value = None priority_order = None # TODO How to discover Device specific variable @@ -575,16 +579,19 @@ def generate_feature_template_payload( ): priority_order = get_extra_field(field_value, "priority_order") # type: ignore value = getattr(template, field_name) + json_dumped_value = json_dumped_template.get(field_name) break if value is None: continue - # print(field.payload_scheme(value)) - payload.definition = merge(payload.definition, field.payload_scheme(value, priority_order=priority_order)) + payload.definition = merge( + payload.definition, + field.payload_scheme(value, json_dumped_value=json_dumped_value, priority_order=priority_order), + ) if debug: with open(f"payload_{template.type}.json", "w") as f: - f.write(json.dumps(payload.model_dump(by_alias=True), indent=4)) + f.write(json.dumps(payload.model_dump(by_alias=True, mode="json"), indent=4)) return payload diff --git a/catalystwan/api/templates/README.md b/catalystwan/api/templates/README.md index 0f98c9486..f6fa53df3 100644 --- a/catalystwan/api/templates/README.md +++ b/catalystwan/api/templates/README.md @@ -25,14 +25,12 @@ These steps will help you to automate feature template creation. We'll explain w ```python from pathlib import Path from typing import ClassVar + from pydantic import ConfigDict from catalystwan.api.templates.feature_template import FeatureTemplate class OMPvSmart(FeatureTemplate): - class Config: - arbitrary_types_allowed = True - allow_population_by_field_name = True - + model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True) payload_path: ClassVar[Path] = Path(__file__).parent / "DEPRECATED" type: ClassVar[str] = "omp-vsmart" @@ -42,7 +40,7 @@ These steps will help you to automate feature template creation. We'll explain w ```python ported_templates = (..., OMPvSmart) ``` - + NOTE: This step will be removed once all template payloads will be generated automatically. 4. (This step is temporary) Find `available_models` definition in 'supported' and add your new template class. ```python available_models = { @@ -50,7 +48,7 @@ These steps will help you to automate feature template creation. We'll explain w 'omp_vsmart': OMPvSmart } ``` - + NOTE: This step will be removed once all template payloads will be generated dynamically. 5. We can try to create our first template with default values. ```python omp_vsmart = OMPvSmart( @@ -67,7 +65,7 @@ These steps will help you to automate feature template creation. We'll explain w 6. We can check whether our template is created sucessfully in Manager manually. If there is an error, please create an issue with error and try go to the 7th step. -### Custimize Feature Template fields. +### Customize Feature Template fields. 7. Run below code with already created session and changed corresponding variables. ```python @@ -87,8 +85,3 @@ These steps will help you to automate feature template creation. We'll explain w 8. Open `response_{template_type}.json` file. 9. Find `fields` key. The value should be list of dictionaries. Get every possible key in the dictionary and fill our class with every possible key. You can find the code in `catalystwan\api\templates\models\omp_vsmart_model.py` file. - -TODO: -- Nested fields -- Handle 3 types of variables - diff --git a/catalystwan/api/templates/bool_str.py b/catalystwan/api/templates/bool_str.py new file mode 100644 index 000000000..9678453e2 --- /dev/null +++ b/catalystwan/api/templates/bool_str.py @@ -0,0 +1,6 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + +from pydantic import PlainSerializer +from typing_extensions import Annotated + +BoolStr = Annotated[bool, PlainSerializer(lambda x: str(x).lower(), return_type=str, when_used="json-unless-none")] diff --git a/catalystwan/api/templates/cli_template.py b/catalystwan/api/templates/cli_template.py index c0a9bb521..afaebb05e 100644 --- a/catalystwan/api/templates/cli_template.py +++ b/catalystwan/api/templates/cli_template.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations import json diff --git a/catalystwan/api/templates/device_template/device_template.py b/catalystwan/api/templates/device_template/device_template.py index fe13b7c10..b286bcfaf 100644 --- a/catalystwan/api/templates/device_template/device_template.py +++ b/catalystwan/api/templates/device_template/device_template.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations import logging diff --git a/catalystwan/api/templates/device_variable.py b/catalystwan/api/templates/device_variable.py index c37b2e456..e1fd3612e 100644 --- a/catalystwan/api/templates/device_variable.py +++ b/catalystwan/api/templates/device_variable.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from pydantic import BaseModel diff --git a/catalystwan/api/templates/feature_template.py b/catalystwan/api/templates/feature_template.py index 357f919eb..c6d851c58 100644 --- a/catalystwan/api/templates/feature_template.py +++ b/catalystwan/api/templates/feature_template.py @@ -1,21 +1,54 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations import json from abc import ABC, abstractmethod from pathlib import Path -from typing import TYPE_CHECKING, Dict, List, cast +from typing import TYPE_CHECKING, Any, Dict, List, Union, cast from jinja2 import DebugUndefined, Environment, FileSystemLoader, meta # type: ignore from pydantic import BaseModel, model_validator from catalystwan.api.templates.device_variable import DeviceVariable from catalystwan.utils.device_model import DeviceModel +from catalystwan.utils.dict import FlattenedDictValue, flatten_dict +from catalystwan.utils.feature_template.find_template_values import find_template_values +from catalystwan.utils.pydantic_field import get_extra_field if TYPE_CHECKING: from catalystwan.session import ManagerSession -class FeatureTemplate(BaseModel, ABC): +class FeatureTemplateValidator(BaseModel, ABC): + @model_validator(mode="before") + @classmethod + def map_fields(cls, values: Union[Any, Dict[str, Union[List[FlattenedDictValue], Any]]]): + if not isinstance(values, dict): + return values + for field_name, field_info in cls.model_fields.items(): + vmanage_key = get_extra_field(field_info, "vmanage_key") + if vmanage_key in values: + payload_name = vmanage_key + elif field_info.alias in values: + payload_name = field_info.alias + elif field_name in values: + payload_name = field_name + else: + continue + data_path = get_extra_field(field_info, "data_path", []) + value = values.pop(payload_name) + if value and isinstance(value, list) and all([isinstance(v, FlattenedDictValue) for v in value]): + for template_value in value: + if template_value.data_path == data_path: + values[field_name] = template_value.value + break + else: + values[field_name] = value + return values + + +class FeatureTemplate(FeatureTemplateValidator, ABC): template_name: str template_description: str device_models: List[DeviceModel] = [] @@ -29,7 +62,7 @@ def generate_payload(self, session: ManagerSession) -> str: undefined=DebugUndefined, ) template = env.get_template(self.payload_path.name) - output = template.render(self.model_dump()) + output = template.render(self.model_dump(mode="json")) ast = env.parse(output) if meta.find_undeclared_variables(ast): @@ -80,12 +113,11 @@ def get(cls, session: ManagerSession, name: str) -> FeatureTemplate: Returns: FeatureTemplate: filed out feature template model """ - from catalystwan.utils.feature_template import choose_model, find_template_values + from catalystwan.utils.feature_template.choose_model import choose_model template_info = ( session.api.templates._get_feature_templates(summary=False).filter(name=name).single_or_default() ) - template_definition_as_dict = json.loads(cast(str, template_info.template_definiton)) feature_template_model = choose_model(type_value=template_info.template_type) @@ -94,11 +126,12 @@ def get(cls, session: ManagerSession, name: str) -> FeatureTemplate: values_from_template_definition = find_template_values( template_definition_as_dict, device_specific_variables=device_specific_variables ) + flattened_values = flatten_dict(values_from_template_definition) return feature_template_model( template_name=template_info.name, template_description=template_info.description, device_models=[DeviceModel(model) for model in template_info.device_type], device_specific_variables=device_specific_variables, - **values_from_template_definition, + **flattened_values, ) diff --git a/catalystwan/api/templates/feature_template_field.py b/catalystwan/api/templates/feature_template_field.py index f7f813b71..bfca4301b 100644 --- a/catalystwan/api/templates/feature_template_field.py +++ b/catalystwan/api/templates/feature_template_field.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations from enum import Enum @@ -89,7 +91,7 @@ def data_path(self, output): # value must be JSON serializable, return JSON serializable dict def payload_scheme( - self, value: Any = None, help=None, current_path=None, priority_order=None, vip_type=None + self, value: Any = None, json_dumped_value: Any = None, priority_order=None, vip_type=None ) -> dict: output: dict = {} rel_output: dict = {} @@ -119,10 +121,9 @@ def nest_value_in_output(value: Any) -> dict: if self.children: children_output = [] for obj in value: # obj is User, atomic value. Loop every child + obj_json_dump = obj.model_dump(mode="json") child_payload: dict = {} for child in self.children: # Child in schema - if current_path is None: - current_path = [] obj: FeatureTemplate # type: ignore model_tuple = next( filter( @@ -137,14 +138,14 @@ def nest_value_in_output(value: Any) -> dict: ) model_field = model_tuple[1] obj_value = getattr(obj, model_tuple[0]) + obj_json_value = obj_json_dump.get(model_tuple[0]) po = get_extra_field(model_field, "priority_order") vip_type = get_extra_field(model_field, "vip_type") merge( child_payload, child.payload_scheme( obj_value, - help=output, - current_path=self.dataPath + [self.key], + json_dumped_value=obj_json_value, priority_order=po, vip_type=vip_type, ), @@ -154,7 +155,7 @@ def nest_value_in_output(value: Any) -> dict: children_output.append(child_payload) output["vipValue"] = children_output else: - output["vipValue"] = value + output["vipValue"] = json_dumped_value else: if value is None: return {} diff --git a/catalystwan/api/templates/feature_template_payload.py b/catalystwan/api/templates/feature_template_payload.py index 7cdc27174..4ad432bae 100644 --- a/catalystwan/api/templates/feature_template_payload.py +++ b/catalystwan/api/templates/feature_template_payload.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from typing import Any, List from pydantic import BaseModel, ConfigDict, Field diff --git a/catalystwan/api/templates/models/cisco_aaa_model.py b/catalystwan/api/templates/models/cisco_aaa_model.py index a325cc4ba..18e73182e 100644 --- a/catalystwan/api/templates/models/cisco_aaa_model.py +++ b/catalystwan/api/templates/models/cisco_aaa_model.py @@ -1,13 +1,15 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from enum import Enum from pathlib import Path from typing import ClassVar, List, Optional -from pydantic import BaseModel, ConfigDict, Field +from pydantic import ConfigDict, Field -from catalystwan.api.templates.feature_template import FeatureTemplate +from catalystwan.api.templates.feature_template import FeatureTemplate, FeatureTemplateValidator -class User(BaseModel): +class User(FeatureTemplateValidator): name: str password: Optional[str] = None secret: Optional[str] = None @@ -15,8 +17,8 @@ class User(BaseModel): pubkey_chain: List[str] = Field(default=[], json_schema_extra={"vmanage_key": "pubkey-chain", "vip_type": "ignore"}) -class RadiusServer(BaseModel): - model_config = ConfigDict(populate_by_name=True) +class RadiusServer(FeatureTemplateValidator): + model_config = ConfigDict(populate_by_name=True, coerce_numbers_to_str=True) address: str auth_port: int = Field(default=1812, json_schema_extra={"vmanage_key": "auth-port"}) @@ -29,7 +31,7 @@ class RadiusServer(BaseModel): key_type: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "key-type"}) -class RadiusGroup(BaseModel): +class RadiusGroup(FeatureTemplateValidator): model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True) group_name: str = Field(json_schema_extra={"vmanage_key": "group-name"}) @@ -44,7 +46,7 @@ class DomainStripping(str, Enum): RIGHT_TO_LEFT = "right-to-left" -class TacacsServer(BaseModel): +class TacacsServer(FeatureTemplateValidator): model_config = ConfigDict(populate_by_name=True) address: str @@ -55,7 +57,7 @@ class TacacsServer(BaseModel): key_enum: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "key-enum"}) -class TacacsGroup(BaseModel): +class TacacsGroup(FeatureTemplateValidator): model_config = ConfigDict(populate_by_name=True) group_name: str = Field(json_schema_extra={"vmanage_key": "group-name"}) diff --git a/catalystwan/api/templates/models/cisco_banner_model.py b/catalystwan/api/templates/models/cisco_banner_model.py index 4060c633b..bbaf6873f 100644 --- a/catalystwan/api/templates/models/cisco_banner_model.py +++ b/catalystwan/api/templates/models/cisco_banner_model.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from pathlib import Path from typing import ClassVar, Optional diff --git a/catalystwan/api/templates/models/cisco_bfd_model.py b/catalystwan/api/templates/models/cisco_bfd_model.py index 837871240..f9779b27f 100644 --- a/catalystwan/api/templates/models/cisco_bfd_model.py +++ b/catalystwan/api/templates/models/cisco_bfd_model.py @@ -1,11 +1,13 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from enum import Enum from pathlib import Path from typing import ClassVar, List, Optional from pydantic import ConfigDict, Field -from catalystwan.api.templates.feature_template import FeatureTemplate -from catalystwan.utils.pydantic_validators import ConvertBoolToStringModel +from catalystwan.api.templates.bool_str import BoolStr +from catalystwan.api.templates.feature_template import FeatureTemplate, FeatureTemplateValidator DEFAULT_BFD_COLOR_MULTIPLIER = 7 DEFAULT_BFD_DSCP = 48 @@ -39,18 +41,18 @@ class ColorType(str, Enum): PRIVATE6 = "private6" -class Color(ConvertBoolToStringModel): +class Color(FeatureTemplateValidator): color: ColorType hello_interval: Optional[int] = Field( DEFAULT_BFD_HELLO_INTERVAL, json_schema_extra={"vmanage_key": "hello-interval"} ) multiplier: Optional[int] = DEFAULT_BFD_COLOR_MULTIPLIER - pmtu_discovery: Optional[bool] = Field(True, json_schema_extra={"vmanage_key": "pmtu-discovery"}) + pmtu_discovery: Optional[BoolStr] = Field(default=True, json_schema_extra={"vmanage_key": "pmtu-discovery"}) dscp: Optional[int] = DEFAULT_BFD_DSCP model_config = ConfigDict(populate_by_name=True) -class CiscoBFDModel(FeatureTemplate, ConvertBoolToStringModel): +class CiscoBFDModel(FeatureTemplate): model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True) multiplier: Optional[int] = Field(DEFAULT_BFD_MULTIPLIER, json_schema_extra={"data_path": ["app-route"]}) diff --git a/catalystwan/api/templates/models/cisco_bgp_model.py b/catalystwan/api/templates/models/cisco_bgp_model.py index 9f40b651a..df0bdb0ee 100644 --- a/catalystwan/api/templates/models/cisco_bgp_model.py +++ b/catalystwan/api/templates/models/cisco_bgp_model.py @@ -1,37 +1,40 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from enum import Enum from pathlib import Path from typing import ClassVar, List, Optional -from pydantic import BaseModel, ConfigDict, Field, field_validator +from pydantic import ConfigDict, Field -from catalystwan.api.templates.feature_template import FeatureTemplate +from catalystwan.api.templates.bool_str import BoolStr +from catalystwan.api.templates.feature_template import FeatureTemplate, FeatureTemplateValidator -class Export(BaseModel): +class Export(FeatureTemplateValidator): asn_ip: str = Field(json_schema_extra={"vmanage_key": "asn-ip"}) model_config = ConfigDict(populate_by_name=True) -class Import(BaseModel): +class Import(FeatureTemplateValidator): asn_ip: str = Field(json_schema_extra={"vmanage_key": "asn-ip"}) model_config = ConfigDict(populate_by_name=True) -class RouteTargetIpv4(BaseModel): +class RouteTargetIpv4(FeatureTemplateValidator): vpn_id: int = Field(json_schema_extra={"vmanage_key": "vpn-id"}) export: List[Export] import_: List[Import] = Field(json_schema_extra={"vmanage_key": "import"}) model_config = ConfigDict(populate_by_name=True) -class RouteTargetIpv6(BaseModel): +class RouteTargetIpv6(FeatureTemplateValidator): vpn_id: int = Field(json_schema_extra={"vmanage_key": "vpn-id"}) export: List[Export] import_: List[Import] = Field(json_schema_extra={"vmanage_key": "import"}) model_config = ConfigDict(populate_by_name=True) -class MplsInterface(BaseModel): +class MplsInterface(FeatureTemplateValidator): if_name: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "if-name"}) model_config = ConfigDict(populate_by_name=True) @@ -40,31 +43,25 @@ class AddressFamilyType(str, Enum): IPV4_UNICAST = "ipv4-unicast" -class AggregateAddress(BaseModel): +class AggregateAddress(FeatureTemplateValidator): prefix: str - as_set: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "as-set"}) - summary_only: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "summary-only"}) + as_set: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "as-set"}) + summary_only: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "summary-only"}) model_config = ConfigDict(populate_by_name=True) - @field_validator("as_set", "summary_only") - @classmethod - def cast_to_str(cls, value): - if value is not None: - return str(value).lower() - -class Ipv6AggregateAddress(BaseModel): +class Ipv6AggregateAddress(FeatureTemplateValidator): prefix: str as_set: Optional[bool] = Field(False, json_schema_extra={"vmanage_key": "as-set"}) summary_only: Optional[bool] = Field(False, json_schema_extra={"vmanage_key": "summary-only"}) model_config = ConfigDict(populate_by_name=True) -class Network(BaseModel): +class Network(FeatureTemplateValidator): prefix: str -class Ipv6Network(BaseModel): +class Ipv6Network(FeatureTemplateValidator): prefix: str @@ -78,13 +75,13 @@ class Protocol(str, Enum): NAT = "nat" -class Redistribute(BaseModel): +class Redistribute(FeatureTemplateValidator): protocol: Protocol route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"}) model_config = ConfigDict(populate_by_name=True) -class AddressFamily(BaseModel): +class AddressFamily(FeatureTemplateValidator): family_type: AddressFamilyType = Field(json_schema_extra={"vmanage_key": "family-type"}) aggregate_address: Optional[List[AggregateAddress]] = Field( default=None, json_schema_extra={"vmanage_key": "aggregate-address"} @@ -95,20 +92,14 @@ class AddressFamily(BaseModel): network: Optional[List[Network]] = None ipv6_network: Optional[List[Ipv6Network]] = Field(default=None, json_schema_extra={"vmanage_key": "ipv6-network"}) paths: Optional[int] = Field(default=None, json_schema_extra={"data_path": ["maximum-paths"]}) - originate: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["default-information"]}) + originate: Optional[BoolStr] = Field(default=None, json_schema_extra={"data_path": ["default-information"]}) policy_name: Optional[str] = Field( default=None, json_schema_extra={"data_path": ["table-map"], "vmanage_key": "name"} ) - filter: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["table-map"]}) + filter: Optional[BoolStr] = Field(default=None, json_schema_extra={"data_path": ["table-map"]}) redistribute: Optional[List[Redistribute]] = None model_config = ConfigDict(populate_by_name=True) - @field_validator("originate", "filter") - @classmethod - def cast_to_str(cls, value): - if value is not None: - return str(value).lower() - class NeighborFamilyType(str, Enum): IPV4_UNICAST = "ipv4-unicast" @@ -121,13 +112,13 @@ class Direction(str, Enum): OUT = "out" -class RoutePolicy(BaseModel): +class RoutePolicy(FeatureTemplateValidator): direction: Direction pol_name: str = Field(json_schema_extra={"vmanage_key": "pol-name"}) model_config = ConfigDict(populate_by_name=True) -class NeighborAddressFamily(BaseModel): +class NeighborAddressFamily(FeatureTemplateValidator): family_type: NeighborFamilyType = Field(json_schema_extra={"vmanage_key": "family-type"}) prefix_num: Optional[int] = Field( default=None, json_schema_extra={"data_path": ["maximum-prefixes"], "vmanage_key": "prefix-num"} @@ -141,24 +132,26 @@ class NeighborAddressFamily(BaseModel): model_config = ConfigDict(populate_by_name=True) -class Neighbor(BaseModel): +class Neighbor(FeatureTemplateValidator): address: str description: Optional[str] = None - shutdown: Optional[bool] = None + shutdown: Optional[BoolStr] = None remote_as: int = Field(json_schema_extra={"vmanage_key": "remote-as"}) keepalive: Optional[int] = Field(default=None, json_schema_extra={"data_path": ["timers"]}) holdtime: Optional[int] = Field(default=None, json_schema_extra={"data_path": ["timers"]}) if_name: Optional[str] = Field( default=None, json_schema_extra={"data_path": ["update-source"], "vmanage_key": "if-name"} ) - next_hop_self: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "next-hop-self"}) - send_community: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "send-community"}) - send_ext_community: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "send-ext-community"}) + next_hop_self: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "next-hop-self"}) + send_community: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "send-community"}) + send_ext_community: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "send-ext-community"}) ebgp_multihop: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "ebgp-multihop"}) password: Optional[str] = None - send_label: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "send-label"}) - send_label_explicit: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "send-label-explicit"}) - as_override: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "as-override"}) + send_label: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "send-label"}) + send_label_explicit: Optional[BoolStr] = Field( + default=None, json_schema_extra={"vmanage_key": "send-label-explicit"} + ) + as_override: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "as-override"}) as_number: Optional[int] = Field( default=None, json_schema_extra={"data_path": ["allowas-in"], "vmanage_key": "as-number"} ) @@ -167,26 +160,12 @@ class Neighbor(BaseModel): ) model_config = ConfigDict(populate_by_name=True) - @field_validator( - "shutdown", - "next_hop_self", - "send_community", - "send_ext_community", - "send_label", - "send_label_explicit", - "as_override", - ) - @classmethod - def cast_to_str(cls, value): - if value is not None: - return str(value).lower() - class IPv6NeighborFamilyType(str, Enum): IPV6_UNICAST = "ipv6-unicast" -class IPv6NeighborAddressFamily(BaseModel): +class IPv6NeighborAddressFamily(FeatureTemplateValidator): family_type: IPv6NeighborFamilyType = Field(json_schema_extra={"vmanage_key": "family-type"}) prefix_num: Optional[int] = Field( 0, json_schema_extra={"data_path": ["maximum-prefixes"], "vmanage_key": "prefix-num"} @@ -200,24 +179,26 @@ class IPv6NeighborAddressFamily(BaseModel): model_config = ConfigDict(populate_by_name=True) -class Ipv6Neighbor(BaseModel): +class Ipv6Neighbor(FeatureTemplateValidator): address: str description: Optional[str] = None - shutdown: Optional[bool] = None + shutdown: Optional[BoolStr] = None remote_as: int = Field(default=None, json_schema_extra={"vmanage_key": "remote-as"}) keepalive: Optional[int] = Field(default=None, json_schema_extra={"data_path": ["timers"]}) holdtime: Optional[int] = Field(default=None, json_schema_extra={"data_path": ["timers"]}) if_name: Optional[str] = Field( default=None, json_schema_extra={"data_path": ["update-source"], "vmanage_key": "if-name"} ) - next_hop_self: Optional[bool] = Field(False, json_schema_extra={"vmanage_key": "next-hop-self"}) - send_community: Optional[bool] = Field(True, json_schema_extra={"vmanage_key": "send-community"}) - send_ext_community: Optional[bool] = Field(True, json_schema_extra={"vmanage_key": "send-ext-community"}) + next_hop_self: Optional[BoolStr] = Field(default=False, json_schema_extra={"vmanage_key": "next-hop-self"}) + send_community: Optional[BoolStr] = Field(default=True, json_schema_extra={"vmanage_key": "send-community"}) + send_ext_community: Optional[BoolStr] = Field(default=True, json_schema_extra={"vmanage_key": "send-ext-community"}) ebgp_multihop: Optional[int] = Field(1, json_schema_extra={"vmanage_key": "ebgp-multihop"}) password: Optional[str] = None - send_label: Optional[bool] = Field(False, json_schema_extra={"vmanage_key": "send-label"}) - send_label_explicit: Optional[bool] = Field(False, json_schema_extra={"vmanage_key": "send-label-explicit"}) - as_override: Optional[bool] = Field(False, json_schema_extra={"vmanage_key": "as-override"}) + send_label: Optional[BoolStr] = Field(default=False, json_schema_extra={"vmanage_key": "send-label"}) + send_label_explicit: Optional[BoolStr] = Field( + default=False, json_schema_extra={"vmanage_key": "send-label-explicit"} + ) + as_override: Optional[BoolStr] = Field(default=False, json_schema_extra={"vmanage_key": "as-override"}) as_number: Optional[int] = Field( default=None, json_schema_extra={"data_path": ["allowas-in"], "vmanage_key": "as-number"} ) @@ -226,26 +207,12 @@ class Ipv6Neighbor(BaseModel): ) model_config = ConfigDict(populate_by_name=True) - @field_validator( - "shutdown", - "next_hop_self", - "send_community", - "send_ext_community", - "send_label", - "send_label_explicit", - "as_override", - ) - @classmethod - def cast_to_str(cls, value): - if value is not None: - return str(value).lower() - class CiscoBGPModel(FeatureTemplate): model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True) as_num: Optional[str] = Field(default=None, json_schema_extra={"data_path": ["bgp"], "vmanage_key": "as-num"}) - shutdown: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["bgp"]}) + shutdown: Optional[BoolStr] = Field(default=None, json_schema_extra={"data_path": ["bgp"]}) router_id: Optional[str] = Field(default=None, json_schema_extra={"data_path": ["bgp"], "vmanage_key": "router-id"}) propagate_aspath: Optional[bool] = Field( default=None, json_schema_extra={"data_path": ["bgp"], "vmanage_key": "propagate-aspath"} @@ -270,14 +237,14 @@ class CiscoBGPModel(FeatureTemplate): always_compare: Optional[bool] = Field( default=None, json_schema_extra={"data_path": ["bgp", "best-path", "med"], "vmanage_key": "always-compare"} ) - deterministic: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["bgp", "best-path", "med"]}) - missing_as_worst: Optional[bool] = Field( + deterministic: Optional[BoolStr] = Field(default=None, json_schema_extra={"data_path": ["bgp", "best-path", "med"]}) + missing_as_worst: Optional[BoolStr] = Field( default=None, json_schema_extra={"data_path": ["bgp", "best-path", "med"], "vmanage_key": "missing-as-worst"} ) - compare_router_id: Optional[bool] = Field( + compare_router_id: Optional[BoolStr] = Field( default=None, json_schema_extra={"data_path": ["bgp", "best-path"], "vmanage_key": "compare-router-id"} ) - multipath_relax: Optional[bool] = Field( + multipath_relax: Optional[BoolStr] = Field( default=None, json_schema_extra={"data_path": ["bgp", "best-path", "as-path"], "vmanage_key": "multipath-relax"} ) address_family: Optional[List[AddressFamily]] = Field( @@ -290,9 +257,3 @@ class CiscoBGPModel(FeatureTemplate): payload_path: ClassVar[Path] = Path(__file__).parent / "DEPRECATED" type: ClassVar[str] = "cisco_bgp" - - @field_validator("shutdown", "deterministic", "missing_as_worst", "compare_router_id", "multipath_relax") - @classmethod - def cast_to_str(cls, value): - if value is not None: - return str(value).lower() diff --git a/catalystwan/api/templates/models/cisco_logging_model.py b/catalystwan/api/templates/models/cisco_logging_model.py index 2fc95acde..275282c78 100644 --- a/catalystwan/api/templates/models/cisco_logging_model.py +++ b/catalystwan/api/templates/models/cisco_logging_model.py @@ -1,11 +1,13 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from enum import Enum from pathlib import Path from typing import ClassVar, List, Optional from pydantic import ConfigDict, Field -from catalystwan.api.templates.feature_template import FeatureTemplate -from catalystwan.utils.pydantic_validators import ConvertBoolToStringModel +from catalystwan.api.templates.bool_str import BoolStr +from catalystwan.api.templates.feature_template import FeatureTemplate, FeatureTemplateValidator class Version(str, Enum): @@ -18,7 +20,7 @@ class AuthType(str, Enum): MUTUAL = "Mutual" -class TlsProfile(ConvertBoolToStringModel): +class TlsProfile(FeatureTemplateValidator): profile: str version: Optional[Version] = Field(Version.TLSV11, json_schema_extra={"data_path": ["tls-version"]}) auth_type: AuthType = Field(json_schema_extra={"vmanage_key": "auth-type"}) @@ -39,36 +41,40 @@ class Priority(str, Enum): EMERGENCY = "emergency" -class Server(ConvertBoolToStringModel): +class Server(FeatureTemplateValidator): name: str vpn: Optional[int] = None source_interface: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "source-interface"}) priority: Optional[Priority] = Priority.INFORMATION - enable_tls: Optional[bool] = Field(False, json_schema_extra={"data_path": ["tls"], "vmanage_key": "enable-tls"}) - custom_profile: Optional[bool] = Field( - False, json_schema_extra={"data_path": ["tls", "tls-properties"], "vmanage_key": "custom-profile"} + enable_tls: Optional[BoolStr] = Field( + default=False, json_schema_extra={"data_path": ["tls"], "vmanage_key": "enable-tls"} + ) + custom_profile: Optional[BoolStr] = Field( + default=False, json_schema_extra={"data_path": ["tls", "tls-properties"], "vmanage_key": "custom-profile"} ) profile: Optional[str] = Field(default=None, json_schema_extra={"data_path": ["tls", "tls-properties"]}) model_config = ConfigDict(populate_by_name=True) -class Ipv6Server(ConvertBoolToStringModel): +class Ipv6Server(FeatureTemplateValidator): name: str vpn: Optional[int] = None source_interface: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "source-interface"}) priority: Optional[Priority] = Priority.INFORMATION - enable_tls: Optional[bool] = Field(False, json_schema_extra={"data_path": ["tls"], "vmanage_key": "enable-tls"}) - custom_profile: Optional[bool] = Field( - False, json_schema_extra={"data_path": ["tls", "tls-properties"], "vmanage_key": "custom-profile"} + enable_tls: Optional[BoolStr] = Field( + default=False, json_schema_extra={"data_path": ["tls"], "vmanage_key": "enable-tls"} + ) + custom_profile: Optional[BoolStr] = Field( + default=False, json_schema_extra={"data_path": ["tls", "tls-properties"], "vmanage_key": "custom-profile"} ) profile: Optional[str] = Field(default=None, json_schema_extra={"data_path": ["tls", "tls-properties"]}) model_config = ConfigDict(populate_by_name=True) -class CiscoLoggingModel(FeatureTemplate, ConvertBoolToStringModel): +class CiscoLoggingModel(FeatureTemplate): model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True) - enable: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["disk"]}) + enable: Optional[BoolStr] = Field(default=None, json_schema_extra={"data_path": ["disk"]}) size: Optional[int] = Field(default=None, json_schema_extra={"data_path": ["disk", "file"]}) rotate: Optional[int] = Field(default=None, json_schema_extra={"data_path": ["disk", "file"]}) tls_profile: Optional[List[TlsProfile]] = Field(default=None, json_schema_extra={"vmanage_key": "tls-profile"}) diff --git a/catalystwan/api/templates/models/cisco_ntp_model.py b/catalystwan/api/templates/models/cisco_ntp_model.py index d26605691..2116fb1f2 100644 --- a/catalystwan/api/templates/models/cisco_ntp_model.py +++ b/catalystwan/api/templates/models/cisco_ntp_model.py @@ -1,13 +1,15 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from pathlib import Path from typing import ClassVar, List, Optional -from pydantic import BaseModel, ConfigDict, Field +from pydantic import ConfigDict, Field -from catalystwan.api.templates.feature_template import FeatureTemplate -from catalystwan.utils.pydantic_validators import ConvertBoolToStringModel +from catalystwan.api.templates.bool_str import BoolStr +from catalystwan.api.templates.feature_template import FeatureTemplate, FeatureTemplateValidator -class Server(ConvertBoolToStringModel): +class Server(FeatureTemplateValidator): model_config = ConfigDict(populate_by_name=True) name: str @@ -15,23 +17,23 @@ class Server(ConvertBoolToStringModel): vpn: Optional[int] = None version: Optional[int] = None source_interface: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "source-interface"}) - prefer: Optional[bool] = None + prefer: Optional[BoolStr] = None -class Authentication(BaseModel): +class Authentication(FeatureTemplateValidator): model_config = ConfigDict(populate_by_name=True) number: int md5: str -class CiscoNTPModel(FeatureTemplate, ConvertBoolToStringModel): +class CiscoNTPModel(FeatureTemplate): model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True) server: List[Server] = Field(default=[]) authentication: Optional[List[Authentication]] = Field(default=None, json_schema_extra={"data_path": ["keys"]}) trusted: Optional[List[int]] = Field(default=None, json_schema_extra={"data_path": ["keys"]}) - enable: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["master"]}) + enable: Optional[BoolStr] = Field(default=None, json_schema_extra={"data_path": ["master"]}) stratum: Optional[int] = Field(default=None, json_schema_extra={"data_path": ["master"]}) source: Optional[str] = Field(default=None, json_schema_extra={"data_path": ["master"]}) diff --git a/catalystwan/api/templates/models/cisco_omp_model.py b/catalystwan/api/templates/models/cisco_omp_model.py index 5f1cbb719..baebfc8f4 100644 --- a/catalystwan/api/templates/models/cisco_omp_model.py +++ b/catalystwan/api/templates/models/cisco_omp_model.py @@ -1,11 +1,13 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from enum import Enum from pathlib import Path from typing import ClassVar, List, Optional -from pydantic import BaseModel, ConfigDict, Field +from pydantic import ConfigDict, Field -from catalystwan.api.templates.feature_template import FeatureTemplate -from catalystwan.utils.pydantic_validators import ConvertBoolToStringModel +from catalystwan.api.templates.bool_str import BoolStr +from catalystwan.api.templates.feature_template import FeatureTemplate, FeatureTemplateValidator DEFAULT_OMP_HOLDTIME = 60 DEFAULT_OMP_EOR_TIMER = 300 @@ -30,9 +32,9 @@ class Route(str, Enum): EXTERNAL = "external" -class IPv4Advertise(BaseModel): +class IPv4Advertise(FeatureTemplateValidator): protocol: IPv4AdvertiseProtocol - route: Route + route: Optional[Route] = None class IPv6AdvertiseProtocol(str, Enum): @@ -45,7 +47,7 @@ class IPv6AdvertiseProtocol(str, Enum): ISIS = "isis" -class IPv6Advertise(BaseModel): +class IPv6Advertise(FeatureTemplateValidator): protocol: IPv6AdvertiseProtocol @@ -64,16 +66,16 @@ class SiteTypes(str, Enum): SPOKE = "spoke" -class CiscoOMPModel(FeatureTemplate, ConvertBoolToStringModel): +class CiscoOMPModel(FeatureTemplate): model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True) - graceful_restart: Optional[bool] = Field(True, json_schema_extra={"vmanage_key": "graceful-restart"}) + graceful_restart: Optional[BoolStr] = Field(default=True, json_schema_extra={"vmanage_key": "graceful-restart"}) overlay_as: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "overlay-as"}) send_path_limit: Optional[int] = Field( DEFAULT_OMP_SENDPATH_LIMIT, json_schema_extra={"vmanage_key": "send-path-limit"} ) ecmp_limit: Optional[int] = Field(DEFAULT_OMP_ECMP_LIMIT, json_schema_extra={"vmanage_key": "ecmp-limit"}) - shutdown: Optional[bool] + shutdown: Optional[BoolStr] = None omp_admin_distance_ipv4: Optional[int] = Field( default=None, json_schema_extra={"vmanage_key": "omp-admin-distance-ipv4"} ) @@ -96,14 +98,14 @@ class CiscoOMPModel(FeatureTemplate, ConvertBoolToStringModel): ipv6_advertise: Optional[List[IPv6Advertise]] = Field( default=None, json_schema_extra={"vmanage_key": "ipv6-advertise"} ) - ignore_region_path_length: Optional[bool] = Field( - False, json_schema_extra={"vmanage_key": "ignore-region-path-length"} + ignore_region_path_length: Optional[BoolStr] = Field( + default=False, json_schema_extra={"vmanage_key": "ignore-region-path-length"} ) transport_gateway: Optional[TransportGateway] = Field( default=None, json_schema_extra={"vmanage_key": "transport-gateway"} ) site_types: Optional[List[SiteTypes]] = Field(default=None, json_schema_extra={"vmanage_key": "site-types"}) - auto_translate: Optional[bool] = Field(False, json_schema_extra={"vmanage_key": "auto-translate"}) + auto_translate: Optional[BoolStr] = Field(default=False, json_schema_extra={"vmanage_key": "auto-translate"}) payload_path: ClassVar[Path] = Path(__file__).parent / "DEPRECATED" type: ClassVar[str] = "cisco_omp" diff --git a/catalystwan/api/templates/models/cisco_ospf.py b/catalystwan/api/templates/models/cisco_ospf.py index d20f3ad47..3df7ca66c 100644 --- a/catalystwan/api/templates/models/cisco_ospf.py +++ b/catalystwan/api/templates/models/cisco_ospf.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import ipaddress from enum import Enum from pathlib import Path @@ -5,8 +7,8 @@ from pydantic import ConfigDict, Field -from catalystwan.api.templates.feature_template import FeatureTemplate -from catalystwan.utils.pydantic_validators import ConvertBoolToStringModel, ConvertIPToStringModel +from catalystwan.api.templates.bool_str import BoolStr +from catalystwan.api.templates.feature_template import FeatureTemplate, FeatureTemplateValidator DEFAULT_OSPF_HELLO_INTERVAL = 10 DEFAULT_OSPF_DEAD_INTERVAL = 40 @@ -35,10 +37,10 @@ class Protocol(str, Enum): EIGRP = "eigrp" -class Redistribute(ConvertBoolToStringModel): +class Redistribute(FeatureTemplateValidator): protocol: Protocol route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"}) - dia: Optional[bool] = True + dia: Optional[BoolStr] = True model_config = ConfigDict(populate_by_name=True) @@ -47,7 +49,7 @@ class AdType(str, Enum): ON_STARTUP = "on-startup" -class RouterLsa(ConvertBoolToStringModel): +class RouterLsa(FeatureTemplateValidator): ad_type: AdType = Field(json_schema_extra={"vmanage_key": "ad-type"}) time: int model_config = ConfigDict(populate_by_name=True) @@ -57,7 +59,7 @@ class Direction(str, Enum): IN = "in" -class RoutePolicy(ConvertBoolToStringModel): +class RoutePolicy(FeatureTemplateValidator): direction: Direction pol_name: str = Field(json_schema_extra={"vmanage_key": "pol-name"}) model_config = ConfigDict(populate_by_name=True) @@ -76,7 +78,7 @@ class Type(str, Enum): NULL = "null" -class Interface(ConvertBoolToStringModel): +class Interface(FeatureTemplateValidator): name: str hello_interval: Optional[int] = Field( DEFAULT_OSPF_DEAD_INTERVAL, json_schema_extra={"vmanage_key": "hello-interval"} @@ -88,7 +90,7 @@ class Interface(ConvertBoolToStringModel): cost: Optional[int] = None priority: Optional[int] = DEFAULT_OSPF_INTERFACE_PRIORITY network: Optional[Network] = Network.BROADCAST - passive_interface: Optional[bool] = Field(False, json_schema_extra={"vmanage_key": "passive-interface"}) + passive_interface: Optional[BoolStr] = Field(default=False, json_schema_extra={"vmanage_key": "passive-interface"}) type: Optional[Type] = Field(default=None, json_schema_extra={"data_path": ["authentication"]}) message_digest_key: Optional[int] = Field( default=None, @@ -98,23 +100,27 @@ class Interface(ConvertBoolToStringModel): model_config = ConfigDict(populate_by_name=True) -class Range(ConvertBoolToStringModel, ConvertIPToStringModel): +class Range(FeatureTemplateValidator): address: ipaddress.IPv4Interface cost: Optional[int] = None - no_advertise: Optional[bool] = Field(False, json_schema_extra={"vmanage_key": "no-advertise"}) + no_advertise: Optional[BoolStr] = Field(default=False, json_schema_extra={"vmanage_key": "no-advertise"}) model_config = ConfigDict(populate_by_name=True) -class Area(ConvertBoolToStringModel): +class Area(FeatureTemplateValidator): a_num: int = Field(json_schema_extra={"vmanage_key": "a-num"}) - stub: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "no-summary", "data_path": ["stub"]}) - nssa: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "no-summary", "data_path": ["nssa"]}) + stub: Optional[BoolStr] = Field( + default=None, json_schema_extra={"vmanage_key": "no-summary", "data_path": ["stub"]} + ) + nssa: Optional[BoolStr] = Field( + default=None, json_schema_extra={"vmanage_key": "no-summary", "data_path": ["nssa"]} + ) interface: Optional[List[Interface]] = None range: Optional[List[Range]] = None model_config = ConfigDict(populate_by_name=True) -class CiscoOSPFModel(FeatureTemplate, ConvertBoolToStringModel): +class CiscoOSPFModel(FeatureTemplate): model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True) router_id: Optional[str] = Field( @@ -124,9 +130,9 @@ class CiscoOSPFModel(FeatureTemplate, ConvertBoolToStringModel): DEFAULT_OSPF_REFERENCE_BANDWIDTH, json_schema_extra={"data_path": ["ospf", "auto-cost"], "vmanage_key": "reference-bandwidth"}, ) - rfc1583: Optional[bool] = Field(True, json_schema_extra={"data_path": ["ospf", "compatible"]}) - originate: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["ospf", "default-information"]}) - always: Optional[bool] = Field( + rfc1583: Optional[BoolStr] = Field(default=True, json_schema_extra={"data_path": ["ospf", "compatible"]}) + originate: Optional[BoolStr] = Field(default=None, json_schema_extra={"data_path": ["ospf", "default-information"]}) + always: Optional[BoolStr] = Field( default=None, json_schema_extra={"data_path": ["ospf", "default-information", "originate"]} ) metric: Optional[int] = Field( diff --git a/catalystwan/api/templates/models/cisco_ospfv3.py b/catalystwan/api/templates/models/cisco_ospfv3.py index 14b515dbc..244b4cf32 100644 --- a/catalystwan/api/templates/models/cisco_ospfv3.py +++ b/catalystwan/api/templates/models/cisco_ospfv3.py @@ -1,13 +1,14 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import ipaddress from enum import Enum from pathlib import Path from typing import ClassVar, List, Optional -from pydantic import ConfigDict -from pydantic.v1 import BaseModel, Field +from pydantic import ConfigDict, Field -from catalystwan.api.templates.feature_template import FeatureTemplate -from catalystwan.utils.pydantic_validators import ConvertBoolToStringModel, ConvertIPToStringModel +from catalystwan.api.templates.bool_str import BoolStr +from catalystwan.api.templates.feature_template import FeatureTemplate, FeatureTemplateValidator class MetricType(str, Enum): @@ -26,10 +27,10 @@ class Protocol(str, Enum): STATIC = "static" -class Redistribute(ConvertBoolToStringModel): +class Redistribute(FeatureTemplateValidator): protocol: Protocol route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"}) - dia: Optional[bool] = True + dia: Optional[BoolStr] = True model_config = ConfigDict(populate_by_name=True) @@ -37,7 +38,7 @@ class AdType(str, Enum): ON_STARTUP = "on-startup" -class RouterLsa(BaseModel): +class RouterLsa(FeatureTemplateValidator): ad_type: AdType = Field(json_schema_extra={"vmanage_key": "ad-type"}) time: int model_config = ConfigDict(populate_by_name=True) @@ -59,7 +60,7 @@ class Type(str, Enum): SHA1 = "sha1" -class Interface(BaseModel): +class Interface(FeatureTemplateValidator): name: str hello_interval: Optional[int] = Field(10, json_schema_extra={"vmanage_key": "hello-interval"}) dead_interval: Optional[int] = Field(40, json_schema_extra={"vmanage_key": "dead-interval"}) @@ -75,31 +76,35 @@ class Interface(BaseModel): model_config = ConfigDict(populate_by_name=True) -class Range(BaseModel): +class Range(FeatureTemplateValidator): address: ipaddress.IPv4Interface cost: Optional[int] = None no_advertise: Optional[bool] = Field(False, json_schema_extra={"vmanage_key": "no-advertise"}) model_config = ConfigDict(populate_by_name=True) -class Area(ConvertBoolToStringModel): +class Area(FeatureTemplateValidator): a_num: int = Field(json_schema_extra={"vmanage_key": "a-num"}) - stub: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "no-summary", "data_path": ["stub"]}) - nssa: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "no-summary", "data_path": ["nssa"]}) + stub: Optional[BoolStr] = Field( + default=None, json_schema_extra={"vmanage_key": "no-summary", "data_path": ["stub"]} + ) + nssa: Optional[BoolStr] = Field( + default=None, json_schema_extra={"vmanage_key": "no-summary", "data_path": ["nssa"]} + ) translate: Optional[Translate] = Field(default=None, json_schema_extra={"data_path": ["nssa"]}) - normal: Optional[bool] = None + normal: Optional[BoolStr] = None interface: Optional[List[Interface]] = None range: Optional[List[Range]] = None model_config = ConfigDict(populate_by_name=True) -class RedistributeV6(BaseModel): +class RedistributeV6(FeatureTemplateValidator): protocol: Protocol route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"}) model_config = ConfigDict(populate_by_name=True) -class InterfaceV6(BaseModel): +class InterfaceV6(FeatureTemplateValidator): name: str hello_interval: Optional[int] = Field(10, json_schema_extra={"vmanage_key": "hello-interval"}) dead_interval: Optional[int] = Field(40, json_schema_extra={"vmanage_key": "dead-interval"}) @@ -115,25 +120,29 @@ class InterfaceV6(BaseModel): model_config = ConfigDict(populate_by_name=True) -class RangeV6(BaseModel): +class RangeV6(FeatureTemplateValidator): address: ipaddress.IPv6Interface cost: Optional[int] = None no_advertise: Optional[bool] = Field(False, json_schema_extra={"vmanage_key": "no-advertise"}) model_config = ConfigDict(populate_by_name=True) -class AreaV6(ConvertBoolToStringModel): +class AreaV6(FeatureTemplateValidator): a_num: int = Field(json_schema_extra={"vmanage_key": "a-num"}) - stub: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "no-summary", "data_path": ["stub"]}) - nssa: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "no-summary", "data_path": ["nssa"]}) + stub: Optional[BoolStr] = Field( + default=None, json_schema_extra={"vmanage_key": "no-summary", "data_path": ["stub"]} + ) + nssa: Optional[BoolStr] = Field( + default=None, json_schema_extra={"vmanage_key": "no-summary", "data_path": ["nssa"]} + ) translate: Optional[Translate] = Field(default=None, json_schema_extra={"data_path": ["nssa"]}) - normal: Optional[bool] = None + normal: Optional[BoolStr] = None interface: Optional[List[InterfaceV6]] = None range: Optional[List[RangeV6]] = None model_config = ConfigDict(populate_by_name=True) -class CiscoOspfv3Model(FeatureTemplate, ConvertIPToStringModel, ConvertBoolToStringModel): +class CiscoOspfv3Model(FeatureTemplate): model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True) router_id_v4: Optional[ipaddress.IPv4Address] = Field( @@ -146,18 +155,18 @@ class CiscoOspfv3Model(FeatureTemplate, ConvertIPToStringModel, ConvertBoolToStr "data_path": ["ospfv3", "address-family", "ipv4", "auto-cost"], }, ) - rfc1583_v4: Optional[bool] = Field( - True, + rfc1583_v4: Optional[BoolStr] = Field( + default=True, json_schema_extra={"vmanage_key": "rfc1583", "data_path": ["ospfv3", "address-family", "ipv4", "compatible"]}, ) - originate_v4: Optional[bool] = Field( + originate_v4: Optional[BoolStr] = Field( default=None, json_schema_extra={ "vmanage_key": "originate", "data_path": ["ospfv3", "address-family", "ipv4", "default-information"], }, ) - always_v4: Optional[bool] = Field( + always_v4: Optional[BoolStr] = Field( default=None, json_schema_extra={ "vmanage_key": "always", @@ -231,7 +240,7 @@ class CiscoOspfv3Model(FeatureTemplate, ConvertIPToStringModel, ConvertBoolToStr default=None, json_schema_extra={"vmanage_key": "name", "data_path": ["ospfv3", "address-family", "ipv4", "table-map"]}, ) - filter_v4: Optional[bool] = Field( + filter_v4: Optional[BoolStr] = Field( default=None, json_schema_extra={"vmanage_key": "filter", "data_path": ["ospfv3", "address-family", "ipv4", "table-map"]}, ) @@ -259,18 +268,18 @@ class CiscoOspfv3Model(FeatureTemplate, ConvertIPToStringModel, ConvertBoolToStr "data_path": ["ospfv3", "address-family", "ipv6", "auto-cost"], }, ) - rfc1583_v6: Optional[bool] = Field( - True, + rfc1583_v6: Optional[BoolStr] = Field( + default=True, json_schema_extra={"vmanage_key": "rfc1583", "data_path": ["ospfv3", "address-family", "ipv6", "compatible"]}, ) - originate_v6: Optional[bool] = Field( + originate_v6: Optional[BoolStr] = Field( default=None, json_schema_extra={ "vmanage_key": "originate", "data_path": ["ospfv3", "address-family", "ipv6", "default-information"], }, ) - always_v6: Optional[bool] = Field( + always_v6: Optional[BoolStr] = Field( default=None, json_schema_extra={ "vmanage_key": "always", @@ -344,7 +353,7 @@ class CiscoOspfv3Model(FeatureTemplate, ConvertIPToStringModel, ConvertBoolToStr default=None, json_schema_extra={"vmanage_key": "name", "data_path": ["ospfv3", "address-family", "ipv6", "table-map"]}, ) - filter_v6: Optional[bool] = Field( + filter_v6: Optional[BoolStr] = Field( default=None, json_schema_extra={"vmanage_key": "filter", "data_path": ["ospfv3", "address-family", "ipv6", "table-map"]}, ) diff --git a/catalystwan/api/templates/models/cisco_secure_internet_gateway.py b/catalystwan/api/templates/models/cisco_secure_internet_gateway.py index 6eb7ac0c1..b7bf6e200 100644 --- a/catalystwan/api/templates/models/cisco_secure_internet_gateway.py +++ b/catalystwan/api/templates/models/cisco_secure_internet_gateway.py @@ -1,12 +1,13 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import ipaddress from enum import Enum from pathlib import Path from typing import ClassVar, List, Optional -from pydantic import BaseModel, ConfigDict, Field +from pydantic import ConfigDict, Field -from catalystwan.api.templates.feature_template import FeatureTemplate -from catalystwan.utils.pydantic_validators import ConvertIPToStringModel +from catalystwan.api.templates.feature_template import FeatureTemplate, FeatureTemplateValidator DEFAULT_TRACKER_THRESHOLD = 300 DEFAULT_TRACKER_INTERVAL = 60 @@ -73,16 +74,20 @@ class PerfectForwardSecrecy(str, Enum): NONE = "none" -class Interface(ConvertIPToStringModel): +class Interface(FeatureTemplateValidator): if_name: str = Field(json_schema_extra={"vmanage_key": "if-name"}) auto: bool shutdown: bool description: Optional[str] = None unnumbered: bool = True address: Optional[ipaddress.IPv4Interface] = None - tunnel_source: ipaddress.IPv4Address = Field(json_schema_extra={"vmanage_key": "tunnel-source"}) - tunnel_source_interface: str = Field(json_schema_extra={"vmanage_key": "tunnel-source-interface"}) - tunnel_route_via: str = Field(json_schema_extra={"vmanage_key": "tunnel-route-via"}) + tunnel_source: Optional[ipaddress.IPv4Address] = Field( + default=None, json_schema_extra={"vmanage_key": "tunnel-source"} + ) + tunnel_source_interface: Optional[str] = Field( + default=None, json_schema_extra={"vmanage_key": "tunnel-source-interface"} + ) + tunnel_route_via: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "tunnel-route-via"}) tunnel_destination: str = Field(json_schema_extra={"vmanage_key": "tunnel-destination"}) application: Application = Application.SIG tunnel_set: TunnelSet = Field( @@ -130,7 +135,7 @@ class SvcType(str, Enum): SIG = "sig" -class InterfacePair(BaseModel): +class InterfacePair(FeatureTemplateValidator): active_interface: str = Field(json_schema_extra={"vmanage_key": "active-interface"}) active_interface_weight: int = Field( DEFAULT_INTERFACE_PAIR_ACTIVE_INTERFACE_WEIGHT, json_schema_extra={"vmanage_key": "active-interface-weight"} @@ -154,9 +159,11 @@ class RefreshTimeUnit(str, Enum): DAY = "DAY" -class Service(BaseModel): +class Service(FeatureTemplateValidator): svc_type: SvcType = Field(SvcType.SIG, json_schema_extra={"vmanage_key": "svc-type"}) - interface_pair: List[InterfacePair] = Field(json_schema_extra={"vmanage_key": "interface-pair"}) + interface_pair: List[InterfacePair] = Field( + json_schema_extra={"data_path": ["ha-pairs"], "vmanage_key": "interface-pair"} + ) auth_required: Optional[bool] = Field(False, json_schema_extra={"vmanage_key": "auth-required"}) xff_forward_enabled: Optional[bool] = Field(False, json_schema_extra={"vmanage_key": "xff-forward-enabled"}) ofw_enabled: Optional[bool] = Field(False, json_schema_extra={"vmanage_key": "ofw-enabled"}) @@ -176,12 +183,12 @@ class Service(BaseModel): refresh_time_unit: Optional[RefreshTimeUnit] = Field( RefreshTimeUnit.MINUTE, json_schema_extra={"vmanage_key": "refresh-time-unit"} ) - enabled: Optional[bool] + enabled: Optional[bool] = None block_internet_until_accepted: Optional[bool] = Field( False, json_schema_extra={"vmanage_key": "block-internet-until-accepted"} ) force_ssl_inspection: Optional[bool] = Field(False, json_schema_extra={"vmanage_key": "force-ssl-inspection"}) - timeout: Optional[int] + timeout: Optional[int] = None data_center_primary: Optional[str] = Field("Auto", json_schema_extra={"vmanage_key": "data-center-primary"}) data_center_secondary: Optional[str] = Field("Auto", json_schema_extra={"vmanage_key": "data-center-secondary"}) model_config = ConfigDict(populate_by_name=True) @@ -191,7 +198,7 @@ class TrackerType(str, Enum): SIG = "SIG" -class Tracker(BaseModel): +class Tracker(FeatureTemplateValidator): name: str endpoint_api_url: str = Field(json_schema_extra={"vmanage_key": "endpoint-api-url"}) threshold: Optional[int] = DEFAULT_TRACKER_THRESHOLD @@ -201,13 +208,15 @@ class Tracker(BaseModel): model_config = ConfigDict(populate_by_name=True) -class CiscoSecureInternetGatewayModel(FeatureTemplate, ConvertIPToStringModel): +class CiscoSecureInternetGatewayModel(FeatureTemplate): model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True) vpn_id: int = Field(DEFAULT_SIG_VPN_ID, json_schema_extra={"vmanage_key": "vpn-id"}) interface: List[Interface] service: List[Service] - tracker_src_ip: ipaddress.IPv4Interface = Field(json_schema_extra={"vmanage_key": "tracker-src-ip"}) + tracker_src_ip: Optional[ipaddress.IPv4Interface] = Field( + default=None, json_schema_extra={"vmanage_key": "tracker-src-ip"} + ) tracker: Optional[List[Tracker]] = None payload_path: ClassVar[Path] = Path(__file__).parent / "DEPRECATED" diff --git a/catalystwan/api/templates/models/cisco_snmp_model.py b/catalystwan/api/templates/models/cisco_snmp_model.py index 743c07a50..ca6c1fe8c 100644 --- a/catalystwan/api/templates/models/cisco_snmp_model.py +++ b/catalystwan/api/templates/models/cisco_snmp_model.py @@ -1,19 +1,21 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from enum import Enum from pathlib import Path from typing import ClassVar, List, Optional -from pydantic import BaseModel, ConfigDict, Field +from pydantic import ConfigDict, Field -from catalystwan.api.templates.feature_template import FeatureTemplate -from catalystwan.utils.pydantic_validators import ConvertBoolToStringModel +from catalystwan.api.templates.bool_str import BoolStr +from catalystwan.api.templates.feature_template import FeatureTemplate, FeatureTemplateValidator -class Oid(ConvertBoolToStringModel): +class Oid(FeatureTemplateValidator): id: str - exclude: Optional[bool] = None + exclude: Optional[BoolStr] = None -class View(BaseModel): +class View(FeatureTemplateValidator): name: str oid: Optional[List[Oid]] = None @@ -22,7 +24,7 @@ class Authorization(str, Enum): READ_ONLY = "read-only" -class Community(BaseModel): +class Community(FeatureTemplateValidator): name: str view: str authorization: Authorization @@ -34,7 +36,7 @@ class SecurityLevel(str, Enum): AUTHPRIV = "auth-priv" -class Group(BaseModel): +class Group(FeatureTemplateValidator): name: str security_level: SecurityLevel = Field(json_schema_extra={"vmanage_key": "security-level"}) view: str @@ -50,7 +52,7 @@ class Priv(str, Enum): AES_CFB_128 = "aes-cfb-128" -class User(BaseModel): +class User(FeatureTemplateValidator): name: str auth: Optional[Auth] = None auth_password: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "auth-password"}) @@ -60,7 +62,7 @@ class User(BaseModel): model_config = ConfigDict(populate_by_name=True) -class Target(BaseModel): +class Target(FeatureTemplateValidator): vpn_id: int = Field(json_schema_extra={"vmanage_key": "vpn-id"}) ip: str port: int @@ -70,10 +72,10 @@ class Target(BaseModel): model_config = ConfigDict(populate_by_name=True) -class CiscoSNMPModel(FeatureTemplate, ConvertBoolToStringModel): +class CiscoSNMPModel(FeatureTemplate): model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True) - shutdown: Optional[bool] = True + shutdown: Optional[BoolStr] = True contact: Optional[str] = None location: Optional[str] = None view: Optional[List[View]] = None diff --git a/catalystwan/api/templates/models/cisco_system.py b/catalystwan/api/templates/models/cisco_system.py index eaebe5f25..6532cc5c3 100644 --- a/catalystwan/api/templates/models/cisco_system.py +++ b/catalystwan/api/templates/models/cisco_system.py @@ -1,16 +1,18 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from enum import Enum from pathlib import Path from typing import ClassVar, List, Optional -from pydantic import BaseModel, ConfigDict, Field +from pydantic import ConfigDict, Field +from catalystwan.api.templates.bool_str import BoolStr from catalystwan.api.templates.device_variable import DeviceVariable -from catalystwan.api.templates.feature_template import FeatureTemplate -from catalystwan.utils.pydantic_validators import ConvertBoolToStringModel +from catalystwan.api.templates.feature_template import FeatureTemplate, FeatureTemplateValidator from catalystwan.utils.timezone import Timezone -class MobileNumber(BaseModel): +class MobileNumber(FeatureTemplateValidator): number: str @@ -50,17 +52,17 @@ class Type(str, Enum): STATIC_ROUTE = "static-route" -class Tracker(BaseModel): +class Tracker(FeatureTemplateValidator): name: str - endpoint_ip: str = Field(json_schema_extra={"vmanage_key": "endpoint-ip"}) - endpoint_ip_transport_port: str = Field( - json_schema_extra={"vmanage_key": "endpoint-ip", "data_path": ["endpoint-ip-transport-port"]} - ) - protocol: Protocol = Field(json_schema_extra={"data_path": ["endpoint-ip-transport-port"]}) - port: int = Field(json_schema_extra={"data_path": ["endpoint-ip-transport-port"]}) - endpoint_dns_name: str = Field(json_schema_extra={"vmanage_key": "endpoint-dns-name"}) - endpoint_api_url: str = Field(json_schema_extra={"vmanage_key": "endpoint-api-url"}) - elements: List[str] + endpoint_ip: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "endpoint-ip"}) + endpoint_ip_transport_port: Optional[str] = Field( + default=None, json_schema_extra={"vmanage_key": "endpoint-ip", "data_path": ["endpoint-ip-transport-port"]} + ) + protocol: Optional[Protocol] = Field(default=None, json_schema_extra={"data_path": ["endpoint-ip-transport-port"]}) + port: Optional[int] = Field(default=None, json_schema_extra={"data_path": ["endpoint-ip-transport-port"]}) + endpoint_dns_name: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "endpoint-dns-name"}) + endpoint_api_url: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "endpoint-api-url"}) + elements: Optional[List[str]] = None boolean: Optional[Boolean] = Boolean.OR threshold: Optional[int] = 300 interval: Optional[int] = 60 @@ -69,11 +71,11 @@ class Tracker(BaseModel): model_config = ConfigDict(populate_by_name=True) -class Object(BaseModel): +class Object(FeatureTemplateValidator): number: int -class ObjectTrack(BaseModel): +class ObjectTrack(FeatureTemplateValidator): object_number: int = Field(json_schema_extra={"vmanage_key": "object-number"}) interface: str sig: str @@ -90,7 +92,7 @@ class Role(str, Enum): BORDER_ROUTER = "border-router" -class AffinityPerVrf(BaseModel): +class AffinityPerVrf(FeatureTemplateValidator): affinity_group_number: Optional[int] = Field( default=None, json_schema_extra={"vmanage_key": "affinity-group-number"} ) @@ -103,7 +105,7 @@ class EnableMrfMigration(str, Enum): ENABLE_FROM_BGP_CORE = "enabled-from-bgp-core" -class Vrf(BaseModel): +class Vrf(FeatureTemplateValidator): vrf_id: int = Field(json_schema_extra={"vmanage_key": "vrf-id"}) gateway_preference: Optional[List[int]] = Field( default=None, json_schema_extra={"vmanage_key": "gateway-preference"} @@ -118,7 +120,7 @@ class Epfr(str, Enum): CONSERVATIVE = "conservative" -class CiscoSystemModel(FeatureTemplate, ConvertBoolToStringModel): +class CiscoSystemModel(FeatureTemplate): model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True) timezone: Optional[Timezone] = Field(default=None, json_schema_extra={"data_path": ["clock"]}) @@ -131,15 +133,15 @@ class CiscoSystemModel(FeatureTemplate, ConvertBoolToStringModel): latitude: Optional[float] = Field(default=None, json_schema_extra={"data_path": ["gps-location"]}) longitude: Optional[float] = Field(default=None, json_schema_extra={"data_path": ["gps-location"]}) range: Optional[int] = Field(100, json_schema_extra={"data_path": ["gps-location", "geo-fencing"]}) - enable_fencing: Optional[bool] = Field( + enable_fencing: Optional[BoolStr] = Field( default=None, json_schema_extra={"data_path": ["gps-location", "geo-fencing"], "vmanage_key": "enable"} ) mobile_number: Optional[List[MobileNumber]] = Field( default=None, json_schema_extra={"vmanage_key": "mobile-number", "data_path": ["gps-location", "geo-fencing", "sms"]}, ) - enable_sms: Optional[bool] = Field( - False, json_schema_extra={"data_path": ["gps-location", "geo-fencing", "sms"], "vmanage_key": "enable"} + enable_sms: Optional[BoolStr] = Field( + default=False, json_schema_extra={"data_path": ["gps-location", "geo-fencing", "sms"], "vmanage_key": "enable"} ) device_groups: Optional[List[str]] = Field(default=None, json_schema_extra={"vmanage_key": "device-groups"}) controller_group_list: Optional[List[int]] = Field( @@ -152,22 +154,22 @@ class CiscoSystemModel(FeatureTemplate, ConvertBoolToStringModel): site_id: int = Field(default=DeviceVariable(name="system_site_id"), json_schema_extra={"vmanage_key": "site-id"}) site_type: Optional[List[SiteType]] = Field(default=None, json_schema_extra={"vmanage_key": "site-type"}) port_offset: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "port-offset"}) - port_hop: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "port-hop"}) + port_hop: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "port-hop"}) control_session_pps: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "control-session-pps"}) - track_transport: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "track-transport"}) + track_transport: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "track-transport"}) track_interface_tag: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "track-interface-tag"}) console_baud_rate: Optional[ConsoleBaudRate] = Field( default=None, json_schema_extra={"vmanage_key": "console-baud-rate"} ) max_omp_sessions: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "max-omp-sessions"}) - multi_tenant: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "multi-tenant"}) - track_default_gateway: Optional[bool] = Field( + multi_tenant: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "multi-tenant"}) + track_default_gateway: Optional[BoolStr] = Field( default=None, json_schema_extra={"vmanage_key": "track-default-gateway"} ) - admin_tech_on_failure: Optional[bool] = Field( + admin_tech_on_failure: Optional[BoolStr] = Field( default=None, json_schema_extra={"vmanage_key": "admin-tech-on-failure"} ) - enable_tunnel: Optional[bool] = Field( + enable_tunnel: Optional[BoolStr] = Field( default=None, json_schema_extra={"vmanage_key": "enable", "data_path": ["on-demand"]} ) idle_timeout: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "idle-timeout"}) @@ -183,22 +185,22 @@ class CiscoSystemModel(FeatureTemplate, ConvertBoolToStringModel): default=None, json_schema_extra={"vmanage_key": "affinity-group-number", "data_path": ["affinity-group"]} ) preference: Optional[List[int]] = Field(default=None, json_schema_extra={"data_path": ["affinity-group"]}) - preference_auto: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "preference-auto"}) + preference_auto: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "preference-auto"}) affinity_per_vrf: Optional[List[AffinityPerVrf]] = Field( default=None, json_schema_extra={"vmanage_key": "affinity-per-vrf"} ) - transport_gateway: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "transport-gateway"}) + transport_gateway: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "transport-gateway"}) enable_mrf_migration: Optional[EnableMrfMigration] = Field( default=None, json_schema_extra={"vmanage_key": "enable-mrf-migration"} ) migration_bgp_community: Optional[int] = Field( default=None, json_schema_extra={"vmanage_key": "migration-bgp-community"} ) - enable_management_region: Optional[bool] = Field( + enable_management_region: Optional[BoolStr] = Field( default=None, json_schema_extra={"vmanage_key": "enable-management-region"} ) vrf: Optional[List[Vrf]] = None - management_gateway: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "management-gateway"}) + management_gateway: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "management-gateway"}) epfr: Optional[Epfr] = None payload_path: ClassVar[Path] = Path(__file__).parent / "DEPRECATED" diff --git a/catalystwan/api/templates/models/cisco_vpn_interface_model.py b/catalystwan/api/templates/models/cisco_vpn_interface_model.py index 93dc208c4..66b82d12b 100644 --- a/catalystwan/api/templates/models/cisco_vpn_interface_model.py +++ b/catalystwan/api/templates/models/cisco_vpn_interface_model.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import ipaddress from enum import Enum from pathlib import Path @@ -5,8 +7,8 @@ from pydantic import ConfigDict, Field -from catalystwan.api.templates.feature_template import FeatureTemplate -from catalystwan.utils.pydantic_validators import ConvertBoolToStringModel, ConvertIPToStringModel +from catalystwan.api.templates.bool_str import BoolStr +from catalystwan.api.templates.feature_template import FeatureTemplate, FeatureTemplateValidator DEFAULT_STATIC_NAT64_SOURCE_VPN_ID = 0 DEFAULT_STATIC_NAT_SOURCE_VPN_ID = 0 @@ -20,11 +22,11 @@ DEFAULT_IPV6_VRRP_TIMER = 1000 -class SecondaryIPv4Address(ConvertBoolToStringModel, ConvertIPToStringModel): +class SecondaryIPv4Address(FeatureTemplateValidator): address: Optional[ipaddress.IPv4Interface] = None -class SecondaryIPv6Address(ConvertBoolToStringModel, ConvertIPToStringModel): +class SecondaryIPv6Address(FeatureTemplateValidator): address: Optional[ipaddress.IPv6Interface] = None @@ -33,13 +35,13 @@ class Direction(str, Enum): OUT = "out" -class AccessList(ConvertBoolToStringModel): +class AccessList(FeatureTemplateValidator): direction: Direction acl_name: str = Field(json_schema_extra={"vmanage_key": "acl-name"}) model_config = ConfigDict(populate_by_name=True) -class DhcpHelperV6(ConvertBoolToStringModel, ConvertIPToStringModel): +class DhcpHelperV6(FeatureTemplateValidator): address: ipaddress.IPv6Address vpn: Optional[int] = None @@ -50,7 +52,7 @@ class NatChoice(str, Enum): LOOPBACK = "Loopback" -class StaticNat66(ConvertBoolToStringModel, ConvertIPToStringModel): +class StaticNat66(FeatureTemplateValidator): source_prefix: ipaddress.IPv6Interface = Field(json_schema_extra={"vmanage_key": "source-prefix"}) translated_source_prefix: str = Field(json_schema_extra={"vmanage_key": "translated-source-prefix"}) source_vpn_id: int = Field(DEFAULT_STATIC_NAT64_SOURCE_VPN_ID, json_schema_extra={"vmanage_key": "source-vpn-id"}) @@ -62,7 +64,7 @@ class StaticNatDirection(str, Enum): OUTSIDE = "outside" -class Static(ConvertBoolToStringModel, ConvertIPToStringModel): +class Static(FeatureTemplateValidator): source_ip: ipaddress.IPv4Address = Field(json_schema_extra={"vmanage_key": "source-ip"}) translate_ip: ipaddress.IPv4Address = Field(json_schema_extra={"vmanage_key": "translate-ip"}) static_nat_direction: StaticNatDirection = Field( @@ -77,7 +79,7 @@ class Proto(str, Enum): UDP = "udp" -class StaticPortForward(ConvertBoolToStringModel, ConvertIPToStringModel): +class StaticPortForward(FeatureTemplateValidator): source_ip: ipaddress.IPv4Address = Field(json_schema_extra={"vmanage_key": "source-ip"}) translate_ip: ipaddress.IPv4Address = Field(json_schema_extra={"vmanage_key": "translate-ip"}) static_nat_direction: StaticNatDirection = Field( @@ -108,7 +110,7 @@ class Encap(str, Enum): IPSEC = "ipsec" -class Encapsulation(ConvertBoolToStringModel): +class Encapsulation(FeatureTemplateValidator): encap: Encap preference: Optional[int] = None weight: int = DEFAULT_ENCAPSULATION_WEIGHT @@ -176,12 +178,12 @@ class Duplex(str, Enum): AUTO = "auto" -class Ip(ConvertBoolToStringModel, ConvertIPToStringModel): +class Ip(FeatureTemplateValidator): addr: ipaddress.IPv4Address mac: str -class Ipv4Secondary(ConvertBoolToStringModel, ConvertIPToStringModel): +class Ipv4Secondary(FeatureTemplateValidator): address: ipaddress.IPv4Address @@ -190,18 +192,18 @@ class TrackAction(str, Enum): SHUTDOWN = "Shutdown" -class TrackingObject(ConvertBoolToStringModel): +class TrackingObject(FeatureTemplateValidator): name: int track_action: TrackAction = Field(TrackAction.DECREMENT, json_schema_extra={"vmanage_key": "track-action"}) decrement: int model_config = ConfigDict(populate_by_name=True) -class Vrrp(ConvertBoolToStringModel, ConvertIPToStringModel): +class Vrrp(FeatureTemplateValidator): grp_id: int = Field(json_schema_extra={"vmanage_key": "grp-id"}) priority: int = DEFAULT_VRRP_PRIORITY timer: int = DEFAULT_VRRP_TIMER - track_omp: bool = Field(False, json_schema_extra={"vmanage_key": "track-omp"}) + track_omp: BoolStr = Field(default=False, json_schema_extra={"vmanage_key": "track-omp"}) track_prefix_list: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "track-prefix-list"}) address: Optional[ipaddress.IPv4Address] = Field( default=None, json_schema_extra={"data_path": ["ipv4"], "vmanage_key": "address"} @@ -209,7 +211,7 @@ class Vrrp(ConvertBoolToStringModel, ConvertIPToStringModel): ipv4_secondary: Optional[List[Ipv4Secondary]] = Field( default=None, json_schema_extra={"vmanage_key": "ipv4-secondary"} ) - tloc_change_pref: bool = Field(False, json_schema_extra={"vmanage_key": "tloc-change-pref"}) + tloc_change_pref: BoolStr = Field(default=False, json_schema_extra={"vmanage_key": "tloc-change-pref"}) value: int tracking_object: Optional[List[TrackingObject]] = Field( default=None, json_schema_extra={"vmanage_key": "tracking-object"} @@ -217,38 +219,42 @@ class Vrrp(ConvertBoolToStringModel, ConvertIPToStringModel): model_config = ConfigDict(populate_by_name=True) -class Ipv6(ConvertBoolToStringModel, ConvertIPToStringModel): +class Ipv6(FeatureTemplateValidator): ipv6_link_local: ipaddress.IPv6Address = Field(json_schema_extra={"vmanage_key": "ipv6-link-local"}) prefix: Optional[ipaddress.IPv6Interface] = None model_config = ConfigDict(populate_by_name=True) -class Ipv6Vrrp(ConvertBoolToStringModel): +class Ipv6Vrrp(FeatureTemplateValidator): grp_id: int = Field(json_schema_extra={"vmanage_key": "grp-id"}) priority: int = DEFAULT_IPV6_VRRP_PRIORITY timer: int = DEFAULT_IPV6_VRRP_TIMER - track_omp: bool = Field(False, json_schema_extra={"vmanage_key": "track-omp"}) + track_omp: BoolStr = Field(default=False, json_schema_extra={"vmanage_key": "track-omp"}) track_prefix_list: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "track-prefix-list"}) ipv6: Optional[List[Ipv6]] = None model_config = ConfigDict(populate_by_name=True) -class CiscoVpnInterfaceModel(FeatureTemplate, ConvertBoolToStringModel, ConvertIPToStringModel): +class CiscoVpnInterfaceModel(FeatureTemplate): model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True) - if_name: str = Field(json_schema_extra={"vmanage_key": "if-name"}) + if_name: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "if-name"}) interface_description: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "description"}) - poe: Optional[bool] = None + poe: Optional[BoolStr] = None ipv4_address: Optional[str] = Field(default=None, json_schema_extra={"data_path": ["ip"], "vmanage_key": "address"}) secondary_ipv4_address: Optional[List[SecondaryIPv4Address]] = Field( default=None, json_schema_extra={"data_path": ["ip"], "vmanage_key": "secondary-address"} ) - dhcp_ipv4_client: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "dhcp-client"}) + dhcp_ipv4_client: Optional[BoolStr] = Field( + default=None, json_schema_extra={"data_path": ["ip"], "vmanage_key": "dhcp-client"} + ) dhcp_distance: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "dhcp-distance"}) ipv6_address: Optional[ipaddress.IPv6Interface] = Field( default=None, json_schema_extra={"data_path": ["ipv6"], "vmanage_key": "address"} ) - dhcp_ipv6_client: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "dhcp-client"}) + dhcp_ipv6_client: Optional[BoolStr] = Field( + default=None, json_schema_extra={"data_path": ["ipv6"], "vmanage_key": "dhcp-client"} + ) secondary_ipv6_address: Optional[List[SecondaryIPv6Address]] = Field( default=None, json_schema_extra={"data_path": ["ipv6"], "vmanage_key": "secondary-address"} ) @@ -260,13 +266,13 @@ class CiscoVpnInterfaceModel(FeatureTemplate, ConvertBoolToStringModel, ConvertI default=None, json_schema_extra={"vmanage_key": "dhcp-helper-v6"} ) tracker: Optional[List[str]] = None - auto_bandwidth_detect: Optional[bool] = Field( + auto_bandwidth_detect: Optional[BoolStr] = Field( default=None, json_schema_extra={"vmanage_key": "auto-bandwidth-detect"} ) iperf_server: Optional[ipaddress.IPv4Address] = Field( default=None, json_schema_extra={"vmanage_key": "iperf-server"} ) - nat: Optional[bool] = None + nat: Optional[BoolStr] = None nat_choice: Optional[NatChoice] = Field(default=None, json_schema_extra={"vmanage_key": "nat-choice"}) udp_timeout: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "udp-timeout"}) tcp_timeout: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "tcp-timeout"}) @@ -274,12 +280,12 @@ class CiscoVpnInterfaceModel(FeatureTemplate, ConvertBoolToStringModel, ConvertI default=None, json_schema_extra={"vmanage_key": "range-start"} ) nat_range_end: Optional[ipaddress.IPv4Address] = Field(default=None, json_schema_extra={"vmanage_key": "range-end"}) - overload: Optional[bool] = None + overload: Optional[BoolStr] = None loopback_interface: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "loopback-interface"}) prefix_length: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "prefix-length"}) - enable: Optional[bool] = None - nat64: Optional[bool] = None - nat66: Optional[bool] = None + enable: Optional[BoolStr] = None + nat64: Optional[BoolStr] = None + nat66: Optional[BoolStr] = None static_nat66: Optional[List[StaticNat66]] = Field(default=None, json_schema_extra={"vmanage_key": "static-nat66"}) static: Optional[List[Static]] = Field( default=None, json_schema_extra={"data_path": ["nat"], "vmanage_key": "static"} @@ -287,7 +293,7 @@ class CiscoVpnInterfaceModel(FeatureTemplate, ConvertBoolToStringModel, ConvertI static_port_forward: Optional[List[StaticPortForward]] = Field( default=None, json_schema_extra={"vmanage_key": "static-port-forward"} ) - enable_core_region: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "enable-core-region"}) + enable_core_region: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "enable-core-region"}) core_region: Optional[CoreRegion] = Field(default=None, json_schema_extra={"vmanage_key": "core-region"}) secondary_region: Optional[SecondaryRegion] = Field( default=None, json_schema_extra={"vmanage_key": "secondary-region"} @@ -295,9 +301,9 @@ class CiscoVpnInterfaceModel(FeatureTemplate, ConvertBoolToStringModel, ConvertI tloc_encapsulation: Optional[List[Encapsulation]] = Field( default=None, json_schema_extra={"vmanage_key": "encapsulation", "data_path": ["tunnel-interface"]} ) - border: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["tunnel-interface"]}) - per_tunnel_qos: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "per-tunnel-qos"}) - per_tunnel_qos_aggregator: Optional[bool] = Field( + border: Optional[BoolStr] = Field(default=None, json_schema_extra={"data_path": ["tunnel-interface"]}) + per_tunnel_qos: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "per-tunnel-qos"}) + per_tunnel_qos_aggregator: Optional[BoolStr] = Field( default=None, json_schema_extra={"vmanage_key": "per-tunnel-qos-aggregator"} ) mode: Optional[Mode] = None @@ -307,10 +313,10 @@ class CiscoVpnInterfaceModel(FeatureTemplate, ConvertBoolToStringModel, ConvertI max_control_connections: Optional[int] = Field( default=None, json_schema_extra={"vmanage_key": "max-control-connections", "data_path": ["tunnel-interface"]} ) - control_connections: Optional[bool] = Field( + control_connections: Optional[BoolStr] = Field( default=None, json_schema_extra={"vmanage_key": "control-connections", "data_path": ["tunnel-interface"]} ) - vbond_as_stun_server: Optional[bool] = Field( + vbond_as_stun_server: Optional[BoolStr] = Field( default=None, json_schema_extra={"vmanage_key": "vbond-as-stun-server", "data_path": ["tunnel-interface"]} ) exclude_controller_group_list: Optional[List[int]] = Field( @@ -321,10 +327,10 @@ class CiscoVpnInterfaceModel(FeatureTemplate, ConvertBoolToStringModel, ConvertI default=None, json_schema_extra={"vmanage_key": "vmanage-connection-preference", "data_path": ["tunnel-interface"]}, ) - port_hop: Optional[bool] = Field( + port_hop: Optional[BoolStr] = Field( default=None, json_schema_extra={"vmanage_key": "port-hop", "data_path": ["tunnel-interface"]} ) - restrict: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["tunnel-interface", "color"]}) + restrict: Optional[BoolStr] = Field(default=None, json_schema_extra={"data_path": ["tunnel-interface", "color"]}) dst_ip: Optional[ipaddress.IPv4Address] = Field( default=None, json_schema_extra={"vmanage_key": "dst-ip", "data_path": ["tunnel-interface", "tloc-extension-gre-to"]}, @@ -340,38 +346,52 @@ class CiscoVpnInterfaceModel(FeatureTemplate, ConvertBoolToStringModel, ConvertI default=None, json_schema_extra={"vmanage_key": "hello-tolerance", "data_path": ["tunnel-interface"]} ) bind: Optional[str] = Field(default=None, json_schema_extra={"data_path": ["tunnel-interface"]}) - last_resort_circuit: Optional[bool] = Field( + last_resort_circuit: Optional[BoolStr] = Field( default=None, json_schema_extra={"vmanage_key": "last-resort-circuit", "data_path": ["tunnel-interface"]} ) - low_bandwidth_link: Optional[bool] = Field( + low_bandwidth_link: Optional[BoolStr] = Field( default=None, json_schema_extra={"vmanage_key": "low-bandwidth-link", "data_path": ["tunnel-interface"]} ) tunnel_tcp_mss_adjust: Optional[int] = Field( default=None, json_schema_extra={"vmanage_key": "tunnel-tcp-mss-adjust", "data_path": ["tunnel-interface"]} ) - clear_dont_fragment: Optional[bool] = Field( + clear_dont_fragment: Optional[BoolStr] = Field( default=None, json_schema_extra={"vmanage_key": "clear-dont-fragment", "data_path": ["tunnel-interface"]} ) - propagate_sgt: Optional[bool] = Field( + propagate_sgt: Optional[BoolStr] = Field( default=None, json_schema_extra={"data_path": ["tunnel-interface"], "vmanage_key": "propagate-sgt"} ) - network_broadcast: Optional[bool] = Field( + network_broadcast: Optional[BoolStr] = Field( default=None, json_schema_extra={"vmanage_key": "network-broadcast", "data_path": ["tunnel-interface"]} ) - all: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]}) - bgp: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]}) - dhcp: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]}) - dns: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]}) - icmp: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]}) - sshd: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]}) - netconf: Optional[bool] = Field( + all: Optional[BoolStr] = Field(default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]}) + bgp: Optional[BoolStr] = Field(default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]}) + dhcp: Optional[BoolStr] = Field( + default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]} + ) + dns: Optional[BoolStr] = Field(default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]}) + icmp: Optional[BoolStr] = Field( + default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]} + ) + sshd: Optional[BoolStr] = Field( + default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]} + ) + netconf: Optional[BoolStr] = Field( + default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]} + ) + ntp: Optional[BoolStr] = Field(default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]}) + ospf: Optional[BoolStr] = Field( + default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]} + ) + stun: Optional[BoolStr] = Field( + default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]} + ) + snmp: Optional[BoolStr] = Field( + default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]} + ) + https: Optional[BoolStr] = Field( default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]} ) - ntp: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]}) - ospf: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]}) - stun: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]}) - snmp: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]}) - https: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["tunnel-interface", "allow-service"]}) media_type: Optional[MediaType] = Field(default=None, json_schema_extra={"vmanage_key": "media-type"}) intrf_mtu: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "intrf-mtu"}) mtu: Optional[int] = None @@ -385,16 +405,16 @@ class CiscoVpnInterfaceModel(FeatureTemplate, ConvertBoolToStringModel, ConvertI mac_address: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "mac-address"}) speed: Optional[Speed] = None duplex: Optional[Duplex] = None - shutdown: Optional[bool] = False + shutdown: Optional[BoolStr] = False arp_timeout: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "arp-timeout"}) - autonegotiate: Optional[bool] = None - ip_directed_broadcast: Optional[bool] = Field( + autonegotiate: Optional[BoolStr] = None + ip_directed_broadcast: Optional[BoolStr] = Field( default=None, json_schema_extra={"vmanage_key": "ip-directed-broadcast"} ) - icmp_redirect_disable: Optional[bool] = Field( + icmp_redirect_disable: Optional[BoolStr] = Field( default=None, json_schema_extra={"vmanage_key": "icmp-redirect-disable"} ) - qos_adaptive: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "qos-adaptive"}) + qos_adaptive: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "qos-adaptive"}) period: Optional[int] = Field(default=None, json_schema_extra={"data_path": ["qos-adaptive"]}) bandwidth_down: Optional[int] = Field( default=None, json_schema_extra={"vmanage_key": "bandwidth-down", "data_path": ["qos-adaptive", "downstream"]} @@ -412,7 +432,9 @@ class CiscoVpnInterfaceModel(FeatureTemplate, ConvertBoolToStringModel, ConvertI service_provider: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "service-provider"}) bandwidth_upstream: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "bandwidth-upstream"}) bandwidth_downstream: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "bandwidth-downstream"}) - block_non_source_ip: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "block-non-source-ip"}) + block_non_source_ip: Optional[BoolStr] = Field( + default=None, json_schema_extra={"vmanage_key": "block-non-source-ip"} + ) rule_name: Optional[str] = Field( default=None, json_schema_extra={"vmanage_key": "rule-name", "data_path": ["rewrite-rule"]} ) @@ -422,17 +444,17 @@ class CiscoVpnInterfaceModel(FeatureTemplate, ConvertBoolToStringModel, ConvertI ip: Optional[List[Ip]] = Field(default=None, json_schema_extra={"data_path": ["arp"]}) vrrp: Optional[List[Vrrp]] = Field(default=None, json_schema_extra={"vmanage_key": "vrrp"}) ipv6_vrrp: Optional[List[Ipv6Vrrp]] = Field(default=None, json_schema_extra={"vmanage_key": "ipv6-vrrp"}) - enable_sgt_propagation: Optional[bool] = Field( + enable_sgt_propagation: Optional[BoolStr] = Field( default=None, json_schema_extra={"data_path": ["trustsec", "propagate"], "vmanage_key": "sgt"} ) security_group_tag: Optional[int] = Field( default=None, json_schema_extra={"data_path": ["trustsec", "static"], "vmanage_key": "sgt"} ) - trusted: Optional[bool] = Field(default=None, json_schema_extra={"data_path": ["trustsec", "static"]}) - enable_sgt_authorization_and_forwarding: Optional[bool] = Field( + trusted: Optional[BoolStr] = Field(default=None, json_schema_extra={"data_path": ["trustsec", "static"]}) + enable_sgt_authorization_and_forwarding: Optional[BoolStr] = Field( default=None, json_schema_extra={"data_path": ["trustsec"], "vmanage_key": "enable"} ) - enable_sgt_enforcement: Optional[bool] = Field( + enable_sgt_enforcement: Optional[BoolStr] = Field( default=None, json_schema_extra={"data_path": ["trustsec", "enforcement"], "vmanage_key": "enable"} ) enforcement_sgt: Optional[int] = Field( diff --git a/catalystwan/api/templates/models/cisco_vpn_model.py b/catalystwan/api/templates/models/cisco_vpn_model.py index 6320bcb69..a07741d5f 100644 --- a/catalystwan/api/templates/models/cisco_vpn_model.py +++ b/catalystwan/api/templates/models/cisco_vpn_model.py @@ -1,10 +1,12 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from enum import Enum from pathlib import Path from typing import ClassVar, List, Optional -from pydantic import BaseModel, ConfigDict, Field, field_validator +from pydantic import ConfigDict, Field, field_validator -from catalystwan.api.templates.feature_template import FeatureTemplate +from catalystwan.api.templates.feature_template import FeatureTemplate, FeatureTemplateValidator class Role(str, Enum): @@ -12,19 +14,19 @@ class Role(str, Enum): SECONDARY = "secondary" -class Dns(BaseModel): - dns_addr: str = Field(json_schema_extra={"vmanage_key": "dns-addr"}) +class Dns(FeatureTemplateValidator): + dns_addr: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "dns-addr"}) role: Role = Role.PRIMARY model_config = ConfigDict(populate_by_name=True) -class DnsIpv6(BaseModel): - dns_addr: str = Field(json_schema_extra={"vmanage_key": "dns-addr"}) +class DnsIpv6(FeatureTemplateValidator): + dns_addr: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "dns-addr"}) role: Optional[Role] = Role.PRIMARY model_config = ConfigDict(populate_by_name=True) -class Host(BaseModel): +class Host(FeatureTemplateValidator): hostname: str ip: List[str] @@ -41,10 +43,10 @@ class SvcType(str, Enum): APPQOE = "appqoe" -class Service(BaseModel): +class Service(FeatureTemplateValidator): svc_type: SvcType = Field(json_schema_extra={"vmanage_key": "svc-type"}) - address: List[str] - interface: str + address: Optional[List[str]] = None + interface: Optional[str] = None track_enable: bool = Field(True, json_schema_extra={"vmanage_key": "track-enable"}) model_config = ConfigDict(populate_by_name=True) @@ -58,25 +60,25 @@ class ServiceRouteService(str, Enum): SIG = "sig" -class ServiceRoute(BaseModel): +class ServiceRoute(FeatureTemplateValidator): prefix: str vpn: int service: ServiceRouteService = ServiceRouteService.SIG -class NextHop(BaseModel): - address: str +class NextHop(FeatureTemplateValidator): + address: Optional[str] = None distance: Optional[int] = 1 -class NextHopWithTrack(BaseModel): - address: str +class NextHopWithTrack(FeatureTemplateValidator): + address: Optional[str] = None distance: Optional[int] = 1 tracker: str -class Routev4(BaseModel): - prefix: str +class Routev4(FeatureTemplateValidator): + prefix: Optional[str] = None next_hop: Optional[List[NextHop]] = Field( default=None, json_schema_extra={"vmanage_key": "next-hop", "priority_order": ["address", "distance"]} ) @@ -90,7 +92,7 @@ class Routev4(BaseModel): model_config = ConfigDict(populate_by_name=True) -class NextHopv6(BaseModel): +class NextHopv6(FeatureTemplateValidator): address: str distance: Optional[int] = 1 @@ -100,7 +102,7 @@ class Nat(str, Enum): NAT66 = "NAT66" -class Routev6(BaseModel): +class Routev6(FeatureTemplateValidator): prefix: str next_hop: Optional[List[NextHopv6]] = Field(default=None, json_schema_extra={"vmanage_key": "next-hop"}) null0: Optional[bool] = None @@ -109,13 +111,13 @@ class Routev6(BaseModel): model_config = ConfigDict(populate_by_name=True) -class GreRoute(BaseModel): +class GreRoute(FeatureTemplateValidator): prefix: str vpn: int interface: Optional[List[str]] = None -class IpsecRoute(BaseModel): +class IpsecRoute(FeatureTemplateValidator): prefix: str vpn: int interface: Optional[List[str]] = None @@ -143,14 +145,14 @@ class Region(str, Enum): ACCESS = "access" -class PrefixList(BaseModel): +class PrefixList(FeatureTemplateValidator): prefix_entry: str = Field(json_schema_extra={"vmanage_key": "prefix-entry"}) aggregate_only: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "aggregate-only"}) region: Optional[Region] model_config = ConfigDict(populate_by_name=True) -class Advertise(BaseModel): +class Advertise(FeatureTemplateValidator): protocol: AdvertiseProtocol route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"}) protocol_sub_type: Optional[List[AdvertiseProtocolSubType]] = Field( @@ -173,7 +175,7 @@ class Ipv6AdvertiseProtocolSubType(str, Enum): EXTERNAL = "external" -class Ipv6Advertise(BaseModel): +class Ipv6Advertise(FeatureTemplateValidator): protocol: Ipv6AdvertiseProtocol route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"}) protocol_sub_type: Optional[List[Ipv6AdvertiseProtocolSubType]] = Field( @@ -192,7 +194,7 @@ class LeakFromGlobalProtocol(str, Enum): ODR = "odr" -class Pool(BaseModel): +class Pool(FeatureTemplateValidator): name: str start_address: str = Field(json_schema_extra={"vmanage_key": "start-address"}) end_address: str = Field(json_schema_extra={"vmanage_key": "end-address"}) @@ -213,11 +215,11 @@ class Overload(str, Enum): FALSE = "false" -class Natpool(BaseModel): +class Natpool(FeatureTemplateValidator): name: int - prefix_length: int = Field(json_schema_extra={"vmanage_key": "prefix-length"}) - range_start: str = Field(json_schema_extra={"vmanage_key": "range-start"}) - range_end: str = Field(json_schema_extra={"vmanage_key": "range-end"}) + prefix_length: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "prefix-length"}) + range_start: str = Field(default=None, json_schema_extra={"vmanage_key": "range-start"}) + range_end: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "range-end"}) overload: Overload = Overload.TRUE direction: Direction tracker_id: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "tracker-id"}) @@ -229,16 +231,16 @@ class StaticNatDirection(str, Enum): OUTSIDE = "outside" -class Static(BaseModel): - pool_name: Optional[int] = Field(json_schema_extra={"vmanage_key": "pool-name"}) - source_ip: str = Field(json_schema_extra={"vmanage_key": "source-ip"}) - translate_ip: str = Field(json_schema_extra={"vmanage_key": "translate-ip"}) +class Static(FeatureTemplateValidator): + pool_name: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "pool-name"}) + source_ip: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "source-ip"}) + translate_ip: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "translate-ip"}) static_nat_direction: StaticNatDirection = Field(json_schema_extra={"vmanage_key": "static-nat-direction"}) tracker_id: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "tracker-id"}) model_config = ConfigDict(populate_by_name=True) -class SubnetStatic(BaseModel): +class SubnetStatic(FeatureTemplateValidator): source_ip_subnet: str = Field(json_schema_extra={"vmanage_key": "source-ip-subnet"}) translate_ip_subnet: str = Field(json_schema_extra={"vmanage_key": "translate-ip-subnet"}) prefix_length: int = Field(json_schema_extra={"vmanage_key": "prefix-length"}) @@ -252,7 +254,7 @@ class Proto(str, Enum): UDP = "udp" -class PortForward(BaseModel): +class PortForward(FeatureTemplateValidator): pool_name: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "pool-name"}) source_port: int = Field(json_schema_extra={"vmanage_key": "source-port"}) translate_port: int = Field(json_schema_extra={"vmanage_key": "translate-port"}) @@ -279,13 +281,13 @@ class RouteImportRedistributeProtocol(str, Enum): OSPF = "ospf" -class RouteImportRedistribute(BaseModel): +class RouteImportRedistribute(FeatureTemplateValidator): protocol: RouteImportRedistributeProtocol route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"}) model_config = ConfigDict(populate_by_name=True) -class RouteImport(BaseModel): +class RouteImport(FeatureTemplateValidator): protocol: RouteImportProtocol protocol_sub_type: List[RouteImportProtocolSubType] = Field(json_schema_extra={"vmanage_key": "protocol-sub-type"}) route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"}) @@ -311,13 +313,13 @@ class RouteImportFromRedistributeProtocol(str, Enum): OSPF = "ospf" -class RouteImportFromRedistribute(BaseModel): +class RouteImportFromRedistribute(FeatureTemplateValidator): protocol: RouteImportFromRedistributeProtocol route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"}) model_config = ConfigDict(populate_by_name=True) -class RouteImportFrom(BaseModel): +class RouteImportFrom(FeatureTemplateValidator): source_vpn: int = Field(json_schema_extra={"vmanage_key": "source-vpn"}) protocol: RouteImportFromProtocol protocol_sub_type: List[RouteImportFromProtocolSubType] = Field( @@ -345,13 +347,13 @@ class RouteExportRedistributeProtocol(str, Enum): OSPF = "ospf" -class RouteExportRedistribute(BaseModel): +class RouteExportRedistribute(FeatureTemplateValidator): protocol: RouteExportRedistributeProtocol route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"}) model_config = ConfigDict(populate_by_name=True) -class RouteExport(BaseModel): +class RouteExport(FeatureTemplateValidator): protocol: RouteExportProtocol protocol_sub_type: List[RouteExportProtocolSubType] = Field(json_schema_extra={"vmanage_key": "protocol-sub-type"}) route_policy: Optional[str] = Field(default=None, json_schema_extra={"vmanage_key": "route-policy"}) diff --git a/catalystwan/api/templates/models/cli_template.py b/catalystwan/api/templates/models/cli_template.py index f8211b9dc..0aff83dfa 100644 --- a/catalystwan/api/templates/models/cli_template.py +++ b/catalystwan/api/templates/models/cli_template.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from pathlib import Path from typing import ClassVar diff --git a/catalystwan/api/templates/models/omp_vsmart_model.py b/catalystwan/api/templates/models/omp_vsmart_model.py index 5daa2edcc..9598f7191 100644 --- a/catalystwan/api/templates/models/omp_vsmart_model.py +++ b/catalystwan/api/templates/models/omp_vsmart_model.py @@ -1,20 +1,22 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from pathlib import Path from typing import ClassVar, Optional from pydantic import ConfigDict, Field +from catalystwan.api.templates.bool_str import BoolStr from catalystwan.api.templates.feature_template import FeatureTemplate -from catalystwan.utils.pydantic_validators import ConvertBoolToStringModel -class OMPvSmart(FeatureTemplate, ConvertBoolToStringModel): +class OMPvSmart(FeatureTemplate): model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True) - graceful_restart: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "graceful-restart"}) + graceful_restart: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "graceful-restart"}) send_path_limit: Optional[int] = Field(default=None, json_schema_extra={"vmanage_key": "send-path-limit"}) - send_backup_paths: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "send-backup-paths"}) - discard_rejected: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "discard-rejected"}) - shutdown: Optional[bool] = Field(default=None, json_schema_extra={"vmanage_key": "shutdown"}) + send_backup_paths: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "send-backup-paths"}) + discard_rejected: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "discard-rejected"}) + shutdown: Optional[BoolStr] = Field(default=None, json_schema_extra={"vmanage_key": "shutdown"}) graceful_restart_timer: Optional[int] = Field( default=None, json_schema_extra={"vmanage_key": "graceful-restart-timer", "data_path": ["timers"]} ) @@ -24,7 +26,7 @@ class OMPvSmart(FeatureTemplate, ConvertBoolToStringModel): holdtime: Optional[int] = Field( default=None, json_schema_extra={"vmanage_key": "holdtime", "data_path": ["timers"]} ) - affinity_group_preference: Optional[bool] = Field( + affinity_group_preference: Optional[BoolStr] = Field( default=None, json_schema_extra={"vmanage_key": "affinity-group-preference"} ) advertisement_interval: Optional[int] = Field( diff --git a/catalystwan/api/templates/models/security_vsmart_model.py b/catalystwan/api/templates/models/security_vsmart_model.py index 0af675d38..14ee051aa 100644 --- a/catalystwan/api/templates/models/security_vsmart_model.py +++ b/catalystwan/api/templates/models/security_vsmart_model.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from enum import Enum from pathlib import Path from typing import ClassVar, Optional diff --git a/catalystwan/api/templates/models/supported.py b/catalystwan/api/templates/models/supported.py index f830c4e93..fc0ad1f22 100644 --- a/catalystwan/api/templates/models/supported.py +++ b/catalystwan/api/templates/models/supported.py @@ -1,8 +1,11 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from catalystwan.api.templates.models.cisco_aaa_model import CiscoAAAModel from catalystwan.api.templates.models.cisco_banner_model import CiscoBannerModel from catalystwan.api.templates.models.cisco_bfd_model import CiscoBFDModel from catalystwan.api.templates.models.cisco_logging_model import CiscoLoggingModel from catalystwan.api.templates.models.cisco_ntp_model import CiscoNTPModel +from catalystwan.api.templates.models.cisco_omp_model import CiscoOMPModel from catalystwan.api.templates.models.cisco_ospf import CiscoOSPFModel from catalystwan.api.templates.models.cisco_secure_internet_gateway import CiscoSecureInternetGatewayModel from catalystwan.api.templates.models.cisco_snmp_model import CiscoSNMPModel @@ -29,4 +32,5 @@ "cisco_snmp": CiscoSNMPModel, "cisco_system": CiscoSystemModel, "cisco_secure_internet_gateway": CiscoSecureInternetGatewayModel, + "cisco_omp": CiscoOMPModel, } diff --git a/catalystwan/api/templates/models/system_vsmart_model.py b/catalystwan/api/templates/models/system_vsmart_model.py index bd1231704..b3ebba960 100644 --- a/catalystwan/api/templates/models/system_vsmart_model.py +++ b/catalystwan/api/templates/models/system_vsmart_model.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from pathlib import Path from typing import ClassVar, Optional diff --git a/catalystwan/api/templates/payloads/aaa/aaa_model.py b/catalystwan/api/templates/payloads/aaa/aaa_model.py index bcd54a007..18af11ca9 100644 --- a/catalystwan/api/templates/payloads/aaa/aaa_model.py +++ b/catalystwan/api/templates/payloads/aaa/aaa_model.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations from enum import Enum diff --git a/catalystwan/api/templates/payloads/cisco_vpn/cisco_vpn_model.py b/catalystwan/api/templates/payloads/cisco_vpn/cisco_vpn_model.py index b0c8bb40a..01fa9d0fb 100644 --- a/catalystwan/api/templates/payloads/cisco_vpn/cisco_vpn_model.py +++ b/catalystwan/api/templates/payloads/cisco_vpn/cisco_vpn_model.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations from enum import Enum diff --git a/catalystwan/api/templates/payloads/tenant/tenant_model.py b/catalystwan/api/templates/payloads/tenant/tenant_model.py index 862ad8bdc..690031d39 100644 --- a/catalystwan/api/templates/payloads/tenant/tenant_model.py +++ b/catalystwan/api/templates/payloads/tenant/tenant_model.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations from pathlib import Path diff --git a/catalystwan/api/tenant_backup_restore_api.py b/catalystwan/api/tenant_backup_restore_api.py index 0bdeee69c..2996aaa1a 100644 --- a/catalystwan/api/tenant_backup_restore_api.py +++ b/catalystwan/api/tenant_backup_restore_api.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + """ Module for apidocs/#/Tenant Backup Restore """ diff --git a/catalystwan/api/tenant_management_api.py b/catalystwan/api/tenant_management_api.py index 2554ac19d..ee44ee0c9 100644 --- a/catalystwan/api/tenant_management_api.py +++ b/catalystwan/api/tenant_management_api.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations from typing import TYPE_CHECKING, List, Optional diff --git a/catalystwan/api/tenant_migration_api.py b/catalystwan/api/tenant_migration_api.py index 0b51e5b97..76d9e207f 100644 --- a/catalystwan/api/tenant_migration_api.py +++ b/catalystwan/api/tenant_migration_api.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations import logging diff --git a/catalystwan/api/versions_utils.py b/catalystwan/api/versions_utils.py index 2496bd581..0c5377a37 100644 --- a/catalystwan/api/versions_utils.py +++ b/catalystwan/api/versions_utils.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations import logging @@ -6,9 +8,9 @@ from pydantic import BaseModel, ConfigDict, Field -from catalystwan.dataclasses import Device from catalystwan.endpoints.configuration.software_actions import SoftwareImageDetails from catalystwan.endpoints.configuration_device_actions import PartitionDevice +from catalystwan.endpoints.configuration_device_inventory import DeviceDetailsResponse from catalystwan.exceptions import ImageNotInRepositoryError from catalystwan.typed_list import DataSequence from catalystwan.utils.upgrades_helper import SoftwarePackageUploadPayload @@ -94,7 +96,9 @@ def get_devices_versions_repository(self) -> Dict[str, DeviceSoftwareRepository] def get_image_version(self, software_image: str) -> Union[str, None]: """ - Get proper software image version, based on name in available files + Get proper software image version, based on name in available files. + + If software_image detected in available files, but doesn't include version_name, software_image won't be used. Args: software_image (str): path to software image @@ -107,11 +111,50 @@ def get_image_version(self, software_image: str) -> Union[str, None]: software_images = self.get_all_software_images() for image in software_images: if image.available_files and image_name in image.available_files: - image_version = image.version_name - return image_version + if image.version_name and not image.version_name == "--": + return image.version_name + logger.warning( + f"Detected image {image_name} in available files has version_name: {image.version_name} as value." + "Image will not be used and image version won't be returned." + ) logger.error(f"Software image {image_name} is not in available images") return None + def get_remote_image( + self, remote_image_filename: str, remote_server_name: str + ) -> Union[SoftwareImageDetails, None]: + """ + Get remote software image details, based on name in available files and remote server name. + + Args: + remote_image_filename (str): path to software image on remote server + remote_server_name (str): remote server name + + Returns: + Union[SoftwareImageDetails, None]: remote image image details + """ + + image_name = PurePath(remote_image_filename).name + software_images = self.get_all_software_images() + for image_details in software_images: + if ( + image_details.available_files + and image_details.version_type + and image_name in image_details.available_files + and remote_server_name in image_details.version_type + ): + if not (image_details.remote_server_id and image_details.version_id): + raise ValueError( + f"Requested image: '{image_name}' does not include include required fields for this operation:" + f"image_details.remote_server_id - (current value: {image_details.remote_server_id})" + f"image_details.version_id - (current value: {image_details.version_id})" + ) + return image_details + logger.error( + f"Software image {image_name} is not in available in images from remote server {remote_server_name}" + ) + return None + def upload_image(self, image_path: str) -> None: """ Upload software image ('tar.gz' or 'SPA.bin') to vManage software repository @@ -157,8 +200,17 @@ class DeviceVersions: def __init__(self, session: ManagerSession): self.repository = RepositoryAPI(session) + def _validate_devices_required_fields(self, devices: DataSequence[DeviceDetailsResponse]): + for device in devices: + if not device.uuid or not device.device_ip: + raise ValueError( + f"Provided device '{device.host_name}' doesn't include required fields for this operation:" + f"device.uuid (current value: {device.uuid})" + f"device.device_ip (current value: {device.device_ip})" + ) + def _get_device_list_in( - self, version_to_set_up: str, devices: DataSequence[Device], version_type: str + self, version_to_set_up: str, devices: DataSequence[DeviceDetailsResponse], version_type: str ) -> DataSequence[PartitionDevice]: """ Create devices payload list included requested version, if requested version @@ -166,15 +218,16 @@ def _get_device_list_in( Args: version_to_set_up (str): requested version - devices List[Device]: list of Device dataclass instances + devices List[DeviceDetailsResponse]: list of Device dataclass instances version_type: type of version (installed, available, etc.) Returns: list : list of devices """ + self._validate_devices_required_fields(devices) devices_payload = DataSequence( PartitionDevice, - [PartitionDevice(device_id=device.uuid, device_ip=device.id) for device in devices], + [PartitionDevice(device_id=device.uuid, device_ip=device.device_ip) for device in devices], # type: ignore ) all_dev_versions = self.repository.get_devices_versions_repository() for device in devices_payload: @@ -192,7 +245,7 @@ def _get_device_list_in( return devices_payload def get_device_list_in_installed( - self, version_to_set_up: str, devices: DataSequence[Device] + self, version_to_set_up: str, devices: DataSequence[DeviceDetailsResponse] ) -> DataSequence[PartitionDevice]: """ Create devices payload list included requested version, if requested version @@ -200,7 +253,7 @@ def get_device_list_in_installed( Args: version_to_set_up (str): requested version - devices (List[Device]): devices on which action going to be performed + devices (List[DeviceDetailsResponse]): devices on which action going to be performed Returns: list : list of devices @@ -208,7 +261,7 @@ def get_device_list_in_installed( return self._get_device_list_in(version_to_set_up, devices, "installed_versions") def get_device_available( - self, version_to_set_up: str, devices: DataSequence[Device] + self, version_to_set_up: str, devices: DataSequence[DeviceDetailsResponse] ) -> DataSequence[PartitionDevice]: """ Create devices payload list included requested, if requested version @@ -216,7 +269,7 @@ def get_device_available( Args: version_to_set_up (str): requested version - devices (List[Device]): devices on which action going to be performed + devices (List[DeviceDetailsResponse]): devices on which action going to be performed Returns: @@ -225,7 +278,7 @@ def get_device_available( return self._get_device_list_in(version_to_set_up, devices, "available_versions") def _get_devices_chosen_version( - self, devices: DataSequence[Device], version_type: str + self, devices: DataSequence[DeviceDetailsResponse], version_type: str ) -> DataSequence[PartitionDevice]: """ Create devices payload list included software version key @@ -233,28 +286,32 @@ def _get_devices_chosen_version( Args: version_to_set_up (str): requested version - devices (List[Device]): devices on which action going to be performed + devices (List[DeviceDetailsResponse]): devices on which action going to be performed Returns: list : list of devices """ + self._validate_devices_required_fields(devices) + devices_payload = DataSequence( PartitionDevice, - [PartitionDevice(device_id=device.uuid, device_ip=device.id) for device in devices], + [PartitionDevice(device_id=device.uuid, device_ip=device.device_ip) for device in devices], # type: ignore ) all_dev_versions = self.repository.get_devices_versions_repository() for device in devices_payload: device.version = getattr(all_dev_versions[device.device_id], version_type) return devices_payload - def get_devices_current_version(self, devices: DataSequence[Device]) -> DataSequence[PartitionDevice]: + def get_devices_current_version( + self, devices: DataSequence[DeviceDetailsResponse] + ) -> DataSequence[PartitionDevice]: """ Create devices payload list included current software version key for every device in devices list Args: version_to_set_up (str): requested version - devices (List[Device]): devices on which action going to be performed + devices (List[DeviceDetailsResponse]): devices on which action going to be performed Returns: list : list of devices @@ -262,13 +319,15 @@ def get_devices_current_version(self, devices: DataSequence[Device]) -> DataSequ return self._get_devices_chosen_version(devices, "current_version") - def get_devices_available_versions(self, devices: DataSequence[Device]) -> DataSequence[PartitionDevice]: + def get_devices_available_versions( + self, devices: DataSequence[DeviceDetailsResponse] + ) -> DataSequence[PartitionDevice]: """ Create devices payload list included available software versions key for every device in devices list Args: - devices (List[Device]): devices on which action going to be performed + devices (List[DeviceDetailsResponse]): devices on which action going to be performed Returns: list : list of devices @@ -276,5 +335,9 @@ def get_devices_available_versions(self, devices: DataSequence[Device]) -> DataS return self._get_devices_chosen_version(devices, "available_versions") - def get_device_list(self, devices: DataSequence[Device]) -> List[PartitionDevice]: - return [PartitionDevice(device_id=device.uuid, device_ip=device.id) for device in devices] # type: ignore + def get_device_list(self, devices: DataSequence[DeviceDetailsResponse]) -> List[PartitionDevice]: + self._validate_devices_required_fields(devices) + + return [ + PartitionDevice(device_id=device.uuid, device_ip=device.device_ip) for device in devices # type: ignore + ] diff --git a/catalystwan/dataclasses.py b/catalystwan/dataclasses.py index 01231e02a..22526c9d3 100644 --- a/catalystwan/dataclasses.py +++ b/catalystwan/dataclasses.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + import datetime as dt from typing import List, Optional diff --git a/catalystwan/endpoints/__init__.py b/catalystwan/endpoints/__init__.py index a4e1da9a4..06e25fa9d 100644 --- a/catalystwan/endpoints/__init__.py +++ b/catalystwan/endpoints/__init__.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + """This modules defines APIEndpoints class which is used to define vManage API endpoint handlers in declarative way. Just create a sub-class and define endpoints using using included decorators: request, view, versions. diff --git a/catalystwan/endpoints/administration_user_and_group.py b/catalystwan/endpoints/administration_user_and_group.py index 97953ae0b..6987d7704 100644 --- a/catalystwan/endpoints/administration_user_and_group.py +++ b/catalystwan/endpoints/administration_user_and_group.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from datetime import datetime from typing import Dict, List, Optional, Set diff --git a/catalystwan/endpoints/certificate_management_device.py b/catalystwan/endpoints/certificate_management_device.py index 9afd7b2f1..22ee9b01d 100644 --- a/catalystwan/endpoints/certificate_management_device.py +++ b/catalystwan/endpoints/certificate_management_device.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from enum import Enum diff --git a/catalystwan/endpoints/certificate_management_vmanage.py b/catalystwan/endpoints/certificate_management_vmanage.py index 47a29c9de..bbc13b9c4 100644 --- a/catalystwan/endpoints/certificate_management_vmanage.py +++ b/catalystwan/endpoints/certificate_management_vmanage.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" import datetime diff --git a/catalystwan/endpoints/client.py b/catalystwan/endpoints/client.py index e4a3d821d..3a746fc51 100644 --- a/catalystwan/endpoints/client.py +++ b/catalystwan/endpoints/client.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from datetime import datetime from typing import Any, List, Optional diff --git a/catalystwan/endpoints/cluster_management.py b/catalystwan/endpoints/cluster_management.py index 17a62b64e..3994e499c 100644 --- a/catalystwan/endpoints/cluster_management.py +++ b/catalystwan/endpoints/cluster_management.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from enum import Enum diff --git a/catalystwan/endpoints/configuration/device/software_update.py b/catalystwan/endpoints/configuration/device/software_update.py index 8f91896e5..d1dec28b1 100644 --- a/catalystwan/endpoints/configuration/device/software_update.py +++ b/catalystwan/endpoints/configuration/device/software_update.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from catalystwan.endpoints import APIEndpoints, post from catalystwan.utils.upgrades_helper import SoftwarePackageUploadPayload diff --git a/catalystwan/endpoints/configuration/disaster_recovery.py b/catalystwan/endpoints/configuration/disaster_recovery.py index 04b25ddaf..dea0fa11f 100644 --- a/catalystwan/endpoints/configuration/disaster_recovery.py +++ b/catalystwan/endpoints/configuration/disaster_recovery.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from ipaddress import IPv4Address from typing import List, Union diff --git a/catalystwan/endpoints/configuration/feature_profile/sdwan/policy_object.py b/catalystwan/endpoints/configuration/feature_profile/sdwan/policy_object.py index 31f7aa587..f1b3b2196 100644 --- a/catalystwan/endpoints/configuration/feature_profile/sdwan/policy_object.py +++ b/catalystwan/endpoints/configuration/feature_profile/sdwan/policy_object.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/feature_profile/sdwan/system.py b/catalystwan/endpoints/configuration/feature_profile/sdwan/system.py index 3ca5c33f4..6c34b1fd3 100644 --- a/catalystwan/endpoints/configuration/feature_profile/sdwan/system.py +++ b/catalystwan/endpoints/configuration/feature_profile/sdwan/system.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from typing import Optional diff --git a/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py b/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py index 2dc83dcc5..b10a25d54 100644 --- a/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py +++ b/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from typing import Optional diff --git a/catalystwan/endpoints/configuration/policy/definition/access_control_list.py b/catalystwan/endpoints/configuration/policy/definition/access_control_list.py index 27c7f5641..76da07822 100644 --- a/catalystwan/endpoints/configuration/policy/definition/access_control_list.py +++ b/catalystwan/endpoints/configuration/policy/definition/access_control_list.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py b/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py index d7d01f44e..3e19d8eca 100644 --- a/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py +++ b/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/definition/control.py b/catalystwan/endpoints/configuration/policy/definition/control.py index feeae0cd5..f502c5ee9 100644 --- a/catalystwan/endpoints/configuration/policy/definition/control.py +++ b/catalystwan/endpoints/configuration/policy/definition/control.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/definition/device_access.py b/catalystwan/endpoints/configuration/policy/definition/device_access.py index 6d527e0a7..052286488 100644 --- a/catalystwan/endpoints/configuration/policy/definition/device_access.py +++ b/catalystwan/endpoints/configuration/policy/definition/device_access.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py b/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py index 0e912f1d6..82a275cb0 100644 --- a/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py +++ b/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py b/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py index 31ecd8d0f..6d4a8dbce 100644 --- a/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py +++ b/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/definition/mesh.py b/catalystwan/endpoints/configuration/policy/definition/mesh.py index a49d5d697..9dba385ce 100644 --- a/catalystwan/endpoints/configuration/policy/definition/mesh.py +++ b/catalystwan/endpoints/configuration/policy/definition/mesh.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/definition/qos_map.py b/catalystwan/endpoints/configuration/policy/definition/qos_map.py index 49ff84815..620a530d7 100644 --- a/catalystwan/endpoints/configuration/policy/definition/qos_map.py +++ b/catalystwan/endpoints/configuration/policy/definition/qos_map.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/definition/rewrite.py b/catalystwan/endpoints/configuration/policy/definition/rewrite.py index f2bf0c606..57dd8b262 100644 --- a/catalystwan/endpoints/configuration/policy/definition/rewrite.py +++ b/catalystwan/endpoints/configuration/policy/definition/rewrite.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/definition/rule_set.py b/catalystwan/endpoints/configuration/policy/definition/rule_set.py index 5c0f523c6..15edb05bd 100644 --- a/catalystwan/endpoints/configuration/policy/definition/rule_set.py +++ b/catalystwan/endpoints/configuration/policy/definition/rule_set.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/definition/security_group.py b/catalystwan/endpoints/configuration/policy/definition/security_group.py index 815bf7003..9ca7c9703 100644 --- a/catalystwan/endpoints/configuration/policy/definition/security_group.py +++ b/catalystwan/endpoints/configuration/policy/definition/security_group.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/definition/traffic_data.py b/catalystwan/endpoints/configuration/policy/definition/traffic_data.py index d92071278..c3cacf27c 100644 --- a/catalystwan/endpoints/configuration/policy/definition/traffic_data.py +++ b/catalystwan/endpoints/configuration/policy/definition/traffic_data.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py b/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py index 43a5d098d..a63bf1c46 100644 --- a/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py +++ b/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py b/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py index 4b103537e..b805c1fb3 100644 --- a/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py +++ b/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/app.py b/catalystwan/endpoints/configuration/policy/list/app.py index a848593fe..eb39f8a83 100644 --- a/catalystwan/endpoints/configuration/policy/list/app.py +++ b/catalystwan/endpoints/configuration/policy/list/app.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/app_probe.py b/catalystwan/endpoints/configuration/policy/list/app_probe.py index e525f722b..b51ce61be 100644 --- a/catalystwan/endpoints/configuration/policy/list/app_probe.py +++ b/catalystwan/endpoints/configuration/policy/list/app_probe.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/as_path.py b/catalystwan/endpoints/configuration/policy/list/as_path.py index 596dcb13f..6d28efffa 100644 --- a/catalystwan/endpoints/configuration/policy/list/as_path.py +++ b/catalystwan/endpoints/configuration/policy/list/as_path.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/class_map.py b/catalystwan/endpoints/configuration/policy/list/class_map.py index be1868aaf..45469301b 100644 --- a/catalystwan/endpoints/configuration/policy/list/class_map.py +++ b/catalystwan/endpoints/configuration/policy/list/class_map.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/color.py b/catalystwan/endpoints/configuration/policy/list/color.py index b62389359..920b899dc 100644 --- a/catalystwan/endpoints/configuration/policy/list/color.py +++ b/catalystwan/endpoints/configuration/policy/list/color.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/community.py b/catalystwan/endpoints/configuration/policy/list/community.py index e31a75f43..4fd995a5d 100644 --- a/catalystwan/endpoints/configuration/policy/list/community.py +++ b/catalystwan/endpoints/configuration/policy/list/community.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py b/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py index 63de759ee..767f05dbd 100644 --- a/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py +++ b/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/data_prefix.py b/catalystwan/endpoints/configuration/policy/list/data_prefix.py index 3d9a5a95f..8603730a9 100644 --- a/catalystwan/endpoints/configuration/policy/list/data_prefix.py +++ b/catalystwan/endpoints/configuration/policy/list/data_prefix.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/expanded_community.py b/catalystwan/endpoints/configuration/policy/list/expanded_community.py index 332a50010..939bbddc3 100644 --- a/catalystwan/endpoints/configuration/policy/list/expanded_community.py +++ b/catalystwan/endpoints/configuration/policy/list/expanded_community.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/fqdn.py b/catalystwan/endpoints/configuration/policy/list/fqdn.py index b31082c30..7b73d2680 100644 --- a/catalystwan/endpoints/configuration/policy/list/fqdn.py +++ b/catalystwan/endpoints/configuration/policy/list/fqdn.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/geo_location.py b/catalystwan/endpoints/configuration/policy/list/geo_location.py index 9e9fbe8eb..a227a5470 100644 --- a/catalystwan/endpoints/configuration/policy/list/geo_location.py +++ b/catalystwan/endpoints/configuration/policy/list/geo_location.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/ips_signature.py b/catalystwan/endpoints/configuration/policy/list/ips_signature.py index bcb0ae251..c1f60c61f 100644 --- a/catalystwan/endpoints/configuration/policy/list/ips_signature.py +++ b/catalystwan/endpoints/configuration/policy/list/ips_signature.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py b/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py index f40c7eacf..9af6b8f90 100644 --- a/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py +++ b/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/local_app.py b/catalystwan/endpoints/configuration/policy/list/local_app.py index 4be23c5b4..4d4954089 100644 --- a/catalystwan/endpoints/configuration/policy/list/local_app.py +++ b/catalystwan/endpoints/configuration/policy/list/local_app.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/local_domain.py b/catalystwan/endpoints/configuration/policy/list/local_domain.py index 31449003d..1359e5cba 100644 --- a/catalystwan/endpoints/configuration/policy/list/local_domain.py +++ b/catalystwan/endpoints/configuration/policy/list/local_domain.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/mirror.py b/catalystwan/endpoints/configuration/policy/list/mirror.py index 7a60ae730..ab0bb69d5 100644 --- a/catalystwan/endpoints/configuration/policy/list/mirror.py +++ b/catalystwan/endpoints/configuration/policy/list/mirror.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/policer.py b/catalystwan/endpoints/configuration/policy/list/policer.py index e0704b808..9166b20d9 100644 --- a/catalystwan/endpoints/configuration/policy/list/policer.py +++ b/catalystwan/endpoints/configuration/policy/list/policer.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/port.py b/catalystwan/endpoints/configuration/policy/list/port.py index 2922c952a..6eb87fdd1 100644 --- a/catalystwan/endpoints/configuration/policy/list/port.py +++ b/catalystwan/endpoints/configuration/policy/list/port.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py b/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py index 1225ad974..3cf8aa3a9 100644 --- a/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py +++ b/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/prefix.py b/catalystwan/endpoints/configuration/policy/list/prefix.py index f606ac99a..64f6c584c 100644 --- a/catalystwan/endpoints/configuration/policy/list/prefix.py +++ b/catalystwan/endpoints/configuration/policy/list/prefix.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/protocol_name.py b/catalystwan/endpoints/configuration/policy/list/protocol_name.py index 375b15346..e5835f968 100644 --- a/catalystwan/endpoints/configuration/policy/list/protocol_name.py +++ b/catalystwan/endpoints/configuration/policy/list/protocol_name.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/region.py b/catalystwan/endpoints/configuration/policy/list/region.py index 93877496b..e55cbddd1 100644 --- a/catalystwan/endpoints/configuration/policy/list/region.py +++ b/catalystwan/endpoints/configuration/policy/list/region.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/site.py b/catalystwan/endpoints/configuration/policy/list/site.py index d0aafbfa0..004721360 100644 --- a/catalystwan/endpoints/configuration/policy/list/site.py +++ b/catalystwan/endpoints/configuration/policy/list/site.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/sla.py b/catalystwan/endpoints/configuration/policy/list/sla.py index 5984f3833..5764aa0fd 100644 --- a/catalystwan/endpoints/configuration/policy/list/sla.py +++ b/catalystwan/endpoints/configuration/policy/list/sla.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/tloc.py b/catalystwan/endpoints/configuration/policy/list/tloc.py index 3e942b123..826197051 100644 --- a/catalystwan/endpoints/configuration/policy/list/tloc.py +++ b/catalystwan/endpoints/configuration/policy/list/tloc.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/list/url_white_list.py b/catalystwan/endpoints/configuration/policy/list/url_allow_list.py similarity index 66% rename from catalystwan/endpoints/configuration/policy/list/url_white_list.py rename to catalystwan/endpoints/configuration/policy/list/url_allow_list.py index 744768b62..32d5c803a 100644 --- a/catalystwan/endpoints/configuration/policy/list/url_white_list.py +++ b/catalystwan/endpoints/configuration/policy/list/url_allow_list.py @@ -1,8 +1,10 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID from catalystwan.endpoints import APIEndpoints, delete, get, post, put -from catalystwan.models.policy.lists import URLWhiteList +from catalystwan.models.policy.lists import URLAllowList from catalystwan.models.policy.policy_list import ( InfoTag, PolicyListEndpoints, @@ -13,17 +15,17 @@ from catalystwan.typed_list import DataSequence -class URLWhiteListEditPayload(URLWhiteList, PolicyListId): +class URLAllowListEditPayload(URLAllowList, PolicyListId): pass -class URLWhiteListInfo(URLWhiteList, PolicyListInfo): +class URLAllowListInfo(URLAllowList, PolicyListInfo): pass -class ConfigurationPolicyURLWhiteList(APIEndpoints, PolicyListEndpoints): +class ConfigurationPolicyURLAllowList(APIEndpoints, PolicyListEndpoints): @post("/template/policy/list/urlwhitelist") - def create_policy_list(self, payload: URLWhiteList) -> PolicyListId: + def create_policy_list(self, payload: URLAllowList) -> PolicyListId: ... @delete("/template/policy/list/urlwhitelist/{id}") @@ -35,23 +37,23 @@ def delete_policy_lists_with_info_tag(self, params: InfoTag) -> None: ... @put("/template/policy/list/urlwhitelist/{id}") - def edit_policy_list(self, id: UUID, payload: URLWhiteListEditPayload) -> None: + def edit_policy_list(self, id: UUID, payload: URLAllowListEditPayload) -> None: ... @get("/template/policy/list/urlwhitelist/{id}") - def get_lists_by_id(self, id: UUID) -> URLWhiteListInfo: + def get_lists_by_id(self, id: UUID) -> URLAllowListInfo: ... @get("/template/policy/list/urlwhitelist", "data") - def get_policy_lists(self) -> DataSequence[URLWhiteListInfo]: + def get_policy_lists(self) -> DataSequence[URLAllowListInfo]: ... @get("/template/policy/list/urlwhitelist/filtered", "data") - def get_policy_lists_with_info_tag(self, params: InfoTag) -> DataSequence[URLWhiteListInfo]: + def get_policy_lists_with_info_tag(self, params: InfoTag) -> DataSequence[URLAllowListInfo]: ... @post("/template/policy/list/urlwhitelist/preview") - def preview_policy_list(self, payload: URLWhiteList) -> PolicyListPreview: + def preview_policy_list(self, payload: URLAllowList) -> PolicyListPreview: ... @get("/template/policy/list/urlwhitelist/preview/{id}") diff --git a/catalystwan/endpoints/configuration/policy/list/url_black_list.py b/catalystwan/endpoints/configuration/policy/list/url_block_list.py similarity index 66% rename from catalystwan/endpoints/configuration/policy/list/url_black_list.py rename to catalystwan/endpoints/configuration/policy/list/url_block_list.py index 64c89aaed..96c171539 100644 --- a/catalystwan/endpoints/configuration/policy/list/url_black_list.py +++ b/catalystwan/endpoints/configuration/policy/list/url_block_list.py @@ -1,8 +1,10 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID from catalystwan.endpoints import APIEndpoints, delete, get, post, put -from catalystwan.models.policy.lists import URLBlackList +from catalystwan.models.policy.lists import URLBlockList from catalystwan.models.policy.policy_list import ( InfoTag, PolicyListEndpoints, @@ -13,17 +15,17 @@ from catalystwan.typed_list import DataSequence -class URLBlackListEditPayload(URLBlackList, PolicyListId): +class URLBlockListEditPayload(URLBlockList, PolicyListId): pass -class URLBlackListInfo(URLBlackList, PolicyListInfo): +class URLBlockListInfo(URLBlockList, PolicyListInfo): pass -class ConfigurationPolicyURLBlackList(APIEndpoints, PolicyListEndpoints): +class ConfigurationPolicyURLBlockList(APIEndpoints, PolicyListEndpoints): @post("/template/policy/list/urlblacklist") - def create_policy_list(self, payload: URLBlackList) -> PolicyListId: + def create_policy_list(self, payload: URLBlockList) -> PolicyListId: ... @delete("/template/policy/list/urlblacklist/{id}") @@ -35,23 +37,23 @@ def delete_policy_lists_with_info_tag(self, params: InfoTag) -> None: ... @put("/template/policy/list/urlblacklist/{id}") - def edit_policy_list(self, id: UUID, payload: URLBlackListEditPayload) -> None: + def edit_policy_list(self, id: UUID, payload: URLBlockListEditPayload) -> None: ... @get("/template/policy/list/urlblacklist/{id}") - def get_lists_by_id(self, id: UUID) -> URLBlackListInfo: + def get_lists_by_id(self, id: UUID) -> URLBlockListInfo: ... @get("/template/policy/list/urlblacklist", "data") - def get_policy_lists(self) -> DataSequence[URLBlackListInfo]: + def get_policy_lists(self) -> DataSequence[URLBlockListInfo]: ... @get("/template/policy/list/urlblacklist/filtered", "data") - def get_policy_lists_with_info_tag(self, params: InfoTag) -> DataSequence[URLBlackListInfo]: + def get_policy_lists_with_info_tag(self, params: InfoTag) -> DataSequence[URLBlockListInfo]: ... @post("/template/policy/list/urlblacklist/preview") - def preview_policy_list(self, payload: URLBlackList) -> PolicyListPreview: + def preview_policy_list(self, payload: URLBlockList) -> PolicyListPreview: ... @get("/template/policy/list/urlblacklist/preview/{id}") diff --git a/catalystwan/endpoints/configuration/policy/list/vpn.py b/catalystwan/endpoints/configuration/policy/list/vpn.py index fdb5a4fec..0b1f50fae 100644 --- a/catalystwan/endpoints/configuration/policy/list/vpn.py +++ b/catalystwan/endpoints/configuration/policy/list/vpn.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" diff --git a/catalystwan/endpoints/configuration/policy/list/zone.py b/catalystwan/endpoints/configuration/policy/list/zone.py index 826a5056b..96464e5c1 100644 --- a/catalystwan/endpoints/configuration/policy/list/zone.py +++ b/catalystwan/endpoints/configuration/policy/list/zone.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/security_template.py b/catalystwan/endpoints/configuration/policy/security_template.py index 37e6e5369..c7327d059 100644 --- a/catalystwan/endpoints/configuration/policy/security_template.py +++ b/catalystwan/endpoints/configuration/policy/security_template.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/vedge_template.py b/catalystwan/endpoints/configuration/policy/vedge_template.py index d9174786f..ffa0a51d9 100644 --- a/catalystwan/endpoints/configuration/policy/vedge_template.py +++ b/catalystwan/endpoints/configuration/policy/vedge_template.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/policy/vsmart_template.py b/catalystwan/endpoints/configuration/policy/vsmart_template.py index e13751b33..837c24486 100644 --- a/catalystwan/endpoints/configuration/policy/vsmart_template.py +++ b/catalystwan/endpoints/configuration/policy/vsmart_template.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from uuid import UUID diff --git a/catalystwan/endpoints/configuration/software_actions.py b/catalystwan/endpoints/configuration/software_actions.py index 7a27be5b4..eab9f68f3 100644 --- a/catalystwan/endpoints/configuration/software_actions.py +++ b/catalystwan/endpoints/configuration/software_actions.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from enum import Enum @@ -156,6 +158,7 @@ class SoftwareImageDetails(BaseModel): vnf_properties_json: Optional[str] = Field( default=None, serialization_alias="vnfPropertiesJson", validation_alias="vnfPropertiesJson" ) + remote_server_id: str = Field(default=None, serialization_alias="remoteServerId", validation_alias="remoteServerId") class ConfigurationSoftwareActions(APIEndpoints): diff --git a/catalystwan/endpoints/configuration_dashboard_status.py b/catalystwan/endpoints/configuration_dashboard_status.py index 14f0e0828..530de9109 100644 --- a/catalystwan/endpoints/configuration_dashboard_status.py +++ b/catalystwan/endpoints/configuration_dashboard_status.py @@ -1,5 +1,7 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" -from typing import List, Optional +from typing import Dict, List, Optional, Union from pydantic.v1 import BaseModel, Field @@ -13,7 +15,7 @@ class SubTaskData(BaseModel): action: Optional[str] activity: List[str] current_activity: Optional[str] = Field(alias="currentActivity") - action_config: Optional[str] = Field(alias="actionConfig") + action_config: Optional[Union[str, Dict]] = Field(alias="actionConfig") order: Optional[int] uuid: Optional[str] hostname: Optional[str] = Field(alias="host-name") @@ -50,7 +52,7 @@ class Validation(BaseModel): rid: Optional[int] = Field(alias="@rid") status_id: str = Field(alias="statusId") process_id: Optional[str] = Field(alias="processId") - action_config: Optional[str] = Field(alias="actionConfig") + action_config: Optional[Union[str, Dict]] = Field(alias="actionConfig") current_activity: Optional[str] = Field(alias="currentActivity") action: Optional[str] = Field(alias="action") start_time: Optional[int] = Field(alias="startTime") diff --git a/catalystwan/endpoints/configuration_device_actions.py b/catalystwan/endpoints/configuration_device_actions.py index ce50fa533..700171110 100644 --- a/catalystwan/endpoints/configuration_device_actions.py +++ b/catalystwan/endpoints/configuration_device_actions.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from typing import List, Literal, Optional, Union @@ -15,6 +17,8 @@ def convert_to_list(element: Union[str, List[str]]) -> List[str]: DeviceType = Literal["vedge", "controller", "vmanage"] +VersionType = Literal["vmanage", "remote"] + PartitionActionType = Literal["removepartition", "defaultpartition", "changepartition"] @@ -76,19 +80,20 @@ class InstallData(BaseModel): family: str version: str version_id: str = Field(serialization_alias="versionId", validation_alias="versionId") + remote_server_id: str = Field(serialization_alias="remoteServerId", validation_alias="remoteServerId") class InstallInput(BaseModel): model_config = ConfigDict(populate_by_name=True) data: Optional[List[InstallData]] = Field(default=None) - family: Optional[str] + family: Optional[str] = Field(default=None) reboot: bool sync: bool v_edge_vpn: int = Field(serialization_alias="vEdgeVPN", validation_alias="vEdgeVPN") v_smart_vpn: int = Field(serialization_alias="vSmartVPN", validation_alias="vSmartVPN") - version: str = Field(default=None) - version_type: str = Field(serialization_alias="versionType", validation_alias="versionType") + version: Optional[str] = Field(default=None) + version_type: VersionType = Field(serialization_alias="versionType", validation_alias="versionType") class InstallDevice(BaseModel): @@ -97,7 +102,7 @@ class InstallDevice(BaseModel): device_id: str = Field(serialization_alias="deviceId", validation_alias="deviceId") device_ip: str = Field(serialization_alias="deviceIP", validation_alias="deviceIP") is_nutella_migration: Optional[bool] = Field( - default=None, serialization_alias="isNutellaMigration", validation_alias="isNutellaMigration" + default=False, serialization_alias="isNutellaMigration", validation_alias="isNutellaMigration" ) diff --git a/catalystwan/endpoints/configuration_device_inventory.py b/catalystwan/endpoints/configuration_device_inventory.py index d01cbac8e..cb4d9675b 100644 --- a/catalystwan/endpoints/configuration_device_inventory.py +++ b/catalystwan/endpoints/configuration_device_inventory.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from pathlib import Path from typing import List, Literal, Optional, Union diff --git a/catalystwan/endpoints/configuration_device_template.py b/catalystwan/endpoints/configuration_device_template.py index e5e404489..b1da0d79e 100644 --- a/catalystwan/endpoints/configuration_device_template.py +++ b/catalystwan/endpoints/configuration_device_template.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from typing import Dict diff --git a/catalystwan/endpoints/configuration_feature_profile.py b/catalystwan/endpoints/configuration_feature_profile.py index f5ce2edd2..5e98bd7a3 100644 --- a/catalystwan/endpoints/configuration_feature_profile.py +++ b/catalystwan/endpoints/configuration_feature_profile.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from enum import Enum from typing import Optional diff --git a/catalystwan/endpoints/configuration_group.py b/catalystwan/endpoints/configuration_group.py index 74c2629b7..ef4993042 100644 --- a/catalystwan/endpoints/configuration_group.py +++ b/catalystwan/endpoints/configuration_group.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from datetime import datetime from typing import List, Optional diff --git a/catalystwan/endpoints/configuration_settings.py b/catalystwan/endpoints/configuration_settings.py index 7663ce44a..8e23c5c9f 100644 --- a/catalystwan/endpoints/configuration_settings.py +++ b/catalystwan/endpoints/configuration_settings.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" import datetime from enum import Enum diff --git a/catalystwan/endpoints/endpoints_container.py b/catalystwan/endpoints/endpoints_container.py index 3d725005f..c8c53c69c 100644 --- a/catalystwan/endpoints/endpoints_container.py +++ b/catalystwan/endpoints/endpoints_container.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations from typing import TYPE_CHECKING @@ -62,8 +64,8 @@ from catalystwan.endpoints.configuration.policy.list.site import ConfigurationPolicySiteList from catalystwan.endpoints.configuration.policy.list.sla import ConfigurationPolicySLAClassList from catalystwan.endpoints.configuration.policy.list.tloc import ConfigurationPolicyTLOCList -from catalystwan.endpoints.configuration.policy.list.url_black_list import ConfigurationPolicyURLBlackList -from catalystwan.endpoints.configuration.policy.list.url_white_list import ConfigurationPolicyURLWhiteList +from catalystwan.endpoints.configuration.policy.list.url_allow_list import ConfigurationPolicyURLAllowList +from catalystwan.endpoints.configuration.policy.list.url_block_list import ConfigurationPolicyURLBlockList from catalystwan.endpoints.configuration.policy.list.vpn import ConfigurationPolicyVPNList from catalystwan.endpoints.configuration.policy.list.zone import ConfigurationPolicyZoneList from catalystwan.endpoints.configuration.policy.security_template import ConfigurationSecurityTemplatePolicy @@ -121,8 +123,8 @@ def __init__(self, session: ManagerSession): self.site = ConfigurationPolicySiteList(session) self.sla = ConfigurationPolicySLAClassList(session) self.tloc = ConfigurationPolicyTLOCList(session) - self.url_black_list = ConfigurationPolicyURLBlackList(session) - self.url_white_list = ConfigurationPolicyURLWhiteList(session) + self.url_block_list = ConfigurationPolicyURLBlockList(session) + self.url_allow_list = ConfigurationPolicyURLAllowList(session) self.vpn = ConfigurationPolicyVPNList(session) self.zone = ConfigurationPolicyZoneList(session) diff --git a/catalystwan/endpoints/misc.py b/catalystwan/endpoints/misc.py index 0a7a4c5aa..04b12bb29 100644 --- a/catalystwan/endpoints/misc.py +++ b/catalystwan/endpoints/misc.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from catalystwan.endpoints import APIEndpointClient, APIEndpoints, get from catalystwan.models.misc.application_protocols import ApplicationProtocolMap diff --git a/catalystwan/endpoints/monitoring_device_details.py b/catalystwan/endpoints/monitoring_device_details.py index 1fe4d89cf..ef5333659 100644 --- a/catalystwan/endpoints/monitoring_device_details.py +++ b/catalystwan/endpoints/monitoring_device_details.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from typing import List, Optional diff --git a/catalystwan/endpoints/monitoring_status.py b/catalystwan/endpoints/monitoring_status.py index 332b97827..be7eead49 100644 --- a/catalystwan/endpoints/monitoring_status.py +++ b/catalystwan/endpoints/monitoring_status.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from enum import Enum from typing import List diff --git a/catalystwan/endpoints/real_time_monitoring/reboot_history.py b/catalystwan/endpoints/real_time_monitoring/reboot_history.py index 183120e02..d345760f7 100644 --- a/catalystwan/endpoints/real_time_monitoring/reboot_history.py +++ b/catalystwan/endpoints/real_time_monitoring/reboot_history.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from datetime import datetime from typing import Optional diff --git a/catalystwan/endpoints/sdavc_cloud_connector.py b/catalystwan/endpoints/sdavc_cloud_connector.py index dad096a4d..c674c9ecc 100644 --- a/catalystwan/endpoints/sdavc_cloud_connector.py +++ b/catalystwan/endpoints/sdavc_cloud_connector.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from typing import Optional diff --git a/catalystwan/endpoints/tenant_backup_restore.py b/catalystwan/endpoints/tenant_backup_restore.py index 16116b709..bd022cbef 100644 --- a/catalystwan/endpoints/tenant_backup_restore.py +++ b/catalystwan/endpoints/tenant_backup_restore.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from typing import List diff --git a/catalystwan/endpoints/tenant_management.py b/catalystwan/endpoints/tenant_management.py index 735933619..d41b80ef0 100644 --- a/catalystwan/endpoints/tenant_management.py +++ b/catalystwan/endpoints/tenant_management.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from typing import Dict, List, Optional diff --git a/catalystwan/endpoints/tenant_migration.py b/catalystwan/endpoints/tenant_migration.py index a95a385f6..1bef10f63 100644 --- a/catalystwan/endpoints/tenant_migration.py +++ b/catalystwan/endpoints/tenant_migration.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from pathlib import Path from urllib.parse import parse_qsl, urlsplit diff --git a/catalystwan/endpoints/troubleshooting_tools/device_connectivity.py b/catalystwan/endpoints/troubleshooting_tools/device_connectivity.py index cf5e51e04..2a2343bfd 100644 --- a/catalystwan/endpoints/troubleshooting_tools/device_connectivity.py +++ b/catalystwan/endpoints/troubleshooting_tools/device_connectivity.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="empty-body" from enum import Enum from typing import List, Optional diff --git a/catalystwan/exceptions.py b/catalystwan/exceptions.py index 66a0518b2..cfdf962b4 100644 --- a/catalystwan/exceptions.py +++ b/catalystwan/exceptions.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from typing import Any, Optional, Union from pydantic import BaseModel @@ -65,6 +67,8 @@ class ImageNotInRepositoryError(CatalystwanException): class EmptyVersionPayloadError(CatalystwanException): """Used when a version is not found in device available or current versions.""" + pass + class TemplateNotFoundError(CatalystwanException): """Used when a template item is not found.""" @@ -166,6 +170,12 @@ class TenantMigrationPreconditionsError(CatalystwanException): pass +class ManagerReadyTimeout(CatalystwanException): + """Raised when waiting for server ready flag took longer than expected""" + + pass + + class CatalystwanDeprecationWarning(DeprecationWarning): """Warning issued when using deprecated features or functionality in the Catalystwan SDK. diff --git a/catalystwan/integration_tests/test_find_template_values.py b/catalystwan/integration_tests/test_find_template_values.py new file mode 100644 index 000000000..b650ecd16 --- /dev/null +++ b/catalystwan/integration_tests/test_find_template_values.py @@ -0,0 +1,47 @@ +import json +import os +import unittest +from typing import Any, List, cast + +from catalystwan.session import create_manager_session +from catalystwan.utils.feature_template.find_template_values import find_template_values + + +class TestFindTemplateValues(unittest.TestCase): + def setUp(self) -> None: + self.session = create_manager_session( + url=cast(str, os.environ.get("TEST_VMANAGE_URL")), + port=cast(int, int(os.environ.get("TEST_VMANAGE_PORT"))), # type: ignore + username=cast(str, os.environ.get("TEST_VMANAGE_USERNAME")), + password=cast(str, os.environ.get("TEST_VMANAGE_PASSWORD")), + ) + self.templates = self.session.api.templates._get_feature_templates(summary=False) + + def test_find_template_value(self): + for template in self.templates: + definition = json.loads(template.template_definiton) + with self.subTest(template_name=template.name): + parsed_values = find_template_values(definition) + self.assertFalse( + self.is_key_present(parsed_values, ["vipType", "vipValue", "vipVariableName", "vipObjectType"]) + ) + + def is_key_present(self, d: dict, keys: List[Any]): + """ + Checks if any key from keys is present within the dictionary d + """ + for key, value in d.items(): + if key in keys: + return True + if isinstance(value, dict): + if self.is_key_present(value, keys): + return True + if isinstance(value, list): + for v in value: + if isinstance(v, dict): + if self.is_key_present(v, keys): + return True + return False + + def tearDown(self) -> None: + self.session.close() diff --git a/catalystwan/models/common.py b/catalystwan/models/common.py index af4ca778a..481886f4a 100644 --- a/catalystwan/models/common.py +++ b/catalystwan/models/common.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from typing import Dict, List, Literal, Set, Tuple diff --git a/catalystwan/models/configuration/common.py b/catalystwan/models/configuration/common.py index 3a2bac29e..d1ff16974 100644 --- a/catalystwan/models/configuration/common.py +++ b/catalystwan/models/configuration/common.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from typing import Literal Solution = Literal[ diff --git a/catalystwan/models/configuration/config_migration.py b/catalystwan/models/configuration/config_migration.py index 1d94fb157..631b4b697 100644 --- a/catalystwan/models/configuration/config_migration.py +++ b/catalystwan/models/configuration/config_migration.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List from pydantic import BaseModel, Field diff --git a/catalystwan/models/configuration/feature_profile/README.md b/catalystwan/models/configuration/feature_profile/README.md index bc0529d05..4afbef966 100644 --- a/catalystwan/models/configuration/feature_profile/README.md +++ b/catalystwan/models/configuration/feature_profile/README.md @@ -6,8 +6,8 @@ This README document provides guidelines on creating configuration groups within Cellular controller Parcel will be used for example purposes. Please change the parcel according to which one you are implementing. -1. Add new endpoints following the guide: https://github.com/CiscoDevNet/vManage-client/blob/main/CONTRIBUTING.md -2. Download a schema with new endpoint (TODO where to add): +1. Add new endpoints following the guide: https://github.com/CiscoDevNet/catalystwan/blob/main/CONTRIBUTING.md +2. Download a schema with new endpoint: ```python @versions(supported_versions=(">=20.9"), raises=False) @get("/v1/feature-profile/sdwan/transport/cellular-controller/schema", resp_json_key="request") @@ -25,14 +25,10 @@ with open("sdwan_transport_cellular_controller_parcel_schema.json", "w") as f: json.dump(schema, f, indent=4) ``` -TODO: Possible to automate this step - 3. Generate `model.py` `datamodel-codegen --input sdwan_transport_cellular_controller_parcel_schema.json --output model.py --output-model-type pydantic_v2.BaseModel --enum-field-as-literal all --input-file-type jsonschema --field-constraints --target-python-version 3.8 --snake-case-field` -TODO: Improve `cmd` & check if there is a possibility to improve generator - `model.py` ```python # generated by datamodel-codegen: @@ -251,7 +247,7 @@ class CellularController(BaseModel): ) ``` -5. FIx `model.py` file +5. Fix `model.py` file `cellular_controller.py` ```python @@ -287,6 +283,9 @@ class CellularControllerParcel(Parcel): config_type: Default[ConfigTypeValue] = Field(default=Default(value=ConfigTypeValue.NON_E_SIM), alias="configType") controller_config: ControllerConfig = Field(alias="controllerConfig") ``` + +6. Add `cellular_controller.py` file to folder `catalystwan/models/configuration/feature_profile/sdwan/transport` + ## Guidelines for Creating Config Groups ### 1. Directory Structure @@ -336,9 +335,10 @@ https://peps.python.org/pep-0008/#descriptive-naming-styles Utilize `model_validator` for two or more excluding values. -### 7. Pipeline and Integration Tests - -- Implement a pipeline and integration tests. (TODO: Provide details) +If you have any questions or need further clarification, please reach out to the project maintainers. Thank you for your contribution! +### 8. Future Features -If you have any questions or need further clarification, please reach out to the project maintainers. Thank you for your contribution! +- Automate model generation step +- Improve model generator +- Implement a pipeline and integration tests. diff --git a/catalystwan/models/configuration/feature_profile/builder.py b/catalystwan/models/configuration/feature_profile/builder.py index 725675fdc..bc472ce15 100644 --- a/catalystwan/models/configuration/feature_profile/builder.py +++ b/catalystwan/models/configuration/feature_profile/builder.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + # from typing import Dict, Generic, Type, TypeVar # from vmngclient.api.configuration_groups.parcel import Parcel diff --git a/catalystwan/models/configuration/feature_profile/common.py b/catalystwan/models/configuration/feature_profile/common.py index 11780efd3..48b78872b 100644 --- a/catalystwan/models/configuration/feature_profile/common.py +++ b/catalystwan/models/configuration/feature_profile/common.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from datetime import datetime from typing import Generic, List, Literal, Optional, TypeVar, Union from uuid import UUID diff --git a/catalystwan/models/configuration/feature_profile/sdwan/management/vpn.py b/catalystwan/models/configuration/feature_profile/sdwan/management/vpn.py index 9526721ea..c8643bde7 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/management/vpn.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/management/vpn.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import Any, List, Optional from pydantic import BaseModel, Field diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/__init__.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/__init__.py index 1ac7c2da8..38cdb0798 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/__init__.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/__init__.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Mapping, Union from pydantic import Field diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/app_probe.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/app_probe.py index 2a82cd91c..b889d648d 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/app_probe.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/app_probe.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List from pydantic import AliasPath, BaseModel, ConfigDict, Field, field_validator diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/application_list.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/application_list.py index eeda66374..85f1c703e 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/application_list.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/application_list.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Union from pydantic import AliasPath, BaseModel, ConfigDict, Field diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/color_list.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/color_list.py index 4917deea8..a988881de 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/color_list.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/color_list.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List from pydantic import AliasPath, BaseModel, Field diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/data_prefix.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/data_prefix.py index b4d7721f7..dfe8ec6f0 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/data_prefix.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/data_prefix.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from ipaddress import IPv4Address, IPv4Network from typing import List diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/expanded_community_list.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/expanded_community_list.py index 7ceedd0da..0fd79245e 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/expanded_community_list.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/expanded_community_list.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from pydantic import AliasPath, ConfigDict, Field, field_validator from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase, as_global diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/fowarding_class.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/fowarding_class.py index 769072b39..58ef5040d 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/fowarding_class.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/fowarding_class.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List from pydantic import AliasPath, BaseModel, Field, field_validator diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_data_prefix.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_data_prefix.py index 4e6c58603..861edfe19 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_data_prefix.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_data_prefix.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from ipaddress import IPv6Address, IPv6Network from typing import List diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_prefix_list.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_prefix_list.py index f80c0687b..d01dd457e 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_prefix_list.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_prefix_list.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from ipaddress import IPv6Address, IPv6Network from typing import List diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/policier.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/policier.py index 23c952ab3..0eac93e92 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/policier.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/policier.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List from pydantic import AliasPath, BaseModel, ConfigDict, Field, field_validator diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefered_group_color.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefered_group_color.py index 7d65463a9..8ea933c05 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefered_group_color.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefered_group_color.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Optional from pydantic import AliasPath, BaseModel, ConfigDict, Field, model_validator diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefix_list.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefix_list.py index 3c74105a6..ba05f99ce 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefix_list.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefix_list.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from ipaddress import IPv4Address, IPv4Network from typing import List diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/sla_class.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/sla_class.py index 310f30484..e40f79abf 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/sla_class.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/sla_class.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Literal, Optional, Union from uuid import UUID diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/standard_community.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/standard_community.py index 82ea892d5..f42eefa66 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/standard_community.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/standard_community.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List from pydantic import AliasPath, BaseModel, ConfigDict, Field diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/tloc_list.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/tloc_list.py index 876c09b6e..8ba90518d 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/tloc_list.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/tloc_list.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from ipaddress import IPv4Address from typing import List, Optional diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/application_list.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/application_list.py index 50d808d4f..ad242e1c8 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/application_list.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/application_list.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Union from pydantic import AliasPath, BaseModel, ConfigDict, Field diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/data_prefix.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/data_prefix.py index 263a77758..3d93c80d1 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/data_prefix.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/data_prefix.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from ipaddress import IPv4Network from typing import List diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/fqdn.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/fqdn.py index e80dbe170..3de298b3f 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/fqdn.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/fqdn.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List from pydantic import AliasPath, BaseModel, ConfigDict, Field diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/geolocation_list.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/geolocation_list.py index d2e3ce69b..81e6b8a35 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/geolocation_list.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/geolocation_list.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Optional from pydantic import AliasPath, BaseModel, Field, model_validator diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ips_signature.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ips_signature.py index 4c8f821ca..06ae65d0e 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ips_signature.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ips_signature.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List from pydantic import AliasPath, BaseModel, ConfigDict, Field, field_validator diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/local_domain.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/local_domain.py index 92e63f4e8..5a53a8f42 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/local_domain.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/local_domain.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List from pydantic import AliasPath, BaseModel, ConfigDict, Field diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/protocol_list.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/protocol_list.py index fcff212d2..fccc5698b 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/protocol_list.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/protocol_list.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List from pydantic import AliasPath, BaseModel, ConfigDict, Field diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/security_port.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/security_port.py index dd7b00914..346b68149 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/security_port.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/security_port.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List from pydantic import AliasPath, BaseModel, ConfigDict, Field, field_validator diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url.py index a42a4d561..b16eb0a1e 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List from pydantic import AliasPath, BaseModel, ConfigDict, Field diff --git a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/zone.py b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/zone.py index 8730264d0..33b7f5f91 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/zone.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/zone.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Optional from pydantic import AliasPath, BaseModel, Field, field_validator, model_validator diff --git a/catalystwan/models/configuration/feature_profile/sdwan/service/acl.py b/catalystwan/models/configuration/feature_profile/sdwan/service/acl.py index e602ba77b..30c2d6535 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/service/acl.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/service/acl.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Literal, Optional, Union from uuid import UUID diff --git a/catalystwan/models/configuration/feature_profile/sdwan/service/appqoe.py b/catalystwan/models/configuration/feature_profile/sdwan/service/appqoe.py index 730e7163a..07ea1bc6e 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/service/appqoe.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/service/appqoe.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Literal, Optional, Union from pydantic import BaseModel, ConfigDict, Field diff --git a/catalystwan/models/configuration/feature_profile/sdwan/service/bgp.py b/catalystwan/models/configuration/feature_profile/sdwan/service/bgp.py index bfce3dce0..6abf2ffee 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/service/bgp.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/service/bgp.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Literal, Optional, Union from uuid import UUID diff --git a/catalystwan/models/configuration/feature_profile/sdwan/service/dhcp_server.py b/catalystwan/models/configuration/feature_profile/sdwan/service/dhcp_server.py index 6e2177c3d..07a66733d 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/service/dhcp_server.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/service/dhcp_server.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Optional, Union from pydantic import BaseModel, ConfigDict, Field diff --git a/catalystwan/models/configuration/feature_profile/sdwan/service/eigrp.py b/catalystwan/models/configuration/feature_profile/sdwan/service/eigrp.py index 64d46a102..c04d3153c 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/service/eigrp.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/service/eigrp.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Literal, Optional, Union from uuid import UUID diff --git a/catalystwan/models/configuration/feature_profile/sdwan/service/lan/common.py b/catalystwan/models/configuration/feature_profile/sdwan/service/lan/common.py index 42135f83b..59fd3dcdd 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/service/lan/common.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/service/lan/common.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import Literal, Optional, Union from uuid import UUID diff --git a/catalystwan/models/configuration/feature_profile/sdwan/service/lan/ethernet.py b/catalystwan/models/configuration/feature_profile/sdwan/service/lan/ethernet.py index 9b20fb0c7..40c392265 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/service/lan/ethernet.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/service/lan/ethernet.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Literal, Optional, Union from uuid import UUID diff --git a/catalystwan/models/configuration/feature_profile/sdwan/service/lan/gre.py b/catalystwan/models/configuration/feature_profile/sdwan/service/lan/gre.py index daa3b67bf..5858f7d23 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/service/lan/gre.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/service/lan/gre.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import Literal, Optional, Union from pydantic import BaseModel, ConfigDict, Field diff --git a/catalystwan/models/configuration/feature_profile/sdwan/service/lan/ipsec.py b/catalystwan/models/configuration/feature_profile/sdwan/service/lan/ipsec.py index cc92f569d..de9c90d10 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/service/lan/ipsec.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/service/lan/ipsec.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import Literal, Optional, Union from pydantic import BaseModel, ConfigDict, Field diff --git a/catalystwan/models/configuration/feature_profile/sdwan/service/lan/svi.py b/catalystwan/models/configuration/feature_profile/sdwan/service/lan/svi.py index b624f2735..f4d6d653c 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/service/lan/svi.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/service/lan/svi.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Optional, Union from uuid import UUID diff --git a/catalystwan/models/configuration/feature_profile/sdwan/service/lan/vpn.py b/catalystwan/models/configuration/feature_profile/sdwan/service/lan/vpn.py index 4b4748a8e..e6f0ac95b 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/service/lan/vpn.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/service/lan/vpn.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Literal, Optional, Union from uuid import UUID diff --git a/catalystwan/models/configuration/feature_profile/sdwan/service/multicast.py b/catalystwan/models/configuration/feature_profile/sdwan/service/multicast.py index 89f1c8c8d..93742bae3 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/service/multicast.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/service/multicast.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Optional, Union from uuid import UUID diff --git a/catalystwan/models/configuration/feature_profile/sdwan/service/object_tracker.py b/catalystwan/models/configuration/feature_profile/sdwan/service/object_tracker.py index 56a022f77..bbfcab5be 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/service/object_tracker.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/service/object_tracker.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Literal, Optional, Union from uuid import UUID diff --git a/catalystwan/models/configuration/feature_profile/sdwan/service/ospf.py b/catalystwan/models/configuration/feature_profile/sdwan/service/ospf.py index 34e446678..86f82666e 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/service/ospf.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/service/ospf.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Literal, Optional, Union from uuid import UUID diff --git a/catalystwan/models/configuration/feature_profile/sdwan/service/ospfv3.py b/catalystwan/models/configuration/feature_profile/sdwan/service/ospfv3.py index 4c05ba240..88ee9fc41 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/service/ospfv3.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/service/ospfv3.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Literal, Optional, Union from uuid import UUID diff --git a/catalystwan/models/configuration/feature_profile/sdwan/service/route_policy.py b/catalystwan/models/configuration/feature_profile/sdwan/service/route_policy.py index c4c452c85..cdf753bef 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/service/route_policy.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/service/route_policy.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Literal, Optional, Union from uuid import UUID diff --git a/catalystwan/models/configuration/feature_profile/sdwan/service/service_insertion_attachment.py b/catalystwan/models/configuration/feature_profile/sdwan/service/service_insertion_attachment.py index 44d6641b4..33ea7b3b7 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/service/service_insertion_attachment.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/service/service_insertion_attachment.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Literal, Optional, Union from uuid import UUID diff --git a/catalystwan/models/configuration/feature_profile/sdwan/service/switchport.py b/catalystwan/models/configuration/feature_profile/sdwan/service/switchport.py index 1f28e3c34..d7e2cb59a 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/service/switchport.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/service/switchport.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Literal, Optional, Union from pydantic import BaseModel, ConfigDict, Field diff --git a/catalystwan/models/configuration/feature_profile/sdwan/service/tracker.py b/catalystwan/models/configuration/feature_profile/sdwan/service/tracker.py index 2bf7d4c9a..d9f4c417d 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/service/tracker.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/service/tracker.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Literal, Optional, Union from uuid import UUID diff --git a/catalystwan/models/configuration/feature_profile/sdwan/service/wireless_lan.py b/catalystwan/models/configuration/feature_profile/sdwan/service/wireless_lan.py index e56979590..0711013ed 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/service/wireless_lan.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/service/wireless_lan.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Literal, Optional, Union from pydantic import BaseModel, ConfigDict, Field diff --git a/catalystwan/models/configuration/feature_profile/sdwan/system/aaa.py b/catalystwan/models/configuration/feature_profile/sdwan/system/aaa.py index 7a1f09bed..07515f001 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/system/aaa.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/system/aaa.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from ipaddress import IPv4Address, IPv6Address from typing import List, Optional, Union diff --git a/catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_controller.py b/catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_controller.py index deb1c0570..3cc8734ba 100644 --- a/catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_controller.py +++ b/catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_controller.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import Literal, Union from pydantic import AliasPath, BaseModel, ConfigDict, Field diff --git a/catalystwan/models/configuration/profile_type.py b/catalystwan/models/configuration/profile_type.py index f53c8dbd6..272ba310e 100644 --- a/catalystwan/models/configuration/profile_type.py +++ b/catalystwan/models/configuration/profile_type.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import Literal ProfileType = Literal[ diff --git a/catalystwan/models/device_inventory.py b/catalystwan/models/device_inventory.py index 6fc4bdd3e..95c1300fe 100644 --- a/catalystwan/models/device_inventory.py +++ b/catalystwan/models/device_inventory.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + import re from typing import Optional from uuid import UUID diff --git a/catalystwan/models/feature_profile_parcel.py b/catalystwan/models/feature_profile_parcel.py index ec5d4ad08..c12ddf454 100644 --- a/catalystwan/models/feature_profile_parcel.py +++ b/catalystwan/models/feature_profile_parcel.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from typing import Optional from pydantic.v1 import BaseModel, Field diff --git a/catalystwan/models/misc/application_protocols.py b/catalystwan/models/misc/application_protocols.py index 51ba87d80..124ccf37e 100644 --- a/catalystwan/models/misc/application_protocols.py +++ b/catalystwan/models/misc/application_protocols.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from socket import getprotobyname from typing import Dict, List, Optional diff --git a/catalystwan/models/policy/__init__.py b/catalystwan/models/policy/__init__.py index 004df9fb9..0dfa4b3ac 100644 --- a/catalystwan/models/policy/__init__.py +++ b/catalystwan/models/policy/__init__.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + # This stub provide top-level "public" policy models to be used with PolicyAPI() from typing import List, Union @@ -45,8 +47,8 @@ SiteList, SLAClassList, TLOCList, - URLBlackList, - URLWhiteList, + URLAllowList, + URLBlockList, VPNList, ZoneList, ) @@ -112,8 +114,8 @@ SiteList, SLAClassList, TLOCList, - URLBlackList, - URLWhiteList, + URLBlockList, + URLAllowList, VPNList, ZoneList, ], @@ -179,8 +181,8 @@ "TrafficDataDirection", "TrafficDataPolicy", "UnifiedSecurityPolicy", - "URLBlackList", - "URLWhiteList", + "URLBlockList", + "URLAllowList", "VPNList", "VPNMembershipPolicy", "ZoneBasedFWPolicy", diff --git a/catalystwan/models/policy/centralized.py b/catalystwan/models/policy/centralized.py index c06d188f2..50ad91b03 100644 --- a/catalystwan/models/policy/centralized.py +++ b/catalystwan/models/policy/centralized.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from typing import List, Literal, Optional, Union, overload from uuid import UUID diff --git a/catalystwan/models/policy/definitions/access_control_list.py b/catalystwan/models/policy/definitions/access_control_list.py index 48e6f6a27..d05b4f2a2 100644 --- a/catalystwan/models/policy/definitions/access_control_list.py +++ b/catalystwan/models/policy/definitions/access_control_list.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from ipaddress import IPv4Address, IPv4Network from typing import Any, List, Literal, Set, Tuple, Union from uuid import UUID diff --git a/catalystwan/models/policy/definitions/access_control_list_ipv6.py b/catalystwan/models/policy/definitions/access_control_list_ipv6.py index ee3784e9d..66fcbf47d 100644 --- a/catalystwan/models/policy/definitions/access_control_list_ipv6.py +++ b/catalystwan/models/policy/definitions/access_control_list_ipv6.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from ipaddress import IPv4Address, IPv6Network from typing import Any, List, Literal, Set, Tuple, Union from uuid import UUID diff --git a/catalystwan/models/policy/definitions/control.py b/catalystwan/models/policy/definitions/control.py index 06fe38acd..c86e176b7 100644 --- a/catalystwan/models/policy/definitions/control.py +++ b/catalystwan/models/policy/definitions/control.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from ipaddress import IPv4Address from typing import Any, List, Literal, Optional, Union, overload from uuid import UUID diff --git a/catalystwan/models/policy/definitions/device_access.py b/catalystwan/models/policy/definitions/device_access.py index 1781f6db3..10e00ec74 100644 --- a/catalystwan/models/policy/definitions/device_access.py +++ b/catalystwan/models/policy/definitions/device_access.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from ipaddress import IPv4Network from typing import Any, List, Literal, Optional, Set, Tuple, Union from uuid import UUID diff --git a/catalystwan/models/policy/definitions/device_access_ipv6.py b/catalystwan/models/policy/definitions/device_access_ipv6.py index 5c124f8ad..6fe2f75f4 100644 --- a/catalystwan/models/policy/definitions/device_access_ipv6.py +++ b/catalystwan/models/policy/definitions/device_access_ipv6.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from ipaddress import IPv6Network from typing import Any, List, Literal, Optional, Set, Tuple, Union from uuid import UUID diff --git a/catalystwan/models/policy/definitions/hub_and_spoke.py b/catalystwan/models/policy/definitions/hub_and_spoke.py index 49ee48362..058eeaec8 100644 --- a/catalystwan/models/policy/definitions/hub_and_spoke.py +++ b/catalystwan/models/policy/definitions/hub_and_spoke.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Literal, Optional from uuid import UUID diff --git a/catalystwan/models/policy/definitions/mesh.py b/catalystwan/models/policy/definitions/mesh.py index c4f91fdb7..291b161a0 100644 --- a/catalystwan/models/policy/definitions/mesh.py +++ b/catalystwan/models/policy/definitions/mesh.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Literal from uuid import UUID diff --git a/catalystwan/models/policy/definitions/qos_map.py b/catalystwan/models/policy/definitions/qos_map.py index 9084ff7f8..01ac62719 100644 --- a/catalystwan/models/policy/definitions/qos_map.py +++ b/catalystwan/models/policy/definitions/qos_map.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from typing import List, Literal, Optional, Union from uuid import UUID diff --git a/catalystwan/models/policy/definitions/rewrite.py b/catalystwan/models/policy/definitions/rewrite.py index d6685d483..41087903d 100644 --- a/catalystwan/models/policy/definitions/rewrite.py +++ b/catalystwan/models/policy/definitions/rewrite.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from typing import List, Literal from uuid import UUID diff --git a/catalystwan/models/policy/definitions/rule_set.py b/catalystwan/models/policy/definitions/rule_set.py index 15736d602..2fdd5ff88 100644 --- a/catalystwan/models/policy/definitions/rule_set.py +++ b/catalystwan/models/policy/definitions/rule_set.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from ipaddress import IPv4Network, IPv6Network from typing import List, Literal, Optional, Union from uuid import UUID diff --git a/catalystwan/models/policy/definitions/security_group.py b/catalystwan/models/policy/definitions/security_group.py index b73212351..68c9214ef 100644 --- a/catalystwan/models/policy/definitions/security_group.py +++ b/catalystwan/models/policy/definitions/security_group.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from ipaddress import IPv4Network, IPv6Network from typing import Literal, Optional, Union diff --git a/catalystwan/models/policy/definitions/traffic_data.py b/catalystwan/models/policy/definitions/traffic_data.py index f0c6f6907..b5e63d4a8 100644 --- a/catalystwan/models/policy/definitions/traffic_data.py +++ b/catalystwan/models/policy/definitions/traffic_data.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from ipaddress import IPv4Address, IPv4Network from typing import Any, List, Literal, Optional, Set, Tuple, Union, overload from uuid import UUID diff --git a/catalystwan/models/policy/definitions/vpn_membership.py b/catalystwan/models/policy/definitions/vpn_membership.py index 4393fe0d9..769848dde 100644 --- a/catalystwan/models/policy/definitions/vpn_membership.py +++ b/catalystwan/models/policy/definitions/vpn_membership.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import List, Literal from uuid import UUID diff --git a/catalystwan/models/policy/definitions/zone_based_firewall.py b/catalystwan/models/policy/definitions/zone_based_firewall.py index 716361994..4a7fe5a5d 100644 --- a/catalystwan/models/policy/definitions/zone_based_firewall.py +++ b/catalystwan/models/policy/definitions/zone_based_firewall.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from ipaddress import IPv4Network from typing import Dict, List, Literal, Set, Tuple, Union from uuid import UUID diff --git a/catalystwan/models/policy/lists.py b/catalystwan/models/policy/lists.py index c707b35ec..50570717e 100644 --- a/catalystwan/models/policy/lists.py +++ b/catalystwan/models/policy/lists.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from ipaddress import IPv4Address, IPv4Network, IPv6Network from typing import Any, List, Literal, Optional, Set, Tuple from uuid import UUID @@ -163,12 +165,12 @@ class IPSSignatureList(PolicyListBase): entries: List[IPSSignatureListEntry] = [] -class URLWhiteList(PolicyListBase): +class URLAllowList(PolicyListBase): type: Literal["urlWhiteList"] = "urlWhiteList" entries: List[URLListEntry] = [] -class URLBlackList(PolicyListBase): +class URLBlockList(PolicyListBase): type: Literal["urlBlackList"] = "urlBlackList" entries: List[URLListEntry] = [] diff --git a/catalystwan/models/policy/lists_entries.py b/catalystwan/models/policy/lists_entries.py index 6b75eaad9..8eba5358d 100644 --- a/catalystwan/models/policy/lists_entries.py +++ b/catalystwan/models/policy/lists_entries.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from ipaddress import IPv4Address, IPv4Network, IPv6Network from typing import List, Literal, Optional, Set from uuid import UUID diff --git a/catalystwan/models/policy/localized.py b/catalystwan/models/policy/localized.py index 89d7283af..c3e63a482 100644 --- a/catalystwan/models/policy/localized.py +++ b/catalystwan/models/policy/localized.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from typing import List, Literal, Optional from uuid import UUID diff --git a/catalystwan/models/policy/policy.py b/catalystwan/models/policy/policy.py index 50045b484..05a1296e5 100644 --- a/catalystwan/models/policy/policy.py +++ b/catalystwan/models/policy/policy.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import datetime from typing import List, Literal, Optional, Sequence from uuid import UUID diff --git a/catalystwan/models/policy/policy_definition.py b/catalystwan/models/policy/policy_definition.py index c8388eb71..362bd7a38 100644 --- a/catalystwan/models/policy/policy_definition.py +++ b/catalystwan/models/policy/policy_definition.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import datetime from functools import wraps from ipaddress import IPv4Address, IPv4Network, IPv6Network diff --git a/catalystwan/models/policy/policy_list.py b/catalystwan/models/policy/policy_list.py index 0287ae873..2b790a9e5 100644 --- a/catalystwan/models/policy/policy_list.py +++ b/catalystwan/models/policy/policy_list.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import datetime from typing import List, Optional, Protocol from uuid import UUID diff --git a/catalystwan/models/policy/security.py b/catalystwan/models/policy/security.py index 7b79d99d9..06b1ae97b 100644 --- a/catalystwan/models/policy/security.py +++ b/catalystwan/models/policy/security.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from typing import List, Literal, Optional, Union from uuid import UUID diff --git a/catalystwan/models/tenant.py b/catalystwan/models/tenant.py index 5fa00ee91..8a80506d4 100644 --- a/catalystwan/models/tenant.py +++ b/catalystwan/models/tenant.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from datetime import datetime from typing import Dict, List, Optional, Union diff --git a/catalystwan/response.py b/catalystwan/response.py index c125c3453..19ebdb48e 100644 --- a/catalystwan/response.py +++ b/catalystwan/response.py @@ -1,4 +1,8 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import re +from datetime import datetime +from email.utils import parsedate_to_datetime from functools import wraps from pprint import pformat from typing import Any, Callable, Dict, Optional, Sequence, Type, TypeVar, Union, cast @@ -134,14 +138,25 @@ class ManagerResponse(Response, APIEndpointClientResponse): def __init__(self, response: Response): self.__dict__.update(response.__dict__) - if not self.cookies.keys(): - self.cookies = self.__parse_set_cookie_from_headers() + self.jsessionid_expired = self._detect_expired_jsessionid() try: self.payload = JsonPayload(response.json()) except JSONDecodeError: self.payload = JsonPayload() - def __parse_set_cookie_from_headers(self) -> RequestsCookieJar: + def _detect_expired_jsessionid(self) -> bool: + """Determines if server sent expired JSESSIONID""" + cookies = self._parse_set_cookie_from_headers() + if (expires := cookies.get("Expires")) and cookies.get("JSESSIONID"): + # get current server time, when not present use local time + # local time might be innacurate but "Expires" is usually set to year 1970 + response_date = self.headers.get("date") + compare_date = parsedate_to_datetime(response_date) if response_date is not None else datetime.now() + if parsedate_to_datetime(expires) <= compare_date: + return True + return False + + def _parse_set_cookie_from_headers(self) -> RequestsCookieJar: """Parses "set-cookie" content from response headers""" jar = RequestsCookieJar() cookies_string = self.headers.get("set-cookie", "") diff --git a/catalystwan/session.py b/catalystwan/session.py index 7d0a2a6db..e902c50f8 100644 --- a/catalystwan/session.py +++ b/catalystwan/session.py @@ -1,19 +1,20 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + from __future__ import annotations import logging -import time from enum import Enum -from importlib import metadata from pathlib import Path +from time import monotonic, sleep from typing import Any, Callable, ClassVar, Dict, List, Optional, Union from urllib.parse import urljoin, urlparse, urlunparse from packaging.version import Version # type: ignore -from requests import PreparedRequest, Request, Response, Session, head +from requests import PreparedRequest, Request, Response, Session, get, head from requests.auth import AuthBase from requests.exceptions import ConnectionError, HTTPError, RequestException -from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_fixed # type: ignore +from catalystwan import USER_AGENT from catalystwan.api.api_container import APIContainer from catalystwan.endpoints import APIEndpointClient from catalystwan.endpoints.client import AboutInfo, ServerInfo @@ -21,6 +22,7 @@ from catalystwan.exceptions import ( DefaultPasswordError, ManagerHTTPError, + ManagerReadyTimeout, ManagerRequestException, SessionNotCreatedError, TenantSubdomainNotFound, @@ -32,7 +34,6 @@ from catalystwan.vmanage_auth import vManageAuth JSON = Union[Dict[str, "JSON"], List["JSON"], str, int, float, bool, None] -USER_AGENT = f"{__package__}/{metadata.version(__package__)}" class UserMode(str, Enum): @@ -50,6 +51,15 @@ class TenancyMode(str, Enum): MULTI_TENANT = "MultiTenant" +class ManagerSessionState(Enum): + # there are some similiarities to state-machine but flow is only in one direction + # and does not depend on external inputs + RESTART_IMMINENT = 0 + WAIT_SERVER_READY_AFTER_RESTART = 1 + LOGIN = 2 + OPERATIVE = 3 + + def determine_session_type( tenancy_mode: Optional[str], user_mode: Optional[str], view_mode: Optional[str] ) -> SessionType: @@ -75,7 +85,7 @@ def create_manager_session( subdomain: Optional[str] = None, logger: Optional[logging.Logger] = None, ) -> ManagerSession: - """Factory function that creates session object based on provided arguments. + """Factory method that creates session object and performs login according to parameters Args: url (str): IP address or domain name @@ -84,54 +94,22 @@ def create_manager_session( port (int): port subdomain: subdomain specifying to which view switch when creating provider as a tenant session, works only on provider user mode - logger: logger for logging API requests + logger: override default module logger Returns: - ManagerSession: Configured Session to perform tasks on vManage. + ManagerSession: logged-in and operative session to perform tasks on SDWAN Manager. """ session = ManagerSession(url=url, username=username, password=password, port=port, subdomain=subdomain) - session.auth = vManageAuth(session.base_url, username, password, verify=False) + if logger: session.logger = logger - session.auth.logger = logger - - if subdomain: - tenant_id = session.get_tenant_id() - vsession_id = session.get_virtual_session_id(tenant_id) - session.headers.update({"VSessionId": vsession_id}) - - try: - server_info = session.server() - except DefaultPasswordError: - server_info = ServerInfo.parse_obj({}) - session.server_name = server_info.server + session.state = ManagerSessionState.LOGIN session.on_session_create_hook() - - tenancy_mode = server_info.tenancy_mode - user_mode = server_info.user_mode - view_mode = server_info.view_mode - - session._session_type = determine_session_type(tenancy_mode, user_mode, view_mode) - if user_mode is UserMode.TENANT and subdomain: - raise SessionNotCreatedError( - f"Session not created. Subdomain {subdomain} passed to tenant session, " - "cannot switch to tenant from tenant user mode." - ) - elif session._session_type is SessionType.NOT_DEFINED: - session.logger.warning( - "Cannot determine session type for " - f"tenancy-mode: {tenancy_mode}, user-mode: {user_mode}, view-mode: {view_mode}" - ) - - session.logger.info( - f"Logged to vManage({session.platform_version}) as {username}. The session type is {session.session_type}" - ) - return session -class vManageResponseAdapter(Session): +class ManagerResponseAdapter(Session): def request(self, method, url, *args, **kwargs) -> ManagerResponse: return ManagerResponse(super().request(method, url, *args, **kwargs)) @@ -148,7 +126,7 @@ def delete(self, url, *args, **kwargs) -> ManagerResponse: return ManagerResponse(super().delete(url, *args, **kwargs)) -class ManagerSession(vManageResponseAdapter, APIEndpointClient): +class ManagerSession(ManagerResponseAdapter, APIEndpointClient): """Base class for API sessions for vManage client. Defines methods and handles session connectivity available for provider, provider as tenant, and tenant. @@ -182,7 +160,6 @@ def __init__( self.username = username self.password = password self.subdomain = subdomain - self._session_type = SessionType.NOT_DEFINED self.server_name: Optional[str] = None self.logger = logging.getLogger(__name__) @@ -197,20 +174,163 @@ def __init__( self.endpoints = APIEndpointContainter(self) self._platform_version: str = "" self._api_version: Version + self._state: ManagerSessionState = ManagerSessionState.OPERATIVE + self.restart_timeout: int = 1200 + self.polling_requests_timeout: int = 10 + + @property + def state(self) -> ManagerSessionState: + return self._state + + @state.setter + def state(self, state: ManagerSessionState) -> None: + """Resets the session to given state and manages transition to desired OPERATIONAL state""" + self._state = state + self.logger.debug(f"Session entered state: {self.state.name}") + + if state == ManagerSessionState.OPERATIVE: + # this is desired state, nothing to be done + return + elif state == ManagerSessionState.RESTART_IMMINENT: + # in this state we process requests normally + # but when ConnectionError is caught we enter WAIT_SERVER_READY_AFTER_RESTART + # state change is achieved with cooperation with request method + return + elif state == ManagerSessionState.WAIT_SERVER_READY_AFTER_RESTART: + self.wait_server_ready(self.restart_timeout) + self.state = ManagerSessionState.LOGIN + elif state == ManagerSessionState.LOGIN: + self.login() + self.state = ManagerSessionState.OPERATIVE + return + + def restart_imminent(self, restart_timeout_override: Optional[int] = None): + """Notify session that restart is imminent. + ConnectionError and status code 503 will cause session to wait for connectivity and perform login again + + Args: + restart_timeout_override (Optional[int], optional): override session property which controls restart timeout + """ + if restart_timeout_override is not None: + self.restart_timeout = restart_timeout_override + self.state = ManagerSessionState.RESTART_IMMINENT + + def login(self) -> ManagerSession: + """Performs login to SDWAN Manager and fetches important server info to instance variables + + Raises: + SessionNotCreatedError: indicates session configuration is not consistent + + Returns: + ManagerSession: (self) + """ + + self.auth = vManageAuth(self.base_url, self.username, self.password, verify=False) + self.auth.logger = self.logger + + if self.subdomain: + tenant_id = self.get_tenant_id() + vsession_id = self.get_virtual_session_id(tenant_id) + self.headers.update({"VSessionId": vsession_id}) + try: + server_info = self.server() + except DefaultPasswordError: + server_info = ServerInfo.parse_obj({}) + + self.server_name = server_info.server + + tenancy_mode = server_info.tenancy_mode + user_mode = server_info.user_mode + view_mode = server_info.view_mode + + self._session_type = determine_session_type(tenancy_mode, user_mode, view_mode) + if user_mode is UserMode.TENANT and self.subdomain: + raise SessionNotCreatedError( + f"Session not created. Subdomain {self.subdomain} passed to tenant session, " + "cannot switch to tenant from tenant user mode." + ) + elif self._session_type is SessionType.NOT_DEFINED: + self.logger.warning( + "Cannot determine session type for " + f"tenancy-mode: {tenancy_mode}, user-mode: {user_mode}, view-mode: {view_mode}" + ) + + self.logger.info( + f"Logged to vManage({self.platform_version}) as {self.username}. The session type is {self.session_type}" + ) + self.cookies.set("JSESSIONID", self.auth.set_cookie.get("JSESSIONID")) + return self + + def wait_server_ready(self, timeout: int, poll_period: int = 10) -> None: + """Waits until server is ready for API requests with given timeout in seconds""" + + begin = monotonic() + self.logger.info(f"Waiting for server ready with timeout {timeout} seconds.") + + def elapsed() -> float: + return monotonic() - begin + + # wait for http available + while elapsed() < timeout: + available = False + try: + resp = head( + self.base_url, + timeout=self.polling_requests_timeout, + verify=False, + headers={"User-Agent": USER_AGENT}, + ) + self.logger.debug(self.response_trace(resp, None)) + if resp.status_code != 503: + available = True + except ConnectionError as error: + self.logger.debug(self.response_trace(error.response, error.request)) + if not available: + sleep(poll_period) + continue + break + + # wait server ready flag + server_ready_url = self.get_full_url("/dataservice/client/server/ready") + while elapsed() < timeout: + try: + resp = get( + server_ready_url, + timeout=self.polling_requests_timeout, + verify=False, + headers={"User-Agent": USER_AGENT}, + ) + self.logger.debug(self.response_trace(resp, None)) + if resp.status_code == 200: + if resp.json().get("isServerReady") is True: + self.logger.debug(f"Waiting for server ready took: {elapsed()} seconds.") + return + sleep(poll_period) + continue + except RequestException as exception: + self.logger.debug(self.response_trace(exception.response, exception.request)) + raise ManagerRequestException(request=exception.request, response=exception.response) + + raise ManagerReadyTimeout(f"Waiting for server ready took longer than {timeout} seconds.") def request(self, method, url, *args, **kwargs) -> ManagerResponse: full_url = self.get_full_url(url) try: response = super(ManagerSession, self).request(method, full_url, *args, **kwargs) self.logger.debug(self.response_trace(response, None)) + if self.state == ManagerSessionState.RESTART_IMMINENT and response.status_code == 503: + self.state = ManagerSessionState.WAIT_SERVER_READY_AFTER_RESTART except RequestException as exception: self.logger.debug(self.response_trace(exception.response, exception.request)) + if self.state == ManagerSessionState.RESTART_IMMINENT and isinstance(exception, ConnectionError): + self.state = ManagerSessionState.WAIT_SERVER_READY_AFTER_RESTART + return self.request(method, url, *args, **kwargs) self.logger.error(exception) raise ManagerRequestException(request=exception.request, response=exception.response) - if self.enable_relogin and self.__is_jsession_updated(response): - self.logger.warning("Logging to session again. Reason: JSESSIONID cookie updated by response") - self.auth = vManageAuth(self.base_url, self.username, self.password, verify=False) + if self.enable_relogin and response.jsessionid_expired and self.state == ManagerSessionState.OPERATIVE: + self.logger.warning("Logging to session. Reason: expired JSESSIONID detected in response headers") + self.state = ManagerSessionState.LOGIN return self.request(method, url, *args, **kwargs) if response.request.url and "passwordReset.html" in response.request.url: @@ -276,40 +396,6 @@ def get_file(self, url: str, filename: Path) -> Response: file.write(response.content) return response - def wait_for_server_reachability(self, retries: int, delay: int, initial_delay: int = 0) -> bool: - """Checks if vManage API is reachable by sending server request. - - Retries on HTTPError for specified number of times. - Delays between each request are configurable, - It is intended to be used as a probe, so it doesn't raise original error from exception. - - Args: - retries: total number of retires - delay: time to wait between each retry - initial_delay: time before sending first request - - Returns: - Bool: True if device is reachable, False if not - """ - - def _log_exception(retry_state): - self.logger.error(f"Cannot reach server, original exception: {retry_state.outcome.exception()}") - return False - - if initial_delay: - time.sleep(initial_delay) - - @retry( - wait=wait_fixed(delay), - retry=retry_if_exception_type(HTTPError), - stop=stop_after_attempt(retries), - retry_error_callback=_log_exception, - ) - def _send_server_request(): - return self.server() - - return True if _send_server_request() else False - def get_tenant_id(self) -> str: """Gets tenant UUID for its subdomain. @@ -364,20 +450,6 @@ def __prepare_session(self, verify: bool, auth: Optional[AuthBase]) -> None: self.auth = auth self.verify = verify - def __is_jsession_updated(self, response: ManagerResponse) -> bool: - if (jsessionid := response.cookies.get("JSESSIONID")) and isinstance(self.auth, vManageAuth): - if jsessionid != self.auth.set_cookie.get("JSESSIONID"): - return True - return False - - def check_vmanage_server_connection(self) -> bool: - try: - head(self.base_url, timeout=15, verify=False) - except ConnectionError: - return False - else: - return True - @property def session_type(self) -> SessionType: return self._session_type diff --git a/catalystwan/tests/templates/models/__init__.py b/catalystwan/tests/templates/models/__init__.py index 542ef76be..8668ce1ab 100644 --- a/catalystwan/tests/templates/models/__init__.py +++ b/catalystwan/tests/templates/models/__init__.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + # type: ignore from catalystwan.tests.templates.models.cisco_aaa import cisco_aaa, complex_aaa_model from catalystwan.tests.templates.models.cisco_banner import banner_model diff --git a/catalystwan/tests/templates/models/cisco_aaa.py b/catalystwan/tests/templates/models/cisco_aaa.py index 0edfd029a..51b51f13c 100644 --- a/catalystwan/tests/templates/models/cisco_aaa.py +++ b/catalystwan/tests/templates/models/cisco_aaa.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # type: ignore from catalystwan.api.templates.models.cisco_aaa_model import ( CiscoAAAModel, @@ -11,8 +13,8 @@ from catalystwan.utils.device_model import DeviceModel users = [ - User(name="admin", password="str", secret="zyx", privilege="15"), - User(name="user", password="rnd", secret="dnr", privilege="14"), + User(name="admin", password="str", secret="zyx", privilege="15"), # pragma: allowlist secret + User(name="user", password="rnd", secret="dnr", privilege="14"), # pragma: allowlist secret ] # CiscoAAAModel(domain-stripping="?") @@ -50,8 +52,8 @@ template_name="complex_aaa", template_description="na", user=[ - User(name="test1", password="*****", secret="secret", privilege="1"), - User(name="test2", password="*****", secret="secret", privilege="15"), + User(name="test1", password="*****", secret="secret", privilege="1"), # pragma: allowlist secret + User(name="test2", password="*****", secret="secret", privilege="15"), # pragma: allowlist secret ], authentication_group=True, accounting_group=False, @@ -60,7 +62,9 @@ group_name="group1", vpn=10, source_interface="Gig1", - server=[RadiusServer(address="1.1.1.1", key="test_key", secret_key="secret_key")], + server=[ + RadiusServer(address="1.1.1.1", key="test_key", secret_key="secret_key") # pragma: allowlist secret + ], ), RadiusGroup( group_name="group2", @@ -70,7 +74,7 @@ RadiusServer( address="1.1.2.1", key="test_key2", - secret_key="secret_key2", + secret_key="secret_key2", # pragma: allowlist secret ) ], ), @@ -81,7 +85,7 @@ group_name="group1", vpn=0, source_interface="Gig0", - server=[TacacsServer(address="1.1.1.1", key="key", secret_key="secret_key")], + server=[TacacsServer(address="1.1.1.1", key="key", secret_key="secret_key")], # pragma: allowlist secret ) ], ) diff --git a/catalystwan/tests/templates/models/cisco_banner.py b/catalystwan/tests/templates/models/cisco_banner.py index 7765c0c17..f56a74614 100644 --- a/catalystwan/tests/templates/models/cisco_banner.py +++ b/catalystwan/tests/templates/models/cisco_banner.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from catalystwan.api.templates.models.cisco_banner_model import CiscoBannerModel banner_model = CiscoBannerModel( # type: ignore diff --git a/catalystwan/tests/templates/models/cisco_bfd.py b/catalystwan/tests/templates/models/cisco_bfd.py index 836b29f6a..0c57d7a62 100644 --- a/catalystwan/tests/templates/models/cisco_bfd.py +++ b/catalystwan/tests/templates/models/cisco_bfd.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from catalystwan.api.templates.models.cisco_bfd_model import CiscoBFDModel, Color, ColorType bfd_model = CiscoBFDModel( # type: ignore diff --git a/catalystwan/tests/templates/models/cisco_system.py b/catalystwan/tests/templates/models/cisco_system.py index 08b41633e..059b623d4 100644 --- a/catalystwan/tests/templates/models/cisco_system.py +++ b/catalystwan/tests/templates/models/cisco_system.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from catalystwan.api.templates.models.cisco_system import CiscoSystemModel from catalystwan.utils.device_model import DeviceModel diff --git a/catalystwan/tests/templates/models/cisco_vpn.py b/catalystwan/tests/templates/models/cisco_vpn.py index a9cf7cd16..64f59a3d8 100644 --- a/catalystwan/tests/templates/models/cisco_vpn.py +++ b/catalystwan/tests/templates/models/cisco_vpn.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # type: ignore from catalystwan.api.templates.models.cisco_vpn_model import ( diff --git a/catalystwan/tests/templates/models/omp_vsmart.py b/catalystwan/tests/templates/models/omp_vsmart.py index f0e2ffd81..464b40eec 100644 --- a/catalystwan/tests/templates/models/omp_vsmart.py +++ b/catalystwan/tests/templates/models/omp_vsmart.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # type: ignore from catalystwan.api.templates.device_variable import DeviceVariable from catalystwan.api.templates.models.omp_vsmart_model import OMPvSmart diff --git a/catalystwan/tests/templates/test_chose_model.py b/catalystwan/tests/templates/test_chose_model.py index 3a90d373f..fdf220a75 100644 --- a/catalystwan/tests/templates/test_chose_model.py +++ b/catalystwan/tests/templates/test_chose_model.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import unittest from parameterized import parameterized # type: ignore @@ -7,7 +9,7 @@ from catalystwan.api.templates.models.omp_vsmart_model import OMPvSmart from catalystwan.api.templates.models.security_vsmart_model import SecurityvSmart from catalystwan.api.templates.models.system_vsmart_model import SystemVsmart -from catalystwan.utils.feature_template import choose_model +from catalystwan.utils.feature_template.choose_model import choose_model class TestChooseModel(unittest.TestCase): diff --git a/catalystwan/tests/templates/test_deserialize_model.py b/catalystwan/tests/templates/test_deserialize_model.py index b5e4350eb..efb4a3e4b 100644 --- a/catalystwan/tests/templates/test_deserialize_model.py +++ b/catalystwan/tests/templates/test_deserialize_model.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # type: ignore import json import unittest diff --git a/catalystwan/tests/templates/test_generate_payload.py b/catalystwan/tests/templates/test_generate_payload.py index 81172af7e..07e2dc13b 100644 --- a/catalystwan/tests/templates/test_generate_payload.py +++ b/catalystwan/tests/templates/test_generate_payload.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # type: ignore import json import unittest @@ -73,14 +75,16 @@ class DataPathFeatureTemplate(FeatureTemplate): as_num: str = Field(alias="as-num", json_schema_extra={"data_path": ["authentication", "dot1x", "default"]}) +password = "pass" # pragma: allowlist secret + mocked_feature_template_children_1 = MockedFeatureTemplateChildren( - user=[User(name="user1", password="pass"), User(name="user2", password="pass")] + user=[User(name="user1", password=password), User(name="user2", password=password)] ) mocked_feature_template_children_2 = MockedFeatureTemplateChildren( user=[ - User(name="user1", password="pass", pubkey_chain=[RSA(key="*****", key_type="RSA")]), - User(name="user2", password="pass"), + User(name="user1", password=password, pubkey_chain=[RSA(key="*****", key_type="RSA")]), + User(name="user2", password=password), ] ) @@ -122,7 +126,7 @@ def test_get( # Act a = templates_api.generate_feature_template_payload(mocked_template, schema).model_dump( - by_alias=True, exclude_none=True + by_alias=True, exclude_none=True, mode="json" )["templateDefinition"] print(json.dumps(a)) # Assert diff --git a/catalystwan/tests/templates/test_serialize_model.py b/catalystwan/tests/templates/test_serialize_model.py index e8822af39..c8ad45137 100644 --- a/catalystwan/tests/templates/test_serialize_model.py +++ b/catalystwan/tests/templates/test_serialize_model.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import json import unittest from pathlib import Path @@ -43,7 +45,7 @@ def test_generate_feature_template_payload_definition( self.maxDiff = 10000 self.assertDictEqual( definition["templateDefinition"], - feature_template_payload.model_dump(by_alias=True)["templateDefinition"], + feature_template_payload.model_dump(by_alias=True, mode="json")["templateDefinition"], ) diff --git a/catalystwan/tests/test_admin_tech_api.py b/catalystwan/tests/test_admin_tech_api.py index 6e417e908..7716a04a3 100644 --- a/catalystwan/tests/test_admin_tech_api.py +++ b/catalystwan/tests/test_admin_tech_api.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + import io import tempfile import unittest diff --git a/catalystwan/tests/test_administration.py b/catalystwan/tests/test_administration.py index 21bac8066..de94636f0 100644 --- a/catalystwan/tests/test_administration.py +++ b/catalystwan/tests/test_administration.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + # type: ignore import unittest from unittest.mock import MagicMock, patch diff --git a/catalystwan/tests/test_alarms_api.py b/catalystwan/tests/test_alarms_api.py index 4f497d600..f6a8bbdc4 100644 --- a/catalystwan/tests/test_alarms_api.py +++ b/catalystwan/tests/test_alarms_api.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + import logging from unittest import TestCase from unittest.mock import patch diff --git a/catalystwan/tests/test_cli_template.py b/catalystwan/tests/test_cli_template.py index d15adafb6..05f676bb2 100644 --- a/catalystwan/tests/test_cli_template.py +++ b/catalystwan/tests/test_cli_template.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import unittest from unittest.mock import patch from urllib.error import HTTPError diff --git a/catalystwan/tests/test_creation_tools.py b/catalystwan/tests/test_creation_tools.py index 90439ae0c..5a7865c6e 100644 --- a/catalystwan/tests/test_creation_tools.py +++ b/catalystwan/tests/test_creation_tools.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # type: ignore import datetime import json diff --git a/catalystwan/tests/test_device_action_api.py b/catalystwan/tests/test_device_action_api.py index 3cdceaea4..ddc5530dd 100644 --- a/catalystwan/tests/test_device_action_api.py +++ b/catalystwan/tests/test_device_action_api.py @@ -1,3 +1,6 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + +# mypy: disable-error-code="call-arg" from unittest import TestCase from unittest.mock import patch diff --git a/catalystwan/tests/test_devices_api.py b/catalystwan/tests/test_devices_api.py index 11b46396a..9c2f82b7e 100644 --- a/catalystwan/tests/test_devices_api.py +++ b/catalystwan/tests/test_devices_api.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + from unittest import TestCase from unittest.mock import patch diff --git a/catalystwan/tests/test_endpoints.py b/catalystwan/tests/test_endpoints.py index b2715e463..4bbc7ffbb 100644 --- a/catalystwan/tests/test_endpoints.py +++ b/catalystwan/tests/test_endpoints.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # mypy: disable-error-code="annotation-unchecked" import json import tempfile diff --git a/catalystwan/tests/test_feature_template_field.py b/catalystwan/tests/test_feature_template_field.py index f67392ca2..caa505425 100644 --- a/catalystwan/tests/test_feature_template_field.py +++ b/catalystwan/tests/test_feature_template_field.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # type: ignore import unittest from unittest import TestCase diff --git a/catalystwan/tests/test_logs_api.py b/catalystwan/tests/test_logs_api.py index 01f6bc5db..f98e2cb37 100644 --- a/catalystwan/tests/test_logs_api.py +++ b/catalystwan/tests/test_logs_api.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import unittest from pathlib import Path from unittest.mock import patch diff --git a/catalystwan/tests/test_monitoring_status_api.py b/catalystwan/tests/test_monitoring_status_api.py index cb0808135..e30cdfe1b 100644 --- a/catalystwan/tests/test_monitoring_status_api.py +++ b/catalystwan/tests/test_monitoring_status_api.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + # type: ignore import unittest from unittest.mock import MagicMock, patch diff --git a/catalystwan/tests/test_mtt_aaa_api.py b/catalystwan/tests/test_mtt_aaa_api.py index 891070e57..6feb9cf75 100644 --- a/catalystwan/tests/test_mtt_aaa_api.py +++ b/catalystwan/tests/test_mtt_aaa_api.py @@ -1,5 +1,8 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import unittest from unittest.mock import patch +from uuid import uuid4 from parameterized import parameterized # type: ignore @@ -85,7 +88,7 @@ def setUp(self) -> None: "vpn": 1, "vpnIpSubnet": "192.168.1.0/24", "key": "testing", - "secretKey": "cisco123", + "secretKey": str(uuid4()), "priority": 1, }, { @@ -95,7 +98,7 @@ def setUp(self) -> None: "vpn": 1, "vpnIpSubnet": "192.168.1.0/24", "key": "testing", - "secretKey": "cisco123", + "secretKey": str(uuid4()), "priority": 1, }, { @@ -105,7 +108,7 @@ def setUp(self) -> None: "vpn": 1, "vpnIpSubnet": "192.168.1.0/24", "key": "testing", - "secretKey": "cisco123", + "secretKey": str(uuid4()), "priority": 1, }, ] @@ -118,7 +121,7 @@ def setUp(self) -> None: "vpn": 1, "vpnIpSubnet": "192.168.1.0/24", "key": "testing", - "secretKey": "cisco123", + "secretKey": str(uuid4()), "priority": 1, }, { @@ -128,7 +131,7 @@ def setUp(self) -> None: "vpn": 1, "vpnIpSubnet": "192.168.1.0/24", "key": "testing", - "secretKey": "cisco123", + "secretKey": str(uuid4()), "priority": 1, }, ] @@ -194,7 +197,7 @@ def setUp(self) -> None: "vpn": 1, "vpnIpSubnet": "192.168.1.0/24", "key": "testing", - "secretKey": "cisco123", + "secretKey": str(uuid4()), "priority": 1, }, { @@ -203,7 +206,7 @@ def setUp(self) -> None: "vpn": 1, "vpnIpSubnet": "192.168.1.0/24", "key": "testing", - "secretKey": "cisco123", + "secretKey": str(uuid4()), "priority": 2, }, { @@ -212,7 +215,7 @@ def setUp(self) -> None: "vpn": 1, "vpnIpSubnet": "192.168.1.0/24", "key": "testing", - "secretKey": "cisco123", + "secretKey": str(uuid4()), "priority": 3, }, ] @@ -224,7 +227,7 @@ def setUp(self) -> None: "vpn": 1, "vpnIpSubnet": "192.168.1.0/24", "key": "testing", - "secretKey": "cisco123", + "secretKey": str(uuid4()), "priority": 1, }, { @@ -233,7 +236,7 @@ def setUp(self) -> None: "vpn": 1, "vpnIpSubnet": "192.168.1.0/24", "key": "testing", - "secretKey": "cisco123", + "secretKey": str(uuid4()), "priority": 2, }, ] diff --git a/catalystwan/tests/test_omp_api.py b/catalystwan/tests/test_omp_api.py index 56b73a331..1760cd606 100644 --- a/catalystwan/tests/test_omp_api.py +++ b/catalystwan/tests/test_omp_api.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + import unittest from unittest.mock import patch diff --git a/catalystwan/tests/test_packet_capture.py b/catalystwan/tests/test_packet_capture.py index a00edbc9d..1c4131011 100644 --- a/catalystwan/tests/test_packet_capture.py +++ b/catalystwan/tests/test_packet_capture.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import unittest from unittest.mock import patch diff --git a/catalystwan/tests/test_partition_manager_api.py b/catalystwan/tests/test_partition_manager_api.py index f23eeef07..5203537e5 100644 --- a/catalystwan/tests/test_partition_manager_api.py +++ b/catalystwan/tests/test_partition_manager_api.py @@ -1,22 +1,24 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import unittest from unittest.mock import MagicMock, Mock, patch from catalystwan.api.partition_manager_api import PartitionManagerAPI from catalystwan.api.versions_utils import DeviceSoftwareRepository, DeviceVersions, RepositoryAPI -from catalystwan.dataclasses import Device from catalystwan.endpoints.configuration_device_actions import ActionId, RemovePartitionDevice +from catalystwan.endpoints.configuration_device_inventory import DeviceDetailsResponse from catalystwan.typed_list import DataSequence class TestPartitionManagerAPI(unittest.TestCase): def setUp(self): self.device = DataSequence( - Device, + DeviceDetailsResponse, [ - Device( + DeviceDetailsResponse( personality="vedge", uuid="mock_uuid", - id="mock_ip", + device_ip="mock_ip", hostname="mock_host", reachability="reachable", local_system_ip="mock_ip", diff --git a/catalystwan/tests/test_response.py b/catalystwan/tests/test_response.py index b54f5eaad..a75082114 100644 --- a/catalystwan/tests/test_response.py +++ b/catalystwan/tests/test_response.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import unittest from typing import Any, List, Optional from unittest.mock import patch diff --git a/catalystwan/tests/test_session.py b/catalystwan/tests/test_session.py index b9c6447ad..0b8216702 100644 --- a/catalystwan/tests/test_session.py +++ b/catalystwan/tests/test_session.py @@ -1,6 +1,9 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + import unittest from typing import Optional from unittest.mock import patch +from uuid import uuid4 import pytest # type: ignore from parameterized import parameterized # type: ignore @@ -15,7 +18,7 @@ class TestSession(unittest.TestCase): def setUp(self): self.url = "example.com" self.username = "admin" - self.password = "admin_password" # pragma: allowlist secret + self.password = str(uuid4()) def test_session_str(self): # Arrange, Act diff --git a/catalystwan/tests/test_software_action_api.py b/catalystwan/tests/test_software_action_api.py index 8b1155e7d..1563861e8 100644 --- a/catalystwan/tests/test_software_action_api.py +++ b/catalystwan/tests/test_software_action_api.py @@ -1,20 +1,24 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import unittest from unittest.mock import MagicMock, Mock, patch from catalystwan.api.software_action_api import SoftwareActionAPI from catalystwan.api.versions_utils import DeviceSoftwareRepository, DeviceVersions, RepositoryAPI -from catalystwan.dataclasses import Device -from catalystwan.endpoints.configuration_device_actions import ActionId, InstallDevice +from catalystwan.endpoints.configuration.software_actions import SoftwareImageDetails +from catalystwan.endpoints.configuration_device_actions import ActionId, InstallDevice, PartitionDevice +from catalystwan.endpoints.configuration_device_inventory import DeviceDetailsResponse +from catalystwan.exceptions import ImageNotInRepositoryError from catalystwan.typed_list import DataSequence from catalystwan.utils.upgrades_helper import Family, InstallSpecHelper class TestSoftwareAcionAPI(unittest.TestCase): def setUp(self): - self.device = Device( + self.device = DeviceDetailsResponse( personality="vedge", uuid="mock_uuid", - id="mock_ip", + device_ip="mock_ip", hostname="mock_host", reachability="reachable", local_system_ip="mock_ip", @@ -41,12 +45,9 @@ def setUp(self): self.mock_device_versions = DeviceVersions(self.mock_repository_object) self.mock_software_action_obj = SoftwareActionAPI(mock_session) - @patch("catalystwan.session.ManagerSession") @patch.object(SoftwareActionAPI, "_downgrade_check") @patch.object(RepositoryAPI, "get_image_version") - def test_upgrade_software_if_downgrade_check_is_none( - self, mock_get_image_version, mock_downgrade_check, mock_session - ): + def test_upgrade_software_if_downgrade_check_is_none(self, mock_get_image_version, mock_downgrade_check): # Prepare mock data mock_downgrade_check.return_value = False expected_id = ActionId(id="mock_action_id") @@ -57,13 +58,41 @@ def test_upgrade_software_if_downgrade_check_is_none( # Assert answer = self.mock_software_action_obj.install( - devices=DataSequence(Device, [self.device]), + devices=DataSequence(DeviceDetailsResponse, [self.device]), reboot=True, sync=True, image="path", ) self.assertEqual(answer.task_id, "mock_action_id") + @patch.object(DeviceVersions, "get_device_available") + @patch.object(RepositoryAPI, "get_all_software_images") + @patch.object(RepositoryAPI, "get_devices_versions_repository") + def test_activate_software( + self, mock_get_devices_versions_repository, mock_get_all_software_images, mock_get_device_available + ): + # Prepare mock data + expected_id = ActionId(id="mock_action_id") + mock_get_devices_versions_repository.return_value = self.DeviceSoftwareRepository_obj + mock_get_device_available.return_value = DataSequence( + PartitionDevice, [PartitionDevice(device_id="mock_uuid", device_ip="mock_ip", version="ver2")] + ) + mock_get_all_software_images.return_value = DataSequence( + SoftwareImageDetails, + [SoftwareImageDetails(**{"availableFiles": "vmanage-20.9.1-x86_64.tar.gz", "versionName": "ver2"})], + ) + + self.mock_software_action_obj.session.endpoints.configuration_device_actions.process_mark_change_partition = ( + MagicMock(return_value=expected_id) + ) + + # Assert + answer = self.mock_software_action_obj.activate( + devices=DataSequence(DeviceDetailsResponse, [self.device]), + image="vmanage-20.9.1-x86_64.tar.gz", + ) + self.assertEqual(answer.task_id, "mock_action_id") + @patch.object(RepositoryAPI, "get_devices_versions_repository") def test_downgrade_check_no_incorrect_devices(self, mock_get_devices_versions_repository): # Preapre mock data @@ -91,3 +120,35 @@ def test_downgrade_check_incorrect_devices_exists(self, mock_get_devices_version upgrade_version, Family.VMANAGE.value, ) + + def test_install_software_from_remote_image_not_available_with_downgrade_check(self): + with self.assertRaises(ValueError): + self.mock_software_action_obj.install( + devices=DataSequence(DeviceDetailsResponse, [self.device]), + remote_server_name="dummy", + remote_image_filename="dummy", + ) + + @patch.object(RepositoryAPI, "get_all_software_images") + def test_install_software_from_remote_image_with_wrong_version(self, mock_get_all_software_images): + mock_get_all_software_images.return_value = DataSequence( + SoftwareImageDetails, + [ + SoftwareImageDetails( + **{ + "availableFiles": "vmanage-20.9.1-x86_64.tar.gz", + "versionType": "remote-server-test", + "remoteServerId": "123456789-abcdabcd", + "versionId": "ver1", + } + ) + ], + ) + + with self.assertRaises(ImageNotInRepositoryError): + self.mock_software_action_obj.install( + devices=DataSequence(DeviceDetailsResponse, [self.device]), + remote_server_name="remote-server-test", + remote_image_filename="not-ver1", + downgrade_check=False, + ) diff --git a/catalystwan/tests/test_speed_test_api.py b/catalystwan/tests/test_speed_test_api.py index 3f9393794..59519598e 100644 --- a/catalystwan/tests/test_speed_test_api.py +++ b/catalystwan/tests/test_speed_test_api.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import unittest from unittest.mock import patch from urllib.error import HTTPError diff --git a/catalystwan/tests/test_task_status_api.py b/catalystwan/tests/test_task_status_api.py index 4dbc3bb2f..79a0ce67d 100644 --- a/catalystwan/tests/test_task_status_api.py +++ b/catalystwan/tests/test_task_status_api.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import unittest from unittest.mock import patch @@ -226,6 +228,80 @@ def setUp(self, mock_session): "isCancelEnabled": True, "isParallelExecutionEnabled": True, } + self.response_with_action_config_as_dict = { + "data": [ + { + "local-system-ip": "local_ip", + "statusType": "reboot", + "activity": [], + "system-ip": "system_ip", + "site-id": "siteid", + "uuid": "dev-uuid", + "@rid": 1211, + "personality": "vedge", + "processId": "processid", + "actionConfig": { + "devices": { + "deviceIP": "", + "deviceId": "", + "version": "", + "order": "", + "isNutellaMigration": False, + } + }, + "device-type": "vedge", + "action": "reboot", + "startTime": 1685440088317, + "reachability": "reachable", + "order": 0, + "vmanageIP": "vmanage_ip", + "host-name": "vm1", + "version": "vmanage-version", + "deviceID": "deviceid", + "statusId": "success", + "currentActivity": "Done - Reboot", + "deviceModel": "vedge-cloud", + "validity": "valid", + "requestStatus": "received", + "status": "Success", + } + ], + "validation": { + "statusType": "reboot", + "activity": [], + "vmanageIP": "vmanage-ip", + "system-ip": "Validation", + "deviceID": "Validation", + "uuid": "Validation", + "@rid": 747, + "statusId": "validation_success", + "processId": "reboot-9fc30834-cc46-47c5-83c4-0b837cf84f1a", + "actionConfig": { + "devices": {"deviceIP": "", "deviceId": "", "version": "", "order": "", "isNutellaMigration": False} + }, + "currentActivity": "Done - Validation", + "action": "reboot", + "startTime": 1685440057748, + "requestStatus": "received", + "status": "Validation success", + "order": 0, + }, + "summary": { + "action": "reboot", + "name": "Reboot", + "detailsURL": "/dataservice/device/action/status", + "startTime": "1685440057829", + "endTime": "1685440179295", + "userSessionUserName": "admin", + "userSessionIP": "10.0.1.1", + "tenantName": "DefaultTenant", + "total": 1, + "status": "done", + "count": {"Success": 1}, + }, + "isCancelEnabled": True, + "isParallelExecutionEnabled": True, + } @patch.object(Task, "_Task__check_validation_status") @patch.object(ConfigurationDashboardStatus, "find_status") @@ -256,6 +332,18 @@ def test_wait_for_completed_empty_data(self, mock_task_response, mock_validation # Assert self.assertEqual(answer, True) + @patch.object(Task, "_Task__check_validation_status") + @patch.object(ConfigurationDashboardStatus, "find_status") + def test_wait_for_completed_with_action_config_as_dict(self, mock_task_response, mock_validation): + # Arrange + mock_task_response.return_value = TaskData.parse_obj(self.response_with_action_config_as_dict) + + # Act + answer = self.task.wait_for_completed(interval_seconds=1).result + + # Assert + self.assertEqual(answer, True) + @patch.object(Task, "_Task__check_validation_status") @patch.object(ConfigurationDashboardStatus, "find_status") def test_wait_for_completed_no_data(self, mock_task_response, mock_validation): diff --git a/catalystwan/tests/test_templates.py b/catalystwan/tests/test_templates.py index abd8f269f..101f19daa 100644 --- a/catalystwan/tests/test_templates.py +++ b/catalystwan/tests/test_templates.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + import unittest from unittest.mock import patch diff --git a/catalystwan/tests/test_tenant_backup_restore_api.py b/catalystwan/tests/test_tenant_backup_restore_api.py index 239f5a2bf..4b7b0f876 100644 --- a/catalystwan/tests/test_tenant_backup_restore_api.py +++ b/catalystwan/tests/test_tenant_backup_restore_api.py @@ -1,14 +1,17 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import tempfile import unittest from pathlib import Path from unittest.mock import patch +from uuid import uuid4 from catalystwan.api.tenant_backup_restore_api import TenantBackupRestoreAPI class TestTenantBackupRestoreAPI(unittest.TestCase): def setUp(self): - self.processId = "5a6250c5ef1b1202" + self.processId = str(uuid4()) self.download_file_content = "Downloaded file content" self.full_name = Path("/dataservice") self.full_name = ( diff --git a/catalystwan/tests/test_tenant_management_api.py b/catalystwan/tests/test_tenant_management_api.py index 716175354..aef88c578 100644 --- a/catalystwan/tests/test_tenant_management_api.py +++ b/catalystwan/tests/test_tenant_management_api.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import unittest from unittest.mock import MagicMock, patch diff --git a/catalystwan/tests/test_tenant_migration_api.py b/catalystwan/tests/test_tenant_migration_api.py index 905da32cf..581c2d038 100644 --- a/catalystwan/tests/test_tenant_migration_api.py +++ b/catalystwan/tests/test_tenant_migration_api.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import tempfile import unittest from pathlib import Path diff --git a/catalystwan/tests/test_typed_list.py b/catalystwan/tests/test_typed_list.py index 9aad5211f..f23d1964b 100644 --- a/catalystwan/tests/test_typed_list.py +++ b/catalystwan/tests/test_typed_list.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # type: ignore import copy import unittest diff --git a/catalystwan/tests/test_version.py b/catalystwan/tests/test_version.py index 8cc2eab01..8efe74d4c 100644 --- a/catalystwan/tests/test_version.py +++ b/catalystwan/tests/test_version.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import unittest from packaging.version import Version # type: ignore diff --git a/catalystwan/tests/test_version_utils.py b/catalystwan/tests/test_version_utils.py index adfe06b0f..842be8724 100644 --- a/catalystwan/tests/test_version_utils.py +++ b/catalystwan/tests/test_version_utils.py @@ -1,19 +1,21 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import unittest from unittest.mock import MagicMock, Mock, patch from catalystwan.api.versions_utils import DeviceSoftwareRepository, DeviceVersions, RepositoryAPI -from catalystwan.dataclasses import Device from catalystwan.endpoints.configuration.software_actions import SoftwareImageDetails from catalystwan.endpoints.configuration_device_actions import InstalledDeviceData, PartitionDevice +from catalystwan.endpoints.configuration_device_inventory import DeviceDetailsResponse from catalystwan.typed_list import DataSequence class TestRepositoryAPI(unittest.TestCase): def setUp(self): - self.device = Device( + self.device = DeviceDetailsResponse( personality="vedge", uuid="mock_uuid", - id="mock_ip", + device_ip="mock_ip", hostname="mock_host", reachability="reachable", local_system_ip="mock_ip", @@ -55,6 +57,104 @@ def test_get_image_version_if_image_unavailable(self, mock_session): self.assertEqual(answer, image_version, "not same version") + def test_get_remote_image(self): + versions_response = DataSequence( + SoftwareImageDetails, + [ + SoftwareImageDetails( + **{ + "availableFiles": "vmanage-20.9.1-x86_64.tar.gz", + "versionType": "remote-server-test", + "remoteServerId": "123456789-abcdabcd", + "versionId": "abcd-1234", + } + ) + ], + ) + self.mock_repository_object.get_all_software_images = MagicMock(return_value=versions_response) + answer = self.mock_repository_object.get_remote_image("vmanage-20.9.1-x86_64.tar.gz", "remote-server-test") + + self.assertEqual(answer.version_id, "abcd-1234", "not same version") + + def test_get_remote_image_non_existing(self): + versions_response = DataSequence( + SoftwareImageDetails, + [ + SoftwareImageDetails( + **{ + "availableFiles": "vmanage-20.9.1-x86_64.tar.gz", + "versionType": "remote-server-test", + "remoteServerId": "123456789-abcdabcd", + "versionId": "abcd-1234", + } + ) + ], + ) + self.mock_repository_object.get_all_software_images = MagicMock(return_value=versions_response) + answer = self.mock_repository_object.get_remote_image("vmanage-20.10.1-x86_64.tar.gz", "remote-server-test") + + self.assertEqual(answer, None, "not same version") + + def test_get_remote_image_no_version_id(self): + versions_response = DataSequence( + SoftwareImageDetails, + [ + SoftwareImageDetails( + **{ + "availableFiles": "vmanage-20.9.1-x86_64.tar.gz", + "versionType": "remote-server-test", + "remoteServerId": "123456789-abcdabcd", + "versionId": None, + } + ) + ], + ) + self.mock_repository_object.get_all_software_images = MagicMock(return_value=versions_response) + + with self.assertRaises(ValueError): + self.mock_repository_object.get_remote_image("vmanage-20.9.1-x86_64.tar.gz", "remote-server-test") + + def test_get_version_when_same_available_file_present_for_remote_version(self): + versions_response = DataSequence( + SoftwareImageDetails, + [ + SoftwareImageDetails( + **{ + "availableFiles": "vmanage-20.9.1-x86_64.tar.gz", + "versionType": "remote-server-test", + "remoteServerId": "123456789-abcdabcd", + "versionId": "abcd-1234", + } + ), + SoftwareImageDetails(**{"availableFiles": "vmanage-20.9.1-x86_64.tar.gz", "versionName": "20.9.1"}), + ], + ) + self.mock_repository_object.get_all_software_images = MagicMock(return_value=versions_response) + image_version = "20.9.1" + answer = self.mock_repository_object.get_image_version("vmanage-20.9.1-x86_64.tar.gz") + + self.assertEqual(answer, image_version, "not same version") + + def test_get_version_when_remote_available_file_is_matching(self): + versions_response = DataSequence( + SoftwareImageDetails, + [ + SoftwareImageDetails( + **{ + "availableFiles": "vmanage-20.9.1-x86_64.tar.gz", + "versionType": "remote-server-test", + "remoteServerId": "123456789-abcdabcd", + "versionId": "abcd-1234", + } + ), + SoftwareImageDetails(**{"availableFiles": "vmanage-20.10.1-x86_64.tar.gz", "versionName": "20.9.1"}), + ], + ) + self.mock_repository_object.get_all_software_images = MagicMock(return_value=versions_response) + answer = self.mock_repository_object.get_image_version("vmanage-20.9.1-x86_64.tar.gz") + + self.assertEqual(answer, None) + @patch("catalystwan.session.Session") def test_get_devices_versions_repository(self, mock_session): endpoint_mock_response = DataSequence( diff --git a/catalystwan/tests/test_vmanage_auth.py b/catalystwan/tests/test_vmanage_auth.py index b0ffbe5b7..0924e888c 100644 --- a/catalystwan/tests/test_vmanage_auth.py +++ b/catalystwan/tests/test_vmanage_auth.py @@ -1,8 +1,12 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + import unittest from unittest import TestCase, mock +from uuid import uuid4 from requests import Request +from catalystwan import USER_AGENT from catalystwan.vmanage_auth import UnauthorizedAccessError, vManageAuth @@ -43,7 +47,7 @@ def mocked_requests_method(*args, **kwargs): class TestvManageAuth(TestCase): def setUp(self): self.base_url = "https://1.1.1.1:1111" - self.password = "admin" + self.password = str(uuid4()) @mock.patch("requests.post", side_effect=mocked_requests_method) def test_get_cookie(self, mock_post): @@ -51,7 +55,7 @@ def test_get_cookie(self, mock_post): username = "admin" security_payload = { "j_username": username, - "j_password": "admin", + "j_password": self.password, } auth = vManageAuth(self.base_url, username, self.password) # Act @@ -62,7 +66,7 @@ def test_get_cookie(self, mock_post): url="https://1.1.1.1:1111/j_security_check", data=security_payload, verify=False, - headers={"Content-Type": "application/x-www-form-urlencoded"}, + headers={"Content-Type": "application/x-www-form-urlencoded", "User-Agent": USER_AGENT}, ) @mock.patch("requests.post", side_effect=mocked_requests_method) @@ -71,7 +75,7 @@ def test_get_cookie_invalid_username(self, mock_post): username = "invalid_username" security_payload = { "j_username": username, - "j_password": "admin", + "j_password": self.password, } auth = vManageAuth(self.base_url, username, self.password) # Act @@ -83,7 +87,7 @@ def test_get_cookie_invalid_username(self, mock_post): url="https://1.1.1.1:1111/j_security_check", data=security_payload, verify=False, - headers={"Content-Type": "application/x-www-form-urlencoded"}, + headers={"Content-Type": "application/x-www-form-urlencoded", "User-Agent": USER_AGENT}, ) @mock.patch("requests.cookies.RequestsCookieJar") @@ -100,7 +104,7 @@ def test_fetch_token(self, mock_get, cookies): mock_get.assert_called_with( url=valid_url, verify=False, - headers={"Content-Type": "application/json"}, + headers={"Content-Type": "application/json", "User-Agent": USER_AGENT}, cookies=cookies, ) diff --git a/catalystwan/typed_list.py b/catalystwan/typed_list.py index 8b4d75f81..38743c519 100644 --- a/catalystwan/typed_list.py +++ b/catalystwan/typed_list.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations from typing import Any, Generic, Iterable, MutableSequence, Type, TypeVar, overload diff --git a/catalystwan/utils/alarm_status.py b/catalystwan/utils/alarm_status.py index 33d5a1189..ddfb93d9c 100644 --- a/catalystwan/utils/alarm_status.py +++ b/catalystwan/utils/alarm_status.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from enum import Enum diff --git a/catalystwan/utils/certificate_status.py b/catalystwan/utils/certificate_status.py index 2df542c5d..e6e910648 100644 --- a/catalystwan/utils/certificate_status.py +++ b/catalystwan/utils/certificate_status.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + from enum import Enum diff --git a/catalystwan/utils/colors.py b/catalystwan/utils/colors.py index f4727bb9c..dfb71208c 100644 --- a/catalystwan/utils/colors.py +++ b/catalystwan/utils/colors.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from enum import Enum diff --git a/catalystwan/utils/config_status.py b/catalystwan/utils/config_status.py index a811a8750..4b1c3057a 100644 --- a/catalystwan/utils/config_status.py +++ b/catalystwan/utils/config_status.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + from enum import Enum diff --git a/catalystwan/utils/creation_tools.py b/catalystwan/utils/creation_tools.py index 63b599635..cfb666742 100644 --- a/catalystwan/utils/creation_tools.py +++ b/catalystwan/utils/creation_tools.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + import datetime as dt from typing import Any, ClassVar, Dict, Iterable, List, Protocol, Type, TypeVar, runtime_checkable diff --git a/catalystwan/utils/dashboard.py b/catalystwan/utils/dashboard.py index 54fe5c7d9..d2233d32a 100644 --- a/catalystwan/utils/dashboard.py +++ b/catalystwan/utils/dashboard.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations from enum import Enum diff --git a/catalystwan/utils/device_model.py b/catalystwan/utils/device_model.py index 40bc85c6c..6a4ee417b 100644 --- a/catalystwan/utils/device_model.py +++ b/catalystwan/utils/device_model.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + from enum import Enum diff --git a/catalystwan/utils/dict.py b/catalystwan/utils/dict.py index e7a13414b..6b2a812b4 100644 --- a/catalystwan/utils/dict.py +++ b/catalystwan/utils/dict.py @@ -1,3 +1,10 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + +from typing import Any, Dict, List, Optional + +from pydantic import BaseModel + + def merge(a, b, path=None): if path is None: path = [] @@ -12,3 +19,43 @@ def merge(a, b, path=None): else: a[key] = b[key] return a + + +class FlattenedDictValue(BaseModel): + value: Any + data_path: List[str] + + +def flatten_dict(original_dict: Dict[str, Any]) -> Dict[str, List[FlattenedDictValue]]: + """ + Flattens a dictionary. + Each key corresponds to a list of FlattenedDictValue, allowing us to handle repeated keys in nesting. + """ + + def get_flattened_dict( + original_dict: Dict[str, Any], + flattened_dict: Optional[Dict[str, List[FlattenedDictValue]]] = None, + path: Optional[List[str]] = None, + ): + if flattened_dict is None: + flattened_dict = {} + if path is None: + path = [] + for key, value in original_dict.items(): + if isinstance(value, dict): + get_flattened_dict(value, flattened_dict, path=path + [key]) + else: + if key not in flattened_dict: + flattened_dict[key] = [] + if isinstance(value, list) and all([isinstance(v, dict) for v in value]): + flattened_value = FlattenedDictValue( + value=[get_flattened_dict(v, {}) for v in value], data_path=path + ) + flattened_dict[key].append(flattened_value) + else: + flattened_dict[key].append(FlattenedDictValue(value=value, data_path=path)) + return flattened_dict + + flattened_dict: Dict[str, List[FlattenedDictValue]] = {} + get_flattened_dict(original_dict, flattened_dict) + return flattened_dict diff --git a/catalystwan/utils/feature_template.py b/catalystwan/utils/feature_template.py deleted file mode 100644 index c82a02a2e..000000000 --- a/catalystwan/utils/feature_template.py +++ /dev/null @@ -1,76 +0,0 @@ -from typing import Any, Dict, Optional, Union - -from catalystwan.api.templates.device_variable import DeviceVariable -from catalystwan.api.templates.models.supported import available_models -from catalystwan.exceptions import TemplateTypeError - - -def choose_model(type_value: str) -> Any: - """Chooses correct model based on provided type - - With provided type of feature template searches supported by catalystwan models - and returns correct for given type of feature template class. - - Args: - type_value: type of feature template - - Returns: - model - - Raises: - TemplateTypeError: Raises when the model is not supported by catalystwan. - """ - if type_value not in available_models: - for model in available_models.values(): - if model.type == type_value: # type: ignore - return model - raise TemplateTypeError(f"Feature template type '{type_value}' is not supported.") - - return available_models[type_value] - - -def find_template_values( - template_definition: dict, - templated_values: dict = {}, - parent_key: Optional[str] = None, - target_key: str = "vipType", - target_key_value_to_ignore: str = "ignore", - target_key_for_template_value: str = "vipValue", - device_specific_variables: Optional[Dict[str, DeviceVariable]] = None, -) -> Dict[str, Union[str, list]]: - """Based on provided template definition generates a dictionary with template fields and values - - Args: - template_definition: template definition provided as dict - templated_values: dictionary, empty at the beginning and filed out with names of fields as keys - and values of those fields as values - parent_key: parent key provided to keep track of fields, defaults to None - target_key: name of the key specifying if field is used in template, defaults to 'vipType' - target_key_value_to_ignore: value of the target key indicating - that field is not used in template, defaults to 'ignore' - target_key_for_template_value: name of the key specifying value of field used in template, - defaults to 'vipValue' - - Returns: - templated_values: dictionary containing template fields as key and values assigned to those fields as values - """ - for key, value in template_definition.items(): - if key == target_key and value != target_key_value_to_ignore: - if value == "variableName" and (device_specific_variables is not None) and parent_key: - device_specific_variables[parent_key] = DeviceVariable(name=template_definition["vipVariableName"]) - else: - templated_values[parent_key] = template_definition[target_key_for_template_value] - elif isinstance(value, dict) and value != target_key_value_to_ignore: - find_template_values(value, templated_values, key, device_specific_variables=device_specific_variables) - elif ( - isinstance(value, list) - and key == target_key_for_template_value - and template_definition.get(target_key) != target_key_value_to_ignore - and all([isinstance(v, dict) for v in value]) - ): - templated_values[parent_key] = [] - for item in value: - templated_values[parent_key].append( - find_template_values(item, {}, device_specific_variables=device_specific_variables) - ) - return templated_values diff --git a/catalystwan/utils/feature_template/choose_model.py b/catalystwan/utils/feature_template/choose_model.py new file mode 100644 index 000000000..05bb8648b --- /dev/null +++ b/catalystwan/utils/feature_template/choose_model.py @@ -0,0 +1,28 @@ +from typing import Any + +from catalystwan.api.templates.models.supported import available_models +from catalystwan.exceptions import TemplateTypeError + + +def choose_model(type_value: str) -> Any: + """Chooses correct model based on provided type + + With provided type of feature template searches supported by catalystwan models + and returns correct for given type of feature template class. + + Args: + type_value: type of feature template + + Returns: + model + + Raises: + TemplateTypeError: Raises when the model is not supported by catalystwan. + """ + if type_value not in available_models: + for model in available_models.values(): + if model.type == type_value: # type: ignore + return model + raise TemplateTypeError(f"Feature template type '{type_value}' is not supported.") + + return available_models[type_value] diff --git a/catalystwan/utils/feature_template/find_template_values.py b/catalystwan/utils/feature_template/find_template_values.py new file mode 100644 index 000000000..51b39c31d --- /dev/null +++ b/catalystwan/utils/feature_template/find_template_values.py @@ -0,0 +1,104 @@ +from typing import Any, Dict, List, Optional, Union + +from catalystwan.api.templates.device_variable import DeviceVariable + + +def find_template_values( + template_definition: dict, + templated_values: Optional[dict] = None, + target_key: str = "vipType", + target_key_value_to_ignore: str = "ignore", + target_key_for_template_value: str = "vipValue", + device_specific_variables: Optional[Dict[str, DeviceVariable]] = None, + path: Optional[List[str]] = None, +) -> Dict[str, Union[str, list, dict]]: + """Based on provided template definition generates a dictionary with template fields and values + + Args: + template_definition: template definition provided as dict + templated_values: dictionary, empty at the beginning and filed out with names of fields as keys + and values of those fields as values + target_key: name of the key specifying if field is used in template, defaults to 'vipType' + target_key_value_to_ignore: value of the target key indicating + that field is not used in template, defaults to 'ignore' + target_key_for_template_value: name of the key specifying value of field used in template, + defaults to 'vipValue' + path: a list of keys indicating current path, defaults to None + Returns: + templated_values: dictionary containing template fields as key and values assigned to those fields as values + """ + if path is None: + path = [] + if templated_values is None: + templated_values = {} + # if value object is reached, try to extract the value + if target_key in template_definition: + if template_definition[target_key] == target_key_value_to_ignore: + return templated_values + + value = template_definition[target_key] + template_value = template_definition[target_key_for_template_value] + + field_key = path[-1] + # TODO: Handle nested DeviceVariable + if value == "variableName": + if device_specific_variables is not None: + device_specific_variables[field_key] = DeviceVariable(name=template_definition["vipVariableName"]) + elif template_definition["vipType"] == "variable": + if device_specific_variables is not None and template_value: + device_specific_variables[field_key] = DeviceVariable(name=template_value) + elif template_definition["vipObjectType"] == "list": + current_nesting = get_nested_dict(templated_values, path[:-1]) + current_nesting[field_key] = [] + for item in template_value: + current_nesting[field_key].append(process_list_value(item)) + elif template_definition["vipObjectType"] != "tree": + current_nesting = get_nested_dict(templated_values, path[:-1]) + current_nesting[field_key] = template_value + elif isinstance(template_value, dict): + find_template_values( + value, templated_values, device_specific_variables=device_specific_variables, path=path + ) + elif isinstance(template_value, list): + current_nesting = get_nested_dict(templated_values, path[:-1]) + current_nesting[field_key] = [] + for item in template_value: + item_value = find_template_values(item, {}, device_specific_variables=device_specific_variables) + if item_value: + current_nesting[field_key].append(item_value) + return templated_values + + # iterate the dict to extract values and assign them to their fields + for key, value in template_definition.items(): + if isinstance(value, dict) and value != target_key_value_to_ignore: + find_template_values( + value, templated_values, device_specific_variables=device_specific_variables, path=path + [key] + ) + return templated_values + + +def get_nested_dict(d: dict, path: List[str], populate: bool = True): + current_dict = d + for path_key in path: + if path_key not in current_dict and populate: + current_dict[path_key] = {} + current_dict = current_dict[path_key] + return current_dict + + +def process_list_value(item: Any, target_key: str = "vipType", target_key_for_template_value: str = "vipValue"): + if isinstance(item, dict): + if target_key in item: + if item["vipObjectType"] == "list": + result = [] + for nested_item in item[target_key_for_template_value]: + result.append(process_list_value(nested_item)) + return result + elif item["vipObjectType"] == "tree": + return find_template_values(item[target_key_for_template_value]) + else: + return item[target_key_for_template_value] + else: + return find_template_values(item) + else: + return item diff --git a/catalystwan/utils/operation_status.py b/catalystwan/utils/operation_status.py index fbfe7f6e7..3d4fc0843 100644 --- a/catalystwan/utils/operation_status.py +++ b/catalystwan/utils/operation_status.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + from enum import Enum diff --git a/catalystwan/utils/personality.py b/catalystwan/utils/personality.py index fb5b8a200..2add9b31c 100644 --- a/catalystwan/utils/personality.py +++ b/catalystwan/utils/personality.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + from enum import Enum diff --git a/catalystwan/utils/pydantic_field.py b/catalystwan/utils/pydantic_field.py index c0bacb6ac..0dea670e2 100644 --- a/catalystwan/utils/pydantic_field.py +++ b/catalystwan/utils/pydantic_field.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + from typing import Any, Optional from pydantic.fields import FieldInfo diff --git a/catalystwan/utils/pydantic_validators.py b/catalystwan/utils/pydantic_validators.py deleted file mode 100644 index c8f5accaf..000000000 --- a/catalystwan/utils/pydantic_validators.py +++ /dev/null @@ -1,32 +0,0 @@ -import ipaddress -from typing import Any - -from pydantic import BaseModel, model_validator - - -class ConvertBoolToStringModel(BaseModel): - @model_validator(mode="after") - def convert_bool_to_string_validator(self): - for key in self.model_fields.keys(): - value = getattr(self, key) - if isinstance(value, bool): - setattr(self, key, str(value).lower()) - return self - - -class ConvertIPToStringModel(BaseModel): - @model_validator(mode="after") - def convert_ip_to_string_validator(self): - for key in self.model_fields.keys(): - value = getattr(self, key) - setattr(self, key, convert_ip_to_string(value)) - return self - - -def convert_ip_to_string(values: Any): - if isinstance(values, list): - for index, ip in enumerate(values): - values[index] = convert_ip_to_string(ip) - if isinstance(values, ipaddress._BaseAddress): - values = str(values) - return values diff --git a/catalystwan/utils/reachability.py b/catalystwan/utils/reachability.py index e9c18ad68..cfb64a556 100644 --- a/catalystwan/utils/reachability.py +++ b/catalystwan/utils/reachability.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + from enum import Enum diff --git a/catalystwan/utils/session_type.py b/catalystwan/utils/session_type.py index 2b4770cb2..89662e886 100644 --- a/catalystwan/utils/session_type.py +++ b/catalystwan/utils/session_type.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from enum import Enum, auto diff --git a/catalystwan/utils/template_type.py b/catalystwan/utils/template_type.py index b2b869c07..318384e27 100644 --- a/catalystwan/utils/template_type.py +++ b/catalystwan/utils/template_type.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from enum import Enum diff --git a/catalystwan/utils/timezone.py b/catalystwan/utils/timezone.py index 6b7e9ce25..e210b891e 100644 --- a/catalystwan/utils/timezone.py +++ b/catalystwan/utils/timezone.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from enum import Enum diff --git a/catalystwan/utils/upgrades_helper.py b/catalystwan/utils/upgrades_helper.py index 5d07afdc8..d8f9a9bdc 100644 --- a/catalystwan/utils/upgrades_helper.py +++ b/catalystwan/utils/upgrades_helper.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from enum import Enum from pathlib import PurePath @@ -5,8 +7,8 @@ from clint.textui.progress import Bar as ProgressBar # type: ignore from requests_toolbelt.multipart.encoder import MultipartEncoder, MultipartEncoderMonitor # type: ignore -from catalystwan.dataclasses import Device from catalystwan.endpoints import CustomPayloadType, PreparedPayload +from catalystwan.endpoints.configuration_device_inventory import DeviceDetailsResponse from catalystwan.exceptions import MultiplePersonalityError from catalystwan.typed_list import DataSequence from catalystwan.utils.personality import Personality @@ -15,10 +17,13 @@ class Family(Enum): VEDGE = "vedge" VMANAGE = "vmanage" + VEDGE_X86 = "vedge-x86" + C8000V = "c8000v" class VersionType(Enum): VMANAGE = "vmanage" + REMOTE = "remote" class DeviceType(Enum): @@ -45,19 +50,23 @@ class InstallSpecHelper(Enum): VSMART = InstallSpecification(Family.VEDGE, VersionType.VMANAGE, DeviceType.CONTROLLER) # type: ignore VBOND = InstallSpecification(Family.VEDGE, VersionType.VMANAGE, DeviceType.CONTROLLER) # type: ignore VEDGE = InstallSpecification(Family.VEDGE, VersionType.VMANAGE, DeviceType.VEDGE) # type: ignore + REMOTE_VMANAGE = InstallSpecification(Family.VMANAGE, VersionType.REMOTE, DeviceType.VMANAGE) # type: ignore + REMOTE_VSMART = InstallSpecification(Family.VEDGE_X86, VersionType.REMOTE, DeviceType.CONTROLLER) # type: ignore + REMOTE_VBOND = InstallSpecification(Family.VEDGE_X86, VersionType.REMOTE, DeviceType.CONTROLLER) # type: ignore + REMOTE_VEDGE = InstallSpecification(Family.C8000V, VersionType.REMOTE, DeviceType.VEDGE) # type: ignore -def get_install_specification(device: Device): +def get_install_specification(device: DeviceDetailsResponse, remote: bool = False): specification_container = { - Personality.VMANAGE: InstallSpecHelper.VMANAGE.value, - Personality.VBOND: InstallSpecHelper.VBOND.value, - Personality.VSMART: InstallSpecHelper.VSMART.value, - Personality.EDGE: InstallSpecHelper.VEDGE.value, + Personality.VMANAGE: InstallSpecHelper.REMOTE_VMANAGE.value if remote else InstallSpecHelper.VMANAGE.value, + Personality.VBOND: InstallSpecHelper.REMOTE_VBOND.value if remote else InstallSpecHelper.VBOND.value, + Personality.VSMART: InstallSpecHelper.REMOTE_VSMART.value if remote else InstallSpecHelper.VSMART.value, + Personality.EDGE: InstallSpecHelper.REMOTE_VEDGE.value if remote else InstallSpecHelper.VEDGE.value, } - return specification_container[device.personality] + return specification_container[device.personality] # type: ignore -def validate_personality_homogeneity(devices: DataSequence[Device]): +def validate_personality_homogeneity(devices: DataSequence[DeviceDetailsResponse]): personalities = set([device.personality for device in devices]) if not len(personalities) == 1: raise MultiplePersonalityError( diff --git a/catalystwan/utils/validate_status.py b/catalystwan/utils/validate_status.py index 4e69b6333..fdad29a96 100644 --- a/catalystwan/utils/validate_status.py +++ b/catalystwan/utils/validate_status.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + from enum import Enum diff --git a/catalystwan/version.py b/catalystwan/version.py index d9268b65d..62ef53916 100644 --- a/catalystwan/version.py +++ b/catalystwan/version.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + import re from packaging._structures import NegativeInfinity # type: ignore diff --git a/catalystwan/vmanage_auth.py b/catalystwan/vmanage_auth.py index 2d4100fd2..2b2bf44db 100644 --- a/catalystwan/vmanage_auth.py +++ b/catalystwan/vmanage_auth.py @@ -1,3 +1,5 @@ +# Copyright 2022 Cisco Systems, Inc. and its affiliates + import logging from typing import Optional from urllib.parse import urljoin @@ -7,7 +9,7 @@ from requests.auth import AuthBase from requests.cookies import RequestsCookieJar -from catalystwan import with_proc_info_header +from catalystwan import USER_AGENT, with_proc_info_header from catalystwan.exceptions import CatalystwanException @@ -83,7 +85,7 @@ def get_cookie(self) -> RequestsCookieJar: "j_password": self.password, } full_url = urljoin(self.base_url, "/j_security_check") - headers = {"Content-Type": "application/x-www-form-urlencoded"} + headers = {"Content-Type": "application/x-www-form-urlencoded", "User-Agent": USER_AGENT} response = requests.post( url=full_url, data=security_payload, @@ -108,7 +110,7 @@ def fetch_token(self, cookies: RequestsCookieJar) -> str: str: Valid token. """ full_url = urljoin(self.base_url, "/dataservice/client/token") - headers = {"Content-Type": "application/json"} + headers = {"Content-Type": "application/json", "User-Agent": USER_AGENT} response = requests.get( url=full_url, cookies=cookies, diff --git a/catalystwan/workflows/tenant_migration.py b/catalystwan/workflows/tenant_migration.py index a6ea84e65..42cf6204e 100644 --- a/catalystwan/workflows/tenant_migration.py +++ b/catalystwan/workflows/tenant_migration.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + from __future__ import annotations import logging diff --git a/endpoints-md.py b/endpoints-md.py index 64cd581b9..409c63d82 100644 --- a/endpoints-md.py +++ b/endpoints-md.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + # Grabs API meta data collected while decorating API methods and prepares markdown documentation from __future__ import annotations diff --git a/examples/parcel_configuration_guide.py b/examples/parcel_configuration_guide.py index 97e4fa224..773e6c18d 100644 --- a/examples/parcel_configuration_guide.py +++ b/examples/parcel_configuration_guide.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + import logging import sys from dataclasses import dataclass diff --git a/examples/policies_configuration_guide.py b/examples/policies_configuration_guide.py index 7c2abe9df..339196517 100644 --- a/examples/policies_configuration_guide.py +++ b/examples/policies_configuration_guide.py @@ -1,3 +1,5 @@ +# Copyright 2024 Cisco Systems, Inc. and its affiliates + """ This example demonstrates usage of PolicyAPI in catalystwan Code below provides same results as obtained after executing workflow manually via WEB-UI according to: diff --git a/examples/policy_forwarding_qos.py b/examples/policy_forwarding_qos.py index d56c3da7f..a61ccfb56 100644 --- a/examples/policy_forwarding_qos.py +++ b/examples/policy_forwarding_qos.py @@ -1,3 +1,5 @@ +# Copyright 2023 Cisco Systems, Inc. and its affiliates + """ This example demonstrates usage of PolicyAPI in catalystwan Code below provides same results as obtained after executing workflow manually via WEB-UI according to: @@ -160,7 +162,7 @@ def run_demo(args: CmdArguments): | INTERACTIVE_VIDEO | High | 34 | 4 | +-------------------+----------+------+--------------------------+ 12. Click Save Policy. - 13. Click Save Policy Changes to save the changes to the localized master policy. + 13. Click Save Policy Changes to save the changes to the localized parent policy. """ logger.info("II.C. Configure Localized Policy: Create Re-write Policy") from catalystwan.models.policy import RewritePolicy diff --git a/pyproject.toml b/pyproject.toml index 648c4b23d..b5b39e7fb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "catalystwan" -version = "0.30.1" +version = "0.31.0" description = "Cisco Catalyst WAN SDK for Python" authors = ["kagorski "] readme = "README.md" @@ -18,12 +18,14 @@ flake8-quotes = "^3.3.1" clint = "^0.5.1" requests-toolbelt = "^1.0.0" packaging = "^23.0" -pydantic = "2.5" +pydantic = "^2.5" +typing-extensions = "^4.6.1" [tool.poetry.dev-dependencies] parameterized = "^0.8.1" pytest = "^7.1.2" pytest-mock = "^3.7.0" +pytest-subtests = "^0.11.0" isort = "^5.10.1" pre-commit = "^2.19.0" mypy = "^1.0.0"