sts-sponsors team mailing list archive
-
sts-sponsors team
-
Mailing list archive
-
Message #08934
[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