Merge ~ack/maas:1984141-pod-console-log-no-duplicate into maas:master

Proposed by Alberto Donato
Status: Merged
Approved by: Alberto Donato
Approved revision: ffadcda0c6532a836002c76fc52fcc070cc9f6dd
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~ack/maas:1984141-pod-console-log-no-duplicate
Merge into: maas:master
Diff against target: 150 lines (+64/-14)
4 files modified
src/maasserver/forms/pods.py (+6/-9)
src/maasserver/forms/tests/test_pods.py (+12/-0)
src/maasserver/tests/test_vmhost.py (+37/-0)
src/maasserver/vmhost.py (+9/-5)
Reviewer Review Type Date Requested Status
Alexsander de Souza Approve
MAAS Lander Approve
Review via email: mp+429050@code.launchpad.net

Commit message

LP:1984141 don't fail if pod-console-log tag exists with different kernel options

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

UNIT TESTS
-b 1984141-pod-console-log-no-duplicate lp:~ack/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas-tester/416/consoleText
COMMIT: ffadcda0c6532a836002c76fc52fcc070cc9f6dd

review: Needs Fixing
Revision history for this message
Alberto Donato (ack) wrote :

jenkins: !test

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

UNIT TESTS
-b 1984141-pod-console-log-no-duplicate lp:~ack/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: ffadcda0c6532a836002c76fc52fcc070cc9f6dd

review: Approve
Revision history for this message
Alexsander de Souza (alexsander-souza) wrote :

+1

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

LANDING
-b 1984141-pod-console-log-no-duplicate lp:~ack/maas/+git/maas into -b master lp:~maas-committers/maas

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

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/forms/pods.py b/src/maasserver/forms/pods.py
2index e7e1af6..05cb103 100644
3--- a/src/maasserver/forms/pods.py
4+++ b/src/maasserver/forms/pods.py
5@@ -45,7 +45,6 @@ from maasserver.models import (
6 Pod,
7 PodStoragePool,
8 ResourcePool,
9- Tag,
10 Zone,
11 )
12 from maasserver.node_constraint_filter_forms import (
13@@ -65,7 +64,10 @@ from maasserver.utils.dns import validate_hostname
14 from maasserver.utils.forms import set_form_error
15 from maasserver.utils.orm import post_commit_do, transactional
16 from maasserver.utils.threads import deferToDatabase
17-from maasserver.vmhost import request_commissioning_results
18+from maasserver.vmhost import (
19+ ensure_pod_console_logging_tag,
20+ request_commissioning_results,
21+)
22 from provisioningserver.certificates import Certificate
23 from provisioningserver.drivers import SETTING_SCOPE
24 from provisioningserver.drivers.pod import (
25@@ -303,13 +305,8 @@ class PodForm(MAASModelForm):
26 )
27
28 # Add tag for pod console logging with appropriate kernel parameters.
29- tag, _ = Tag.objects.get_or_create(
30- name="pod-console-logging",
31- kernel_opts="console=tty1 console=ttyS0",
32- )
33- # Add this tag to the pod. This only adds the tag
34- # if it is not present on the pod.
35- self.instance.add_tag(tag.name)
36+ self.instance.add_tag(ensure_pod_console_logging_tag().name)
37+
38 if self.is_new and power_type == "lxd":
39 self.instance.created_with_trust_password = bool(
40 self.cleaned_data["password"]
41diff --git a/src/maasserver/forms/tests/test_pods.py b/src/maasserver/forms/tests/test_pods.py
42index 21c4708..12a70e0 100644
43--- a/src/maasserver/forms/tests/test_pods.py
44+++ b/src/maasserver/forms/tests/test_pods.py
45@@ -227,6 +227,18 @@ class TestPodForm(MAASTransactionServerTestCase):
46 pod = form.save()
47 self.assertCountEqual(tags, pod.tags)
48
49+ def test_creates_pod_with_existing_pod_console_logging_tag(self):
50+ tag = factory.make_Tag(
51+ name="pod-console-logging", kernel_opts="foo bar"
52+ )
53+ pod_info = self.make_pod_info()
54+ form = PodForm(data=pod_info, request=self.request)
55+ self.assertTrue(form.is_valid(), form._errors)
56+ pod = form.save()
57+ self.assertIn("pod-console-logging", pod.tags)
58+ tag = reload_object(tag)
59+ self.assertEqual(tag.kernel_opts, "foo bar")
60+
61 def test_creates_pod_with_zone(self):
62 pod_info = self.make_pod_info()
63 zone = factory.make_Zone()
64diff --git a/src/maasserver/tests/test_vmhost.py b/src/maasserver/tests/test_vmhost.py
65index cf9ea62..996e3a1 100644
66--- a/src/maasserver/tests/test_vmhost.py
67+++ b/src/maasserver/tests/test_vmhost.py
68@@ -15,6 +15,7 @@ from maasserver.testing.testcase import (
69 MAASServerTestCase,
70 MAASTransactionServerTestCase,
71 )
72+from maasserver.utils.orm import reload_object
73 from maasserver.utils.threads import deferToDatabase
74 from maastesting.crochet import wait_for
75 from provisioningserver.drivers.pod import (
76@@ -421,6 +422,42 @@ class TestSyncVMCluster(MAASServerTestCase):
77 for host in hosts:
78 self.assertIn("pod-console-logging", host.tags)
79
80+ def test_discovered_vmhosts_doesnt_update_console_logging_tag_if_exists(
81+ self,
82+ ):
83+ tag = factory.make_Tag(
84+ name="pod-console-logging", kernel_opts="foo bar"
85+ )
86+ (
87+ discovered_cluster,
88+ discovered_racks,
89+ failed_racks,
90+ ) = fake_cluster_discovery(self)
91+ zone = factory.make_Zone()
92+ pod_info = make_lxd_pod_info(url=discovered_cluster.pod_addresses[0])
93+ power_parameters = {"power_address": pod_info["power_address"]}
94+ orig_vmhost = factory.make_Pod(
95+ zone=zone, pod_type=pod_info["type"], parameters=power_parameters
96+ )
97+ successes = {
98+ rack_id: discovered_cluster for rack_id in discovered_racks
99+ }
100+ failures = {
101+ rack_id: factory.make_exception() for rack_id in failed_racks
102+ }
103+ self.patch(vmhost_module, "discover_pod").return_value = (
104+ successes,
105+ failures,
106+ )
107+ vmhost = vmhost_module.discover_and_sync_vmhost(
108+ orig_vmhost, factory.make_User()
109+ )
110+ hosts = vmhost.hints.cluster.hosts()
111+ for host in hosts:
112+ self.assertIn("pod-console-logging", host.tags)
113+ tag = reload_object(tag)
114+ self.assertEqual(tag.kernel_opts, "foo bar")
115+
116 def test_sync_vmcluster_adds_vmhost_zone_and_pool(self):
117 (
118 discovered_cluster,
119diff --git a/src/maasserver/vmhost.py b/src/maasserver/vmhost.py
120index 3c50f57..da4e18e 100644
121--- a/src/maasserver/vmhost.py
122+++ b/src/maasserver/vmhost.py
123@@ -27,6 +27,14 @@ from provisioningserver.drivers.pod import DiscoveredCluster, DiscoveredPod
124 from provisioningserver.events import EVENT_TYPES
125
126
127+def ensure_pod_console_logging_tag() -> Tag:
128+ tag, _ = Tag.objects.get_or_create(
129+ name="pod-console-logging",
130+ defaults={"kernel_opts": "console=tty1 console=ttyS0"},
131+ )
132+ return tag
133+
134+
135 @inlineCallbacks
136 def request_commissioning_results(pod):
137 """Request commissioning results from machines associated with the Pod."""
138@@ -291,11 +299,7 @@ async def sync_vmcluster_async(discovered_cluster, discovered, vmhost, user):
139
140
141 def _update_db(discovered_pod, discovered, vmhost, user, cluster=None):
142- tag, _ = Tag.objects.get_or_create(
143- name="pod-console-logging",
144- kernel_opts="console=tty1 console=ttyS0",
145- )
146- vmhost.add_tag(tag.name)
147+ vmhost.add_tag(ensure_pod_console_logging_tag().name)
148
149 # If this is a new instance it will be stored in the database at the end of
150 # sync.

Subscribers

People subscribed via source and target branches