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)
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
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
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))
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))