class MarathonManager(object): def __init__(self, server): self._client = MarathonClient(server) def __repr__(self): return self.server def create(self, app): app._create(self._client) def discover(self, app_filter=None, env_filter=False): apps = set() for app in self._client.list_apps(): if not app_filter or ('_tonomi_application', app_filter) in app.labels.items(): if not env_filter: apps.add(reduce_app_name(app.id)) else: if '_tonomi_environment' in app.labels.keys(): env_name = app.labels['_tonomi_environment'] apps.add('/{}'.format(env_name)) return list(apps) def get_apps(self, app_type, env_name): env_name = env_name.replace('/', '') apps = [] for app in self._client.list_apps(): if ('_tonomi_environment', env_name) in app.labels.items() and ( '_tonomi_application', app_type) in app.labels.items(): apps.append(app) return [self._client.get_app(app.id) for app in apps] def get_app_host(self, app_type, env_name): while True: apps = self.get_apps(app_type=app_type, env_name=env_name) for app in apps: for task in app.tasks: host = task.host return host time.sleep(5) def health_check(self): pass def destroy(self, name): try: self._client.delete_group(name, force=True) except: pass def update(self): pass def restart(self): pass def scale_app(self, app_name, num): self._client.scale_app(app_name, num, force=True) def free_ports(self, num=1): return get_free_ports(self._client, num)