From a1625fd187842020959d0efa67e133351b9cd8ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antti=20Myyr=C3=A4?= Date: Tue, 8 Aug 2023 01:43:46 +0300 Subject: [PATCH] feat(manager): Loadbalancer service support with raw dictionary objects --- CHANGELOG.md | 1 + upcloud_api/cloud_manager/__init__.py | 12 +-- upcloud_api/cloud_manager/lb_mixin.py | 108 ++++++++++++++++++++++++++ 3 files changed, 116 insertions(+), 5 deletions(-) create mode 100644 upcloud_api/cloud_manager/lb_mixin.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 978e37e..6c5f60c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Server network interface support - Server simple backup rule support - Manager support for listing server plans +- Manager support for loadbalancers with raw dictionary objects ## [2.0.1] - 2023-03-22 diff --git a/upcloud_api/cloud_manager/__init__.py b/upcloud_api/cloud_manager/__init__.py index e6268fc..8860031 100644 --- a/upcloud_api/cloud_manager/__init__.py +++ b/upcloud_api/cloud_manager/__init__.py @@ -4,6 +4,7 @@ from upcloud_api.cloud_manager.firewall_mixin import FirewallManager from upcloud_api.cloud_manager.host_mixin import HostManager from upcloud_api.cloud_manager.ip_address_mixin import IPManager +from upcloud_api.cloud_manager.lb_mixin import LoadBalancerManager from upcloud_api.cloud_manager.network_mixin import NetworkManager from upcloud_api.cloud_manager.object_storage_mixin import ObjectStorageManager from upcloud_api.cloud_manager.server_mixin import ServerManager @@ -12,14 +13,15 @@ class CloudManager( - ServerManager, - IPManager, - StorageManager, FirewallManager, - TagManager, - NetworkManager, HostManager, + IPManager, + LoadBalancerManager, + NetworkManager, ObjectStorageManager, + ServerManager, + StorageManager, + TagManager, ): """ CloudManager contains the core functionality of the upcloud API library. diff --git a/upcloud_api/cloud_manager/lb_mixin.py b/upcloud_api/cloud_manager/lb_mixin.py new file mode 100644 index 0000000..cc3930c --- /dev/null +++ b/upcloud_api/cloud_manager/lb_mixin.py @@ -0,0 +1,108 @@ +from upcloud_api.api import API + + +class LoadBalancerManager: + """ + Functions for managing UpCloud loadbalancer instances and their properties with basic dictionary objects + """ + + api: API + + def get_loadbalancers(self): + """ + Returns a list of loadbalancer dictionary objects + """ + + url = '/load-balancer' + return self.api.get_request(url) + + def get_loadbalancer(self, lb_uuid: str): + """ + Returns details for a single loadbalancer as a dictionary + + :param lb_uuid: + :return: LB details + """ + url = f'/load-balancer/{lb_uuid}' + return self.api.get_request(url) + + def create_loadbalancer(self, body: dict): + """ + Creates a loadbalancer service specified in body and returns its details + + :param body: + :return: LB details + """ + + url = '/load-balancer' + return self.api.post_request(url, body) + + def delete_loadbalancer(self, lb_uuid: str): + """ + Deletes a loadbalancer service + + :param lb_uuid: + """ + + url = f'/load-balancer/{lb_uuid}' + return self.api.delete_request(url) + + def get_loadbalancer_backends(self, lb_uuid: str): + """ + Returns a list of backends for a loadbalancer service + + :param lb_uuid: + :return: List of LB backends + """ + + url = f'/load-balancer/{lb_uuid}/backends' + return self.api.get_request(url) + + def get_loadbalancer_backend(self, lb_uuid: str, backend: str): + """ + Returns details for a single loadbalancer backend + + :param lb_uuid: + :param backend: + :return: LB backend details + """ + + url = f'/load-balancer/{lb_uuid}/backends/{backend}' + return self.api.get_request(url) + + def create_loadbalancer_backend(self, lb_uuid: str, body: dict): + """ + Creates a new backend for a loadbalancer and returns its details + + :param lb_uuid: + :param body: + :return: LB backend details + """ + + url = f'/load-balancer/{lb_uuid}/backends' + return self.api.post_request(url, body) + + def modify_loadbalancer_backend(self, lb_uuid: str, backend: str, body: dict): + """ + Modifies an existing loadbalancer backend and returns its details + + :param lb_uuid: + :param backend: + :param body: + :return: LB backend details + """ + + url = f'/load-balancer/{lb_uuid}/backends/{backend}' + return self.api.patch_request(url, body) + + def delete_loadbalancer_backend(self, lb_uuid: str, backend: str): + """ + Deletes a loadbalancer backend + + :param lb_uuid: + :param backend: + :return: + """ + + url = f'/load-balancer/{lb_uuid}/backends/{backend}' + return self.api.delete_request(url)