From 8279b77de3aa1c37bb39ddc8655ca64ddb81efdd Mon Sep 17 00:00:00 2001 From: Smruti Ranjan Senapati Date: Mon, 22 Jul 2024 02:32:52 +0530 Subject: [PATCH] fix: fixes resolver and resource models to work with apply This commit contains miscellaneous bug fixes in order make the apply command work properly for different resources. --- riocli/apply/parse.py | 5 --- riocli/apply/resolver.py | 2 +- riocli/deployment/execute.py | 4 +-- riocli/deployment/util.py | 60 ------------------------------------ riocli/disk/model.py | 7 ++--- riocli/network/model.py | 12 ++------ riocli/package/model.py | 5 +-- riocli/v2client/client.py | 7 ++--- 8 files changed, 12 insertions(+), 90 deletions(-) diff --git a/riocli/apply/parse.py b/riocli/apply/parse.py index 5a746880..ffa70cbf 100644 --- a/riocli/apply/parse.py +++ b/riocli/apply/parse.py @@ -319,13 +319,8 @@ def _resolve_dependency(self, dependent_key, dependency): self._add_remote_object_to_resolve_tree( dependent_key, obj_guid, dependency, obj) -<<<<<<< HEAD - if (name_or_guid == obj_name) and ( - 'version' in dependency and obj['packageVersion'] == dependency.get('version')): -======= if (name_or_guid == obj_name) and ('version' in dependency and obj.metadata.version == dependency.get('version')): ->>>>>>> 52515c9 (feat(deployment): uses v2 deployments APIs) self._add_remote_object_to_resolve_tree( dependent_key, obj_guid, dependency, obj) diff --git a/riocli/apply/resolver.py b/riocli/apply/resolver.py index f20ede66..4f54e89a 100644 --- a/riocli/apply/resolver.py +++ b/riocli/apply/resolver.py @@ -157,7 +157,7 @@ def _find_functors(self, kind): "network": lambda name, obj_list, network_type: filter( lambda x: name == x.metadata.name and network_type == x.spec.type, obj_list), "deployment": lambda name, obj_list: filter( - lambda x: name == x.metadata.name, obj_list), + lambda x: name == x.metadata.name and not x.metadata.get('deletedAt'), obj_list), "disk": lambda name, obj_list: filter( lambda x: name == x.metadata.name, obj_list), "device": self._generate_find_guid_functor(), diff --git a/riocli/deployment/execute.py b/riocli/deployment/execute.py index fee280a5..5efd2332 100644 --- a/riocli/deployment/execute.py +++ b/riocli/deployment/execute.py @@ -23,7 +23,7 @@ from riocli.utils.spinner import DummySpinner as Spinner from riocli.constants import Colors -from riocli.deployment.util import name_to_guid, select_details +from riocli.deployment.util import select_details from riocli.utils.execute import run_on_cloud @@ -39,7 +39,7 @@ help='Name of a executable in the component') @click.argument('deployment-name', type=str) @click.argument('command', nargs=-1) -@name_to_guid +# @name_to_guid def execute_command( component_name: str, exec_name: str, diff --git a/riocli/deployment/util.py b/riocli/deployment/util.py index c772f448..d060c7b5 100644 --- a/riocli/deployment/util.py +++ b/riocli/deployment/util.py @@ -13,13 +13,9 @@ # limitations under the License. import functools import re -import typing from typing import List -import click - from riocli.config import new_client -from riocli.constants import Colors from riocli.deployment.model import Deployment from riocli.utils import tabulate_data from riocli.utils.selector import show_selection @@ -41,56 +37,6 @@ ] -def name_to_guid(f: typing.Callable) -> typing.Callable: - @functools.wraps(f) - def decorated(**kwargs: typing.Any) -> None: - try: - client = new_client() - except Exception as e: - click.secho(str(e), fg=Colors.RED) - raise SystemExit(1) from e - - name = kwargs.pop('deployment_name') - guid = None - - if name.startswith('dep-'): - guid = name - name = None - - try: - if name is None: - name = get_deployment_name(client, guid) - - if guid is None: - guid = find_deployment_guid(client, name) - except Exception as e: - click.secho(str(e), fg=Colors.RED) - raise SystemExit(1) from e - - kwargs['deployment_name'] = name - kwargs['deployment_guid'] = guid - f(**kwargs) - - return decorated - - -def get_deployment_name(client: Client, guid: str) -> str: - deployment = client.get_deployment(guid) - return deployment.name - - -def find_deployment_guid(client: Client, name: str) -> str: - find_func = functools.partial(client.get_all_deployments, - phases=[DeploymentPhaseConstants.SUCCEEDED, - DeploymentPhaseConstants.PROVISIONING]) - deployments = find_func() - for deployment in deployments: - if deployment.name == name: - return deployment.deploymentId - - raise DeploymentNotFound() - - def select_details(deployment_guid, component_name=None, exec_name=None) -> (str, str, str): client = new_client() deployment = client.get_deployment(deployment_guid) @@ -126,12 +72,6 @@ def select_details(deployment_guid, component_name=None, exec_name=None) -> (str return selected_component.componentID, exec_meta.id, pod_name -class DeploymentNotFound(Exception): - def __init__(self, message='deployment not found!'): - self.message = message - super().__init__(self.message) - - def fetch_deployments( client: Client, deployment_name_or_regex: str, diff --git a/riocli/disk/model.py b/riocli/disk/model.py index 85c13f48..dc61fecc 100644 --- a/riocli/disk/model.py +++ b/riocli/disk/model.py @@ -28,15 +28,12 @@ def __init__(self, *args, **kwargs): self.update(*args, **kwargs) def find_object(self, client: Client) -> typing.Any: - _, disk = self.rc.find_depends({ + guid, disk = self.rc.find_depends({ 'kind': 'disk', 'nameOrGUID': self.metadata.name }) - if not disk: - return False - - return disk + return disk if guid else False def create_object(self, client: Client, **kwargs) -> typing.Any: v2_client = new_v2_client() diff --git a/riocli/network/model.py b/riocli/network/model.py index 5a35a873..4f41242e 100644 --- a/riocli/network/model.py +++ b/riocli/network/model.py @@ -29,15 +29,9 @@ def __init__(self, *args, **kwargs): self.update(*args, **kwargs) def find_object(self, client: Client) -> bool: - try: - network, obj = self.rc.find_depends({"kind": self.kind.lower(), - "nameOrGUID": self.metadata.name}, self.spec.type) - if not network: - return False - - return obj - except NetworkNotFound: - return False + network, obj = self.rc.find_depends({"kind": self.kind.lower(), + "nameOrGUID": self.metadata.name}, self.spec.type) + return obj if network else False def create_object(self, client: Client, **kwargs) -> typing.Any: client = new_v2_client() diff --git a/riocli/package/model.py b/riocli/package/model.py index 2a454089..912424e3 100644 --- a/riocli/package/model.py +++ b/riocli/package/model.py @@ -35,10 +35,7 @@ def __init__(self, *args, **kwargs): def find_object(self, client: Client): guid, obj = self.rc.find_depends({"kind": self.kind.lower(), "nameOrGUID": self.metadata.name}, self.metadata.version) - if not guid: - return False - - return obj + return obj if guid else False def create_object(self, client: Client, **kwargs) -> typing.Any: v2_client = new_v2_client() diff --git a/riocli/v2client/client.py b/riocli/v2client/client.py index 2e82e234..75859f3c 100644 --- a/riocli/v2client/client.py +++ b/riocli/v2client/client.py @@ -29,7 +29,7 @@ from riocli.constants import Colors from riocli.v2client.enums import DeploymentPhaseConstants, DiskStatusConstants from riocli.v2client.error import (RetriesExhausted, DeploymentNotRunning, ImagePullError, - NetworkNotFound) + NetworkNotFound, DeploymentNotFound) def handle_server_errors(response: requests.Response): @@ -880,7 +880,7 @@ def get_network( data = json.loads(response.text) if response.status_code == http.HTTPStatus.NOT_FOUND: - raise NetworkNotFound() + raise NetworkNotFound("network: {} not found".format(name)) if not response.ok: err_msg = data.get('error') @@ -956,7 +956,6 @@ def list_deployments( params = { "continue": 0, - "limit": 100, } params.update(query or {}) result = [] @@ -1010,7 +1009,7 @@ def get_deployment( data = json.loads(response.text) if response.status_code == http.HTTPStatus.NOT_FOUND: - raise Exception("deployment: {} not found".format(name)) + raise DeploymentNotFound("deployment: {} not found".format(name)) if not response.ok: err_msg = data.get('error')