From bc3f6946f7be16a79a9de87843a578352cb8a6b4 Mon Sep 17 00:00:00 2001 From: 2Shirt Date: Wed, 17 Mar 2021 01:23:12 -0600 Subject: [PATCH] Add support for macOS High Sierra Base Images --- scripts/wk/hw/diags.py | 5 ++++- scripts/wk/hw/obj.py | 32 +++++++++++++++++++++++++++----- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/scripts/wk/hw/diags.py b/scripts/wk/hw/diags.py index edb2d3be..8c8abfad 100644 --- a/scripts/wk/hw/diags.py +++ b/scripts/wk/hw/diags.py @@ -1290,7 +1290,10 @@ def ost_build_report(dev, dev_type): # Description report.append(dev.description) if hasattr(dev, 'ram_total'): - report.append(f'{dev.ram_total} ({", ".join(dev.ram_dimms)})') + if len(dev.ram_dimms) == 1 and 'justTotalRAM' in dev.ram_dimms[0]: + report.append(f'{dev.ram_total} (Total - no DIMM info available)') + else: + report.append(f'{dev.ram_total} ({", ".join(dev.ram_dimms)})') if hasattr(dev, 'serial') and dev.serial: report.append(f'Serial Number: {dev.serial}') report.append('') diff --git a/scripts/wk/hw/obj.py b/scripts/wk/hw/obj.py index 4a00fd52..bf6eef37 100644 --- a/scripts/wk/hw/obj.py +++ b/scripts/wk/hw/obj.py @@ -2,6 +2,7 @@ # vim: sts=2 sw=2 ts=2 import logging +import os import pathlib import plistlib import re @@ -151,11 +152,13 @@ class CpuRam(BaseObj): def get_serial_number(self): if PLATFORM == 'Darwin': - cmd = ['system_profiler', 'SPHardwareDataType'] - proc = run_program(cmd, check=False) - match = MAC_SERIAL_REGEX.search(proc.stdout) - if match: - self.serial = match['serial'].strip() + cmd = ( + 'ioreg -c IOPlatformExpertDevice -d 2' + "| awk '/IOPlatformSerialNumber/ {print $3}'" + '| sed s/"//g' + ) + proc = run_program(cmd, check=False, shell=True) + self.serial = proc.stdout.strip() class Disk(BaseObj): @@ -815,6 +818,25 @@ def get_ram_list_linux(): def get_ram_list_macos(): + """Get RAM list under macOS.""" + if os.path.exists('/usr/sbin/system_profiler'): + return get_ram_list_system_profiler() + + # Failback option + return get_ram_list_sysctl() + + +def get_ram_list_sysctl(): + """Get RAM list using sysctl.""" + cmd = ['sysctl', '-n', 'hw.memsize'] + proc = run_program(cmd) + return [[ + int(proc.stdout.strip()), + 'justTotalRAM', + ]] + + +def get_ram_list_system_profiler(): """Get RAM list using system_profiler.""" dimm_list = []