|  | @@ -28,10 +28,9 @@ class RunnerError(Exception):
 | 
	
		
			
				|  |  |      """Error running app"""
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -TEMPLATE_DIR = '../../kubernetes-manifests'
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  class KubernetesBaseRunner:
 | 
	
		
			
				|  |  | +    TEMPLATE_DIR_NAME = 'kubernetes-manifests'
 | 
	
		
			
				|  |  | +    TEMPLATE_DIR_RELATIVE_PATH = f'../../{TEMPLATE_DIR_NAME}'
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def __init__(self,
 | 
	
		
			
				|  |  |                   k8s_namespace,
 | 
	
	
		
			
				|  | @@ -75,17 +74,19 @@ class KubernetesBaseRunner:
 | 
	
		
			
				|  |  |              for manifest in yml:
 | 
	
		
			
				|  |  |                  yield manifest
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    @staticmethod
 | 
	
		
			
				|  |  | -    def _template_file_from_name(template_name):
 | 
	
		
			
				|  |  | -        templates_path = pathlib.Path(__file__).parent / TEMPLATE_DIR
 | 
	
		
			
				|  |  | -        return templates_path.joinpath(template_name).absolute()
 | 
	
		
			
				|  |  | +    @classmethod
 | 
	
		
			
				|  |  | +    def _template_file_from_name(cls, template_name):
 | 
	
		
			
				|  |  | +        templates_path = (pathlib.Path(__file__).parent /
 | 
	
		
			
				|  |  | +                          cls.TEMPLATE_DIR_RELATIVE_PATH)
 | 
	
		
			
				|  |  | +        return templates_path.joinpath(template_name).resolve()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def _create_from_template(self, template_name, **kwargs):
 | 
	
		
			
				|  |  |          template_file = self._template_file_from_name(template_name)
 | 
	
		
			
				|  |  | -        logger.info("Loading template: %s", template_file)
 | 
	
		
			
				|  |  | +        logger.debug("Loading k8s manifest template: %s", template_file)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          yaml_doc = self._render_template(template_file, **kwargs)
 | 
	
		
			
				|  |  | -        logger.info("Rendered template:\n%s\n", yaml_doc)
 | 
	
		
			
				|  |  | +        logger.info("Rendered template %s/%s:\n%s", self.TEMPLATE_DIR_NAME,
 | 
	
		
			
				|  |  | +                    template_name, yaml_doc)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          manifests = self._manifests_from_str(yaml_doc)
 | 
	
		
			
				|  |  |          manifest = next(manifests)
 | 
	
	
		
			
				|  | @@ -121,10 +122,11 @@ class KubernetesBaseRunner:
 | 
	
		
			
				|  |  |              raise RunnerError('Expected V1Namespace to be created '
 | 
	
		
			
				|  |  |                                f'from manifest {template}')
 | 
	
		
			
				|  |  |          if namespace.metadata.name != kwargs['namespace_name']:
 | 
	
		
			
				|  |  | -            raise RunnerError('Namespace created with unexpected name: '
 | 
	
		
			
				|  |  | +            raise RunnerError('V1Namespace created with unexpected name: '
 | 
	
		
			
				|  |  |                                f'{namespace.metadata.name}')
 | 
	
		
			
				|  |  | -        logger.info('Deployment %s created at %s', namespace.metadata.self_link,
 | 
	
		
			
				|  |  | -                    namespace.metadata.creation_timestamp)
 | 
	
		
			
				|  |  | +        logger.debug('V1Namespace %s created at %s',
 | 
	
		
			
				|  |  | +                     namespace.metadata.self_link,
 | 
	
		
			
				|  |  | +                     namespace.metadata.creation_timestamp)
 | 
	
		
			
				|  |  |          return namespace
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def _create_service_account(self, template,
 | 
	
	
		
			
				|  | @@ -136,9 +138,9 @@ class KubernetesBaseRunner:
 | 
	
		
			
				|  |  |          if resource.metadata.name != kwargs['service_account_name']:
 | 
	
		
			
				|  |  |              raise RunnerError('V1ServiceAccount created with unexpected name: '
 | 
	
		
			
				|  |  |                                f'{resource.metadata.name}')
 | 
	
		
			
				|  |  | -        logger.info('V1ServiceAccount %s created at %s',
 | 
	
		
			
				|  |  | -                    resource.metadata.self_link,
 | 
	
		
			
				|  |  | -                    resource.metadata.creation_timestamp)
 | 
	
		
			
				|  |  | +        logger.debug('V1ServiceAccount %s created at %s',
 | 
	
		
			
				|  |  | +                     resource.metadata.self_link,
 | 
	
		
			
				|  |  | +                     resource.metadata.creation_timestamp)
 | 
	
		
			
				|  |  |          return resource
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def _create_deployment(self, template, **kwargs) -> k8s.V1Deployment:
 | 
	
	
		
			
				|  | @@ -147,11 +149,11 @@ class KubernetesBaseRunner:
 | 
	
		
			
				|  |  |              raise RunnerError('Expected V1Deployment to be created '
 | 
	
		
			
				|  |  |                                f'from manifest {template}')
 | 
	
		
			
				|  |  |          if deployment.metadata.name != kwargs['deployment_name']:
 | 
	
		
			
				|  |  | -            raise RunnerError('Deployment created with unexpected name: '
 | 
	
		
			
				|  |  | +            raise RunnerError('V1Deployment created with unexpected name: '
 | 
	
		
			
				|  |  |                                f'{deployment.metadata.name}')
 | 
	
		
			
				|  |  | -        logger.info('Deployment %s created at %s',
 | 
	
		
			
				|  |  | -                    deployment.metadata.self_link,
 | 
	
		
			
				|  |  | -                    deployment.metadata.creation_timestamp)
 | 
	
		
			
				|  |  | +        logger.debug('V1Deployment %s created at %s',
 | 
	
		
			
				|  |  | +                     deployment.metadata.self_link,
 | 
	
		
			
				|  |  | +                     deployment.metadata.creation_timestamp)
 | 
	
		
			
				|  |  |          return deployment
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def _create_service(self, template, **kwargs) -> k8s.V1Service:
 | 
	
	
		
			
				|  | @@ -160,13 +162,14 @@ class KubernetesBaseRunner:
 | 
	
		
			
				|  |  |              raise RunnerError('Expected V1Service to be created '
 | 
	
		
			
				|  |  |                                f'from manifest {template}')
 | 
	
		
			
				|  |  |          if service.metadata.name != kwargs['service_name']:
 | 
	
		
			
				|  |  | -            raise RunnerError('Service created with unexpected name: '
 | 
	
		
			
				|  |  | +            raise RunnerError('V1Service created with unexpected name: '
 | 
	
		
			
				|  |  |                                f'{service.metadata.name}')
 | 
	
		
			
				|  |  | -        logger.info('Service %s created at %s', service.metadata.self_link,
 | 
	
		
			
				|  |  | -                    service.metadata.creation_timestamp)
 | 
	
		
			
				|  |  | +        logger.debug('V1Service %s created at %s', service.metadata.self_link,
 | 
	
		
			
				|  |  | +                     service.metadata.creation_timestamp)
 | 
	
		
			
				|  |  |          return service
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def _delete_deployment(self, name, wait_for_deletion=True):
 | 
	
		
			
				|  |  | +        logger.info('Deleting deployment %s', name)
 | 
	
		
			
				|  |  |          try:
 | 
	
		
			
				|  |  |              self.k8s_namespace.delete_deployment(name)
 | 
	
		
			
				|  |  |          except k8s.ApiException as e:
 | 
	
	
		
			
				|  | @@ -176,9 +179,10 @@ class KubernetesBaseRunner:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if wait_for_deletion:
 | 
	
		
			
				|  |  |              self.k8s_namespace.wait_for_deployment_deleted(name)
 | 
	
		
			
				|  |  | -        logger.info('Deployment %s deleted', name)
 | 
	
		
			
				|  |  | +        logger.debug('Deployment %s deleted', name)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def _delete_service(self, name, wait_for_deletion=True):
 | 
	
		
			
				|  |  | +        logger.info('Deleting service %s', name)
 | 
	
		
			
				|  |  |          try:
 | 
	
		
			
				|  |  |              self.k8s_namespace.delete_service(name)
 | 
	
		
			
				|  |  |          except k8s.ApiException as e:
 | 
	
	
		
			
				|  | @@ -188,9 +192,10 @@ class KubernetesBaseRunner:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if wait_for_deletion:
 | 
	
		
			
				|  |  |              self.k8s_namespace.wait_for_service_deleted(name)
 | 
	
		
			
				|  |  | -        logger.info('Service %s deleted', name)
 | 
	
		
			
				|  |  | +        logger.debug('Service %s deleted', name)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def _delete_service_account(self, name, wait_for_deletion=True):
 | 
	
		
			
				|  |  | +        logger.info('Deleting service account %s', name)
 | 
	
		
			
				|  |  |          try:
 | 
	
		
			
				|  |  |              self.k8s_namespace.delete_service_account(name)
 | 
	
		
			
				|  |  |          except k8s.ApiException as e:
 | 
	
	
		
			
				|  | @@ -200,9 +205,10 @@ class KubernetesBaseRunner:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if wait_for_deletion:
 | 
	
		
			
				|  |  |              self.k8s_namespace.wait_for_service_account_deleted(name)
 | 
	
		
			
				|  |  | -        logger.info('Service account %s deleted', name)
 | 
	
		
			
				|  |  | +        logger.debug('Service account %s deleted', name)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def _delete_namespace(self, wait_for_deletion=True):
 | 
	
		
			
				|  |  | +        logger.info('Deleting namespace %s', self.k8s_namespace.name)
 | 
	
		
			
				|  |  |          try:
 | 
	
		
			
				|  |  |              self.k8s_namespace.delete()
 | 
	
		
			
				|  |  |          except k8s.ApiException as e:
 | 
	
	
		
			
				|  | @@ -212,10 +218,10 @@ class KubernetesBaseRunner:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if wait_for_deletion:
 | 
	
		
			
				|  |  |              self.k8s_namespace.wait_for_namespace_deleted()
 | 
	
		
			
				|  |  | -        logger.info('Namespace %s deleted', self.k8s_namespace.name)
 | 
	
		
			
				|  |  | +        logger.debug('Namespace %s deleted', self.k8s_namespace.name)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def _wait_deployment_with_available_replicas(self, name, count=1, **kwargs):
 | 
	
		
			
				|  |  | -        logger.info('Waiting for deployment %s to have %s available replicas',
 | 
	
		
			
				|  |  | +        logger.info('Waiting for deployment %s to have %s available replica(s)',
 | 
	
		
			
				|  |  |                      name, count)
 | 
	
		
			
				|  |  |          self.k8s_namespace.wait_for_deployment_available_replicas(
 | 
	
		
			
				|  |  |              name, count, **kwargs)
 |