Exemplo n.º 1
0
class Check(object):
    """ check system envs """

    def __init__(self, dbcfgs_json):
        self.dbcfgs = json.loads(dbcfgs_json)
        self.version = Version()

    def check_sudo(self):
        """ check sudo access """
        run_cmd('sudo -n echo -n "check sudo access" > /dev/null 2>&1')

    def check_hbase_xml(self):
        """ check if hbase-site.xml file exists """
        hbase_xml_file = self.dbcfgs['hbase_xml_file']
        if not os.path.exists(hbase_xml_file):
            err('HBase xml file is not found')

    def check_java(self):
        """ check JDK version """
        jdk_path = self.dbcfgs['java_home']
        jdk_ver = cmd_output('%s/bin/javac -version' % jdk_path)
        try:
            jdk_ver, sub_ver = re.search(r'javac (\d\.\d).\d_(\d+)', jdk_ver).groups()
        except AttributeError:
            err('No JDK found')

        if self.dbcfgs['req_java8'] == 'Y': # only allow JDK1.8
            support_java = '1.8'
        else:
            support_java = self.version.get_version('java')

        if jdk_ver == '1.7' and int(sub_ver) < 65:
            err('Unsupported JDK1.7 version, sub version should be higher than 65')
        if jdk_ver not in support_java:
            err('Unsupported JDK version %s, supported version: %s' % (jdk_ver, support_java))
Exemplo n.º 2
0
class Check(object):
    """ check system envs """

    def __init__(self, dbcfgs_json):
        self.dbcfgs = json.loads(dbcfgs_json)
        self.version = Version()

    def check_sudo(self):
        """ check sudo access """
        run_cmd('%s echo -n "check sudo access" > /dev/null 2>&1' % get_sudo_prefix())

    def check_ssh_pam(self):
        """ check if UsePAM is set to yes in sshd_config """
        if not cmd_output('grep "^UsePAM yes" %s' % SSH_CONFIG_FILE):
            err('\'UsePAM\' should be set to \'yes\' in %s' % SSH_CONFIG_FILE)

    def check_ssh_pam(self):
        """ check if UsePAM is set to yes in sshd_config """
        if not cmd_output('grep "^UsePAM yes" %s' % SSH_CONFIG_FILE):
            err('\'UsePAM\' should be set to \'yes\' in %s' % SSH_CONFIG_FILE)

    def check_hbase_xml(self):
        """ check if hbase-site.xml file exists """
        hbase_xml_file = self.dbcfgs['hbase_xml_file']
        if not os.path.exists(hbase_xml_file):
            err('HBase xml file is not found')

    def check_java(self):
        """ check JDK version """
        jdk_path = self.dbcfgs['java_home']
        jdk_ver = cmd_output('%s/bin/javac -version' % jdk_path)
        try:
            jdk_ver, sub_ver = re.search(r'javac (\d\.\d).\d_(\d+)', jdk_ver).groups()
        except AttributeError:
            err('No JDK found')

        if self.dbcfgs['req_java8'] == 'Y': # only allow JDK1.8
            support_java = '1.8'
        else:
            support_java = self.version.get_version('java')

        if jdk_ver == '1.7' and int(sub_ver) < 65:
            err('Unsupported JDK1.7 version, sub version should be higher than 65')
        if jdk_ver not in support_java:
            err('Unsupported JDK version %s, supported version: %s' % (jdk_ver, support_java))
Exemplo n.º 3
0
class Discover(object):
    """ discover functions, to add a new discover function,
        simply add a new def with name get_xx and decorated
        by 'deco', then return result in string format:

        @deco
        def get_xx(self):
            # do something
            return result
    """

    def __init__(self, dbcfgs):
        self.CPUINFO = cmd_output('cat /proc/cpuinfo')
        self.MEMINFO = cmd_output('cat /proc/meminfo')
        self.SYSCTLINFO = cmd_output('sysctl -a')
        self.version = Version()
        self.dbcfgs = dbcfgs

    def _parse_string(self, info, string):
        try:
            info = info.split('\n')
            string_line = [line for line in info if string in line][0]
        except IndexError:
            err('Cannot get %s info' % string)

        return string_line

    def _get_cpu_info(self, string):
        return self._parse_string(self.CPUINFO, string).split(':')[1].strip()

    def _get_mem_info(self, string):
        return self._parse_string(self.MEMINFO, string).split(':')[1].split()[0]

    def _get_sysctl_info(self, string):
        return self._parse_string(self.SYSCTLINFO, string).split('=')[1].strip()

    @deco
    def get_linux(self):
        """ get linux version """
        os_dist, os_ver = platform.dist()[:2]
        if os_dist not in self.version.get_version('linux'):
            return NA
        else:
            if not os_ver.split('.')[0] in self.version.get_version(os_dist):
                return NA
        return '%s-%s' % (os_dist, os_ver)

    @deco
    def get_firewall_status(self):
        """ get firewall running status """
        iptables_stat = cmd_output('iptables -nL|grep -vE "(Chain|target)"').strip()
        if iptables_stat:
            return 'Running'
        else:
            return 'Stopped'

    @deco
    def get_pidmax(self):
        """ get kernel pid max setting """
        return self._get_sysctl_info('kernel.pid_max')

    @deco
    def get_default_java(self):
        """ get default java version """
        jdk_path = glob('/usr/java/*') + \
                   glob('/usr/jdk64/*') + \
                   glob('/usr/lib/jvm/java-*-openjdk.x86_64')

        jdk_list = {} # {jdk_version: jdk_path}
        for path in jdk_path:
            jdk_ver = cmd_output('%s/bin/javac -version' % path)

            try:
                main_ver, sub_ver = re.search(r'(\d\.\d\.\d)_(\d+)', jdk_ver).groups()
                # don't support JDK version less than 1.7.0_65
                if main_ver == '1.7.0' and int(sub_ver) < 65:
                    continue
                jdk_list[main_ver] = path
            except AttributeError:
                continue

        if not jdk_list:
            return NA
        else:
            # use JDK1.8 first
            if jdk_list.has_key('1.8.0'):
                return jdk_list['1.8.0']
            elif jdk_list.has_key('1.7.0'):
                return jdk_list['1.7.0']

    @deco
    def get_hive(self):
        """ get Hive status """
        hive_stat = cmd_output('which hive')
        if 'no hive' in hive_stat:
            return NA
        else:
            return OK

    @deco
    def get_secure_hadoop(self):
        if self.dbcfgs.has_key('hadoop_home'): # apache distro
            CORE_SITE_XML = '%s/etc/hadoop/core-site.xml' % self.dbcfgs['hadoop_home']
        else:
            CORE_SITE_XML = '/etc/hadoop/conf/core-site.xml'
        p = ParseXML(CORE_SITE_XML)
        return p.get_property('hadoop.security.authentication')

    @deco
    def get_hbase(self):
        """ get HBase version """
        if self.dbcfgs.has_key('hbase_home'): # apache distro
            hbase_home = self.dbcfgs['hbase_home']
            hbase_ver = cmd_output('%s/bin/hbase version | head -n1' % hbase_home)
        else:
            hbase_ver = cmd_output('hbase version | head -n1')

        support_hbase_ver = self.version.get_version('hbase')
        try:
            hbase_ver = re.search(r'HBase (\d\.\d)', hbase_ver).groups()[0]
        except AttributeError:
            return NA
        if hbase_ver not in support_hbase_ver:
            return NS
        return hbase_ver

    @deco
    def get_cpu_model(self):
        """ get CPU model """
        return self._get_cpu_info('model name')

    @deco
    def get_cpu_cores(self):
        """ get CPU cores """
        return self.CPUINFO.count('processor')

    @deco
    def get_arch(self):
        """ get CPU architecture """
        arch = platform.processor()
        if not arch:
            arch = 'Unknown'
        return arch

    @deco
    def get_mem_total(self):
        """ get total memory size """
        mem = self._get_mem_info('MemTotal')
        memsize = mem.split()[0]

        return "%0.1f GB" % round(float(memsize) / (1024 * 1024), 2)

    @deco
    def get_mem_free(self):
        """ get current free memory size """
        free = self._get_mem_info('MemFree')
        buffers = self._get_mem_info('Buffers')
        cached = self._get_mem_info('Cached')
        memfree = float(free) + float(buffers) + float(cached)

        return "%0.1f GB" % round(memfree / (1024 * 1024), 2)

    @deco
    def get_ext_interface(self):
        """ get external network interface """
        return cmd_output('netstat -rn | grep "^0.0.0.0" | awk \'{print $8}\'').strip()

    @deco
    def get_rootdisk_free(self):
        """ get root disk space left """
        space = cmd_output('df -h|grep "\/$" | awk \'{print $4}\'')
        return space.strip()

    @deco
    def get_python_ver(self):
        """ get python version """
        return platform.python_version()

    @deco
    def get_traf_status(self):
        """ get trafodion running status """
        mon_process = cmd_output('ps -ef|grep -v grep|grep -c "monitor COLD"')
        if int(mon_process) > 0:
            return 'Running'
        else:
            return 'Stopped'
Exemplo n.º 4
0
class Discover(object):
    """ discover functions, to add a new discover function,
        simply add a new def with name get_xx and decorated
        by 'deco', then return result in string format:

        @deco
        def get_xx(self):
            # do something
            return result
    """
    def __init__(self, dbcfgs):
        self.CPUINFO = cmd_output('cat /proc/cpuinfo')
        self.MEMINFO = cmd_output('cat /proc/meminfo')
        self.SYSCTLINFO = cmd_output('sysctl -a')
        self.version = Version()
        self.dbcfgs = dbcfgs

    def _parse_string(self, info, string):
        try:
            info = info.split('\n')
            string_line = [line for line in info if string in line][0]
        except IndexError:
            err('Cannot get %s info' % string)

        return string_line

    def _get_cpu_info(self, string):
        return self._parse_string(self.CPUINFO, string).split(':')[1].strip()

    def _get_mem_info(self, string):
        return self._parse_string(self.MEMINFO,
                                  string).split(':')[1].split()[0]

    def _get_sysctl_info(self, string):
        return self._parse_string(self.SYSCTLINFO,
                                  string).split('=')[1].strip()

    @deco
    def get_linux(self):
        """ get linux version """
        os_dist, os_ver = platform.dist()[:2]
        if os_dist not in self.version.get_version('linux'):
            return NA
        else:
            if not os_ver.split('.')[0] in self.version.get_version(os_dist):
                return NA
        return '%s-%s' % (os_dist, os_ver)

    @deco
    def get_firewall_status(self):
        """ get firewall running status """
        iptables_stat = cmd_output(
            'iptables -nL|grep -vE "(Chain|target)"').strip()
        if iptables_stat:
            return 'Running'
        else:
            return 'Stopped'

    @deco
    def get_pidmax(self):
        """ get kernel pid max setting """
        return self._get_sysctl_info('kernel.pid_max')

    @deco
    def get_default_java(self):
        """ get default java version """
        jdk_path = glob('/usr/java/*') + \
                   glob('/usr/jdk64/*') + \
                   glob('/usr/lib/jvm/java-*-openjdk.x86_64')

        jdk_list = {}  # {jdk_version: jdk_path}
        for path in jdk_path:
            jdk_ver = cmd_output('%s/bin/javac -version' % path)

            try:
                main_ver, sub_ver = re.search(r'(\d\.\d\.\d)_(\d+)',
                                              jdk_ver).groups()
                # don't support JDK version less than 1.7.0_65
                if main_ver == '1.7.0' and int(sub_ver) < 65:
                    continue
                jdk_list[main_ver] = path
            except AttributeError:
                continue

        if not jdk_list:
            return NA
        else:
            # use JDK1.8 first
            if jdk_list.has_key('1.8.0'):
                return jdk_list['1.8.0']
            elif jdk_list.has_key('1.7.0'):
                return jdk_list['1.7.0']

    @deco
    def get_hive(self):
        """ get Hive status """
        hive_stat = cmd_output('which hive')
        if 'no hive' in hive_stat:
            return NA
        else:
            return OK

    @deco
    def get_secure_hadoop(self):
        if self.dbcfgs.has_key('hadoop_home'):  # apache distro
            CORE_SITE_XML = '%s/etc/hadoop/core-site.xml' % self.dbcfgs[
                'hadoop_home']
        else:
            CORE_SITE_XML = '/etc/hadoop/conf/core-site.xml'
        p = ParseXML(CORE_SITE_XML)
        return p.get_property('hadoop.security.authentication')

    @deco
    def get_hbase(self):
        """ get HBase version """
        if self.dbcfgs.has_key('hbase_home'):  # apache distro
            hbase_home = self.dbcfgs['hbase_home']
            hbase_ver = cmd_output('%s/bin/hbase version | head -n1' %
                                   hbase_home)
        else:
            hbase_ver = cmd_output('hbase version | head -n1')

        support_hbase_ver = self.version.get_version('hbase')
        try:
            hbase_ver = re.search(r'HBase (\d\.\d)', hbase_ver).groups()[0]
        except AttributeError:
            return NA
        if hbase_ver not in support_hbase_ver:
            return NS
        return hbase_ver

    @deco
    def get_cpu_model(self):
        """ get CPU model """
        return self._get_cpu_info('model name')

    @deco
    def get_cpu_cores(self):
        """ get CPU cores """
        return self.CPUINFO.count('processor')

    @deco
    def get_arch(self):
        """ get CPU architecture """
        arch = platform.processor()
        if not arch:
            arch = 'Unknown'
        return arch

    @deco
    def get_mem_total(self):
        """ get total memory size """
        mem = self._get_mem_info('MemTotal')
        memsize = mem.split()[0]

        return "%0.1f GB" % round(float(memsize) / (1024 * 1024), 2)

    @deco
    def get_mem_free(self):
        """ get current free memory size """
        free = self._get_mem_info('MemFree')
        buffers = self._get_mem_info('Buffers')
        cached = self._get_mem_info('Cached')
        memfree = float(free) + float(buffers) + float(cached)

        return "%0.1f GB" % round(memfree / (1024 * 1024), 2)

    @deco
    def get_ext_interface(self):
        """ get external network interface """
        return cmd_output(
            'netstat -rn | grep "^0.0.0.0" | awk \'{print $8}\'').strip()

    @deco
    def get_rootdisk_free(self):
        """ get root disk space left """
        space = cmd_output('df -h|grep "\/$" | awk \'{print $4}\'')
        return space.strip()

    @deco
    def get_python_ver(self):
        """ get python version """
        return platform.python_version()

    @deco
    def get_traf_status(self):
        """ get trafodion running status """
        mon_process = cmd_output('ps -ef|grep -v grep|grep -c "monitor COLD"')
        if int(mon_process) > 0:
            return 'Running'
        else:
            return 'Stopped'