コード例 #1
0
 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
コード例 #2
0
 def remove(self, *args):
     print "removing %s" % args
     return Set.remove(self, *args)