| # Copyright 2017 Mirantis, Inc. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); you may |
| # not use this file except in compliance with the License. You may obtain |
| # a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| # License for the specific language governing permissions and limitations |
| |
| from devops.helpers import helpers |
| |
| from tcp_tests.managers.k8s.base import K8sBaseResource |
| from tcp_tests.managers.k8s.base import K8sBaseManager |
| |
| |
| class K8sPod(K8sBaseResource): |
| """docstring for K8sPod""" |
| |
| def __repr__(self): |
| return "<K8sPod: %s>" % self.name |
| |
| @property |
| def name(self): |
| return self.metadata.name |
| |
| @property |
| def phase(self): |
| return self.status.phase |
| |
| @property |
| def namespace(self): |
| return self.metadata.namespace |
| |
| def wait_phase(self, phase, timeout=60, interval=5): |
| """Wait phase of pod_name from namespace while timeout |
| |
| :param list or str: phase |
| :param int: timeout |
| |
| :rtype: None |
| """ |
| if isinstance(phase, str): |
| phase = [phase] |
| |
| def check(): |
| self._add_details(self._manager.get(name=self.name, |
| namespace=self.namespace)) |
| return self.phase in phase |
| |
| helpers.wait(check, timeout=timeout, interval=interval, |
| timeout_msg='Timeout waiting({timeout}s), pod {pod_name} ' |
| 'is not in "{phase}" phase'.format( |
| timeout=timeout, |
| pod_name=self.name, |
| phase=phase)) |
| |
| def wait_running(self, timeout=60, interval=5): |
| self.wait_phase(['Running'], timeout=timeout, interval=interval) |
| |
| |
| class K8sPodManager(K8sBaseManager): |
| """docstring for ClassName""" |
| |
| resource_class = K8sPod |
| |
| def _get(self, name, namespace=None, **kwargs): |
| namespace = namespace or self.namespace |
| return self.api.read_namespaced_pod( |
| name=name, namespace=namespace, **kwargs) |
| |
| def _list(self, namespace=None, **kwargs): |
| namespace = namespace or self.namespace |
| return self.api.list_namespaced_pod(namespace=namespace, **kwargs) |
| |
| def _create(self, body, namespace=None, **kwargs): |
| namespace = namespace or self.namespace |
| return self.api.create_namespaced_pod( |
| body=body, namespace=namespace, **kwargs) |
| |
| def _replace(self, body, name, namespace=None, **kwargs): |
| namespace = namespace or self.namespace |
| return self.api.replace_namespaced_pod( |
| body=body, name=name, namespace=namespace, **kwargs) |
| |
| def _delete(self, body, name, namespace=None, **kwargs): |
| namespace = namespace or self.namespace |
| # NOTE: the following two lines should be deleted after |
| # serialization is fixed in python-k8sclient |
| if isinstance(body, self.resource_class): |
| body = body.swagger_types |
| return self.api.delete_namespaced_pod( |
| body=body, name=name, namespace=namespace, **kwargs) |
| |
| def _deletecollection(self, namespace=None, **kwargs): |
| namespace = namespace or self.namespace |
| return self.api.deletecollection_namespaced_pod( |
| namespace=namespace, **kwargs) |
| |
| def full_list(self, *args, **kwargs): |
| lst = self._full_list(*args, **kwargs) |
| return [self.resource_class(self, item) for item in lst.items] |
| |
| def _full_list(self, **kwargs): |
| return self.api.list_pod(**kwargs) |