catalystwan 0.41.2.dev9__py3-none-any.whl → 0.41.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- catalystwan/ENDPOINTS.md +611 -0
- catalystwan/__init__.py +2 -3
- catalystwan/api/administration.py +2 -13
- catalystwan/api/api_container.py +1 -4
- catalystwan/api/config_group_api.py +16 -41
- catalystwan/api/configuration_groups/parcel.py +30 -100
- catalystwan/api/configuration_groups/parcels/cellular_controller.py +33 -0
- catalystwan/api/feature_profile_api.py +237 -2016
- catalystwan/api/policy_api.py +116 -470
- catalystwan/api/template_api.py +44 -113
- catalystwan/api/templates/README.md +47 -61
- catalystwan/api/templates/cli_template.py +7 -17
- catalystwan/api/templates/device_template/device_template.py +32 -127
- catalystwan/api/templates/device_template/device_template_payload.json.j2 +19 -0
- catalystwan/api/templates/feature_template.py +3 -3
- catalystwan/api/templates/models/cisco_aaa_model.py +42 -289
- catalystwan/api/templates/models/cisco_banner_model.py +2 -11
- catalystwan/api/templates/models/cisco_bfd_model.py +36 -31
- catalystwan/api/templates/models/cisco_bgp_model.py +131 -382
- catalystwan/api/templates/models/cisco_logging_model.py +43 -80
- catalystwan/api/templates/models/cisco_ntp_model.py +15 -34
- catalystwan/api/templates/models/cisco_omp_model.py +60 -70
- catalystwan/api/templates/models/cisco_ospf.py +74 -143
- catalystwan/api/templates/models/cisco_ospfv3.py +95 -217
- catalystwan/api/templates/models/cisco_secure_internet_gateway.py +142 -304
- catalystwan/api/templates/models/cisco_snmp_model.py +52 -66
- catalystwan/api/templates/models/cisco_system.py +129 -238
- catalystwan/api/templates/models/cisco_vpn_interface_model.py +275 -632
- catalystwan/api/templates/models/cisco_vpn_model.py +270 -433
- catalystwan/api/templates/models/cli_template.py +2 -3
- catalystwan/api/templates/models/omp_vsmart_model.py +10 -46
- catalystwan/api/templates/models/security_vsmart_model.py +8 -11
- catalystwan/api/templates/models/supported.py +4 -10
- catalystwan/api/templates/models/system_vsmart_model.py +27 -164
- catalystwan/apigw_auth.py +2 -6
- catalystwan/dataclasses.py +53 -2
- catalystwan/endpoints/__init__.py +41 -41
- catalystwan/endpoints/certificate_management_device.py +0 -4
- catalystwan/endpoints/cluster_management.py +9 -30
- catalystwan/endpoints/configuration/feature_profile/sdwan/policy_object.py +12 -35
- catalystwan/endpoints/configuration/feature_profile/sdwan/system.py +11 -164
- catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py +26 -144
- catalystwan/endpoints/configuration/policy/definition/access_control_list.py +11 -6
- catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py +11 -6
- catalystwan/endpoints/configuration/policy/definition/control.py +11 -6
- catalystwan/endpoints/configuration/policy/definition/device_access.py +11 -6
- catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py +11 -6
- catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py +11 -6
- catalystwan/endpoints/configuration/policy/definition/mesh.py +11 -2
- catalystwan/endpoints/configuration/policy/definition/qos_map.py +11 -2
- catalystwan/endpoints/configuration/policy/definition/rewrite.py +11 -6
- catalystwan/endpoints/configuration/policy/definition/rule_set.py +11 -2
- catalystwan/endpoints/configuration/policy/definition/security_group.py +11 -6
- catalystwan/endpoints/configuration/policy/definition/traffic_data.py +11 -6
- catalystwan/endpoints/configuration/policy/definition/vpn_membership.py +11 -6
- catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py +11 -6
- catalystwan/endpoints/configuration/policy/list/app.py +16 -3
- catalystwan/endpoints/configuration/policy/list/app_probe.py +15 -6
- catalystwan/endpoints/configuration/policy/list/as_path.py +16 -3
- catalystwan/endpoints/configuration/policy/list/class_map.py +16 -3
- catalystwan/endpoints/configuration/policy/list/color.py +16 -3
- catalystwan/endpoints/configuration/policy/list/community.py +16 -3
- catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py +15 -6
- catalystwan/endpoints/configuration/policy/list/data_prefix.py +16 -3
- catalystwan/endpoints/configuration/policy/list/expanded_community.py +15 -6
- catalystwan/endpoints/configuration/policy/list/fqdn.py +16 -3
- catalystwan/endpoints/configuration/policy/list/geo_location.py +16 -3
- catalystwan/endpoints/configuration/policy/list/ips_signature.py +15 -6
- catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py +16 -3
- catalystwan/endpoints/configuration/policy/list/local_app.py +16 -3
- catalystwan/endpoints/configuration/policy/list/local_domain.py +16 -3
- catalystwan/endpoints/configuration/policy/list/mirror.py +16 -3
- catalystwan/endpoints/configuration/policy/list/policer.py +16 -3
- catalystwan/endpoints/configuration/policy/list/port.py +16 -3
- catalystwan/endpoints/configuration/policy/list/preferred_color_group.py +15 -6
- catalystwan/endpoints/configuration/policy/list/prefix.py +16 -4
- catalystwan/endpoints/configuration/policy/list/protocol_name.py +15 -6
- catalystwan/endpoints/configuration/policy/list/region.py +10 -2
- catalystwan/endpoints/configuration/policy/list/site.py +16 -3
- catalystwan/endpoints/configuration/policy/list/sla.py +16 -3
- catalystwan/endpoints/configuration/policy/list/tloc.py +16 -3
- catalystwan/endpoints/configuration/policy/list/url_allow_list.py +16 -3
- catalystwan/endpoints/configuration/policy/list/url_block_list.py +16 -3
- catalystwan/endpoints/configuration/policy/list/vpn.py +16 -3
- catalystwan/endpoints/configuration/policy/list/zone.py +16 -3
- catalystwan/endpoints/configuration/policy/security_template.py +3 -2
- catalystwan/endpoints/configuration/software_actions.py +4 -2
- catalystwan/endpoints/configuration_dashboard_status.py +2 -2
- catalystwan/endpoints/configuration_device_template.py +1 -15
- catalystwan/endpoints/configuration_feature_profile.py +11 -8
- catalystwan/endpoints/configuration_group.py +5 -28
- catalystwan/endpoints/configuration_settings.py +1 -90
- catalystwan/endpoints/endpoints_container.py +18 -82
- catalystwan/endpoints/real_time_monitoring/reboot_history.py +3 -1
- catalystwan/endpoints/tenant_migration.py +0 -2
- catalystwan/exceptions.py +0 -24
- catalystwan/integration_tests/test_find_template_values.py +18 -7
- catalystwan/models/common.py +2 -1898
- catalystwan/models/configuration/common.py +0 -1
- catalystwan/models/configuration/config_migration.py +36 -0
- catalystwan/models/configuration/feature_profile/common.py +149 -634
- catalystwan/models/configuration/feature_profile/sdwan/management/vpn.py +26 -0
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/__init__.py +60 -69
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/app_probe.py +20 -34
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/application_list.py +6 -8
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/color_list.py +5 -7
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/data_prefix.py +4 -13
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/expanded_community_list.py +7 -9
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/fowarding_class.py +5 -7
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_data_prefix.py +9 -11
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_prefix_list.py +10 -25
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/{policer.py → policier.py} +10 -12
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefered_group_color.py +10 -29
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefix_list.py +8 -23
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/sla_class.py +31 -12
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/standard_community.py +10 -16
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/tloc_list.py +7 -8
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/application_list.py +6 -8
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/data_prefix.py +5 -7
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/fqdn.py +5 -7
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/geolocation_list.py +5 -7
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ips_signature.py +5 -7
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/local_domain.py +5 -7
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/protocol_list.py +5 -7
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/security_port.py +11 -21
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url.py +15 -36
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/zone.py +18 -14
- catalystwan/models/configuration/feature_profile/sdwan/service/acl.py +409 -0
- catalystwan/models/configuration/feature_profile/sdwan/service/appqoe.py +42 -77
- catalystwan/models/configuration/feature_profile/sdwan/service/bgp.py +288 -0
- catalystwan/models/configuration/feature_profile/sdwan/service/dhcp_server.py +64 -107
- catalystwan/models/configuration/feature_profile/sdwan/service/eigrp.py +42 -39
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/common.py +88 -7
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/ethernet.py +156 -232
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/gre.py +108 -38
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/ipsec.py +84 -77
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/svi.py +56 -62
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/vpn.py +121 -112
- catalystwan/models/configuration/feature_profile/sdwan/service/multicast.py +57 -56
- catalystwan/models/configuration/feature_profile/sdwan/service/object_tracker.py +21 -15
- catalystwan/models/configuration/feature_profile/sdwan/{routing → service}/ospf.py +47 -55
- catalystwan/models/configuration/feature_profile/sdwan/{routing → service}/ospfv3.py +72 -74
- catalystwan/models/configuration/feature_profile/sdwan/service/route_policy.py +110 -358
- catalystwan/models/configuration/feature_profile/sdwan/service/service_insertion_attachment.py +25 -17
- catalystwan/models/configuration/feature_profile/sdwan/service/switchport.py +58 -50
- catalystwan/models/configuration/feature_profile/sdwan/service/tracker.py +21 -12
- catalystwan/models/configuration/feature_profile/sdwan/service/wireless_lan.py +31 -27
- catalystwan/models/configuration/feature_profile/sdwan/system/aaa.py +10 -58
- catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_controller.py +23 -26
- catalystwan/models/configuration/profile_type.py +6 -1
- catalystwan/models/policy/__init__.py +69 -282
- catalystwan/models/policy/centralized.py +29 -26
- catalystwan/models/policy/{definition → definitions}/access_control_list.py +17 -47
- catalystwan/models/policy/{definition → definitions}/access_control_list_ipv6.py +18 -42
- catalystwan/models/policy/{definition → definitions}/control.py +25 -48
- catalystwan/models/policy/{definition → definitions}/device_access.py +11 -22
- catalystwan/models/policy/{definition → definitions}/device_access_ipv6.py +11 -20
- catalystwan/models/policy/{definition → definitions}/hub_and_spoke.py +4 -18
- catalystwan/models/policy/{definition → definitions}/mesh.py +1 -13
- catalystwan/models/policy/{definition → definitions}/qos_map.py +32 -39
- catalystwan/models/policy/{definition → definitions}/rewrite.py +2 -12
- catalystwan/models/policy/{definition → definitions}/rule_set.py +48 -66
- catalystwan/models/policy/{definition → definitions}/security_group.py +14 -38
- catalystwan/models/policy/{definition → definitions}/traffic_data.py +61 -184
- catalystwan/models/policy/{definition → definitions}/vpn_membership.py +1 -13
- catalystwan/models/policy/{definition → definitions}/zone_based_firewall.py +32 -93
- catalystwan/models/policy/lists.py +330 -0
- catalystwan/models/policy/lists_entries.py +444 -0
- catalystwan/models/policy/localized.py +16 -34
- catalystwan/models/policy/policy.py +10 -14
- catalystwan/models/policy/policy_definition.py +173 -673
- catalystwan/models/policy/policy_list.py +27 -38
- catalystwan/models/policy/security.py +46 -145
- catalystwan/response.py +2 -6
- catalystwan/session.py +1 -1
- catalystwan/tests/templates/definitions/{cisco_vpn_basic.json → Basic_Cisco_VPN_Model.json} +2 -2
- catalystwan/tests/templates/definitions/complex_aaa.json +277 -0
- catalystwan/tests/templates/definitions/{cisco_vpn_complex.json → complex_cisco_vpn.json} +12 -27
- catalystwan/tests/templates/definitions/{cisco_aaa.json → iuo.json} +15 -44
- catalystwan/tests/templates/definitions/omp_1.json +11 -0
- catalystwan/tests/templates/definitions/{omp_vsmart_2.json → omp_2.json} +2 -16
- catalystwan/tests/templates/definitions/{omp_vsmart_3.json → omp_3.json} +2 -16
- catalystwan/tests/templates/models/__init__.py +13 -46
- catalystwan/tests/templates/models/cisco_aaa.py +48 -81
- catalystwan/tests/templates/models/cisco_banner.py +2 -2
- catalystwan/tests/templates/models/cisco_bfd.py +6 -4
- catalystwan/tests/templates/models/cisco_system.py +3 -108
- catalystwan/tests/templates/models/cisco_vpn.py +72 -42
- catalystwan/tests/templates/models/omp_vsmart.py +8 -28
- catalystwan/tests/templates/schemas/cedge_aaa.json +1 -1
- catalystwan/tests/templates/schemas/cisco_system.json +0 -242
- catalystwan/tests/templates/schemas/cisco_vpn.json +1 -53
- catalystwan/tests/templates/schemas/omp-vsmart.json +0 -20
- catalystwan/tests/templates/test_chose_model.py +10 -6
- catalystwan/tests/templates/test_deserialize_model.py +4 -4
- catalystwan/tests/templates/test_find_template_values.py +0 -229
- catalystwan/tests/templates/test_serialize_model.py +2 -1
- catalystwan/tests/test_cli_template.py +9 -8
- catalystwan/tests/test_endpoints.py +11 -42
- catalystwan/tests/test_templates.py +19 -16
- catalystwan/utils/feature_template/find_template_values.py +9 -22
- catalystwan/utils/timezone.py +422 -0
- catalystwan/workflows/tenant_migration.py +1 -1
- {catalystwan-0.41.2.dev9.dist-info → catalystwan-0.41.3.dist-info}/METADATA +1 -20
- catalystwan-0.41.3.dist-info/RECORD +353 -0
- catalystwan/api/builders/__init__.py +0 -14
- catalystwan/api/builders/feature_profiles/__init__.py +0 -0
- catalystwan/api/builders/feature_profiles/application_priority.py +0 -58
- catalystwan/api/builders/feature_profiles/builder_factory.py +0 -59
- catalystwan/api/builders/feature_profiles/cli.py +0 -76
- catalystwan/api/builders/feature_profiles/mixins.py +0 -44
- catalystwan/api/builders/feature_profiles/other.py +0 -79
- catalystwan/api/builders/feature_profiles/report.py +0 -155
- catalystwan/api/builders/feature_profiles/service.py +0 -248
- catalystwan/api/builders/feature_profiles/system.py +0 -80
- catalystwan/api/builders/feature_profiles/transport.py +0 -256
- catalystwan/api/builders/feature_profiles/uc_voice.py +0 -287
- catalystwan/api/templates/models/aaa_model.py +0 -387
- catalystwan/api/templates/models/vpn_vsmart_interface_model.py +0 -198
- catalystwan/api/templates/models/vpn_vsmart_model.py +0 -124
- catalystwan/endpoints/configuration/feature_profile/sdwan/application_priority.py +0 -107
- catalystwan/endpoints/configuration/feature_profile/sdwan/cli.py +0 -60
- catalystwan/endpoints/configuration/feature_profile/sdwan/dns_security.py +0 -83
- catalystwan/endpoints/configuration/feature_profile/sdwan/embedded_security.py +0 -88
- catalystwan/endpoints/configuration/feature_profile/sdwan/other.py +0 -62
- catalystwan/endpoints/configuration/feature_profile/sdwan/service.py +0 -154
- catalystwan/endpoints/configuration/feature_profile/sdwan/sig_security.py +0 -88
- catalystwan/endpoints/configuration/feature_profile/sdwan/topology.py +0 -93
- catalystwan/endpoints/configuration/feature_profile/sdwan/uc_voice.py +0 -77
- catalystwan/endpoints/configuration/network_hierarchy.py +0 -47
- catalystwan/endpoints/configuration/packages.py +0 -36
- catalystwan/endpoints/configuration/policy/abstractions.py +0 -49
- catalystwan/endpoints/configuration/policy/definition/aip.py +0 -52
- catalystwan/endpoints/configuration/policy/definition/amp.py +0 -52
- catalystwan/endpoints/configuration/policy/definition/app_route.py +0 -50
- catalystwan/endpoints/configuration/policy/definition/cflowd.py +0 -46
- catalystwan/endpoints/configuration/policy/definition/dial_peer.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/dns_security.py +0 -50
- catalystwan/endpoints/configuration/policy/definition/fxo_port.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/fxs_did_port.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/fxs_port.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/intrusion_prevention.py +0 -52
- catalystwan/endpoints/configuration/policy/definition/pri_isdn_port.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/route_policy.py +0 -50
- catalystwan/endpoints/configuration/policy/definition/srst_phone_profile.py +0 -59
- catalystwan/endpoints/configuration/policy/definition/ssl_decryption.py +0 -50
- catalystwan/endpoints/configuration/policy/definition/ssl_decryption_utd_profile.py +0 -52
- catalystwan/endpoints/configuration/policy/definition/url_filtering.py +0 -50
- catalystwan/endpoints/configuration/policy/definition/vpn_qos_map.py +0 -50
- catalystwan/endpoints/configuration/policy/list/extended_community.py +0 -52
- catalystwan/endpoints/configuration/policy/list/fax_protocol.py +0 -48
- catalystwan/endpoints/configuration/policy/list/identity.py +0 -48
- catalystwan/endpoints/configuration/policy/list/media_profile.py +0 -52
- catalystwan/endpoints/configuration/policy/list/modem_pass_through.py +0 -52
- catalystwan/endpoints/configuration/policy/list/scalable_group_tag.py +0 -52
- catalystwan/endpoints/configuration/policy/list/supervisory_disconnect.py +0 -52
- catalystwan/endpoints/configuration/policy/list/threat_grid_api_key.py +0 -52
- catalystwan/endpoints/configuration/policy/list/translation_profile.py +0 -52
- catalystwan/endpoints/configuration/policy/list/translation_rules.py +0 -52
- catalystwan/endpoints/configuration/policy/list/trunkgroup.py +0 -48
- catalystwan/endpoints/configuration/policy/list/umbrella_data.py +0 -52
- catalystwan/endpoints/configuration/policy/voice_template.py +0 -39
- catalystwan/endpoints/configuration/policy_group.py +0 -30
- catalystwan/endpoints/configuration/topology_group.py +0 -51
- catalystwan/endpoints/configuration_general_template.py +0 -31
- catalystwan/endpoints/configuration_template_master.py +0 -48
- catalystwan/integration_tests/base.py +0 -81
- catalystwan/integration_tests/feature_profile/sdwan/__init__.py +0 -0
- catalystwan/integration_tests/feature_profile/sdwan/policy/__init__.py +0 -0
- catalystwan/integration_tests/feature_profile/sdwan/policy/base.py +0 -33
- catalystwan/integration_tests/feature_profile/sdwan/policy/test_extended_community.py +0 -33
- catalystwan/integration_tests/feature_profile/sdwan/policy/test_security_app_list.py +0 -32
- catalystwan/integration_tests/feature_profile/sdwan/test_application_priority.py +0 -433
- catalystwan/integration_tests/feature_profile/sdwan/test_cli.py +0 -54
- catalystwan/integration_tests/feature_profile/sdwan/test_dns_security.py +0 -106
- catalystwan/integration_tests/feature_profile/sdwan/test_other.py +0 -49
- catalystwan/integration_tests/feature_profile/sdwan/test_service.py +0 -1078
- catalystwan/integration_tests/feature_profile/sdwan/test_sig_security.py +0 -322
- catalystwan/integration_tests/feature_profile/sdwan/test_ssl_decryption.py +0 -85
- catalystwan/integration_tests/feature_profile/sdwan/test_system.py +0 -368
- catalystwan/integration_tests/feature_profile/sdwan/test_tracker.py +0 -127
- catalystwan/integration_tests/feature_profile/sdwan/test_transport.py +0 -1698
- catalystwan/integration_tests/feature_profile/sdwan/topology/test_topology.py +0 -93
- catalystwan/integration_tests/feature_profile/test_parcel.py +0 -54
- catalystwan/integration_tests/profile_builder/__init__.py +0 -0
- catalystwan/integration_tests/profile_builder/test_pb_service.py +0 -197
- catalystwan/integration_tests/profile_builder/test_pb_transport.py +0 -226
- catalystwan/integration_tests/profile_builder/test_pb_uc_voice.py +0 -277
- catalystwan/integration_tests/test_data/__init__.py +0 -117
- catalystwan/integration_tests/test_network_hierarchy.py +0 -82
- catalystwan/integration_tests/test_settings.py +0 -30
- catalystwan/models/configuration/feature_profile/parcel.py +0 -245
- catalystwan/models/configuration/feature_profile/sdwan/acl/__init__.py +0 -13
- catalystwan/models/configuration/feature_profile/sdwan/acl/ipv4acl.py +0 -298
- catalystwan/models/configuration/feature_profile/sdwan/acl/ipv6acl.py +0 -344
- catalystwan/models/configuration/feature_profile/sdwan/application_priority/__init__.py +0 -218
- catalystwan/models/configuration/feature_profile/sdwan/application_priority/cloud_probe.py +0 -61
- catalystwan/models/configuration/feature_profile/sdwan/application_priority/policy_settings.py +0 -31
- catalystwan/models/configuration/feature_profile/sdwan/application_priority/qos_policy.py +0 -102
- catalystwan/models/configuration/feature_profile/sdwan/application_priority/traffic_policy.py +0 -1057
- catalystwan/models/configuration/feature_profile/sdwan/cli/__init__.py +0 -23
- catalystwan/models/configuration/feature_profile/sdwan/cli/config.py +0 -18
- catalystwan/models/configuration/feature_profile/sdwan/cli/full_config.py +0 -15
- catalystwan/models/configuration/feature_profile/sdwan/dns_security/__init__.py +0 -13
- catalystwan/models/configuration/feature_profile/sdwan/dns_security/dns.py +0 -110
- catalystwan/models/configuration/feature_profile/sdwan/embedded_security/__init__.py +0 -23
- catalystwan/models/configuration/feature_profile/sdwan/embedded_security/ngfirewall.py +0 -493
- catalystwan/models/configuration/feature_profile/sdwan/embedded_security/policy.py +0 -171
- catalystwan/models/configuration/feature_profile/sdwan/other/__init__.py +0 -25
- catalystwan/models/configuration/feature_profile/sdwan/other/cybervision.py +0 -44
- catalystwan/models/configuration/feature_profile/sdwan/other/thousandeyes.py +0 -147
- catalystwan/models/configuration/feature_profile/sdwan/other/ucse.py +0 -110
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/as_path.py +0 -22
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/extended_community.py +0 -34
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv4_network_object.py +0 -15
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv4_service_object.py +0 -254
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/mirror.py +0 -27
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/network_object_group.py +0 -15
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/object_group.py +0 -15
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/service_object_group.py +0 -21
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/aip.py +0 -64
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/amp.py +0 -79
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/identity.py +0 -30
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/intrusion_prevention.py +0 -58
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/object_group.py +0 -72
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/rule_set.py +0 -137
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/scalable_group_tag.py +0 -26
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption.py +0 -126
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption_profile.py +0 -165
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url_filtering.py +0 -148
- catalystwan/models/configuration/feature_profile/sdwan/routing/__init__.py +0 -26
- catalystwan/models/configuration/feature_profile/sdwan/routing/bgp.py +0 -609
- catalystwan/models/configuration/feature_profile/sdwan/service/__init__.py +0 -91
- catalystwan/models/configuration/feature_profile/sdwan/service/dual_router_ha.py +0 -26
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/multilink.py +0 -101
- catalystwan/models/configuration/feature_profile/sdwan/service/service_chain.py +0 -38
- catalystwan/models/configuration/feature_profile/sdwan/sig_security/__init__.py +0 -19
- catalystwan/models/configuration/feature_profile/sdwan/sig_security/sig_security.py +0 -379
- catalystwan/models/configuration/feature_profile/sdwan/system/__init__.py +0 -59
- catalystwan/models/configuration/feature_profile/sdwan/system/banner.py +0 -30
- catalystwan/models/configuration/feature_profile/sdwan/system/basic.py +0 -290
- catalystwan/models/configuration/feature_profile/sdwan/system/bfd.py +0 -69
- catalystwan/models/configuration/feature_profile/sdwan/system/device_access.py +0 -157
- catalystwan/models/configuration/feature_profile/sdwan/system/device_access_ipv6.py +0 -157
- catalystwan/models/configuration/feature_profile/sdwan/system/global_parcel.py +0 -163
- catalystwan/models/configuration/feature_profile/sdwan/system/logging_parcel.py +0 -162
- catalystwan/models/configuration/feature_profile/sdwan/system/mrf.py +0 -75
- catalystwan/models/configuration/feature_profile/sdwan/system/ntp.py +0 -103
- catalystwan/models/configuration/feature_profile/sdwan/system/omp.py +0 -120
- catalystwan/models/configuration/feature_profile/sdwan/system/security.py +0 -179
- catalystwan/models/configuration/feature_profile/sdwan/system/snmp.py +0 -173
- catalystwan/models/configuration/feature_profile/sdwan/topology/__init__.py +0 -29
- catalystwan/models/configuration/feature_profile/sdwan/topology/custom_control.py +0 -425
- catalystwan/models/configuration/feature_profile/sdwan/topology/hubspoke.py +0 -60
- catalystwan/models/configuration/feature_profile/sdwan/topology/mesh.py +0 -23
- catalystwan/models/configuration/feature_profile/sdwan/trackers/__init__.py +0 -36
- catalystwan/models/configuration/feature_profile/sdwan/trackers/tracker.py +0 -96
- catalystwan/models/configuration/feature_profile/sdwan/trackers/tracker_group.py +0 -63
- catalystwan/models/configuration/feature_profile/sdwan/transport/__init__.py +0 -93
- catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_profile.py +0 -71
- catalystwan/models/configuration/feature_profile/sdwan/transport/gps.py +0 -37
- catalystwan/models/configuration/feature_profile/sdwan/transport/management/ethernet.py +0 -121
- catalystwan/models/configuration/feature_profile/sdwan/transport/t1e1controller.py +0 -124
- catalystwan/models/configuration/feature_profile/sdwan/transport/vpn.py +0 -285
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/cellular.py +0 -173
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ethernet.py +0 -389
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/gre.py +0 -46
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ipsec.py +0 -137
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/multilink.py +0 -219
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/protocol_over.py +0 -405
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/t1e1serial.py +0 -195
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/__init__.py +0 -62
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/analog_interface.py +0 -436
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/call_routing.py +0 -179
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/digital_interface.py +0 -380
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/dsp_farm.py +0 -193
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/media_profile.py +0 -17
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/server_group.py +0 -51
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/srst.py +0 -86
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/supervisory_disconnect.py +0 -69
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_profile.py +0 -42
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_rule.py +0 -31
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/trunk_group.py +0 -26
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_global.py +0 -57
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_tenant.py +0 -40
- catalystwan/models/configuration/network_hierarchy/__init__.py +0 -24
- catalystwan/models/configuration/network_hierarchy/cflowd.py +0 -128
- catalystwan/models/configuration/network_hierarchy/node.py +0 -88
- catalystwan/models/configuration/network_hierarchy/security_logging.py +0 -91
- catalystwan/models/configuration/packages.py +0 -57
- catalystwan/models/configuration/policy_group.py +0 -74
- catalystwan/models/configuration/topology_group.py +0 -52
- catalystwan/models/policy/definition/aip.py +0 -60
- catalystwan/models/policy/definition/amp.py +0 -65
- catalystwan/models/policy/definition/app_route.py +0 -246
- catalystwan/models/policy/definition/cflowd.py +0 -95
- catalystwan/models/policy/definition/dial_peer.py +0 -60
- catalystwan/models/policy/definition/dns_security.py +0 -130
- catalystwan/models/policy/definition/fxo_port.py +0 -63
- catalystwan/models/policy/definition/fxs_did_port.py +0 -58
- catalystwan/models/policy/definition/fxs_port.py +0 -56
- catalystwan/models/policy/definition/intrusion_prevention.py +0 -55
- catalystwan/models/policy/definition/pri_isdn_port.py +0 -48
- catalystwan/models/policy/definition/route_policy.py +0 -187
- catalystwan/models/policy/definition/srst_phone_profile.py +0 -37
- catalystwan/models/policy/definition/ssl_decryption.py +0 -209
- catalystwan/models/policy/definition/ssl_decryption_utd_profile.py +0 -88
- catalystwan/models/policy/definition/url_filtering.py +0 -70
- catalystwan/models/policy/definition/vpn_qos_map.py +0 -46
- catalystwan/models/policy/list/app.py +0 -44
- catalystwan/models/policy/list/app_probe.py +0 -42
- catalystwan/models/policy/list/as_path.py +0 -30
- catalystwan/models/policy/list/class_map.py +0 -30
- catalystwan/models/policy/list/color.py +0 -28
- catalystwan/models/policy/list/communities.py +0 -83
- catalystwan/models/policy/list/data_ipv6_prefix.py +0 -30
- catalystwan/models/policy/list/data_prefix.py +0 -30
- catalystwan/models/policy/list/fax_protocol.py +0 -45
- catalystwan/models/policy/list/fqdn.py +0 -24
- catalystwan/models/policy/list/geo_location.py +0 -33
- catalystwan/models/policy/list/identity.py +0 -29
- catalystwan/models/policy/list/ips_signature.py +0 -27
- catalystwan/models/policy/list/ipv6_prefix.py +0 -33
- catalystwan/models/policy/list/local_app.py +0 -45
- catalystwan/models/policy/list/local_domain.py +0 -36
- catalystwan/models/policy/list/media_profile.py +0 -44
- catalystwan/models/policy/list/mirror.py +0 -27
- catalystwan/models/policy/list/modem_pass_through.py +0 -27
- catalystwan/models/policy/list/policer.py +0 -39
- catalystwan/models/policy/list/port.py +0 -33
- catalystwan/models/policy/list/preferred_color_group.py +0 -82
- catalystwan/models/policy/list/prefix.py +0 -33
- catalystwan/models/policy/list/protocol_name.py +0 -26
- catalystwan/models/policy/list/region.py +0 -45
- catalystwan/models/policy/list/scalable_group_tag.py +0 -30
- catalystwan/models/policy/list/site.py +0 -34
- catalystwan/models/policy/list/sla.py +0 -77
- catalystwan/models/policy/list/supervisory_disconnect.py +0 -62
- catalystwan/models/policy/list/threat_grid_api_key.py +0 -32
- catalystwan/models/policy/list/tloc.py +0 -32
- catalystwan/models/policy/list/translation_profile.py +0 -32
- catalystwan/models/policy/list/translation_rules.py +0 -29
- catalystwan/models/policy/list/trunkgroup.py +0 -56
- catalystwan/models/policy/list/umbrella_data.py +0 -30
- catalystwan/models/policy/list/url.py +0 -39
- catalystwan/models/policy/list/vpn.py +0 -40
- catalystwan/models/policy/list/zone.py +0 -46
- catalystwan/models/policy/voice.py +0 -77
- catalystwan/models/settings.py +0 -41
- catalystwan/models/templates.py +0 -79
- catalystwan/tests/builders/test_report.py +0 -60
- catalystwan/tests/builders/uc_voice.py +0 -85
- catalystwan/tests/models/__init__.py +0 -0
- catalystwan/tests/models/configuration/feature_profile/sdwan/policy_object/security/test_url.py +0 -73
- catalystwan/tests/models/test_digital_interface.py +0 -56
- catalystwan/tests/templates/definitions/aaa_basic.json +0 -96
- catalystwan/tests/templates/definitions/aaa_complex.json +0 -464
- catalystwan/tests/templates/definitions/cisco_aaa_complex.json +0 -361
- catalystwan/tests/templates/definitions/cisco_logging_complex.json +0 -268
- catalystwan/tests/templates/definitions/cisco_ntp_complex.json +0 -143
- catalystwan/tests/templates/definitions/cisco_omp_complex.json +0 -175
- catalystwan/tests/templates/definitions/cisco_ospf_complex.json +0 -302
- catalystwan/tests/templates/definitions/cisco_sig.json +0 -405
- catalystwan/tests/templates/definitions/cisco_snmp_complex.json +0 -258
- catalystwan/tests/templates/definitions/cisco_system_complex.json +0 -502
- catalystwan/tests/templates/definitions/cisco_vpn_interface_complex.json +0 -821
- catalystwan/tests/templates/definitions/omp_vsmart_1.json +0 -26
- catalystwan/tests/templates/definitions/omp_vsmart_complex.json +0 -73
- catalystwan/tests/templates/definitions/security_vsmart_complex.json +0 -24
- catalystwan/tests/templates/definitions/system_vsmart_complex.json +0 -193
- catalystwan/tests/templates/definitions/vpn_vsmart_basic.json +0 -17
- catalystwan/tests/templates/definitions/vpn_vsmart_complex.json +0 -179
- catalystwan/tests/templates/definitions/vpn_vsmart_interface_basic.json +0 -42
- catalystwan/tests/templates/definitions/vpn_vsmart_interface_complex.json +0 -208
- catalystwan/tests/templates/models/aaa.py +0 -106
- catalystwan/tests/templates/models/cisco_logging.py +0 -65
- catalystwan/tests/templates/models/cisco_ntp.py +0 -17
- catalystwan/tests/templates/models/cisco_omp.py +0 -37
- catalystwan/tests/templates/models/cisco_ospf.py +0 -60
- catalystwan/tests/templates/models/cisco_secure_internet_gateway.py +0 -95
- catalystwan/tests/templates/models/cisco_snmp.py +0 -40
- catalystwan/tests/templates/models/cisco_vpn_interface.py +0 -200
- catalystwan/tests/templates/models/security_vsmart.py +0 -11
- catalystwan/tests/templates/models/system_vsmart.py +0 -37
- catalystwan/tests/templates/models/vpn_vsmart.py +0 -32
- catalystwan/tests/templates/models/vpn_vsmart_interface.py +0 -54
- catalystwan/tests/templates/schemas/aaa.json +0 -1096
- catalystwan/tests/templates/schemas/cisco_logging.json +0 -577
- catalystwan/tests/templates/schemas/cisco_ntp.json +0 -265
- catalystwan/tests/templates/schemas/cisco_omp.json +0 -479
- catalystwan/tests/templates/schemas/cisco_ospf.json +0 -908
- catalystwan/tests/templates/schemas/cisco_secure_internet_gateway.json +0 -1520
- catalystwan/tests/templates/schemas/cisco_snmp.json +0 -561
- catalystwan/tests/templates/schemas/cisco_vpn_interface.json +0 -3348
- catalystwan/tests/templates/schemas/security-vsmart.json +0 -58
- catalystwan/tests/templates/schemas/system-vsmart.json +0 -2585
- catalystwan/tests/templates/schemas/vpn-vsmart-interface.json +0 -859
- catalystwan/tests/templates/schemas/vpn-vsmart.json +0 -445
- catalystwan/tests/templates/test_find_template_values_2.py +0 -193
- catalystwan/tests/test_feature_profile_api.py +0 -282
- catalystwan/tests/test_models_common.py +0 -53
- catalystwan/utils/model.py +0 -48
- catalystwan/utils/persona.py +0 -5
- catalystwan/utils/type_check.py +0 -22
- catalystwan/workflows/backup_restore_device_templates.py +0 -467
- catalystwan-0.41.2.dev9.dist-info/RECORD +0 -641
- /catalystwan/tests/templates/definitions/{cisco_banner.json → banner_1.json} +0 -0
- {catalystwan-0.41.2.dev9.dist-info → catalystwan-0.41.3.dist-info}/LICENSE +0 -0
- {catalystwan-0.41.2.dev9.dist-info → catalystwan-0.41.3.dist-info}/WHEEL +0 -0
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
# Copyright 2023 Cisco Systems, Inc. and its affiliates
|
|
2
|
-
from __future__ import annotations
|
|
3
|
-
|
|
4
|
-
import logging
|
|
5
|
-
from collections import defaultdict
|
|
6
|
-
from typing import TYPE_CHECKING, Dict, List, Optional, Set, Tuple, Union
|
|
7
|
-
from uuid import UUID, uuid4
|
|
8
|
-
|
|
9
|
-
from catalystwan.api.builders.feature_profiles.mixins import TrackerMixin
|
|
10
|
-
from catalystwan.api.builders.feature_profiles.report import (
|
|
11
|
-
FeatureProfileBuildReport,
|
|
12
|
-
hande_failed_sub_parcel,
|
|
13
|
-
handle_association_request,
|
|
14
|
-
handle_create_parcel,
|
|
15
|
-
)
|
|
16
|
-
from catalystwan.api.feature_profile_api import TransportFeatureProfileAPI
|
|
17
|
-
from catalystwan.endpoints.configuration.feature_profile.sdwan.transport import TransportFeatureProfile
|
|
18
|
-
from catalystwan.models.configuration.feature_profile.common import FeatureProfileCreationPayload
|
|
19
|
-
from catalystwan.models.configuration.feature_profile.parcel import ParcelAssociationPayload
|
|
20
|
-
from catalystwan.models.configuration.feature_profile.sdwan.routing import AnyRoutingParcel
|
|
21
|
-
from catalystwan.models.configuration.feature_profile.sdwan.trackers import Tracker, TrackerGroup
|
|
22
|
-
from catalystwan.models.configuration.feature_profile.sdwan.transport import (
|
|
23
|
-
AnyTransportParcel,
|
|
24
|
-
AnyTransportSuperParcel,
|
|
25
|
-
AnyTransportVpnParcel,
|
|
26
|
-
AnyTransportVpnSubParcel,
|
|
27
|
-
)
|
|
28
|
-
from catalystwan.models.configuration.feature_profile.sdwan.transport.cellular_controller import (
|
|
29
|
-
CellularControllerParcel,
|
|
30
|
-
)
|
|
31
|
-
from catalystwan.models.configuration.feature_profile.sdwan.transport.cellular_profile import CellularProfileParcel
|
|
32
|
-
from catalystwan.models.configuration.feature_profile.sdwan.transport.gps import GpsParcel
|
|
33
|
-
|
|
34
|
-
logger = logging.getLogger(__name__)
|
|
35
|
-
|
|
36
|
-
if TYPE_CHECKING:
|
|
37
|
-
from catalystwan.session import ManagerSession
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
class TransportAndManagementProfileBuilder(TrackerMixin):
|
|
41
|
-
"""
|
|
42
|
-
A class for building system feature profiles.
|
|
43
|
-
"""
|
|
44
|
-
|
|
45
|
-
def __init__(self, session: ManagerSession) -> None:
|
|
46
|
-
"""
|
|
47
|
-
Initialize a new instance of the Service class.
|
|
48
|
-
|
|
49
|
-
Args:
|
|
50
|
-
session (ManagerSession): The ManagerSession object used for API communication.
|
|
51
|
-
profile_uuid (UUID): The UUID of the profile.
|
|
52
|
-
"""
|
|
53
|
-
self._profile: FeatureProfileCreationPayload
|
|
54
|
-
self._api = TransportFeatureProfileAPI(session)
|
|
55
|
-
self._endpoints = TransportFeatureProfile(session)
|
|
56
|
-
self._independent_items: List[AnyTransportSuperParcel] = []
|
|
57
|
-
self._independent_items_vpns: Dict[UUID, AnyTransportVpnParcel] = {}
|
|
58
|
-
self._independent_items_cellular_controllers: Dict[UUID, CellularControllerParcel] = {}
|
|
59
|
-
self._dependent_items_on_vpns: Dict[UUID, List[Tuple[UUID, AnyTransportVpnSubParcel]]] = defaultdict(list)
|
|
60
|
-
self._dependent_routing_items_on_vpns: Dict[UUID, List[AnyRoutingParcel]] = defaultdict(list)
|
|
61
|
-
self._dependent_items_on_cellular_controllers: Dict[
|
|
62
|
-
UUID, List[Union[CellularProfileParcel, GpsParcel]]
|
|
63
|
-
] = defaultdict(list)
|
|
64
|
-
# Trackers
|
|
65
|
-
self.init_tracker()
|
|
66
|
-
|
|
67
|
-
def add_profile_name_and_description(self, feature_profile: FeatureProfileCreationPayload) -> None:
|
|
68
|
-
"""
|
|
69
|
-
Adds a name and description to the feature profile.
|
|
70
|
-
|
|
71
|
-
Args:
|
|
72
|
-
name (str): The name of the feature profile.
|
|
73
|
-
description (str): The description of the feature profile.
|
|
74
|
-
|
|
75
|
-
Returns:
|
|
76
|
-
None
|
|
77
|
-
"""
|
|
78
|
-
self._profile = feature_profile
|
|
79
|
-
|
|
80
|
-
def add_parcel(self, parcel: AnyTransportSuperParcel) -> None:
|
|
81
|
-
"""
|
|
82
|
-
Adds a parcel to the feature profile.
|
|
83
|
-
|
|
84
|
-
Args:
|
|
85
|
-
parcel (AnyTransportSuperParcel): The parcel to add.
|
|
86
|
-
|
|
87
|
-
Returns:
|
|
88
|
-
None
|
|
89
|
-
"""
|
|
90
|
-
self._independent_items.append(parcel)
|
|
91
|
-
|
|
92
|
-
def add_parcel_routing_attached(self, vpn_tag: UUID, parcel: AnyRoutingParcel) -> None:
|
|
93
|
-
"""
|
|
94
|
-
Adds a routing parcel to the feature profile.
|
|
95
|
-
|
|
96
|
-
Args:
|
|
97
|
-
parcel (AnyRoutingParcel): The parcel to add.
|
|
98
|
-
|
|
99
|
-
Returns:
|
|
100
|
-
None
|
|
101
|
-
"""
|
|
102
|
-
logger.debug(f"Attaching routing {parcel.parcel_name} with to VPN with tag {vpn_tag}")
|
|
103
|
-
self._dependent_routing_items_on_vpns[vpn_tag].append(parcel)
|
|
104
|
-
|
|
105
|
-
def add_parcel_vpn(self, parcel: AnyTransportVpnParcel) -> UUID:
|
|
106
|
-
"""
|
|
107
|
-
Adds a VPN parcel to the builder.
|
|
108
|
-
|
|
109
|
-
Args:
|
|
110
|
-
parcel (LanVpnParcel): The VPN parcel to add.
|
|
111
|
-
|
|
112
|
-
Returns:
|
|
113
|
-
UUID: The UUID tag of the added VPN parcel.
|
|
114
|
-
"""
|
|
115
|
-
vpn_tag = uuid4()
|
|
116
|
-
logger.debug(f"Adding VPN parcel {parcel.parcel_name} with tag {vpn_tag}")
|
|
117
|
-
self._independent_items_vpns[vpn_tag] = parcel
|
|
118
|
-
return vpn_tag
|
|
119
|
-
|
|
120
|
-
def add_parcel_cellular_controller(self, parcel: CellularControllerParcel) -> UUID:
|
|
121
|
-
"""
|
|
122
|
-
Adds a cellular controller parcel to the builder.
|
|
123
|
-
|
|
124
|
-
Args:
|
|
125
|
-
parcel (CellularControllerParcel): The cellular controller parcel to add.
|
|
126
|
-
|
|
127
|
-
Returns:
|
|
128
|
-
UUID: The UUID tag of the added cellular controller parcel.
|
|
129
|
-
"""
|
|
130
|
-
cellular_controller_tag = uuid4()
|
|
131
|
-
logger.debug(f"Adding cellular controller parcel {parcel.parcel_name} with tag {cellular_controller_tag}")
|
|
132
|
-
self._independent_items_cellular_controllers[cellular_controller_tag] = parcel
|
|
133
|
-
return cellular_controller_tag
|
|
134
|
-
|
|
135
|
-
def add_cellular_controller_subparcel(
|
|
136
|
-
self, cellular_controller_tag: UUID, parcel: Union[CellularProfileParcel, GpsParcel]
|
|
137
|
-
) -> None:
|
|
138
|
-
"""
|
|
139
|
-
Adds a subparcel to the cellular controller parcel.
|
|
140
|
-
|
|
141
|
-
Args:
|
|
142
|
-
cellular_controller_tag (UUID): The UUID of the cellular controller.
|
|
143
|
-
parcel (Union[CellularProfileParcel, GpsParcel]): The subparcel to add.
|
|
144
|
-
|
|
145
|
-
Returns:
|
|
146
|
-
None
|
|
147
|
-
"""
|
|
148
|
-
self._dependent_items_on_cellular_controllers[cellular_controller_tag].append(parcel)
|
|
149
|
-
|
|
150
|
-
def add_vpn_subparcel(self, vpn_tag: UUID, parcel: AnyTransportVpnSubParcel) -> UUID:
|
|
151
|
-
"""
|
|
152
|
-
Adds a parcel to the feature profile.
|
|
153
|
-
|
|
154
|
-
Args:
|
|
155
|
-
parcel (AnyTransportVpnSubParcel): The parcel to add.
|
|
156
|
-
|
|
157
|
-
Returns:
|
|
158
|
-
None
|
|
159
|
-
"""
|
|
160
|
-
subparcel_tag = uuid4()
|
|
161
|
-
logger.debug(f"Adding vpn sub-parcel {parcel.parcel_name} with tag {vpn_tag}")
|
|
162
|
-
self._dependent_items_on_vpns[vpn_tag].append((subparcel_tag, parcel))
|
|
163
|
-
return subparcel_tag
|
|
164
|
-
|
|
165
|
-
def add_tracker(self, associate_tags: Set[UUID], tracker: Tracker) -> None:
|
|
166
|
-
"""
|
|
167
|
-
Adds a tracker parcel to the feature profile.
|
|
168
|
-
|
|
169
|
-
Args:
|
|
170
|
-
associate_tags (Set[UUID]): The UUIDs of the interfaces to which the tracker should be added.
|
|
171
|
-
tracker (Tracker): The tracker parcel to add.
|
|
172
|
-
|
|
173
|
-
Returns:
|
|
174
|
-
None
|
|
175
|
-
"""
|
|
176
|
-
self._trackers.append((associate_tags, tracker))
|
|
177
|
-
|
|
178
|
-
def add_tracker_group(self, associate_tags: Set[UUID], group: TrackerGroup, trackers: List[Tracker]) -> None:
|
|
179
|
-
self._tracker_groups.append((associate_tags, group, trackers))
|
|
180
|
-
|
|
181
|
-
def build(self) -> FeatureProfileBuildReport:
|
|
182
|
-
"""
|
|
183
|
-
Builds the feature profile.
|
|
184
|
-
|
|
185
|
-
Returns:
|
|
186
|
-
UUID: The UUID of the created feature profile.
|
|
187
|
-
"""
|
|
188
|
-
|
|
189
|
-
profile_uuid = self._endpoints.create_transport_feature_profile(self._profile).id
|
|
190
|
-
self.build_report = FeatureProfileBuildReport(profile_uuid=profile_uuid, profile_name=self._profile.name)
|
|
191
|
-
for parcel in self._independent_items:
|
|
192
|
-
self._create_parcel(profile_uuid, parcel)
|
|
193
|
-
|
|
194
|
-
self.create_trackers(profile_uuid=profile_uuid)
|
|
195
|
-
|
|
196
|
-
for vpn_tag, vpn_parcel in self._independent_items_vpns.items():
|
|
197
|
-
vpn_uuid = self._create_parcel(profile_uuid, vpn_parcel)
|
|
198
|
-
for vpn_subparcel_tag, vpn_subparcel in self._dependent_items_on_vpns[vpn_tag]:
|
|
199
|
-
if vpn_uuid is None:
|
|
200
|
-
hande_failed_sub_parcel(self.build_report, vpn_parcel, vpn_subparcel)
|
|
201
|
-
else:
|
|
202
|
-
vpn_subparcel_uuid = self._create_parcel(profile_uuid, vpn_subparcel, vpn_uuid)
|
|
203
|
-
|
|
204
|
-
# Associate tracker with VPN interface if it exists
|
|
205
|
-
if vpn_subparcel_tag in self._interface_tag_to_existing_tracker and vpn_subparcel_uuid:
|
|
206
|
-
tracker_uuid, tracker_type = self._interface_tag_to_existing_tracker[vpn_subparcel_tag]
|
|
207
|
-
vpn_subparcel_type = (
|
|
208
|
-
vpn_subparcel._get_parcel_type().replace("wan/vpn/", "").replace("management/vpn/", "")
|
|
209
|
-
)
|
|
210
|
-
with handle_association_request(self.build_report, vpn_subparcel):
|
|
211
|
-
self._endpoints.associate_tracker_with_vpn_interface(
|
|
212
|
-
profile_uuid,
|
|
213
|
-
vpn_uuid,
|
|
214
|
-
vpn_subparcel_type,
|
|
215
|
-
vpn_subparcel_uuid,
|
|
216
|
-
tracker_type,
|
|
217
|
-
ParcelAssociationPayload(parcel_id=tracker_uuid),
|
|
218
|
-
)
|
|
219
|
-
|
|
220
|
-
for routing_parcel in self._dependent_routing_items_on_vpns[vpn_tag]:
|
|
221
|
-
if vpn_uuid is None:
|
|
222
|
-
hande_failed_sub_parcel(self.build_report, vpn_parcel, routing_parcel)
|
|
223
|
-
else:
|
|
224
|
-
routing_uuid = self._create_parcel(profile_uuid, routing_parcel)
|
|
225
|
-
if not routing_uuid:
|
|
226
|
-
continue
|
|
227
|
-
with handle_association_request(self.build_report, routing_parcel):
|
|
228
|
-
self._endpoints.associate_with_vpn(
|
|
229
|
-
profile_uuid,
|
|
230
|
-
vpn_uuid,
|
|
231
|
-
routing_parcel._get_parcel_type(),
|
|
232
|
-
payload=ParcelAssociationPayload(parcel_id=routing_uuid),
|
|
233
|
-
)
|
|
234
|
-
|
|
235
|
-
for cellular_controller_tag, cellular_controller_parcel in self._independent_items_cellular_controllers.items():
|
|
236
|
-
controller_uuid = self._create_parcel(profile_uuid, cellular_controller_parcel)
|
|
237
|
-
for cellular_subparcel in self._dependent_items_on_cellular_controllers[cellular_controller_tag]:
|
|
238
|
-
if controller_uuid is None:
|
|
239
|
-
hande_failed_sub_parcel(self.build_report, cellular_controller_parcel, cellular_subparcel)
|
|
240
|
-
else:
|
|
241
|
-
parcel_uuid = self._create_parcel(profile_uuid, cellular_subparcel)
|
|
242
|
-
if not parcel_uuid:
|
|
243
|
-
continue
|
|
244
|
-
with handle_association_request(self.build_report, cellular_subparcel):
|
|
245
|
-
self._endpoints.associate_with_cellular_controller(
|
|
246
|
-
profile_uuid,
|
|
247
|
-
controller_uuid,
|
|
248
|
-
cellular_subparcel._get_parcel_type(),
|
|
249
|
-
ParcelAssociationPayload(parcel_id=parcel_uuid),
|
|
250
|
-
)
|
|
251
|
-
|
|
252
|
-
return self.build_report
|
|
253
|
-
|
|
254
|
-
@handle_create_parcel
|
|
255
|
-
def _create_parcel(self, profile_uuid: UUID, parcel: AnyTransportParcel, vpn_uuid: Optional[None] = None) -> UUID:
|
|
256
|
-
return self._api.create_parcel(profile_uuid, parcel, vpn_uuid).id
|
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
# Copyright 2024 Cisco Systems, Inc. and its affiliates
|
|
2
|
-
from __future__ import annotations
|
|
3
|
-
|
|
4
|
-
import logging
|
|
5
|
-
from dataclasses import dataclass
|
|
6
|
-
from typing import TYPE_CHECKING, Dict, List, Optional, Union
|
|
7
|
-
from uuid import UUID
|
|
8
|
-
|
|
9
|
-
from catalystwan.api.builders.feature_profiles.report import FeatureProfileBuildReport, handle_create_parcel
|
|
10
|
-
from catalystwan.api.configuration_groups.parcel import as_default
|
|
11
|
-
from catalystwan.api.feature_profile_api import UcVoiceFeatureProfileAPI
|
|
12
|
-
from catalystwan.endpoints.configuration.feature_profile.sdwan.uc_voice import UcVoiceFeatureProfile
|
|
13
|
-
from catalystwan.models.configuration.feature_profile.common import FeatureProfileCreationPayload, RefIdItem
|
|
14
|
-
from catalystwan.models.configuration.feature_profile.sdwan.uc_voice import (
|
|
15
|
-
AnalogInterfaceParcel,
|
|
16
|
-
AnyUcVoiceParcel,
|
|
17
|
-
CallRoutingParcel,
|
|
18
|
-
DigitalInterfaceParcel,
|
|
19
|
-
MediaProfileParcel,
|
|
20
|
-
ServerGroupParcel,
|
|
21
|
-
SrstParcel,
|
|
22
|
-
TranslationProfileParcel,
|
|
23
|
-
TranslationRuleParcel,
|
|
24
|
-
TrunkGroupParcel,
|
|
25
|
-
VoiceGlobalParcel,
|
|
26
|
-
VoiceTenantParcel,
|
|
27
|
-
)
|
|
28
|
-
from catalystwan.models.configuration.feature_profile.sdwan.uc_voice.analog_interface import (
|
|
29
|
-
Association as AnalogInterfaceAssociation,
|
|
30
|
-
)
|
|
31
|
-
from catalystwan.models.configuration.feature_profile.sdwan.uc_voice.call_routing import (
|
|
32
|
-
Association as CallRoutingAssociation,
|
|
33
|
-
)
|
|
34
|
-
from catalystwan.models.configuration.feature_profile.sdwan.uc_voice.digital_interface import (
|
|
35
|
-
Association as DigitalInterfaceAssociation,
|
|
36
|
-
)
|
|
37
|
-
from catalystwan.models.configuration.feature_profile.sdwan.uc_voice.srst import Association as SrstAssociation
|
|
38
|
-
from catalystwan.models.configuration.feature_profile.sdwan.uc_voice.translation_profile import CallType
|
|
39
|
-
|
|
40
|
-
logger = logging.getLogger(__name__)
|
|
41
|
-
|
|
42
|
-
if TYPE_CHECKING:
|
|
43
|
-
from catalystwan.session import ManagerSession
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
ParcelWithAssociations = Union[CallRoutingParcel, DigitalInterfaceParcel, AnalogInterfaceParcel, SrstParcel]
|
|
47
|
-
Association = Union[
|
|
48
|
-
List[DigitalInterfaceAssociation],
|
|
49
|
-
List[AnalogInterfaceAssociation],
|
|
50
|
-
List[CallRoutingAssociation],
|
|
51
|
-
List[SrstAssociation],
|
|
52
|
-
]
|
|
53
|
-
AssociableParcel = Union[
|
|
54
|
-
MediaProfileParcel,
|
|
55
|
-
ServerGroupParcel,
|
|
56
|
-
SrstParcel,
|
|
57
|
-
TranslationProfileParcel,
|
|
58
|
-
TranslationRuleParcel,
|
|
59
|
-
TrunkGroupParcel,
|
|
60
|
-
VoiceGlobalParcel,
|
|
61
|
-
VoiceTenantParcel,
|
|
62
|
-
]
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
@dataclass
|
|
66
|
-
class TranslationProfile:
|
|
67
|
-
tpp: TranslationProfileParcel
|
|
68
|
-
calling: Optional[TranslationRuleParcel] = None
|
|
69
|
-
called: Optional[TranslationRuleParcel] = None
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
def is_uuid(uuid: Optional[Union[str, UUID]]) -> bool:
|
|
73
|
-
if isinstance(uuid, UUID) or uuid is None:
|
|
74
|
-
return True
|
|
75
|
-
try:
|
|
76
|
-
UUID(uuid)
|
|
77
|
-
return True
|
|
78
|
-
except ValueError:
|
|
79
|
-
return False
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
class UcVoiceFeatureProfileBuilder:
|
|
83
|
-
"""
|
|
84
|
-
A class for building UC Voice feature profiles with a modular approach.
|
|
85
|
-
|
|
86
|
-
This class provides methods to construct, associate, and manage various parcels and
|
|
87
|
-
configurations required for UC Voice feature profiles.
|
|
88
|
-
"""
|
|
89
|
-
|
|
90
|
-
ASSOCIABLE_PARCELS = (
|
|
91
|
-
MediaProfileParcel,
|
|
92
|
-
ServerGroupParcel,
|
|
93
|
-
SrstParcel,
|
|
94
|
-
TranslationProfileParcel,
|
|
95
|
-
TranslationRuleParcel,
|
|
96
|
-
TrunkGroupParcel,
|
|
97
|
-
VoiceGlobalParcel,
|
|
98
|
-
VoiceTenantParcel,
|
|
99
|
-
)
|
|
100
|
-
|
|
101
|
-
ASSOCIATON_FIELDS = {
|
|
102
|
-
"media_profile",
|
|
103
|
-
"server_group",
|
|
104
|
-
"translation_profile",
|
|
105
|
-
"trunk_group",
|
|
106
|
-
"voice_tenant",
|
|
107
|
-
"supervisory_disconnect",
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
def __init__(self, session: ManagerSession) -> None:
|
|
111
|
-
"""
|
|
112
|
-
Initializes a new instance of the UC Voice Feature Profile Builder.
|
|
113
|
-
|
|
114
|
-
Args:
|
|
115
|
-
session (ManagerSession): The session object used for API communication.
|
|
116
|
-
"""
|
|
117
|
-
self._profile: FeatureProfileCreationPayload
|
|
118
|
-
self._api = UcVoiceFeatureProfileAPI(session)
|
|
119
|
-
self._endpoints = UcVoiceFeatureProfile(session)
|
|
120
|
-
self._independent_parcels: List[AnyUcVoiceParcel] = []
|
|
121
|
-
self._associable_parcles: List[AssociableParcel] = []
|
|
122
|
-
self._translation_profiles: Dict[str, TranslationProfile] = dict()
|
|
123
|
-
self._pushed_associable_parcels: Dict[str, UUID] = {} # Maps parcel names to their created UUIDs.
|
|
124
|
-
self._parcels_with_associations: List[ParcelWithAssociations] = []
|
|
125
|
-
|
|
126
|
-
def add_profile_name_and_description(self, feature_profile: FeatureProfileCreationPayload) -> None:
|
|
127
|
-
"""
|
|
128
|
-
Adds a name and description to the feature profile being built.
|
|
129
|
-
|
|
130
|
-
Args:
|
|
131
|
-
feature_profile (FeatureProfileCreationPayload): The feature profile payload containing
|
|
132
|
-
the name and description.
|
|
133
|
-
"""
|
|
134
|
-
self._profile = feature_profile
|
|
135
|
-
|
|
136
|
-
def add_independent_parcel(self, parcel: AnyUcVoiceParcel) -> None:
|
|
137
|
-
"""
|
|
138
|
-
Adds an independent parcel to the feature profile.
|
|
139
|
-
|
|
140
|
-
Args:
|
|
141
|
-
parcel (AnyUcVoiceParcel): The parcel to be added. Parcels are independent configurations
|
|
142
|
-
that do not require associations with other parcels.
|
|
143
|
-
"""
|
|
144
|
-
self._independent_parcels.append(parcel)
|
|
145
|
-
|
|
146
|
-
def add_associable_parcel(self, parcel: AssociableParcel) -> None:
|
|
147
|
-
self._associable_parcles.append(parcel)
|
|
148
|
-
|
|
149
|
-
def add_translation_profile(
|
|
150
|
-
self,
|
|
151
|
-
tpp: TranslationProfileParcel,
|
|
152
|
-
calling: Optional[TranslationRuleParcel] = None,
|
|
153
|
-
called: Optional[TranslationRuleParcel] = None,
|
|
154
|
-
) -> None:
|
|
155
|
-
"""
|
|
156
|
-
Adds a translation profile to the feature profile.
|
|
157
|
-
|
|
158
|
-
Args:
|
|
159
|
-
tpp (TranslationProfileParcel): The main translation profile parcel.
|
|
160
|
-
calling (Optional[TranslationRuleParcel]): The calling rule parcel. Optional.
|
|
161
|
-
called (Optional[TranslationRuleParcel]): The called rule parcel. Optional.
|
|
162
|
-
|
|
163
|
-
Raises:
|
|
164
|
-
ValueError: If neither a calling nor a called rule is provided.
|
|
165
|
-
"""
|
|
166
|
-
if not calling and not called:
|
|
167
|
-
raise ValueError("There must be at least one translation rule to create a translation profile.")
|
|
168
|
-
if tpp.parcel_name in self._translation_profiles:
|
|
169
|
-
logger.warning(f"Translation profile {tpp.parcel_name} was already added.")
|
|
170
|
-
else:
|
|
171
|
-
self._translation_profiles[tpp.parcel_name] = TranslationProfile(tpp=tpp, called=called, calling=calling)
|
|
172
|
-
|
|
173
|
-
def add_parcel_with_associations(self, parcel: ParcelWithAssociations) -> None:
|
|
174
|
-
"""
|
|
175
|
-
Adds a parcel with associations to the feature profile.
|
|
176
|
-
|
|
177
|
-
Args:
|
|
178
|
-
parcel (ParcelWithAssociations): A parcel that includes associations with other entities.
|
|
179
|
-
Associations are relationships between parcels and other resources.
|
|
180
|
-
"""
|
|
181
|
-
self._parcels_with_associations.append(parcel)
|
|
182
|
-
|
|
183
|
-
def build(self) -> FeatureProfileBuildReport:
|
|
184
|
-
"""
|
|
185
|
-
Builds the complete UC Voice feature profile.
|
|
186
|
-
|
|
187
|
-
This method creates the feature profile on the system and processes all added parcels
|
|
188
|
-
and translation profiles, resolving associations as needed.
|
|
189
|
-
|
|
190
|
-
Returns:
|
|
191
|
-
FeatureProfileBuildReport: A report containing the details of the created feature profile.
|
|
192
|
-
"""
|
|
193
|
-
profile_uuid = self._endpoints.create_uc_voice_feature_profile(self._profile).id
|
|
194
|
-
self.build_report = FeatureProfileBuildReport(profile_uuid=profile_uuid, profile_name=self._profile.name)
|
|
195
|
-
|
|
196
|
-
# Create independent parcels
|
|
197
|
-
for ip in self._independent_parcels:
|
|
198
|
-
self._create_parcel(profile_uuid, ip)
|
|
199
|
-
|
|
200
|
-
# Create translation profiles
|
|
201
|
-
for _, tp in self._translation_profiles.items():
|
|
202
|
-
tp_parcel_uuid = self._create_translation_profile(profile_uuid, tp)
|
|
203
|
-
if tp_parcel_uuid:
|
|
204
|
-
self._pushed_associable_parcels[tp.tpp.parcel_name] = tp_parcel_uuid
|
|
205
|
-
|
|
206
|
-
for ap in self._associable_parcles:
|
|
207
|
-
ap_parcel_uuid = self._create_parcel(profile_uuid, ap)
|
|
208
|
-
if ap_parcel_uuid:
|
|
209
|
-
self._pushed_associable_parcels[ap.parcel_name] = ap_parcel_uuid
|
|
210
|
-
|
|
211
|
-
# Create parcels with associations
|
|
212
|
-
for pwa in self._parcels_with_associations:
|
|
213
|
-
if pwa.association:
|
|
214
|
-
self._populate_association(pwa.association)
|
|
215
|
-
self._create_parcel(profile_uuid, pwa)
|
|
216
|
-
|
|
217
|
-
return self.build_report
|
|
218
|
-
|
|
219
|
-
@handle_create_parcel
|
|
220
|
-
def _create_parcel(self, profile_uuid: UUID, parcel: AnyUcVoiceParcel) -> UUID:
|
|
221
|
-
"""
|
|
222
|
-
Internal method to create a parcel.
|
|
223
|
-
|
|
224
|
-
Args:
|
|
225
|
-
profile_uuid (UUID): The UUID of the feature profile being built.
|
|
226
|
-
parcel (AnyUcVoiceParcel): The parcel to create.
|
|
227
|
-
|
|
228
|
-
Returns:
|
|
229
|
-
UUID: The UUID of the created parcel.
|
|
230
|
-
"""
|
|
231
|
-
return self._api.create_parcel(profile_uuid, parcel).id
|
|
232
|
-
|
|
233
|
-
def _create_translation_profile(self, profile_uuid: UUID, tp: TranslationProfile) -> UUID:
|
|
234
|
-
"""
|
|
235
|
-
Internal method to create a translation profile.
|
|
236
|
-
|
|
237
|
-
Args:
|
|
238
|
-
profile_uuid (UUID): The UUID of the feature profile being built.
|
|
239
|
-
tp (TranslationProfile): The translation profile to create.
|
|
240
|
-
|
|
241
|
-
Returns:
|
|
242
|
-
UUID: The UUID of the created translation profile parcel.
|
|
243
|
-
"""
|
|
244
|
-
|
|
245
|
-
def process_parcel(parcel: Optional[TranslationRuleParcel], parcel_type: CallType):
|
|
246
|
-
if not parcel:
|
|
247
|
-
return
|
|
248
|
-
parcel_name = parcel.parcel_name
|
|
249
|
-
if parcel_name in self._pushed_associable_parcels:
|
|
250
|
-
logger.debug(f"Translation rule {parcel_name} was already referenced in other profile.")
|
|
251
|
-
tp.tpp.set_ref_by_call_type(self._pushed_associable_parcels[parcel_name], parcel_type)
|
|
252
|
-
else:
|
|
253
|
-
parcel_uuid = self._create_parcel(profile_uuid, parcel)
|
|
254
|
-
if parcel_uuid:
|
|
255
|
-
tp.tpp.set_ref_by_call_type(parcel_uuid, parcel_type)
|
|
256
|
-
self._pushed_associable_parcels[parcel_name] = parcel_uuid
|
|
257
|
-
|
|
258
|
-
process_parcel(tp.called, "called")
|
|
259
|
-
process_parcel(tp.calling, "calling")
|
|
260
|
-
|
|
261
|
-
return self._create_parcel(profile_uuid, tp.tpp)
|
|
262
|
-
|
|
263
|
-
def _populate_association(self, association: Association) -> None:
|
|
264
|
-
"""
|
|
265
|
-
Resolves associations for a parcel.
|
|
266
|
-
|
|
267
|
-
Updates references in the parcel's associations to use the actual UUIDs of previously
|
|
268
|
-
created parcels.
|
|
269
|
-
|
|
270
|
-
Args:
|
|
271
|
-
association (Association): A list of associations to resolve.
|
|
272
|
-
"""
|
|
273
|
-
for model in association:
|
|
274
|
-
for field_name in self.ASSOCIATON_FIELDS.intersection(model.model_fields_set):
|
|
275
|
-
attr = getattr(model, field_name)
|
|
276
|
-
if isinstance(attr, RefIdItem):
|
|
277
|
-
if is_uuid(attr.ref_id.value) or attr.ref_id.value is None:
|
|
278
|
-
continue
|
|
279
|
-
resolved_uuid = self._pushed_associable_parcels.get(attr.ref_id.value)
|
|
280
|
-
if resolved_uuid:
|
|
281
|
-
attr.ref_id.value = str(resolved_uuid)
|
|
282
|
-
else:
|
|
283
|
-
logger.warning(
|
|
284
|
-
f"Unresolved reference in field '{field_name}' with value '{attr.ref_id.value}' "
|
|
285
|
-
f"for model '{model.__class__.__name__}'. Setting to Default[None]."
|
|
286
|
-
)
|
|
287
|
-
attr.ref_id = as_default(None)
|