def restartService(self, service, components=None, wait=True): if components == None: components = self.listServiceComponents(service) tasks = MySet() for component in components: debug("Restarting component {}".format(component)) body = { "RequestInfo": { "command": "RESTART", "context": "Ansible: Restart {}/{}".format(service, component), "operation_level": "host_component" }, "Requests/resource_filters": [{ "service_name": service, "component_name": component, "hosts_predicate": "HostRoles/component_name=" + component }] } code, responseText = self.post( CLUSTER_REQUESTS_URL.format(self.cluster), body) if code == 202: tasks.add(json.loads(responseText)[REQUESTS][ID]) else: error( "Invalid return code {} ({}) on service operation. Check ambari-server.log on the ambari node" .format(code, responseText)) allTasks = list(tasks) # Preserve for return if wait: while len(tasks) > 0: time.sleep(2) debug("Task to wait: {}".format(tasks)) tasks2 = list(tasks) # Better to copy, as we may remove items. for task in tasks2: result = self.get( CLUSTER_REQUEST_URL.format(self.cluster, task)) status = result[REQUESTS][REQUEST_STATUS] debug("task:{} status:{}".format(task, status)) if status == "COMPLETED": tasks.remove(task) return allTasks
def remove(self, *args): print "removing %s" % args return Set.remove(self, *args)