コード例 #1
0
ファイル: hostops.py プロジェクト: jmertic/python-zvm-sdk
    def get_info(self):
        inv_info = self._smutclient.get_host_info()
        host_info = {}

        with zvmutils.expect_invalid_resp_data(inv_info):
            host_info['zcc_userid'] = inv_info['zcc_userid']
            host_info['zvm_host'] = inv_info['zvm_host']
            host_info['vcpus'] = int(inv_info['lpar_cpu_total'])
            host_info['vcpus_used'] = int(inv_info['lpar_cpu_used'])
            host_info['cpu_info'] = {}
            host_info['cpu_info'] = {'architecture': const.ARCHITECTURE,
                                     'cec_model': inv_info['cec_model'], }
            mem_mb = zvmutils.convert_to_mb(inv_info['lpar_memory_total'])
            host_info['memory_mb'] = mem_mb
            mem_mb_used = zvmutils.convert_to_mb(inv_info['lpar_memory_used'])
            host_info['memory_mb_used'] = mem_mb_used
            host_info['hypervisor_type'] = const.HYPERVISOR_TYPE
            verl = inv_info['hypervisor_os'].split()[1].split('.')
            version = int(''.join(verl))
            host_info['hypervisor_version'] = version
            host_info['hypervisor_hostname'] = inv_info['hypervisor_name']
            host_info['ipl_time'] = inv_info['ipl_time']
        diskpool_name = CONF.zvm.disk_pool.split(':')[1]
        dp_info = self.diskpool_get_info(diskpool_name)
        host_info.update(dp_info)

        return host_info
コード例 #2
0
ファイル: hostops.py プロジェクト: jmertic/python-zvm-sdk
    def diskpool_get_info(self, pool):
        dp_info = self._smutclient.get_diskpool_info(pool)
        with zvmutils.expect_invalid_resp_data(dp_info):
            for k in list(dp_info.keys()):
                s = dp_info[k].strip().upper()
                if s.endswith('G'):
                    sl = s[:-1].split('.')
                    n1, n2 = int(sl[0]), int(sl[1])
                    if n2 >= 5:
                        n1 += 1
                    dp_info[k] = n1
                elif s.endswith('M'):
                    n_mb = int(s[:-3])
                    n_gb, n_ad = n_mb // 1024, n_mb % 1024
                    if n_ad >= 512:
                        n_gb += 1
                    dp_info[k] = n_gb
                else:
                    exp = "ending with a 'G' or 'M'"
                    errmsg = ("Invalid diskpool size format: %(invalid)s; "
                        "Expected: %(exp)s") % {'invalid': s, 'exp': exp}
                    LOG.error(errmsg)
                    raise exception.SDKInternalError(msg=errmsg)

        return dp_info
コード例 #3
0
 def get_volume_info(self, volume_name):
     update_needed = False
     with zvmutils.expect_invalid_resp_data():
         if self._volume_infos is not None:
             volume_info = self._volume_infos.get(volume_name)
             if not volume_info:
                 update_needed = True
             else:
                 return volume_info
         else:
             update_needed = True
         if update_needed:
             # results of get_volume_info() is the format like:
             # {'IAS100': { 'volume_type': '3390-54',
             # 'volume_size': '60102'},
             # 'IAS101': { 'volume_type': '3390-09',
             # 'volume_size': '60102'}}
             self._volume_infos = self._smtclient.get_volume_info()
             volume_info = self._volume_infos.get(volume_name)
             if not volume_info:
                 msg = ("Not found the volume info for the"
                        " volume %(volume)s: make sure the volume"
                        " is in the disk_pool configured for sdkserver.") \
                       % {'volume': volume_name}
                 raise exception.ZVMNotFound(msg=msg)
             else:
                 return volume_info
コード例 #4
0
ファイル: monitor.py プロジェクト: wngzhe/feilong
    def _update_nic_data(self):
        nics = {}
        vsw_dict = self._smtclient.virtual_network_vswitch_query_byte_stats()
        with zvmutils.expect_invalid_resp_data():
            for vsw in vsw_dict['vswitches']:
                for nic in vsw['nics']:
                    userid = nic['userid']
                    nic_entry = {
                        'vswitch_name': vsw['vswitch_name'],
                        'nic_vdev': nic['vdev'],
                        'nic_fr_rx': int(nic['nic_fr_rx']),
                        'nic_fr_tx': int(nic['nic_fr_tx']),
                        'nic_fr_rx_dsc': int(nic['nic_fr_rx_dsc']),
                        'nic_fr_tx_dsc': int(nic['nic_fr_tx_dsc']),
                        'nic_fr_rx_err': int(nic['nic_fr_rx_err']),
                        'nic_fr_tx_err': int(nic['nic_fr_tx_err']),
                        'nic_rx': int(nic['nic_rx']),
                        'nic_tx': int(nic['nic_tx'])
                    }
                    if nics.get(userid, None) is None:
                        nics[userid] = [nic_entry]
                    else:
                        nics[userid].append(nic_entry)
        # Update cache if enabled
        if self._cache_enabled():
            self._cache.refresh('vnics', nics)

        return nics
コード例 #5
0
ファイル: monitor.py プロジェクト: wngzhe/feilong
    def inspect_stats(self, uid_list):
        cpumem_data = self._get_inspect_data('cpumem', uid_list)
        # construct and return final result
        stats_data = {}
        for uid in uid_list:
            if uid in cpumem_data:
                with zvmutils.expect_invalid_resp_data():
                    user_data = cpumem_data[uid]
                    guest_cpus = int(user_data['guest_cpus'])
                    used_cpu_time = user_data['used_cpu_time']
                    used_cpu_time = int(used_cpu_time.partition(' ')[0])
                    elapsed_cpu_time = int(
                        user_data['elapsed_cpu_time'].partition(' ')[0])
                    used_mem = int(user_data['used_memory'].partition(' ')[0])
                    max_mem = int(user_data['max_memory'].partition(' ')[0])
                    min_mem = int(user_data['min_memory'].partition(' ')[0])
                    shared_mem = int(
                        user_data['shared_memory'].partition(' ')[0])

                stats_data[uid] = {
                    'guest_cpus': guest_cpus,
                    'used_cpu_time_us': used_cpu_time,
                    'elapsed_cpu_time_us': elapsed_cpu_time,
                    'min_cpu_count': int(user_data['min_cpu_count']),
                    'max_cpu_limit': int(user_data['max_cpu_limit']),
                    'samples_cpu_in_use': int(user_data['samples_cpu_in_use']),
                    'samples_cpu_delay': int(user_data['samples_cpu_delay']),
                    'used_mem_kb': used_mem,
                    'max_mem_kb': max_mem,
                    'min_mem_kb': min_mem,
                    'shared_mem_kb': shared_mem
                }

        return stats_data
コード例 #6
0
    def inspect_cpus(self, uid_list):
        cpumem_data = self._get_inspect_data('cpumem', uid_list)
        # construct and return final result
        cpu_data = {}
        for uid in uid_list:
            uid = uid.upper()
            if uid in cpumem_data:
                with zvmutils.expect_invalid_resp_data():
                    user_data = cpumem_data[uid]
                    guest_cpus = int(user_data['guest_cpus'])
                    used_cpu_time = user_data['used_cpu_time']
                    used_cpu_time = int(used_cpu_time.partition(' ')[0])
                    elapsed_cpu_time = int(
                        user_data['elapsed_cpu_time'].partition(' ')[0])

                cpu_data[uid] = {
                    'guest_cpus': guest_cpus,
                    'used_cpu_time_us': used_cpu_time,
                    'elapsed_cpu_time_us': elapsed_cpu_time,
                    'min_cpu_count': int(user_data['min_cpu_count']),
                    'max_cpu_limit': int(user_data['max_cpu_limit']),
                    'samples_cpu_in_use': int(user_data['samples_cpu_in_use']),
                    'samples_cpu_delay': int(user_data['samples_cpu_delay'])
                    }

        return cpu_data
コード例 #7
0
ファイル: smutclient.py プロジェクト: jichenjc/python-zvm-sdk
 def get_power_state(self, userid):
     """Get power status of a z/VM instance."""
     LOG.debug('Query power stat of %s' % userid)
     requestData = "PowerVM " + userid + " status"
     results = self._request(requestData)
     with zvmutils.expect_invalid_resp_data(results):
         status = results['response'][0].partition(': ')[2]
     return status
コード例 #8
0
ファイル: monitor.py プロジェクト: wngzhe/feilong
    def inspect_vnics(self, uid_list):
        vnics = self._get_inspect_data('vnics', uid_list)
        # construct and return final result
        target_vnics = {}
        for uid in uid_list:
            if uid in vnics:
                with zvmutils.expect_invalid_resp_data():
                    target_vnics[uid] = vnics[uid]

        return target_vnics
コード例 #9
0
    def is_reachable(self, userid):
        """Return True is the instance is reachable."""
        res_dict = self._zvmclient.get_guest_connection_status(userid)
        LOG.debug('Get instance status of %s', userid)

        with zvmutils.expect_invalid_resp_data(res_dict):
            status = res_dict['node'][0][0]['data'][0]

        if status is not None:
            if status.__contains__('sshd'):
                return True

        return False
コード例 #10
0
ファイル: smutclient.py プロジェクト: jichenjc/python-zvm-sdk
    def image_performance_query(self, uid_list):
        """Call Image_Performance_Query to get guest current status.

        :uid_list: A list of zvm userids to be queried
        """
        if not isinstance(uid_list, list):
            uid_list = [uid_list]

        smut_userid = zvmutils.get_smut_userid()
        rd = ' '.join(("SMAPI %s API Image_Performance_Query" % smut_userid,
                       "--operands", '-T "%s"' % (' '.join(uid_list)),
                       "-c %d" % len(uid_list)))
        results = self._request(rd)

        ipq_kws = {
            'userid': "Guest name:",
            'guest_cpus': "Guest CPUs:",
            'used_cpu_time': "Used CPU time:",
            'elapsed_cpu_time': "Elapsed time:",
            'min_cpu_count': "Minimum CPU count:",
            'max_cpu_limit': "Max CPU limit:",
            'samples_cpu_in_use': "Samples CPU in use:",
            'samples_cpu_delay': ",Samples CPU delay:",
            'used_memory': "Used memory:",
            'max_memory': "Max memory:",
            'min_memory': "Minimum memory:",
            'shared_memory': "Shared memory:",
        }

        pi_dict = {}
        pi = {}
        with zvmutils.expect_invalid_resp_data():
            rpi_list = ('\n'.join(results['response'])).split("\n\n")
            for rpi in rpi_list:
                try:
                    pi = zvmutils.translate_response_to_dict(rpi, ipq_kws)
                except exception.ZVMInvalidResponseDataError as err:
                    emsg = err.format_message()
                    # when there is only one userid queried and this userid is
                    # in 'off'state, the smcli will only returns the queried
                    # userid number, no valid performance info returned.
                    if (emsg.__contains__("No value matched with keywords.")):
                        continue
                    else:
                        raise err
                for k, v in pi.items():
                    pi[k] = v.strip('" ')
                if pi.get('userid') is not None:
                    pi_dict[pi['userid']] = pi

        return pi_dict
コード例 #11
0
ファイル: smutclient.py プロジェクト: jichenjc/python-zvm-sdk
    def get_vm_nic_vswitch_info(self, vm_id):
        """
        Get NIC and switch mapping for the specified virtual machine.
        """
        switch_info = self._NetDbOperator.switch_select_record_for_node(vm_id)
        with zvmutils.expect_invalid_resp_data():
            switch_dict = {}
            for item in switch_info:
                switch_dict[item[0]] = item[1]

            LOG.debug("Switch info the %(vm_id)s is %(switch_dict)s", {
                "vm_id": vm_id,
                "switch_dict": switch_dict
            })
            return switch_dict
コード例 #12
0
    def inspect_mem(self, uid_list):
        cpumem_data = self._get_inspect_data('cpumem', uid_list)
        # construct and return final result
        mem_data = {}
        for uid in uid_list:
            uid = uid.upper()
            if uid in cpumem_data:
                with zvmutils.expect_invalid_resp_data():
                    user_data = cpumem_data[uid]
                    used_mem = int(user_data['used_memory'].partition(' ')[0])
                    max_mem = int(user_data['max_memory'].partition(' ')[0])
                    min_mem = int(user_data['min_memory'].partition(' ')[0])
                    shared_mem = int(
                        user_data['shared_memory'].partition(' ')[0])

                    mem_data[uid] = {
                    'used_mem_kb': used_mem,
                    'max_mem_kb': max_mem,
                    'min_mem_kb': min_mem,
                    'shared_mem_kb': shared_mem
                    }

        return mem_data
コード例 #13
0
 def _get_max_memory_from_user_dict(self, dict_info):
     with zvmutils.expect_invalid_resp_data():
         mem = dict_info[0].split(' ')[4]
         return zvmutils.convert_to_mb(mem) * 1024
コード例 #14
0
 def guest_list(self):
     guest_list = self._smtclient.get_all_user_direct()
     with zvmutils.expect_invalid_resp_data(guest_list):
         return guest_list
コード例 #15
0
 def diskpool_get_volumes(self, pool_name):
     diskpool_volume_list = self._smtclient.get_diskpool_volumes(pool_name)
     with zvmutils.expect_invalid_resp_data(diskpool_volume_list):
         return diskpool_volume_list
コード例 #16
0
ファイル: client.py プロジェクト: jichenjc/python-zvm-sdk
    def _parse_vswitch_inspect_data(self, rd_list):
        """ Parse the Virtual_Network_Vswitch_Query_IUO_Stats data to get
        inspect data. This is an internal function shared by both smut and
        xcat client.
        """
        def _parse_value(data_list, idx, keyword, offset):
            return idx + offset, data_list[idx].rpartition(keyword)[2].strip()

        vsw_dict = {}
        with zvmutils.expect_invalid_resp_data():
            # vswitch count
            idx = 0
            idx, vsw_count = _parse_value(rd_list, idx, 'vswitch count:', 2)
            vsw_dict['vswitch_count'] = int(vsw_count)

            # deal with each vswitch data
            vsw_dict['vswitches'] = []
            for i in range(vsw_dict['vswitch_count']):
                vsw_data = {}
                # skip vswitch number
                idx += 1
                # vswitch name
                idx, vsw_name = _parse_value(rd_list, idx, 'vswitch name:', 1)
                vsw_data['vswitch_name'] = vsw_name
                # uplink count
                idx, up_count = _parse_value(rd_list, idx, 'uplink count:', 1)
                # skip uplink data
                idx += int(up_count) * 9
                # skip bridge data
                idx += 8
                # nic count
                vsw_data['nics'] = []
                idx, nic_count = _parse_value(rd_list, idx, 'nic count:', 1)
                nic_count = int(nic_count)
                for j in range(nic_count):
                    nic_data = {}
                    idx, nic_id = _parse_value(rd_list, idx, 'nic_id:', 1)
                    userid, toss, vdev = nic_id.partition(' ')
                    nic_data['userid'] = userid
                    nic_data['vdev'] = vdev
                    idx, nic_data['nic_fr_rx'] = _parse_value(
                        rd_list, idx, 'nic_fr_rx:', 1)
                    idx, nic_data['nic_fr_rx_dsc'] = _parse_value(
                        rd_list, idx, 'nic_fr_rx_dsc:', 1)
                    idx, nic_data['nic_fr_rx_err'] = _parse_value(
                        rd_list, idx, 'nic_fr_rx_err:', 1)
                    idx, nic_data['nic_fr_tx'] = _parse_value(
                        rd_list, idx, 'nic_fr_tx:', 1)
                    idx, nic_data['nic_fr_tx_dsc'] = _parse_value(
                        rd_list, idx, 'nic_fr_tx_dsc:', 1)
                    idx, nic_data['nic_fr_tx_err'] = _parse_value(
                        rd_list, idx, 'nic_fr_tx_err:', 1)
                    idx, nic_data['nic_rx'] = _parse_value(
                        rd_list, idx, 'nic_rx:', 1)
                    idx, nic_data['nic_tx'] = _parse_value(
                        rd_list, idx, 'nic_tx:', 1)
                    vsw_data['nics'].append(nic_data)
                # vlan count
                idx, vlan_count = _parse_value(rd_list, idx, 'vlan count:', 1)
                # skip vlan data
                idx += int(vlan_count) * 3
                # skip the blank line
                idx += 1

                vsw_dict['vswitches'].append(vsw_data)

        return vsw_dict