コード例 #1
0
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)