def getservicestatus(connection_object, hadoop_distro, servicelist): """ Procedure to check status of the services """ if hadoop_distro == 'CDH': # get cluster name for cluster_detail in connection_object.get_all_clusters(): cluster_name = cluster_detail.name break cluster_manager = connection_object.get_cluster(cluster_name) # Cloudra management services cloudera_manager = connection_object.get_cloudera_manager() cms_service = cloudera_manager.get_service() for role in cms_service.get_all_roles(): role_name = str(role.type) if role_name not in servicelist.keys(): servicelist[role_name] = {} name = hosts.get_host(role._resource_root, role.hostRef.hostId) hostname = str(name.hostname) if role_name not in servicelist[role_name].keys(): servicelist[role_name][role_name] = {hostname: {}} elif hostname not in servicelist[role_name][role_name].keys(): servicelist[role_name][role_name][hostname] = {} status = "Maintenance" if role.maintenanceMode else str( role.entityStatus) servicelist[role_name][role_name][hostname]["status"] = status servicelist[role_name]['status'] = str(status) # Hadoop Services for service in cluster_manager.get_all_services(): service_name = str(service.type) if service_name not in servicelist.keys(): servicelist[service_name] = {} for role in service.get_all_roles(): role_name = str(role.type) name = hosts.get_host(role._resource_root, role.hostRef.hostId) hostname = str(name.hostname) if role_name not in servicelist[service_name].keys(): servicelist[service_name][role_name] = {hostname: {}} elif hostname not in servicelist[service_name][role_name].keys(): servicelist[service_name][role_name][hostname] = {} status = "Maintenance" if role.maintenanceMode else str( role.entityStatus) servicelist[service_name][role_name][hostname]["status"] = status servicelist[service_name]['status'] = str(service.entityStatus) # Grain update not working properly , so reset value and added new value __salt__['grains.set']("serviceList", {}, True) # pylint: disable=E0602,E0603 __salt__['grains.set']( # pylint: disable=E0602,E0603 "serviceList", servicelist, True) return servicelist
def startservice(connection_object, service_name, role_name, node_name): """ Procedure to start service """ if service_name in CMS_SERVICE_LIST: cloudera_manager = connection_object.get_cloudera_manager() cms_service = cloudera_manager.get_service() for role in cms_service.get_all_roles(): if str(role.type) == service_name: status, message = wait_on_command( cms_service.start_roles(role.name)) break else: for cluster_detail in connection_object.get_all_clusters(): cluster_name = cluster_detail.name break cluster_manager = connection_object.get_cluster(cluster_name) for service in cluster_manager.get_all_services(): if service_name != service.type: continue for role in service.get_all_roles(): if role_name != role.type: continue name = hosts.get_host(role._resource_root, role.hostRef.hostId) hostname = str(name.hostname) if node_name != hostname: continue status, message = wait_on_command( service.start_roles(role.name)) break if not status: LOGGER.error( "{0} service start failed, error message : {1}".format( service_name, message)) return status
def get_host(self, host_id): """ Look up a host by id. @param host_id Host id @return: An ApiHost object """ return hosts.get_host(self, host_id)
def get_host(self, host_id): """ Look up a host by id. @param host_id: Host id @return: An ApiHost object """ return hosts.get_host(self, host_id)
def get_role_host_names(api, roles): """ get the host name for the all for the roles :param api: rest service handle :param roles: the list of service roles :return: list of machine host names """ return [hosts.get_host(api, role.hostRef.hostId).hostname for role in roles]
def get_role_host_names(api, roles): """ get the host name for the all for the roles :param api: rest service handle :param roles: the list of service roles :return: list of machine host names """ return [ hosts.get_host(api, role.hostRef.hostId).hostname for role in roles ]
def get_host(self, hostname): inv = self._get_cache(hostname, None) if inv is not None: return inv if inv is None: try: inv = hosts.get_host(self.cm, hostname) except ObjectNotFoundError: pass if inv is not None: self._put_cache(hostname, inv) return inv or {}
print "not running on a Cloudera manager host" exit(1) api = ApiResource(cloudera_manager_host, server_port=args.port, username=args.username, password=args.password) #the user picked cluster or the only cluster managed by cloudera manager cluster = None # Get a list of all clusters clusters = api.get_all_clusters() for c in clusters: for h in c.list_hosts(): host = hosts.get_host(api, h.hostId) if host.hostname == node or host.ipAddress == node: cluster = c if cluster: services = cluster.get_all_services() else: print "Couldn't find node in any cluster" exit(1) groups = None if args.service: service = find_service(services, args.service) roles = find_service_roles(service.get_all_roles(), args.role) if args.hostnames: hostnames = get_role_host_names(api, roles) print " ".join(hostnames)
def add(self, hostId): ''' add an additional host :param hostId: cmapi host id ''' self.hosts[hostId] = hosts.get_host(self.cmapi_resource_root, hostId)
def _build_host_inventory(hostRef,inv,meta_hostvars): host = hosts.get_host(self.cm, hostRef.hostId) #print host.hostname self._add_host(inv, 'all', host.hostname) if meta_hostvars: inv['_meta']['hostvars'][host.hostname] = host.to_json_dict(preserve_ro=True) self._put_cache(host.hostname, host.to_json_dict(preserve_ro=True)) # Group by cluster if host.clusterRef: cluster = clusters.get_cluster(self.cm, host.clusterRef.clusterName) self._add_child(inv, 'all', cluster.displayName) self._add_host(inv, cluster.displayName, host.hostname) if host.roleRefs: for roleRef in host.roleRefs: role = roles.get_role(self.cm, roleRef.serviceName, roleRef.roleName, roleRef.clusterName) # Group by service service = services.get_service(self.cm, roleRef.serviceName, roleRef.clusterName) # There is no way to ensure that service display name is unique across clusters # The only simple and unique representation of the service that can be used # is the concatination of the service name and the cluster's name service_group = cluster.displayName + '-' + service.displayName self._add_child(inv, 'all', service.type) self._add_child(inv, service.type, service_group) self._add_child(inv, cluster.displayName, service_group) self._add_host(inv, service_group, host.hostname) # Group by role, roles depend on services and clusters, so the only unique and # simple representation of a Group is the concatination of the role type, service # name and the cluster name role_group = cluster.displayName + '-' + service.displayName + '-' + role.type self._add_child(inv, 'all', role.type) #self._add_child(inv, role.type, service_group) #self._add_child(inv, service_group, role_group) self._add_child(inv, role.type, role_group) self._add_host(inv, role_group, host.hostname) # Group by role Group role_group = role.roleConfigGroupRef.roleConfigGroupName self._add_child(inv, role.type, role_group) self._add_host(inv, role_group, host.hostname) # Group by role template for template in host_templates.get_all_host_templates(self.cm, host.clusterRef.clusterName): self._add_child(inv, 'all', template.name) for group in template.roleConfigGroupRefs: if role_group == group.roleConfigGroupName: self._add_child(inv, template.name, role_group) else: self._add_child(inv, 'all', 'no_role') self._add_host(inv, 'no_role', host.hostname) # Group by Rack self._add_child(inv, 'all', host.rackId) self._add_host(inv, host.rackId, host.clusterRef.clusterName) else: cluster_group = "no_cluster" self._add_child(inv, 'all', cluster_group) self._add_host(inv, cluster_group, host.hostname)
except IOError: print "not running on a Cloudera manager host" exit(1) api = ApiResource(cloudera_manager_host, server_port=args.port, username=args.username, password=args.password) #the user picked cluster or the only cluster managed by cloudera manager cluster = None # Get a list of all clusters clusters=api.get_all_clusters() for c in clusters: for h in c.list_hosts(): host = hosts.get_host(api, h.hostId) if host.hostname == node or host.ipAddress == node: cluster = c if cluster: services = cluster.get_all_services() else: print "Couldn't find node in any cluster" exit(1) groups = None if args.service: service = find_service(services, args.service) roles = find_service_roles(service.get_all_roles(), args.role) if args.hostnames: hostnames = get_role_host_names(api, roles) print " ".join(hostnames)