Ejemplo n.º 1
0
class Stack(Resource):
    def __init__(self, *args, **kwargs):
        super().__init__(self, *args, **kwargs)
        self.serviceApi = API(url=self.links.get("services"))

    def getServices(self, **kwargs):
        """ Get all services """
        allServices = self.serviceApi.get(**kwargs)
        services = filter(lambda service: service.get("id") in self.serviceIds,
                          allServices)
        services = list(map(lambda service: Service(**service), services))
        return services

    def getService(self, **kwargs):
        """ Get single service """
        services = self.getServices(**kwargs)
        return services[0] if services else None

    def addService(self, serviceParams, timeout=None, rollback=False):
        """ Add a service """
        serviceTemplate = template.create("service")

        # Update the template with provided parameters
        serviceTemplate = utils.updateRecursive(serviceTemplate, serviceParams)

        # Set the project id and stack id
        serviceTemplate["launchConfig"]["accountId"] = self.accountId
        serviceTemplate["stackId"] = self.id

        serviceInfo = self.serviceApi.add(serviceTemplate)
        if serviceInfo:
            service = Service(**serviceInfo)
            if service and timeout:
                srv = service._waitFor(dict(state="active"), timeout=timeout)
                if not srv and rollback:
                    service.remove(timeout)
                    sys.exit(1)

            return service
Ejemplo n.º 2
0
class Project(Resource):
    def __init__(self, *args, **kwargs):
        super().__init__(self, *args, **kwargs)
        self.stackApi = API(url=self.links.get("stacks"))
        self.serviceApi = API(url=self.links.get("services"))

    def getStacks(self, **kwargs):
        """ Get stacks """
        stacks = self.stackApi.get(**kwargs)
        stacks = list(map(lambda stack: Stack(**stack), stacks))
        return stacks

    def getStack(self, **kwargs):
        """ Get single stack """
        stacks = self.getStacks(**kwargs)
        return stacks[0] if stacks else None

    def getServices(self, **kwargs):
        """ Get all services """
        allServices = self.serviceApi.get(**kwargs)
        services = filter(lambda service: service.get("accountId") == self.id,
                          allServices)
        services = list(map(lambda service: Service(**service), services))
        return services

    def getService(self, **kwargs):
        """ Get single service """
        services = self.getServices(**kwargs)
        return services[0] if services else None

    def addStack(self, **kwargs):
        """ Add stack """
        stackTemplate = template.create("stack")
        stackTemplate.update(kwargs)
        stack = self.stackApi.add(stackTemplate)
        if stack:
            return Stack(**stack)
Ejemplo n.º 3
0
class Cluster(Resource):
    def __init__(self, *args, **kwargs):
        super().__init__(self, *args, **kwargs)
        self.projectApi = API(url="{}/{}".format(self.selfUrl, "projects"))
        self.stackApi = API(url=self.links["stacks"])
        self.serviceApi = API(url=self.links["services"])

    def getProjects(self, **kwargs):
        """ Get projects """
        projects = self.projectApi.get(**kwargs)
        projects = list(map(lambda proj: Project(**proj), projects))
        return projects

    def getProject(self, **kwargs):
        """ Get single project """
        projects = self.getProjects(**kwargs)
        return projects[0] if projects else None
Ejemplo n.º 4
0
 def service(self, **params):
     resourceApi = API("{}/{}/{}".format(self.rancherUrl, self.apiVersion, "services"), auth=self._auth)
     res = resourceApi.getOne(**params)
     return Service(**res) if res else None
Ejemplo n.º 5
0
 def services(self, **params):
     resourceApi = API("{}/{}/{}".format(self.rancherUrl, self.apiVersion, "services"), auth=self._auth)
     res = resourceApi.get(**params)
     return list(map(lambda r: Service(**r), res))
Ejemplo n.º 6
0
 def project(self, **params):
     resourceApi = API("{}/{}/{}".format(self.rancherUrl, self.apiVersion, "projects"), auth=self._auth)
     res = resourceApi.getOne(**params)
     return Project(**res) if res else None
Ejemplo n.º 7
0
 def projects(self, **params):
     resourceApi = API("{}/{}/{}".format(self.rancherUrl, self.apiVersion, "projects"), auth=self._auth)
     res = resourceApi.get(**params)
     return list(map(lambda r: Project(**r), res))
Ejemplo n.º 8
0
 def cluster(self, **params):
     resourceApi = API("{}/{}/{}".format(self.rancherUrl, self.apiVersion, "clusters"), auth=self._auth)
     res = resourceApi.getOne(**params)
     return Cluster(**res) if res else None
Ejemplo n.º 9
0
 def __init__(self, *args, **kwargs):
     self._info = kwargs
     self.selfUrl = self.links.get("self")
     self.baseUrl = self.selfUrl.rstrip("/{}".format(self.id))
     self.api = API(url=self.baseUrl)
Ejemplo n.º 10
0
class Resource:
    def __init__(self, *args, **kwargs):
        self._info = kwargs
        self.selfUrl = self.links.get("self")
        self.baseUrl = self.selfUrl.rstrip("/{}".format(self.id))
        self.api = API(url=self.baseUrl)

    def __getattribute__(self, name):
        try:
            value = object.__getattribute__(self, name)
        except AttributeError:
            value = self._info.get(name)
        return value

    def _waitFor(self, condition, timeout=None):
        """ Wait for timeout until the given condition (key-value pairs) match the object's info """
        if timeout is not None:
            assert isinstance(
                timeout, int), "Timeout should be a valid number of seconds!"
        for t in range(0, timeout, 1):
            time.sleep(1)
            reloaded = self.reload()
            if reloaded:
                log.warning("Current: [{}], Expected: [{}]".format(
                    ",".join(
                        map(
                            lambda key: "{}={}".format(key,
                                                       getattr(reloaded, key)),
                            condition)),
                    ",".join(
                        map(lambda key: "{}={}".format(key, condition[key]),
                            condition))))

                if all(
                        map(
                            lambda key: condition[key] == getattr(
                                reloaded, key), condition)):
                    self.__init__(**reloaded._info)
                    return self
            else:
                log.error("{}={} does not exist.".format(self.type, self.name))
                sys.exit(1)
        else:
            log.error(
                "TIMEOUT ({}): Unable to complete within timeout.".format(
                    timeout))

    def reload(self):
        """ Reload service data """
        if not self.links.get("self"):
            res = self.api.getOne(id=self.id)
            return self.__class__(**res) if res else None
        else:
            resp = self.api.request.get(self.links.get("self"))
            if resp.ok:
                return self.__class__(**resp.json())

    def drop(self):
        """ Drop this resource """
        if not self.links.get("remove"):
            res = self.api.remove(id=self.id)
            return self.__class__(**res) if res else None
        else:
            resp = self.api.request.delete(self.links["remove"])
            if resp.ok:
                return self.__class__(**resp.json())

    def update(self, **kwargs):
        """ Update this resource """
        updateStrategy = kwargs
        if not self.links.get("update"):
            res = self.api.update(id=self.id, updateStrategy=updateStrategy)
            return self.__class__(**res) if res else None
        else:
            resp = self.api.request.put(self.links["update"],
                                        json=updateStrategy)
            if resp.ok:
                return self.__class__(**resp.json())

    def restart(self):
        """ Restart this resource """
        if not self.actions.get("restart"):
            res = self.api.restart(self.id)
            return self.__class__(**res) if res else None
        else:
            resp = self.api.request.post(self.actions["restart"])
            if resp.ok:
                return self.__class__(**resp.json())

    def activate(self):
        """ Activate this resource """
        if not self.actions.get("activate"):
            res = self.api.activate(self.id)
            return self.__class__(**res) if res else None
        else:
            resp = self.api.request.post(self.actions["activate"])
            if resp.ok:
                return self.__class__(**resp.json())

    def deactivate(self):
        """ Deactivate this resource """
        if not self.actions.get("deactivate"):
            res = self.api.deactivate(self.id)
            return self.__class__(**res) if res else None
        else:
            resp = self.api.request.post(self.actions["deactivate"])
            if resp.ok:
                return self.__class__(**resp.json())

    def pause(self):
        """ Pause this resource """
        if not self.actions.get("pause"):
            res = self.api.pause(self.id)
            return self.__class__(**res) if res else None
        else:
            resp = self.api.request.post(self.actions["pause"])
            if resp.ok:
                return self.__class__(**resp.json())

    def rollback(self):
        """ Rollback this resource """
        if not self.actions.get("rollback"):
            res = self.api.rollback(self.id)
            return self.__class__(**res) if res else None
        else:
            resp = self.api.request.post(self.actions["rollback"])
            if resp.ok:
                return self.__class__(**resp.json())

    def upgrade(self, upgradeStrategy):
        """ Upgrade this resource """
        if not self.actions.get("upgrade"):
            res = self.api.upgrade(self.id, upgradeStrategy=upgradeStrategy)
            return self.__class__(**res) if res else None
        else:
            resp = self.api.request.post(self.actions["upgrade"],
                                         json=upgradeStrategy)
            if resp.ok:
                return self.__class__(**resp.json())
Ejemplo n.º 11
0
 def __init__(self, *args, **kwargs):
     super().__init__(self, *args, **kwargs)
     self.serviceApi = API(url=self.links.get("services"))
Ejemplo n.º 12
0
 def __init__(self, *args, **kwargs):
     super().__init__(self, *args, **kwargs)
     self.projectApi = API(url="{}/{}".format(self.selfUrl, "projects"))
     self.stackApi = API(url=self.links["stacks"])
     self.serviceApi = API(url=self.links["services"])