Advertisement
Guest User

CMApiHelper

a guest
Sep 19th, 2016
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.20 KB | None | 0 0
  1. from logger import logger
  2. from time import sleep
  3. from logger import logger
  4.  
  5. from cm_api.api_client import ApiResource, ApiException
  6. from cm_api.endpoints import host_templates
  7. from cm_api.endpoints.clusters import ApiCluster
  8.  
  9. from managed import managed
  10.  
  11.  
  12. class CMApiHelper:
  13.     def __init__(self, cm_host, cm_user, cm_password, cm_cluster_name):
  14.         self.api = ApiResource(cm_host, username=cm_user, password=cm_password)
  15.         self.cm_cluster_name = cm_cluster_name
  16.         self.cm = self.api.get_cloudera_manager()
  17.         self.cluster = ApiCluster(self.api, cm_cluster_name)
  18.  
  19.     def refresh_yarn(self):
  20.         service = self.cluster.get_service("yarn")
  21.         for r in service.get_all_roles():
  22.             if r.type == 'RESOURCEMANAGER':
  23.                 service.refresh(r.name)
  24.  
  25.         # The refresh command returns immediately. Sleep to let the refresh take effect
  26.         sleep(30)
  27.  
  28.     def refresh_nodemanager(self, host):
  29.         host_info = self.api.get_host(host)
  30.  
  31.         if len(host_info.roleRefs) == 0:
  32.             raise Exception("Host does not have any active roles, setup must have failed!")
  33.  
  34.         for role_ref in host_info.roleRefs:
  35.             if role_ref.serviceName == 'yarn':
  36.                 yarn = self.cluster.get_service("yarn")
  37.                 yarn.refresh(role_ref.roleName)
  38.  
  39.     @managed
  40.     def host_install(self, host_user, host, private_key):
  41.         with open(private_key, 'r') as f:
  42.             private_key_contents = f.read()
  43.  
  44.         return self.cm.host_install(host_user, [host], private_key=private_key_contents,
  45.                                     java_install_strategy="NONE").wait()
  46.  
  47.     @managed
  48.     def add_host(self, host):
  49.         try:
  50.             self.cluster.add_hosts([host])
  51.             sleep(10)
  52.         except ApiException as e:
  53.             if "already belongs to DbCluster" not in e.message:
  54.                 raise
  55.  
  56.     @managed
  57.     def start_roles(self, host):
  58.         result = self.cm.hosts_start_roles([host]).wait()
  59.         return result
  60.  
  61.     @managed
  62.     def apply_host_template(self, role_template, host):
  63.         return host_templates.apply_host_template(self.api, role_template, self.cm_cluster_name, [host],
  64.                                                   start_roles=False).wait()
  65.  
  66.     @managed
  67.     def host_recommission(self, host):
  68.         return self.cm.hosts_recommission([host]).wait()
  69.  
  70.     @managed
  71.     def check_host(self, host):
  72.         host_info = self.api.get_host(host)
  73.  
  74.         if len(host_info.roleRefs) == 0:
  75.             raise Exception("Host does not have any active roles, setup must of failed!")
  76.  
  77.         for role_ref in host_info.roleRefs:
  78.             if role_ref.serviceName == 'yarn':
  79.                 yarn = self.cluster.get_service("yarn")
  80.                 role = yarn.get_role(role_ref.roleName)
  81.                 if role.roleState != 'STARTED' or role.healthSummary != 'GOOD':
  82.                     self.refresh_yarn()
  83.                     self.refresh_nodemanager(host)
  84.                     yarn.restart_roles(role_ref.roleName)
  85.                     raise Warning("Yarn failed to start, attempted to start up the role")
  86.                 else:
  87.                     logger.info("Yarn successfully started!")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement