Merge ~ack/maas:1862514-drop-hpdsa-driver-2.7 into maas:2.7

Proposed by Alberto Donato
Status: Rejected
Rejected by: Alberto Donato
Proposed branch: ~ack/maas:1862514-drop-hpdsa-driver-2.7
Merge into: maas:2.7
Diff against target: 267 lines (+97/-11)
8 files modified
etc/maas/drivers.yaml (+6/-0)
src/maasserver/preseed.py (+1/-1)
src/maasserver/rpc/boot.py (+1/-1)
src/maasserver/rpc/tests/test_boot.py (+20/-0)
src/maasserver/tests/test_third_party_drivers.py (+28/-1)
src/maasserver/third_party_drivers.py (+11/-3)
src/maasserver/websockets/handlers/node.py (+5/-1)
src/maasserver/websockets/handlers/tests/test_machine.py (+25/-4)
Reviewer Review Type Date Requested Status
Alberto Donato (community) Disapprove
MAAS Lander unittests Pending
Review via email: mp+379199@code.launchpad.net

Commit message

LP: #1862514 - filter third party drivers by series

To post a comment you must log in.
Revision history for this message
Alberto Donato (ack) wrote :

We don't want to backport this to 2.7

review: Disapprove

There was an error fetching revisions from git servers. Please try again in a few minutes. If the problem persists, contact Launchpad support.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/etc/maas/drivers.yaml b/etc/maas/drivers.yaml
2index a7461f6..2d3724c 100644
3--- a/etc/maas/drivers.yaml
4+++ b/etc/maas/drivers.yaml
5@@ -19,6 +19,8 @@ drivers:
6 module: hpvsa
7 package: hpvsa
8 repository: http://ppa.launchpad.net/hp-iss-team/hpvsa-update/ubuntu
9+ series:
10+ - trusty
11 - comment: Cisco snic DKMS driver
12 key_binary: !!binary |
13 mQINBFRjf2EBEADVD60xGOaZj8ahKJNRoi6rtzfjzwzTLzntzeXj8rLM99cca9mxsObGMKfHz9PP
14@@ -46,6 +48,8 @@ drivers:
15 module: snic
16 package: snic-dkms
17 repository: http://ppa.launchpad.net/cisco-ucs-team/snic-stable/ubuntu
18+ series:
19+ - trusty
20 - blacklist: ahci
21 comment: HPDSA driver
22 key_binary: !!binary |
23@@ -76,3 +80,5 @@ drivers:
24 module: hpdsa
25 package: hpdsa-dkms
26 repository: http://downloads.linux.hpe.com/SDR/repo/ubuntu-hpdsa
27+ series:
28+ - trusty
29diff --git a/src/maasserver/preseed.py b/src/maasserver/preseed.py
30index fd545dd..36c6567 100644
31--- a/src/maasserver/preseed.py
32+++ b/src/maasserver/preseed.py
33@@ -854,7 +854,7 @@ def get_node_preseed_context(request, node, osystem="", release=""):
34 reverse("metadata-node-by-id", args=["latest", node.system_id])
35 )
36 node_disable_pxe_data = urlencode({"op": "netboot_off"})
37- driver = get_third_party_driver(node)
38+ driver = get_third_party_driver(node, series=release)
39 return {
40 "third_party_drivers": (
41 Config.objects.get_config("enable_third_party_drivers")
42diff --git a/src/maasserver/rpc/boot.py b/src/maasserver/rpc/boot.py
43index 5fb6b5c..31030cb 100644
44--- a/src/maasserver/rpc/boot.py
45+++ b/src/maasserver/rpc/boot.py
46@@ -518,7 +518,7 @@ def get_config(
47 # Add any extra options from a third party driver.
48 use_driver = configs["enable_third_party_drivers"]
49 if use_driver:
50- driver = get_third_party_driver(machine)
51+ driver = get_third_party_driver(machine, series=series)
52 driver_kernel_opts = driver.get("kernel_opts", "")
53
54 combined_opts = (
55diff --git a/src/maasserver/rpc/tests/test_boot.py b/src/maasserver/rpc/tests/test_boot.py
56index d45dc99..9055aa0 100644
57--- a/src/maasserver/rpc/tests/test_boot.py
58+++ b/src/maasserver/rpc/tests/test_boot.py
59@@ -160,6 +160,26 @@ class TestGetConfig(MAASServerTestCase):
60 hardware_uuid=node.hardware_uuid,
61 )
62
63+ def test__gets_drivers_for_series(self):
64+ rack_controller = factory.make_RackController()
65+ local_ip = factory.make_ip_address()
66+ remote_ip = factory.make_ip_address()
67+ node = self.make_node(status=NODE_STATUS.DEPLOYING)
68+ mac = node.get_boot_interface().mac_address
69+ mock_get_third_party_driver = self.patch(
70+ boot_module, "get_third_party_driver"
71+ )
72+ Config.objects.set_config("default_distro_series", "focal")
73+ self.patch_autospec(boot_module, "event_log_pxe_request")
74+ get_config(
75+ rack_controller.system_id,
76+ local_ip,
77+ remote_ip,
78+ mac=mac,
79+ hardware_uuid=node.hardware_uuid,
80+ )
81+ mock_get_third_party_driver.assert_called_with(node, series="focal")
82+
83 def test__returns_success_for_known_node_mac(self):
84 rack_controller = factory.make_RackController()
85 local_ip = factory.make_ip_address()
86diff --git a/src/maasserver/tests/test_third_party_drivers.py b/src/maasserver/tests/test_third_party_drivers.py
87index 6e3fe14..030806d 100644
88--- a/src/maasserver/tests/test_third_party_drivers.py
89+++ b/src/maasserver/tests/test_third_party_drivers.py
90@@ -84,7 +84,7 @@ class TestPopulateKernelOpts(MAASServerTestCase):
91 self.assertNotIn("kernel_opts", driver)
92
93
94-class TestGetThirdPartyCode(MAASServerTestCase):
95+class TestGetThirdPartyDriver(MAASServerTestCase):
96 def test_finds_match(self):
97 node = factory.make_Node()
98 mock = self.patch(third_party_drivers, "match_aliases_to_driver")
99@@ -105,6 +105,32 @@ class TestGetThirdPartyCode(MAASServerTestCase):
100 driver = get_third_party_driver(node)
101 self.assertEqual({}, driver)
102
103+ def test_matching_series(self):
104+ node = factory.make_Node()
105+ driver = {"series": ["xenial", "bionic"], "name": "somedriver"}
106+ self.patch(
107+ third_party_drivers, "match_aliases_to_driver"
108+ ).return_value = driver
109+ self.assertEqual(get_third_party_driver(node, series="bionic"), driver)
110+
111+ def test_not_matching_series(self):
112+ node = factory.make_Node()
113+ driver = {"series": ["xenial", "bionic"], "name": "somedriver"}
114+ self.patch(
115+ third_party_drivers, "match_aliases_to_driver"
116+ ).return_value = driver
117+ self.assertEqual(get_third_party_driver(node, series="precise"), {})
118+
119+ def test_series_without_available_series(self):
120+ node = factory.make_Node()
121+ driver = {"name": "somedriver"}
122+ self.patch(
123+ third_party_drivers, "match_aliases_to_driver"
124+ ).return_value = driver
125+ self.assertEqual(
126+ get_third_party_driver(node, series="precise"), driver
127+ )
128+
129
130 class TestDriversConfig(MAASServerTestCase):
131 def test_get_defaults_returns_empty_drivers_list(self):
132@@ -123,6 +149,7 @@ class TestDriversConfig(MAASServerTestCase):
133 "module",
134 "repository",
135 "package",
136+ "series",
137 ],
138 entry.keys(),
139 )
140diff --git a/src/maasserver/third_party_drivers.py b/src/maasserver/third_party_drivers.py
141index b325512..9401100 100644
142--- a/src/maasserver/third_party_drivers.py
143+++ b/src/maasserver/third_party_drivers.py
144@@ -74,6 +74,8 @@ module - The name of the kernel module to load on the target system.
145 repository - The URL of the repository to load packages from. The should
146 repository contain both deb and udeb packages for the driver.
147
148+series - List of Ubuntu series codenames to install the driver for.
149+
150 packages - The name of the deb package to retrieve from the repository.
151 """
152
153@@ -90,6 +92,7 @@ class ConfigDriver(Schema):
154 module = String()
155 package = String()
156 repository = String()
157+ series = ForEach(String)
158
159
160 class DriversConfigMeta(ConfigMeta):
161@@ -127,11 +130,13 @@ def populate_kernel_opts(driver):
162 return driver
163
164
165-def get_third_party_driver(node, detected_aliases=None):
166+def get_third_party_driver(node, detected_aliases=None, series=""):
167 """Determine which, if any, third party driver is required.
168
169 Use the node's modaliases strings to determine if a third party
170 driver is required.
171+
172+ Drivers are filtered for the specified series.
173 """
174 if detected_aliases is None:
175 detected_aliases = node.modaliases
176@@ -144,9 +149,12 @@ def get_third_party_driver(node, detected_aliases=None):
177 )
178
179 if matched_driver is None:
180- return dict()
181+ return {}
182+
183+ available_series = matched_driver.get("series", [])
184+ if available_series and series not in available_series:
185+ return {}
186
187 driver = deepcopy(matched_driver)
188 driver = populate_kernel_opts(driver)
189-
190 return driver
191diff --git a/src/maasserver/websockets/handlers/node.py b/src/maasserver/websockets/handlers/node.py
192index 03ce848..943fb40 100644
193--- a/src/maasserver/websockets/handlers/node.py
194+++ b/src/maasserver/websockets/handlers/node.py
195@@ -397,7 +397,11 @@ class NodeHandler(TimestampedModelHandler):
196 modaliases = script_result.stdout.decode(
197 "utf-8"
198 ).splitlines()
199- driver = get_third_party_driver(obj, modaliases)
200+ driver = get_third_party_driver(
201+ obj,
202+ detected_aliases=modaliases,
203+ series=obj.distro_series,
204+ )
205 if "module" in driver and "comment" in driver:
206 data["third_party_driver"] = {
207 "module": driver["module"],
208diff --git a/src/maasserver/websockets/handlers/tests/test_machine.py b/src/maasserver/websockets/handlers/tests/test_machine.py
209index 7307c56..0af3a36 100644
210--- a/src/maasserver/websockets/handlers/tests/test_machine.py
211+++ b/src/maasserver/websockets/handlers/tests/test_machine.py
212@@ -98,6 +98,7 @@ from maasserver.websockets.base import (
213 HandlerValidationError,
214 )
215 from maasserver.websockets.handlers import machine as machine_module
216+from maasserver.websockets.handlers import node as node_module
217 from maasserver.websockets.handlers.event import dehydrate_event_type_level
218 from maasserver.websockets.handlers.machine import MachineHandler
219 from maasserver.websockets.handlers.machine import Node as node_model
220@@ -316,16 +317,17 @@ class TestMachineHandler(MAASServerTestCase):
221 "system_id": node.system_id,
222 "hardware_uuid": node.hardware_uuid,
223 "tags": [tag.name for tag in node.tags.all()],
224- "third_party_driver": {
225- "module": driver["module"] if "module" in driver else "",
226- "comment": driver["comment"] if "comment" in driver else "",
227- },
228 "node_type": node.node_type,
229 "updated": dehydrate_datetime(node.updated),
230 "zone": handler.dehydrate_zone(node.zone),
231 "pool": handler.dehydrate_pool(node.pool),
232 "default_user": node.default_user,
233 }
234+ if "module" in driver and "comment" in driver:
235+ data["third_party_driver"] = {
236+ "module": driver["module"],
237+ "comment": driver["comment"],
238+ }
239 if boot_interface:
240 data["vlan"] = handler.dehydrate_vlan(node, boot_interface)
241 data["ip_addresses"] = handler.dehydrate_all_ip_addresses(node)
242@@ -1939,6 +1941,25 @@ class TestMachineHandler(MAASServerTestCase):
243 ),
244 )
245
246+ def test_get_driver_for_series(self):
247+ user = factory.make_User()
248+ handler = MachineHandler(user, {}, None)
249+ node = factory.make_Node_with_Interface_on_Subnet(
250+ with_empty_script_sets=True
251+ )
252+ node.distro_series = "bionic"
253+ node.save()
254+ Config.objects.set_config(
255+ name="enable_third_party_drivers", value=True
256+ )
257+ mock_get_third_party_driver = self.patch(
258+ node_module, "get_third_party_driver"
259+ )
260+ handler.dehydrate(node, {})
261+ mock_get_third_party_driver.assert_called_with(
262+ node, detected_aliases=[], series="bionic"
263+ )
264+
265 def test_get_numa_node_only_physical_interfaces(self):
266 user = factory.make_User()
267 handler = MachineHandler(user, {}, None)

Subscribers

People subscribed via source and target branches