← Back to team overview

sts-sponsors team mailing list archive

[Merge] ~troyanov/maas:check-dmidecode into maas:master

 

Anton Troyanov has proposed merging ~troyanov/maas:check-dmidecode into maas:master.

Commit message:
fix: raise ConfigurationError if dmidecode missing

Return meaningful ConfigurationError instead of a Traceback

Requested reviews:
  MAAS Maintainers (maas-maintainers)

For more details, see:
https://code.launchpad.net/~troyanov/maas/+git/maas/+merge/444076
-- 
Your team MAAS Committers is subscribed to branch maas:master.
diff --git a/src/metadataserver/builtin_scripts/commissioning_scripts/bmc_config.py b/src/metadataserver/builtin_scripts/commissioning_scripts/bmc_config.py
index 02e900d..94cf0d8 100755
--- a/src/metadataserver/builtin_scripts/commissioning_scripts/bmc_config.py
+++ b/src/metadataserver/builtin_scripts/commissioning_scripts/bmc_config.py
@@ -67,6 +67,7 @@ import random
 import re
 import ssl
 import string
+from shutil import which
 from subprocess import (
     CalledProcessError,
     check_call,
@@ -951,6 +952,10 @@ class Redfish(IPMIBase):
         # 		Redfish Service Port: 443
         # 		Redfish Service Vlan: 0
         # 		Redfish Service Hostname: garamond
+
+        if which("dmidecode") is None:
+            raise ConfigurationError("Missing 'dmidecode' binary")
+
         smbios_data = check_output(
             ["dmidecode", "-t", "42"], timeout=COMMAND_TIMEOUT
         ).decode()
diff --git a/src/metadataserver/builtin_scripts/commissioning_scripts/tests/test_bmc_config.py b/src/metadataserver/builtin_scripts/commissioning_scripts/tests/test_bmc_config.py
index 9c38813..e5dda83 100644
--- a/src/metadataserver/builtin_scripts/commissioning_scripts/tests/test_bmc_config.py
+++ b/src/metadataserver/builtin_scripts/commissioning_scripts/tests/test_bmc_config.py
@@ -12,6 +12,7 @@ import tempfile
 import textwrap
 from unittest.mock import call, MagicMock
 import urllib
+import shutil
 import urllib.request
 
 import yaml
@@ -1170,6 +1171,7 @@ class TestRedfish(MAASTestCase):
             Host Interface Type: OEM"""
         ).encode()
 
+        self.patch(bmc_config, "which").return_value = True
         self.mock_check_output.return_value = data
         self.assertIsNone(self.redfish._get_smbios_data())
 
@@ -1227,6 +1229,7 @@ class TestRedfish(MAASTestCase):
             Redfish Service Hostname:"""
         )
 
+        self.patch(bmc_config, "which").return_value = True
         self.mock_check_output.return_value = data
         self.assertEqual(expected, self.redfish._get_smbios_data())
 
@@ -1298,6 +1301,7 @@ class TestRedfish(MAASTestCase):
             Redfish Service Hostname: garamond"""
         )
 
+        self.patch(bmc_config, "which").return_value = True
         self.mock_check_output.return_value = data
         self.assertEqual(expected, self.redfish._get_smbios_data())
 
@@ -1531,6 +1535,10 @@ class TestRedfish(MAASTestCase):
         )
         self.assertFalse(self.redfish.detected())
 
+    def test_missing_dmidecode_exception(self):
+        self.patch(bmc_config, "which").return_value = None
+        self.assertRaises(bmc_config.ConfigurationError, self.redfish._get_smbios_data)
+
 
 class TestGetIPMILocateOutput(MAASTestCase):
     def test_get_ipmi_locate_output(self):

Follow ups