
On 06/16/2014 04:53 PM, Paulo Vital wrote:
Add support to get the correct information of Power's CPU hardware, due to differences between the content of Power's /proc/cpuinfo and x86's /proc/cpuinfo.
Also, add IBM PowerKVM information as supported distro.
Signed-off-by: Paulo Vital <pvital@linux.vnet.ibm.com> --- src/kimchi/model/host.py | 49 ++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 6 deletions(-)
diff --git a/src/kimchi/model/host.py b/src/kimchi/model/host.py index 5844f4b..5716487 100644 --- a/src/kimchi/model/host.py +++ b/src/kimchi/model/host.py @@ -50,17 +50,54 @@ class HostModel(object): self.task = TaskModel(**kargs) self.host_info = self._get_host_info()
- def _get_host_info(self): - res = {} + def _get_ppc_cpu_info(self): + i = 0 with open('/proc/cpuinfo') as f: for line in f.xreadlines(): - if "model name" in line: - res['cpu'] = line.split(':')[1].strip() - break + if 'cpu' in line: + # Parse CPU information + cpu_info = line.split(':')[1].strip() + cpu_info = cpu_info.split('(')[0].strip() + i = i + 1 + if 'revision' in line: + # Parse CPU's revision information + rev_info = line.split(':')[1].strip() + rev_info = rev_info.split('(')[0].strip() + i = i + 1 + if 'clock' in line: + # Parse CPU's clock information + clock_info = line.split(':')[1].strip() + clock_info = clock_info.split('MHz')[0].strip() + clock_info = float(clock_info) / 1000 + i = i + 1 + + # Power machines show, for each cpu/core, a block with all + # cpu information. Here we control the scan of the necessary + # information (1st block provides everything), skipping the + # with/for loop when find all information. + if i == 3: + return "%s (%s) @ %s GHz" % (cpu_info, rev_info, clock_info) + + return "" +
There are some duplicated code What about? res = {} with open('/proc/cpuinfo') as f: for line in f.xreadlines(): for key in ['cpu', 'revision', 'clock']: if key in line: info = line.split(':')[1].strip() if key == 'clock': value = float(info.split('MHz')[0].strip()) / 1000 else: value = info.split('(')[0].strip() res[key] = value if len(res.keys()) == 3: return "%(cpu)s (%(revision)s @ %(clock)s GHz" % res return ""
+ def _get_host_info(self): + res = {} + if platform.machine().startswith('ppc'): + res['cpu'] = self._get_ppc_cpu_info() + else: + with open('/proc/cpuinfo') as f: + for line in f.xreadlines(): + if "model name" in line: + res['cpu'] = line.split(':')[1].strip() + break
res['memory'] = psutil.TOTAL_PHYMEM + + # Include IBM PowerKVM name to supported distro names + _sup_distros = platform._supported_dists + ('ibm_powerkvm',) # 'fedora' '17' 'Beefy Miracle' - distro, version, codename = platform.linux_distribution() + distro, version, codename = platform.linux_distribution( + supported_dists=_sup_distros) res['os_distro'] = distro res['os_version'] = version res['os_codename'] = unicode(codename, "utf-8")