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
예제 #3
0
파일: api_client.py 프로젝트: Jimvin/cm_api
  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)
예제 #4
0
    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)
예제 #5
0
파일: config.py 프로젝트: rainiraj/atk
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]
예제 #6
0
파일: config.py 프로젝트: xoltar/atk
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
    ]
예제 #7
0
    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 {}
예제 #8
0
파일: config.py 프로젝트: xoltar/atk
        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)
예제 #9
0
 def add(self, hostId):
     '''
     add an additional host
     :param hostId: cmapi host id
     '''
     self.hosts[hostId] = hosts.get_host(self.cmapi_resource_root, hostId)
예제 #10
0
        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)
예제 #11
0
파일: config.py 프로젝트: rainiraj/atk
    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)