distcloud-client/distributedcloud-client/dcmanagerclient/api/v1/system_peer_manager.py

161 lines
5.5 KiB
Python

#
# Copyright (c) 2023-2024 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
import json
from dcmanagerclient.api import base
from dcmanagerclient.api.base import get_json
BASE_URL = "/system-peers/"
class SystemPeer(base.Resource):
resource_name = "system_peer"
def __init__(
self,
manager,
peer_id,
peer_uuid,
peer_name,
manager_endpoint,
manager_username,
peer_controller_gateway_address,
administrative_state,
heartbeat_interval,
heartbeat_failure_threshold,
heartbeat_failure_policy,
heartbeat_maintenance_timeout,
availability_state,
created_at,
updated_at,
):
self.manager = manager
self.peer_id = peer_id
self.peer_uuid = peer_uuid
self.peer_name = peer_name
self.manager_endpoint = manager_endpoint
self.manager_username = manager_username
self.gateway_address = peer_controller_gateway_address
self.administrative_state = administrative_state
self.heartbeat_interval = heartbeat_interval
self.heartbeat_failure_threshold = heartbeat_failure_threshold
self.heartbeat_failure_policy = heartbeat_failure_policy
self.heartbeat_maintenance_timeout = heartbeat_maintenance_timeout
self.availability_state = availability_state
self.created_at = created_at
self.updated_at = updated_at
class system_peer_manager(base.ResourceManager):
resource_class = SystemPeer
def __init__(self, http_client, subcloud_peer_group_manager):
super(system_peer_manager, self).__init__(http_client)
self.subcloud_peer_group_manager = subcloud_peer_group_manager
def _json_to_resource(self, json_object):
return self.resource_class(
self,
peer_id=json_object["id"],
peer_uuid=json_object["peer-uuid"],
peer_name=json_object["peer-name"],
manager_endpoint=json_object["manager-endpoint"],
manager_username=json_object["manager-username"],
peer_controller_gateway_address=json_object[
"peer-controller-gateway-address"
],
administrative_state=json_object["administrative-state"],
heartbeat_interval=json_object["heartbeat-interval"],
heartbeat_failure_threshold=json_object["heartbeat-failure-threshold"],
heartbeat_failure_policy=json_object["heartbeat-failure-policy"],
heartbeat_maintenance_timeout=json_object[
"heartbeat-maintenance-timeout"
],
availability_state=json_object["availability-state"],
created_at=json_object["created-at"],
updated_at=json_object["updated-at"],
)
def system_peer_create(self, url, data):
data = json.dumps(data)
resp = self.http_client.post(url, data)
if resp.status_code != 200:
self._raise_api_exception(resp)
json_object = get_json(resp)
resource = list()
resource.append(self._json_to_resource(json_object))
return resource
def system_peer_update(self, url, data):
data = json.dumps(data)
resp = self.http_client.patch(url, data)
if resp.status_code != 200:
self._raise_api_exception(resp)
json_object = get_json(resp)
resource = list()
resource.append(self._json_to_resource(json_object))
return resource
def system_peer_list(self, url):
resp = self.http_client.get(url)
if resp.status_code != 200:
self._raise_api_exception(resp)
json_response_key = get_json(resp)
json_objects = json_response_key["system_peers"]
resource = list()
for json_object in json_objects:
resource.append(self._json_to_resource(json_object))
return resource
def _system_peer_detail(self, url):
resp = self.http_client.get(url)
if resp.status_code != 200:
self._raise_api_exception(resp)
json_object = get_json(resp)
resource = list()
resource.append(self._json_to_resource(json_object))
return resource
def _list_peer_groups_for_system_peer(self, url):
resp = self.http_client.get(url)
if resp.status_code != 200:
self._raise_api_exception(resp)
json_response_key = get_json(resp)
json_objects = json_response_key["subcloud_peer_groups"]
resource = list()
for json_object in json_objects:
resource.append(
self.subcloud_peer_group_manager.json_to_resource(json_object)
)
return resource
def add_system_peer(self, **kwargs):
data = kwargs
url = BASE_URL
return self.system_peer_create(url, data)
def list_system_peers(self):
url = BASE_URL
return self.system_peer_list(url)
def system_peer_detail(self, system_peer_ref):
url = BASE_URL + system_peer_ref
return self._system_peer_detail(url)
def delete_system_peer(self, system_peer_ref):
url = BASE_URL + system_peer_ref
return self._delete(url)
def update_system_peer(self, system_peer_ref, **kwargs):
data = kwargs
url = BASE_URL + system_peer_ref
return self.system_peer_update(url, data)
def system_peer_list_peer_groups(self, system_peer_ref):
url = f"{BASE_URL}{system_peer_ref}/subcloud-peer-groups"
return self._list_peer_groups_for_system_peer(url)