diff --git a/magnum/db/api.py b/magnum/db/api.py index 9ea4f8d774..2fc1d89c6a 100644 --- a/magnum/db/api.py +++ b/magnum/db/api.py @@ -549,6 +549,14 @@ class Connection(object): :returns: A pod. """ + @abc.abstractmethod + def get_pod_by_name(self, pod_name): + """Return a pod. + + :param pod_name: The name of a pod. + :returns: A pod. + """ + @abc.abstractmethod def get_pod_by_instance(self, instance): """Return a pod. diff --git a/magnum/db/sqlalchemy/api.py b/magnum/db/sqlalchemy/api.py index 7ab23d74d9..22b2e20d91 100644 --- a/magnum/db/sqlalchemy/api.py +++ b/magnum/db/sqlalchemy/api.py @@ -927,6 +927,13 @@ class Connection(api.Connection): except NoResultFound: raise exception.PodNotFound(pod=pod_uuid) + def get_pod_by_name(self, pod_name): + query = model_query(models.Pod).filter_by(name=pod_name) + try: + return query.one() + except NoResultFound: + raise exception.PodNotFound(pod=pod_name) + def get_pods_by_bay_uuid(self, bay_uuid): query = model_query(models.Pod).filter_by(bay_uuid=bay_uuid) try: diff --git a/magnum/objects/pod.py b/magnum/objects/pod.py index 30d5d8248e..f447d7669e 100644 --- a/magnum/objects/pod.py +++ b/magnum/objects/pod.py @@ -90,6 +90,18 @@ class Pod(base.MagnumObject): pod = Pod._from_db_object(cls(context), db_pod) return pod + @base.remotable_classmethod + def get_by_name(cls, context, name): + """Find a pod based on pod name and return a :class:`Pod` object. + + :param name: the name of a pod. + :param context: Security context + :returns: a :class:`Pod` object. + """ + db_pod = cls.dbapi.get_pod_by_name(name) + pod = Pod._from_db_object(cls(context), db_pod) + return pod + @base.remotable_classmethod def get_by_bay_uuid(cls, context, bay_uuid): """Find a pods based on bay uuid and return a :class:`Pod` object.