Merge ~ltrager/maas:grub_debug_2.7 into maas:2.7

Proposed by Lee Trager
Status: Merged
Approved by: Lee Trager
Approved revision: 767e74d07147d64fa902fb99facb0cc89af90083
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~ltrager/maas:grub_debug_2.7
Merge into: maas:2.7
Prerequisite: ~ltrager/maas:deprecate_linuxefi_initrdefi_2.7
Diff against target: 281 lines (+75/-15)
13 files modified
dev/null (+0/-8)
src/provisioningserver/boot/__init__.py (+2/-0)
src/provisioningserver/boot/tests/test_boot.py (+14/-1)
src/provisioningserver/boot/tests/test_uefi_amd64.py (+10/-2)
src/provisioningserver/boot/uefi_amd64.py (+3/-1)
src/provisioningserver/config.py (+9/-1)
src/provisioningserver/templates/uefi/config.commissioning.template (+2/-1)
src/provisioningserver/templates/uefi/config.local.amd64.template (+1/-0)
src/provisioningserver/templates/uefi/config.local.arm64.template (+1/-0)
src/provisioningserver/templates/uefi/config.local.ppc64el.template (+1/-0)
src/provisioningserver/templates/uefi/config.poweroff.template (+1/-0)
src/provisioningserver/templates/uefi/config.xinstall.template (+1/-0)
src/provisioningserver/tests/test_config.py (+30/-1)
Reviewer Review Type Date Requested Status
MAAS Lander Needs Fixing
Lee Trager (community) Approve
Review via email: mp+402537@code.launchpad.net

Commit message

Enable GRUB debug when rackd debug is enabled.

Backport of 20566cd

To post a comment you must log in.
Revision history for this message
Lee Trager (ltrager) :
review: Approve
Revision history for this message
MAAS Lander (maas-lander) wrote :
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b grub_debug_2.7 lp:~ltrager/maas/+git/maas into -b 2.7 lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas/job/branch-tester/10038/console
COMMIT: 2b5fa28cebff55095d9f717cf0bf32dee4bc486b

review: Needs Fixing
~ltrager/maas:grub_debug_2.7 updated
767e74d... by Lee Trager

Merge branch '2.7' into grub_debug_2.7

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/provisioningserver/boot/__init__.py b/src/provisioningserver/boot/__init__.py
2index bee94fc..26ce6ef 100644
3--- a/src/provisioningserver/boot/__init__.py
4+++ b/src/provisioningserver/boot/__init__.py
5@@ -18,6 +18,7 @@ from twisted.internet.defer import inlineCallbacks, returnValue
6 from zope.interface import implementer
7
8 from provisioningserver.boot.tftppath import compose_image_path
9+from provisioningserver.config import debug_enabled
10 from provisioningserver.events import EVENT_TYPES, try_send_rack_event
11 from provisioningserver.kernel_opts import compose_kernel_command_line
12 from provisioningserver.logger import get_maas_logger
13@@ -419,6 +420,7 @@ class BootMethod(metaclass=ABCMeta):
14 "kernel_path": kernel_path,
15 "kernel_name": kernel_name,
16 "dtb_path": dtb_path,
17+ "debug": debug_enabled(),
18 }
19
20 return namespace
21diff --git a/src/provisioningserver/boot/tests/test_boot.py b/src/provisioningserver/boot/tests/test_boot.py
22index 1aa3216..52130f3 100644
23--- a/src/provisioningserver/boot/tests/test_boot.py
24+++ b/src/provisioningserver/boot/tests/test_boot.py
25@@ -1,4 +1,4 @@
26-# Copyright 2014-2016 Canonical Ltd. This software is licensed under the
27+# Copyright 2014-2021 Canonical Ltd. This software is licensed under the
28 # GNU Affero General Public License version 3 (see the file LICENSE).
29
30 """Tests for `provisioningserver.boot`."""
31@@ -31,6 +31,7 @@ from provisioningserver.boot.tftppath import compose_image_path
32 from provisioningserver.kernel_opts import compose_kernel_command_line
33 from provisioningserver.rpc import region
34 from provisioningserver.rpc.testing import MockLiveClusterToRegionRPCFixture
35+from provisioningserver.testing.config import ClusterConfigurationFixture
36 from provisioningserver.tests.test_kernel_opts import make_kernel_parameters
37 from provisioningserver.utils.fs import atomic_symlink, tempdir
38
39@@ -332,6 +333,18 @@ class TestBootMethod(MAASTestCase):
40 template_namespace["dtb_path"](kernel_params),
41 )
42
43+ def test_compose_template_namespace_include_debug(self):
44+ debug = factory.pick_bool()
45+ boot.debug_enabled.cache_clear()
46+ self.addCleanup(boot.debug_enabled.cache_clear)
47+ self.useFixture(ClusterConfigurationFixture(debug=debug))
48+ kernel_params = make_kernel_parameters()
49+ method = FakeBootMethod()
50+
51+ template_namespace = method.compose_template_namespace(kernel_params)
52+
53+ self.assertEqual(debug, template_namespace["debug"])
54+
55
56 class TestGetArchiveUrl(MAASTestCase):
57
58diff --git a/src/provisioningserver/boot/tests/test_uefi_amd64.py b/src/provisioningserver/boot/tests/test_uefi_amd64.py
59index c90e421..33df035 100644
60--- a/src/provisioningserver/boot/tests/test_uefi_amd64.py
61+++ b/src/provisioningserver/boot/tests/test_uefi_amd64.py
62@@ -20,6 +20,7 @@ from testtools.matchers import (
63 from maastesting.factory import factory
64 from maastesting.matchers import FileContains, MockAnyCall, MockCalledOnce
65 from maastesting.testcase import MAASTestCase
66+from provisioningserver import boot
67 from provisioningserver.boot import BytesReader
68 from provisioningserver.boot import uefi_amd64 as uefi_amd64_module
69 from provisioningserver.boot.testing import TFTPPath, TFTPPathAndComponents
70@@ -30,6 +31,7 @@ from provisioningserver.boot.uefi_amd64 import (
71 UEFIAMD64BootMethod,
72 UEFIAMD64HTTPBootMethod,
73 )
74+from provisioningserver.testing.config import ClusterConfigurationFixture
75 from provisioningserver.tests.test_kernel_opts import make_kernel_parameters
76 from provisioningserver.utils import typed
77 from provisioningserver.utils.fs import tempdir
78@@ -69,6 +71,12 @@ class TestUEFIAMD64BootMethodRender(MAASTestCase):
79 """Tests for
80 `provisioningserver.boot_amd64.uefi.UEFIAMD64BootMethod.render`."""
81
82+ def setUp(self):
83+ super().setUp()
84+ boot.debug_enabled.cache_clear()
85+ self.addCleanup(boot.debug_enabled.cache_clear)
86+ self.useFixture(ClusterConfigurationFixture(debug=False))
87+
88 def test_get_reader(self):
89 # Given the right configuration options, the UEFI configuration is
90 # correctly rendered.
91@@ -168,7 +176,7 @@ class TestUEFIAMD64BootMethodRender(MAASTestCase):
92 output,
93 ContainsAll(
94 [
95- "menuentry 'Commission'",
96+ "menuentry 'Ephemeral'",
97 "%s/%s/%s" % (params.osystem, params.arch, params.subarch),
98 params.kernel,
99 ]
100@@ -186,7 +194,7 @@ class TestUEFIAMD64BootMethodRender(MAASTestCase):
101 output,
102 ContainsAll(
103 [
104- "menuentry 'Commission'",
105+ "menuentry 'Ephemeral'",
106 "%s/%s/%s" % (params.osystem, params.arch, params.subarch),
107 params.kernel,
108 ]
109diff --git a/src/provisioningserver/boot/uefi_amd64.py b/src/provisioningserver/boot/uefi_amd64.py
110index 6d873b1..aed8850 100644
111--- a/src/provisioningserver/boot/uefi_amd64.py
112+++ b/src/provisioningserver/boot/uefi_amd64.py
113@@ -125,7 +125,9 @@ class UEFIAMD64BootMethod(BootMethod):
114 # UEFI. And so we fix it here, instead of in the common code. See
115 # also src/provisioningserver/kernel_opts.py.
116 namespace["kernel_command"] = kernel_command
117- return BytesReader(template.substitute(namespace).encode("utf-8"))
118+ return BytesReader(
119+ template.substitute(namespace).strip().encode("utf-8")
120+ )
121
122 def _find_and_copy_bootloaders(self, destination, log_missing=True):
123 if not super()._find_and_copy_bootloaders(destination, False):
124diff --git a/src/provisioningserver/config.py b/src/provisioningserver/config.py
125index 2e43e44..a997b5e 100644
126--- a/src/provisioningserver/config.py
127+++ b/src/provisioningserver/config.py
128@@ -1,4 +1,4 @@
129-# Copyright 2012-2016 Canonical Ltd. This software is licensed under the
130+# Copyright 2012-2021 Canonical Ltd. This software is licensed under the
131 # GNU Affero General Public License version 3 (see the file LICENSE).
132
133 """Configuration for the MAAS cluster.
134@@ -113,6 +113,7 @@ __all__ = [
135
136 from contextlib import closing, contextmanager
137 from copy import deepcopy
138+from functools import lru_cache
139 from itertools import islice
140 import json
141 import logging
142@@ -823,3 +824,10 @@ def is_dev_environment():
143 return False
144 else:
145 return True
146+
147+
148+@lru_cache(1)
149+def debug_enabled():
150+ """Return and cache whether debug has been enabled."""
151+ with ClusterConfiguration.open() as config:
152+ return config.debug
153diff --git a/src/provisioningserver/templates/uefi/config.commissioning.template b/src/provisioningserver/templates/uefi/config.commissioning.template
154index c860a79..cc3f2fc 100644
155--- a/src/provisioningserver/templates/uefi/config.commissioning.template
156+++ b/src/provisioningserver/templates/uefi/config.commissioning.template
157@@ -1,7 +1,8 @@
158+{{if debug}}set debug="all"{{endif}}
159 set default="0"
160 set timeout=0
161
162-menuentry 'Commission' {
163+menuentry 'Ephemeral' {
164 echo 'Booting under MAAS direction...'
165 linux {{kernel_params | fs_efihost}}{{kernel_params | kernel_path }} {{kernel_params | kernel_command}} BOOTIF=01-${net_default_mac}
166 initrd {{kernel_params | fs_efihost}}{{kernel_params | initrd_path }}
167diff --git a/src/provisioningserver/templates/uefi/config.local.amd64.template b/src/provisioningserver/templates/uefi/config.local.amd64.template
168index c7d3d4c..7cfc382 100644
169--- a/src/provisioningserver/templates/uefi/config.local.amd64.template
170+++ b/src/provisioningserver/templates/uefi/config.local.amd64.template
171@@ -1,3 +1,4 @@
172+{{if debug}}set debug="all"{{endif}}
173 set default="0"
174 set timeout=0
175
176diff --git a/src/provisioningserver/templates/uefi/config.local.arm64.template b/src/provisioningserver/templates/uefi/config.local.arm64.template
177index cb34b1b..ab10c41 100644
178--- a/src/provisioningserver/templates/uefi/config.local.arm64.template
179+++ b/src/provisioningserver/templates/uefi/config.local.arm64.template
180@@ -1,3 +1,4 @@
181+{{if debug}}set debug="all"{{endif}}
182 set default="0"
183 set timeout=0
184
185diff --git a/src/provisioningserver/templates/uefi/config.local.ppc64el.template b/src/provisioningserver/templates/uefi/config.local.ppc64el.template
186index b592f26..406451b 100644
187--- a/src/provisioningserver/templates/uefi/config.local.ppc64el.template
188+++ b/src/provisioningserver/templates/uefi/config.local.ppc64el.template
189@@ -1,3 +1,4 @@
190+{{if debug}}set debug="all"{{endif}}
191 set default="0"
192 set timeout=0
193
194diff --git a/src/provisioningserver/templates/uefi/config.poweroff.template b/src/provisioningserver/templates/uefi/config.poweroff.template
195index 451be03..95016c7 100644
196--- a/src/provisioningserver/templates/uefi/config.poweroff.template
197+++ b/src/provisioningserver/templates/uefi/config.poweroff.template
198@@ -1,3 +1,4 @@
199+{{if debug}}set debug="all"{{endif}}
200 set default="0"
201 set timeout=0
202
203diff --git a/src/provisioningserver/templates/uefi/config.xinstall.template b/src/provisioningserver/templates/uefi/config.xinstall.template
204deleted file mode 100644
205index 7bd9538..0000000
206--- a/src/provisioningserver/templates/uefi/config.xinstall.template
207+++ /dev/null
208@@ -1,8 +0,0 @@
209-set default="0"
210-set timeout=0
211-
212-menuentry 'Install' {
213- echo 'Booting under MAAS direction...'
214- linux {{kernel_params | fs_efihost}}{{kernel_params | kernel_path }} {{kernel_params | kernel_command}} BOOTIF=01-${net_default_mac}
215- initrd {{kernel_params | fs_efihost}}{{kernel_params | initrd_path }}
216-}
217diff --git a/src/provisioningserver/templates/uefi/config.xinstall.template b/src/provisioningserver/templates/uefi/config.xinstall.template
218new file mode 120000
219index 0000000..f0f1b87
220--- /dev/null
221+++ b/src/provisioningserver/templates/uefi/config.xinstall.template
222@@ -0,0 +1 @@
223+config.commissioning.template
224\ No newline at end of file
225diff --git a/src/provisioningserver/tests/test_config.py b/src/provisioningserver/tests/test_config.py
226index a1dfd1d..9956683 100644
227--- a/src/provisioningserver/tests/test_config.py
228+++ b/src/provisioningserver/tests/test_config.py
229@@ -1,4 +1,4 @@
230-# Copyright 2012-2016 Canonical Ltd. This software is licensed under the
231+# Copyright 2012-2021 Canonical Ltd. This software is licensed under the
232 # GNU Affero General Public License version 3 (see the file LICENSE).
233
234 """Tests for provisioning configuration."""
235@@ -31,6 +31,7 @@ from maastesting.factory import factory
236 from maastesting.fixtures import ImportErrorFixture
237 from maastesting.matchers import MockCalledOnceWith, MockNotCalled
238 from maastesting.testcase import MAASTestCase
239+from provisioningserver import config as config_module
240 from provisioningserver.config import (
241 ClusterConfiguration,
242 Configuration,
243@@ -39,6 +40,7 @@ from provisioningserver.config import (
244 ConfigurationImmutable,
245 ConfigurationMeta,
246 ConfigurationOption,
247+ debug_enabled,
248 is_dev_environment,
249 )
250 from provisioningserver.path import get_data_path
251@@ -732,3 +734,30 @@ class TestConfig(MAASTestCase):
252
253 def test_is_dev_environment_returns_true(self):
254 self.assertTrue(is_dev_environment())
255+
256+
257+class TestDebugEnabled(MAASTestCase):
258+ """Tests for `debug_enabled`."""
259+
260+ def setUp(self):
261+ super().setUp()
262+ # Make sure things aren't pulled from cache
263+ debug_enabled.cache_clear()
264+
265+ def test_debug_enabled_false(self):
266+ # Verifies that the default state of debug is false.
267+ self.assertFalse(debug_enabled())
268+
269+ def test_debug_enabled(self):
270+ debug = factory.pick_bool()
271+ self.useFixture(ClusterConfigurationFixture(debug=debug))
272+ self.assertEqual(debug, debug_enabled())
273+
274+ def test_debug_enabled_cached(self):
275+ debug = factory.pick_bool()
276+ self.useFixture(ClusterConfigurationFixture(debug=debug))
277+ # Prime cache
278+ debug_enabled()
279+ mock_open = self.patch(config_module.ClusterConfiguration, "open")
280+ self.assertEqual(debug, debug_enabled())
281+ mock_open.assert_not_called()

Subscribers

People subscribed via source and target branches