from abc import abstractmethod
from typing import Generator, Type
from ebonite.core.objects import Image, RuntimeEnvironment, RuntimeInstance
[docs]class RunnerBase:
[docs] @abstractmethod
def instance_type(self) -> Type[RuntimeInstance.Params]:
"""
:return: subtype of :class:`.RuntimeInstance.Params` supported by this runner
"""
[docs] @abstractmethod
def create_instance(self, name: str, **kwargs) -> RuntimeInstance.Params:
"""
Creates new runtime instance on given name and args
:param name: name of instance to use
:return: created :class:`.RuntimeInstance.Params` subclass instance
"""
[docs] @abstractmethod
def run(self, instance: RuntimeInstance.Params, image: Image.Params, env: RuntimeEnvironment.Params, **kwargs):
"""
Runs given image on given environment with params given by instance
:param instance: instance params to use for running
:param image: image to base instance on
:param env: environment to run on
"""
[docs] @abstractmethod
def is_running(self, instance: RuntimeInstance.Params, env: RuntimeEnvironment.Params, **kwargs) -> bool:
"""
Checks that given instance is running on given environment
:param instance: instance to check running of
:param env: environment to check running on
:return: "is running" flag
"""
[docs] @abstractmethod
def stop(self, instance: RuntimeInstance.Params, env: RuntimeEnvironment.Params, **kwargs):
"""
Stops running of given instance on given environment
:param instance: instance to stop running of
:param env: environment to stop running on
"""
[docs] @abstractmethod
def logs(self, instance: RuntimeInstance.Params, env: RuntimeEnvironment.Params, **kwargs) \
-> Generator[str, None, None]:
# TODO :param stream: stream or just print latest
"""
Exposes logs produced by given instance while running on given environment
:param instance: instance to expose logs for
:param env: environment to expose logs from
:return: generator of log strings or string with logs
"""
[docs] @abstractmethod
def instance_exists(self, instance: RuntimeInstance.Params, env: RuntimeEnvironment.Params, **kwargs) -> bool:
"""Checks if instance exists in environment
:param instance: instance params to check
:param env: environment to check in
:return: boolean flag
"""
[docs] @abstractmethod
def remove_instance(self, instance: RuntimeInstance.Params, env: RuntimeEnvironment.Params, **kwargs):
"""
Removes instance
:param instance: instance params to remove
:param env: environment to remove from
"""