Skip to content

0.16.0-a1

Pre-release
Pre-release
Compare
Choose a tag to compare
@zachcamara-hpe zachcamara-hpe released this 07 Mar 00:41
· 41 commits to main since this release

0.16.0-a1 -- 2024-03-YY

🚀 Features


.. important::
  ✨✨Preliminary support for Orchestrator 9.3+✨✨:

  There were hundreds of changes to Orchestrator API endpoints in 9.3
  forward. Logic has been added to the pyedgeconnect Orchestrator class
  ``init`` and ``login`` functions to capture Orchestrator version
  information to then determine corrent endpoint syntax
  in further functions.

  As part of this update, 280+ pyedgeconnect functions have been updated
  for 9.3 support, detailed in the updated and added functions section.

  All the logic has been written with cross-compatability in mind so a
  majority of existing code using pyedgeconnect should not need to be
  rewritten for functions that have been written for 9.3 support.

  As an example, let's disect :func:`~pyedgeconnect.Orchestrator.get_api_key`

  In use, it takes the single paramter ``name`` for retrieving a
  particular API key from Orchestrator

  .. code::

    orch.get_api_key(name="myKey")

  The original source code for this function just had a simple path
  with the paramter inline.

  .. code::

      return self._get(f"/apiKey/{name}")

  The updated source code for this and other functions, leverages the
  Orchestrator version to determine the apporpriate syntax.

  .. code::

      if self.orch_version >= 9.3:
          path = f"/apiKey?name={name}"
      else:
          path = f"/apiKey/{name}"

      return self._get(path)


- ✨ **A new code example!**: ⚙️ Automate configuring Service Orchestration
  for HPE Aruba Networking SSE including automating the location and
  tunnels on the SSE platform side. Read through the full
  writeup in the examples to kickstart your integration asap!

- ✨ **A new code example!**: 📈 Pull WAN interface minute data from
  Orchestrator to CSV files and generate a report calculating 95th
  percentile utilization per-appliance as well as per-interface.
  Written walkthrough under the examples section.

- ✨ **A new code example!**: 🚀 Pull Boost minute data from
  Orchestrator to CSV files per appliance with a simple calculation
  to estimate Kbps from the Bytes Boosted value in the original data to
  more easily compare to the configured Boost value already in Kbps.
  Written walkthrough under the examples section.

- **Updated code example!**: EdgeConnect Telemetry demo now includes
  parsing Shaper & Traffic class data.


Updated the following Orchestrator functions from Swagger:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Added updated API endpoint for Orchestrator 9.3+ support
of the following functions, sorted below by their respective
Swagger tags.

ACLS

- :func:`~pyedgeconnect.Orchestrator.get_appliance_acls`

ADMIN_DISTANCE

- :func:`~pyedgeconnect.Orchestrator.get_appliance_admin_distance`

AGGREGATE_STATS

- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_tunnels_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_tunnels_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_appliances_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_appliances_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_applications_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_applications_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_traffic_class_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_traffic_class_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_flows_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_active_flows`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_flows_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_dscp_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_dscp_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_dns_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_dns_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_ports_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_ports_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_top_talkers_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_top_talkers_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_top_talkers_split_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_traffic_behavior_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_traffic_behavior_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_jitter_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_jitter_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_drc_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_drc_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_interface_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_interface_overlay_transport_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_mos_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_mos_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_boost_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_boost_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_security_policy_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_aggregate_stats_security_policy_single_appliance`

ALARM

- :func:`~pyedgeconnect.Orchestrator.get_alarms_from_appliances`
- :func:`~pyedgeconnect.Orchestrator.acknolwedge_alarms_from_appliance`
- :func:`~pyedgeconnect.Orchestrator.add_note_to_appliance_alarm`
- :func:`~pyedgeconnect.Orchestrator.clear_alarms_from_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_alarm_count_from_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_alarm_count_orchestrator_or_appliances`
- :func:`~pyedgeconnect.Orchestrator.get_customized_alarm_severity`
- :func:`~pyedgeconnect.Orchestrator.get_customized_alarm_severity_for_type`
- :func:`~pyedgeconnect.Orchestrator.delete_customized_alarm_severity_for_type`

API_KEYS

- :func:`~pyedgeconnect.Orchestrator.get_api_key`
- :func:`~pyedgeconnect.Orchestrator.update_api_key`
- :func:`~pyedgeconnect.Orchestrator.delete_api_key`

APPLIANCE

- :func:`~pyedgeconnect.Orchestrator.get_appliances`
   - This function now has an additional filter parameter of ``ne_pk`` so
     a single appliance can be retrieved instead of all appliances
- :func:`~pyedgeconnect.Orchestrator.get_appliance_info`
   - Raise warning on deprecation for 9.3+, handles same endpoint logic
     as :func:`~pyedgeconnect.Orchestrator.get_appliances`
- :func:`~pyedgeconnect.Orchestrator.delete_appliance`
- :func:`~pyedgeconnect.Orchestrator.delete_appliance_for_rediscovery`
- :func:`~pyedgeconnect.Orchestrator.delete_denied_appliances`
- :func:`~pyedgeconnect.Orchestrator.add_and_approve_discovered_appliances`
- :func:`~pyedgeconnect.Orchestrator.add_discovered_appliances`
- :func:`~pyedgeconnect.Orchestrator.deny_appliance`
- :func:`~pyedgeconnect.Orchestrator.rediscover_denied_appliance`
- :func:`~pyedgeconnect.Orchestrator.change_appliance_credentials`
- :func:`~pyedgeconnect.Orchestrator.appliance_get_api`
- :func:`~pyedgeconnect.Orchestrator.appliance_post_api`
- :func:`~pyedgeconnect.Orchestrator.appliance_delete_api`
- :func:`~pyedgeconnect.Orchestrator.get_appliance_dns_cache_config`

APPLIANCE_BACKUP

- :func:`~pyedgeconnect.Orchestrator.backup_appliance_config`
- :func:`~pyedgeconnect.Orchestrator.get_appliance_backup_history`
- :func:`~pyedgeconnect.Orchestrator.delete_appliance_backup`
- :func:`~pyedgeconnect.Orchestrator.restore_appliance_from_backup`

APPLIANCE_EXTRA_INFO

- :func:`~pyedgeconnect.Orchestrator.get_appliance_extra_info`
- :func:`~pyedgeconnect.Orchestrator.set_appliance_extra_info`
- :func:`~pyedgeconnect.Orchestrator.delete_appliance_extra_info`

APPLIANCE_PRECONFIG

- :func:`~pyedgeconnect.Orchestrator.modify_preconfig`
- :func:`~pyedgeconnect.Orchestrator.delete_preconfig`
- :func:`~pyedgeconnect.Orchestrator.approve_and_apply_preconfig`
- :func:`~pyedgeconnect.Orchestrator.apply_preconfig_to_existing`
- :func:`~pyedgeconnect.Orchestrator.get_apply_preconfig_status`

APPLIANCE_RESYNC

- :func:`~pyedgeconnect.Orchestrator.appliance_resync`

APPLIANCES_SOFTWARE_VERSIONS

- :func:`~pyedgeconnect.Orchestrator.get_appliance_software_version`

APPLIANCE_UPGRADE

- :func:`~pyedgeconnect.Orchestrator.delete_ecos_image`

APPLICATION_DEFINITION

- :func:`~pyedgeconnect.Orchestrator.update_user_defined_app_port_protocol`
- :func:`~pyedgeconnect.Orchestrator.delete_user_defined_app_port_protocol`
- :func:`~pyedgeconnect.Orchestrator.update_user_defined_app_dns_classification`
- :func:`~pyedgeconnect.Orchestrator.delete_user_defined_app_dns_classification`
- :func:`~pyedgeconnect.Orchestrator.post_user_defined_app_address_map`
- :func:`~pyedgeconnect.Orchestrator.delete_user_defined_app_address_map`
- :func:`~pyedgeconnect.Orchestrator.post_user_defined_app_meter_flow`
- :func:`~pyedgeconnect.Orchestrator.delete_user_defined_app_meter_flow`

APP_SYSTEM_DEPLOY_INFO

- :func:`~pyedgeconnect.Orchestrator.get_appliance_system_deployment_info`

APP_SYSTEM_STATE_INFO

- :func:`~pyedgeconnect.Orchestrator.get_appliance_system_state_info`

AUTHENTICATION

- :func:`~pyedgeconnect.Orchestrator.get_appliance_auth_information`

BANNERS

- :func:`~pyedgeconnect.Orchestrator.get_appliance_login_banners`

BGP

- :func:`~pyedgeconnect.Orchestrator.get_appliance_bgp_config`
- :func:`~pyedgeconnect.Orchestrator.get_appliance_bgp_config_all_vrfs`
- :func:`~pyedgeconnect.Orchestrator.get_appliance_bgp_neighbors`
- :func:`~pyedgeconnect.Orchestrator.get_appliance_bgp_neighbors_all_vrfs`
- :func:`~pyedgeconnect.Orchestrator.get_appliance_bgp_state`
- :func:`~pyedgeconnect.Orchestrator.get_appliance_bgp_state_all_vrfs`

BONDED_TUNNELS_CONFIGURATION

- :func:`~pyedgeconnect.Orchestrator.get_bonded_tunnel_details_for_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_bonded_tunnels_for_physical_tunnel`
- :func:`~pyedgeconnect.Orchestrator.get_bonded_tunnels_state`

BRIDGE_INTERFACE_STATE

- :func:`~pyedgeconnect.Orchestrator.get_appliance_bridge_interface_state`

BROADCAST_CLI

- :func:`~pyedgeconnect.Orchestrator.broadcast_cli`

BUILT_IN_POLICIES

- :func:`~pyedgeconnect.Orchestrator.get_built_in_policies`

CUSTOM_APPLIANCE_TAGS

- :func:`~pyedgeconnect.Orchestrator.get_custom_appliance_tags`

DEBUG_FILES

- :func:`~pyedgeconnect.Orchestrator.get_debug_files_from_appliance`
- :func:`~pyedgeconnect.Orchestrator.delete_debug_file_from_appliance`
- :func:`~pyedgeconnect.Orchestrator.generate_appliance_sysdump`

DEPLOYMENT

- :func:`~pyedgeconnect.Orchestrator.get_appliance_deployment`
- :func:`~pyedgeconnect.Orchestrator.get_single_appliance_deployment`

DISKS

- :func:`~pyedgeconnect.Orchestrator.get_appliance_disk_information`

DNS

- :func:`~pyedgeconnect.Orchestrator.get_appliance_dns`

DNS_PROXY

- :func:`~pyedgeconnect.Orchestrator.get_dns_proxy`

EXCEPTION

- :func:`~pyedgeconnect.Orchestrator.delete_single_tunnel_exception`
- :func:`~pyedgeconnect.Orchestrator.update_single_tunnel_exception`

FLOW

- :func:`~pyedgeconnect.Orchestrator.get_appliance_flows`
- :func:`~pyedgeconnect.Orchestrator.reset_flows`
- :func:`~pyedgeconnect.Orchestrator.reclassify_flows`
- :func:`~pyedgeconnect.Orchestrator.get_appliance_flow_bandwidth_stats`
- :func:`~pyedgeconnect.Orchestrator.get_appliance_flow_details`
- :func:`~pyedgeconnect.Orchestrator.get_appliance_flow_details_verbose`

GRNODE

- :func:`~pyedgeconnect.Orchestrator.get_appliance_location`
- :func:`~pyedgeconnect.Orchestrator.update_appliance_location_grnodepk`
- :func:`~pyedgeconnect.Orchestrator.update_appliance_location_nepk`

GROUP

- :func:`~pyedgeconnect.Orchestrator.get_gms_group`
- :func:`~pyedgeconnect.Orchestrator.update_gms_group`
- :func:`~pyedgeconnect.Orchestrator.delete_gms_group`

INBOUND_SHAPER

- :func:`~pyedgeconnect.Orchestrator.get_appliance_inbound_shaper`

INTERFACE_LABELS

- :func:`~pyedgeconnect.Orchestrator.push_interface_labels_to_appliance`

INTERFACE_STATE

- :func:`~pyedgeconnect.Orchestrator.get_appliance_interface_state`

IP_OBJECTS

- :func:`~pyedgeconnect.Orchestrator.get_address_group`
- :func:`~pyedgeconnect.Orchestrator.delete_address_group`
- :func:`~pyedgeconnect.Orchestrator.get_service_group`
- :func:`~pyedgeconnect.Orchestrator.delete_service_group`

LICENSE

- :func:`~pyedgeconnect.Orchestrator.change_appliance_license`
- :func:`~pyedgeconnect.Orchestrator.grant_appliance_base_license`
- :func:`~pyedgeconnect.Orchestrator.revoke_appliance_base_license`
- :func:`~pyedgeconnect.Orchestrator.delete_appliance_license_token`

LINK_AGGREGATION

- :func:`~pyedgeconnect.Orchestrator.get_link_aggregation_data`

LINK_INTEGRITY

- :func:`~pyedgeconnect.Orchestrator.get_link_integrity_test_result`

LOGGING

- :func:`~pyedgeconnect.Orchestrator.get_appliance_syslog_config`

LOOPBACK

- :func:`~pyedgeconnect.Orchestrator.get_loopback_interfaes`

MGMT_SERVICES

- :func:`~pyedgeconnect.Orchestrator.get_mgmt_services`

MULTICAST

- :func:`~pyedgeconnect.Orchestrator.get_appliance_multicast_enabled`
- :func:`~pyedgeconnect.Orchestrator.get_appliance_multicast_config`
- :func:`~pyedgeconnect.Orchestrator.get_appliance_multicast_interfaces`
- :func:`~pyedgeconnect.Orchestrator.get_appliance_multicast_neighbors`
- :func:`~pyedgeconnect.Orchestrator.get_appliance_multicast_routes`

NAT

- :func:`~pyedgeconnect.Orchestrator.get_appliance_nat_config`
- :func:`~pyedgeconnect.Orchestrator.get_appliance_nat_pools`
- :func:`~pyedgeconnect.Orchestrator.get_appliance_nat_maps`

NAT_MAPS

- :func:`~pyedgeconnect.Orchestrator.get_nat_policy`
- :func:`~pyedgeconnect.Orchestrator.get_nat_policy_inbound_outbound`
- :func:`~pyedgeconnect.Orchestrator.get_nat_policy_dynamic`

NET_FLOW

- :func:`~pyedgeconnect.Orchestrator.get_net_flow_configuration`

NETWORK_MEMORY

- :func:`~pyedgeconnect.Orchestrator.erase_appliance_network_memory`

NETWORK_ROLE_AND_SITE

- :func:`~pyedgeconnect.Orchestrator.get_appliance_network_role_and_site`
- :func:`~pyedgeconnect.Orchestrator.update_appliance_network_role_and_site`

OPTIMIZATION_POLICY

- :func:`~pyedgeconnect.Orchestrator.get_optimization_policy`

OSPF

- :func:`~pyedgeconnect.Orchestrator.get_appliance_ospf_config`
- :func:`~pyedgeconnect.Orchestrator.get_appliance_ospf_interfaces_config`
- :func:`~pyedgeconnect.Orchestrator.get_appliance_ospf_state`
- :func:`~pyedgeconnect.Orchestrator.get_appliance_ospf_interfaces_state`
- :func:`~pyedgeconnect.Orchestrator.get_appliance_ospf_neighbors_state`

OVERLAY_ASSOCIATION

- :func:`~pyedgeconnect.Orchestrator.get_appliance_overlay_association`
- :func:`~pyedgeconnect.Orchestrator.remove_single_appliance_overlay_association`

OVERLAYS

- :func:`~pyedgeconnect.Orchestrator.get_overlay_config`
- :func:`~pyedgeconnect.Orchestrator.modify_overlay_config`
- :func:`~pyedgeconnect.Orchestrator.delete_overlay`
- :func:`~pyedgeconnect.Orchestrator.get_overlay_config_for_region`
- :func:`~pyedgeconnect.Orchestrator.modify_overlay_config_for_region`

PEER_PRIORITY

- :func:`~pyedgeconnect.Orchestrator.get_peer_priority_configuration`

PORT_FORWARDING

- :func:`~pyedgeconnect.Orchestrator.get_appliance_port_fowarding`

QOS_POLICY

- :func:`~pyedgeconnect.Orchestrator.get_qos_policy`

REACHABILITY

- :func:`~pyedgeconnect.Orchestrator.get_reachability_status_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_reachability_status_orchestrator`

REALTIME_STATS

- :func:`~pyedgeconnect.Orchestrator.get_realtime_stats`

REGIONS

- :func:`~pyedgeconnect.Orchestrator.get_region`
- :func:`~pyedgeconnect.Orchestrator.update_region_name`
- :func:`~pyedgeconnect.Orchestrator.delete_region`
- :func:`~pyedgeconnect.Orchestrator.update_region_appliance_association`
- :func:`~pyedgeconnect.Orchestrator.get_region_appliance_association_by_nepk`
- :func:`~pyedgeconnect.Orchestrator.get_region_appliance_association_by_region_id`

RELEASES

- :func:`~pyedgeconnect.Orchestrator.delay_release_notification`
- :func:`~pyedgeconnect.Orchestrator.dismiss_release_notification`

ROUTE_POLICY

- :func:`~pyedgeconnect.Orchestrator.get_route_policy`

SAVE_CHANGES

- :func:`~pyedgeconnect.Orchestrator.save_changes_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.save_changes_single_appliance`

SECURITY_MAPS

- :func:`~pyedgeconnect.Orchestrator.get_appliance_security_maps`

SHAPER

- :func:`~pyedgeconnect.Orchestrator.get_appliance_shaper`

SNMP

- :func:`~pyedgeconnect.Orchestrator.get_appliance_snmp`

SUBNETS

- :func:`~pyedgeconnect.Orchestrator.get_appliance_subnets`
- :func:`~pyedgeconnect.Orchestrator.get_discovered_appliance_subnets`
- :func:`~pyedgeconnect.Orchestrator.set_appliance_subnet_sharing_options`

TCA

- :func:`~pyedgeconnect.Orchestrator.get_appliance_tca`
- :func:`~pyedgeconnect.Orchestrator.get_appliance_tunnel_tca`

TCPDUMP

- :func:`pyedgeconnect.Orchestrator.tcpdump_status_appliance`

TEMPLATE

- :func:`pyedgeconnect.Orchestrator.get_template_group`
- :func:`pyedgeconnect.Orchestrator.post_template_group`
- :func:`pyedgeconnect.Orchestrator.delete_template_group`
- :func:`pyedgeconnect.Orchestrator.get_selected_templates_in_template_group`
- :func:`pyedgeconnect.Orchestrator.select_templates_for_template_group`
- :func:`pyedgeconnect.Orchestrator.get_appliance_template_history`
- :func:`pyedgeconnect.Orchestrator.get_appliance_applied_template_goups`
- :func:`pyedgeconnect.Orchestrator.get_appliance_template_groups_association`
- :func:`pyedgeconnect.Orchestrator.associate_template_group_to_appliance`

THIRD_PARTY_SERVICES

- :func:`~pyedgeconnect.Orchestrator.central_assign_appliance_to_site`

TIMESERIES_STATS

- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_appliance_process_state`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_orchestrator_memory`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_tunnel_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_appliances`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_appliances_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_appliances_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_traffic_class`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_traffic_class_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_traffic_class_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_flow`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_flow_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_flow_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_dscp`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_dscp_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_dscp_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_shaper`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_shaper_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_internal_drops_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_drc`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_drc_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_drc_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_interface_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_interface_overlay_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_mos_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_application`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_application_ne_pk_list`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_application_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_boost_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_security_policy_single_appliance`
- :func:`~pyedgeconnect.Orchestrator.get_timeseries_stats_jitter_single_appliance`

UI_USAGE_STATS

- :func:`~pyedgeconnect.Orchestrator.add_ui_usage_count`

UPGRADE_APPLIANCES

- :func:`~pyedgeconnect.Orchestrator.upgrade_appliances`

USER_ACCOUNT

- :func:`~pyedgeconnect.Orchestrator.get_appliance_user_accounts`

USERS

- :func:`~pyedgeconnect.Orchestrator.get_user`
- :func:`~pyedgeconnect.Orchestrator.delete_user`
- :func:`~pyedgeconnect.Orchestrator.create_or_update_user`
- :func:`~pyedgeconnect.Orchestrator.change_user_password`

VRF

- :func:`~pyedgeconnect.Orchestrator.get_routing_segmentation_segment_by_id`
- :func:`~pyedgeconnect.Orchestrator.update_routing_segmentation_segment_by_id`
- :func:`~pyedgeconnect.Orchestrator.delete_routing_segmentation_segment_by_id`
- :func:`~pyedgeconnect.Orchestrator.get_routing_segmentation_maps_from_source_segment`
- :func:`~pyedgeconnect.Orchestrator.update_routing_segmentation_maps_from_source_segment`
- :func:`~pyedgeconnect.Orchestrator.delete_routing_segmentation_maps_from_source_segment`
- :func:`~pyedgeconnect.Orchestrator.get_routing_segmentation_security_policy`
- :func:`~pyedgeconnect.Orchestrator.update_routing_segmentation_security_policy`

VRF_DNAT_MAPS

- :func:`~pyedgeconnect.Orchestrator.get_dnat_maps`

VRF_SNAT_MAPS

- :func:`~pyedgeconnect.Orchestrator.get_snat_maps`

VRRP

- :func:`~pyedgeconnect.Orchestrator.get_vrrp_interfaces`

VTI

- :func:`~pyedgeconnect.Orchestrator.get_vti_interfaes`

VXOA_HOSTNAME

- :func:`~pyedgeconnect.Orchestrator.update_appliance_hostname`

WAN_NEXT_HOP_HEALTH

- :func:`~pyedgeconnect.Orchestrator.get_wan_next_hop_health_config`


Updated functions with new parameters:

APPLICATION_DEFINITION

- :func:`~pyedgeconnect.Orchestrator.post_user_defined_app_address_map`
  - Added ``subattributes`` parameter for supporting additional app definition details in 9.2+

Added the following Orchestrator functions from Swagger Incl. Support for 9.3+:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Health

- :func:`~pyedgeconnect.Orchestrator.get_health_appliance_summary`
- :func:`~pyedgeconnect.Orchestrator.get_health_alarm_summary`
- :func:`~pyedgeconnect.Orchestrator.get_health_threshold_config`
- :func:`~pyedgeconnect.Orchestrator.set_health_threshold_config`
- :func:`~pyedgeconnect.Orchestrator.get_health_jitter`
- :func:`~pyedgeconnect.Orchestrator.get_health_latency`
- :func:`~pyedgeconnect.Orchestrator.get_health_loss`
- :func:`~pyedgeconnect.Orchestrator.get_health_mos`

Third Party Services / Service Orchestration

- :func:`~pyedgeconnect.Orchestrator.get_service_orchestration_breakout_state`
- :func:`~pyedgeconnect.Orchestrator.set_service_orchestration_breakout_state`
- :func:`~pyedgeconnect.Orchestrator.get_service_orchestration_labels`
- :func:`~pyedgeconnect.Orchestrator.set_service_orchestration_labels`
- :func:`~pyedgeconnect.Orchestrator.get_service_orchestration_all_names_to_ids`
- :func:`~pyedgeconnect.Orchestrator.get_service_orchestration_all_services`
- :func:`~pyedgeconnect.Orchestrator.add_new_service_orchestration`
- :func:`~pyedgeconnect.Orchestrator.delete_service_orchestration`
- :func:`~pyedgeconnect.Orchestrator.get_service_orchestration_tunnel_settings`
- :func:`~pyedgeconnect.Orchestrator.set_service_orchestration_tunnel_settings`
- :func:`~pyedgeconnect.Orchestrator.get_service_orchestration_tunnel_identifiers`
- :func:`~pyedgeconnect.Orchestrator.get_service_orchestration_config_entries`
- :func:`~pyedgeconnect.Orchestrator.get_service_orchestration_ipsla_settings`
- :func:`~pyedgeconnect.Orchestrator.set_service_orchestration_ipsla_settings`
- :func:`~pyedgeconnect.Orchestrator.get_service_orchestration_remote_endpoints`
- :func:`~pyedgeconnect.Orchestrator.set_service_orchestration_remote_endpoints`
- :func:`~pyedgeconnect.Orchestrator.add_service_orchestration_remote_endpoints`
- :func:`~pyedgeconnect.Orchestrator.delete_service_orchestration_remote_endpoints`
- :func:`~pyedgeconnect.Orchestrator.get_service_orchestration_appliance_association`
- :func:`~pyedgeconnect.Orchestrator.set_service_orchestration_appliance_association`


Added the following EdgeConnect functions from Swagger:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

- :func:`~pyedgeconnect.EdgeConnect.get_traffic_class_names`
- :func:`~pyedgeconnect.EdgeConnect.set_traffic_class_names`
- :func:`~pyedgeconnect.EdgeConnect.update_appliance_deployment`
- :func:`~pyedgeconnect.EdgeConnect.validate_appliance_deployment`
- :func:`~pyedgeconnect.EdgeConnect.get_vrrp_interfaces`
- :func:`~pyedgeconnect.EdgeConnect.configure_vrrp_interfaces`


🐛 Bug Fixes


- `#6 <https://github.com/aruba/pyedgeconnect/issues/6>`_ -
  :func:`~pyedgeconnect.Orchestrator.get_appliance_bgp_state_all_vrfs`
  Updated endpoint path as it was in an incorrect order resulting in
  bad response.

- `#8 <https://github.com/aruba/pyedgeconnect/issues/8>`_ -
  Added 9.3 support for appliance preconfig endpoints

- `#2 <https://github.com/aruba/pyedgeconnect/issues/2>`_ -
  Added 9.3 support for vrf/segmentation endpoints

- :func:`~pyedgeconnect.EdgeConnect.get_appliance_routing_peers_info`
  Updated docstring formatting due to indentation typo

- :func:`~pyedgeconnect.Orchestrator.update_region_name` Updated body
  to include previously unused paramter ``region_name`` to update
  the name of a region.


💥 Breaking Changes:


- :func:`~pyedgeconnect.Orchestrator.update_routing_segmentation_security_policy`

Renamed parameters ``source_zone`` and ``destination_zone`` to
``source_segment`` and ``destination_segment`` as the inputs are
segment ID values and not FW zone values. If this function is being
used without explicit arguments no breaking change is encountered
but if users are calling the function with explicit keyword
arguments of the old parameter names then the code will need to be
updated to reflect the updated parameter names.


🧰 Maintenance / Other


n/a

🐛 Known Issues


.. warning::

  The following two functions for the _ip_objects submodule experience
  errors at this time. These function do work in the Orchestrator UI:
  :func:`~pyedgeconnect.Orchestrator.bulk_upload_address_group` and
  :func:`~pyedgeconnect.Orchestrator.bulk_upload_service_group`