Merge ~newell-jensen/maas:no-kvm-host-install-for-ephemeral-deployment into maas:master

Proposed by Newell Jensen
Status: Merged
Approved by: Newell Jensen
Approved revision: 83d5220ac7bb859371db5a79f024bbae2856e615
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~newell-jensen/maas:no-kvm-host-install-for-ephemeral-deployment
Merge into: maas:master
Diff against target: 108 lines (+43/-3)
4 files modified
src/maasserver/api/machines.py (+3/-0)
src/maasserver/api/tests/test_machine.py (+26/-1)
src/maasserver/models/node.py (+3/-0)
src/maasserver/models/tests/test_node.py (+11/-2)
Reviewer Review Type Date Requested Status
MAAS Lander Approve
Lee Trager (community) Approve
Review via email: mp+363854@code.launchpad.net

Commit message

Disable KVM host installs for ephemeral deployments.

To post a comment you must log in.
Revision history for this message
Lee Trager (ltrager) wrote :

Approved but I think its a bit weird we're checking the preseed on the API but not the websocket.

review: Approve
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b no-kvm-host-install-for-ephemeral-deployment lp:~newell-jensen/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci-jenkins.internal:8080/job/maas/job/branch-tester/5235/console
COMMIT: 2ff4a3b2807c2c1818fb2d00a8e35da3a054e2e3

review: Needs Fixing
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b no-kvm-host-install-for-ephemeral-deployment lp:~newell-jensen/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: 83d5220ac7bb859371db5a79f024bbae2856e615

review: Approve
Revision history for this message
MAAS Lander (maas-lander) wrote :

LANDING
-b no-kvm-host-install-for-ephemeral-deployment lp:~newell-jensen/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED BUILD
LOG: http://maas-ci-jenkins.internal:8080/job/maas/job/branch-tester/5259/consoleText

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/api/machines.py b/src/maasserver/api/machines.py
2index 8d54485..8c9860a 100644
3--- a/src/maasserver/api/machines.py
4+++ b/src/maasserver/api/machines.py
5@@ -698,6 +698,9 @@ class MachineHandler(NodeHandler, OwnerDataMixin, PowerMixin):
6 if (options.install_kvm and not
7 request.user.has_perm(NodePermission.admin, machine)):
8 raise PermissionDenied()
9+ if options.install_kvm and machine.ephemeral_deployment:
10+ raise MAASAPIBadRequest(
11+ "Cannot install KVM host for ephemeral deployments.")
12 if not machine.distro_series and not series:
13 series = Config.objects.get_config('default_distro_series')
14 Form = get_machine_edit_form(request.user)
15diff --git a/src/maasserver/api/tests/test_machine.py b/src/maasserver/api/tests/test_machine.py
16index 1428bae..3d1e9b8 100644
17--- a/src/maasserver/api/tests/test_machine.py
18+++ b/src/maasserver/api/tests/test_machine.py
19@@ -1,4 +1,4 @@
20-# Copyright 2015-2018 Canonical Ltd. This software is licensed under the
21+# Copyright 2015-2019 Canonical Ltd. This software is licensed under the
22 # GNU Affero General Public License version 3 (see the file LICENSE).
23
24 """Tests for the Machine API."""
25@@ -482,6 +482,31 @@ class TestMachineAPI(APITestCase.ForUser):
26 self.assertEqual(response_info['osystem'], osystem)
27 self.assertEqual(response_info['distro_series'], distro_series)
28
29+ def test_POST_deploy_fails_when_install_kvm_set_for_ephemeral_deploy(self):
30+ self.become_admin()
31+ osystem = Config.objects.get_config('default_osystem')
32+ distro_series = Config.objects.get_config('default_distro_series')
33+ make_usable_osystem(
34+ self, osystem_name=osystem, releases=[distro_series])
35+ machine = factory.make_Node(
36+ owner=self.user, interface=True,
37+ status=NODE_STATUS.ALLOCATED,
38+ power_type='manual',
39+ distro_series=distro_series,
40+ osystem=osystem,
41+ architecture=make_usable_architecture(self))
42+ for bd in machine.blockdevice_set.all():
43+ bd.delete()
44+ response = self.client.post(
45+ self.get_machine_uri(machine), {
46+ 'op': 'deploy',
47+ 'install_kvm': True
48+ })
49+ self.assertEqual(http.client.BAD_REQUEST, response.status_code)
50+ self.assertEqual(
51+ b"Cannot install KVM host for ephemeral deployments.",
52+ response.content)
53+
54 def test_POST_deploy_fails_when_preseed_not_rendered(self):
55 mock_get_curtin_merged_config = self.patch(
56 machines_module, "get_curtin_merged_config")
57diff --git a/src/maasserver/models/node.py b/src/maasserver/models/node.py
58index 7772294..1b8de76 100644
59--- a/src/maasserver/models/node.py
60+++ b/src/maasserver/models/node.py
61@@ -4295,6 +4295,9 @@ class Node(CleanSave, TimestampedModel):
62 "network": [
63 "Node has no address family in common with "
64 "the server"]})
65+ if self.ephemeral_deployment and self.install_kvm:
66+ raise ValidationError(
67+ "Cannot install KVM host for ephemeral deployments.")
68 self._register_request_event(
69 user, event, action='start', comment=comment)
70 return self._start(
71diff --git a/src/maasserver/models/tests/test_node.py b/src/maasserver/models/tests/test_node.py
72index b97d801..c71b47c 100644
73--- a/src/maasserver/models/tests/test_node.py
74+++ b/src/maasserver/models/tests/test_node.py
75@@ -6754,7 +6754,7 @@ class TestNode_Start(MAASTransactionServerTestCase):
76
77 def make_acquired_node_with_interface(
78 self, user, bmc_connected_to=None, power_type="virsh",
79- power_state=POWER_STATE.OFF, network=None):
80+ power_state=POWER_STATE.OFF, network=None, with_boot_disk=True):
81 if network is None:
82 network = factory.make_ip4_or_6_network()
83 cidr = str(network.cidr)
84@@ -6771,7 +6771,7 @@ class TestNode_Start(MAASTransactionServerTestCase):
85 'purpose': 'xinstall',
86 }]
87 node = factory.make_Node_with_Interface_on_Subnet(
88- status=NODE_STATUS.READY, with_boot_disk=True,
89+ status=NODE_STATUS.READY, with_boot_disk=with_boot_disk,
90 bmc_connected_to=bmc_connected_to, power_type=power_type,
91 power_state=power_state, cidr=cidr, osystem=osystem,
92 distro_series=distro_series)
93@@ -6802,6 +6802,15 @@ class TestNode_Start(MAASTransactionServerTestCase):
94 with ExpectedException(ValidationError):
95 node.start(admin)
96
97+ def test__raises_ValidationError_if_ephemeral_deploy_and_install_kvm(self):
98+ admin = factory.make_admin()
99+ node = self.make_acquired_node_with_interface(
100+ admin, power_type="manual", with_boot_disk=False)
101+ node.install_kvm = True
102+ node.save()
103+ with ExpectedException(ValidationError):
104+ node.start(admin)
105+
106 def test__doesnt_raise_network_validation_when_all_dhcp(self):
107 admin = factory.make_admin()
108 node = self.make_acquired_node_with_interface(

Subscribers

People subscribed via source and target branches