Merge ~blake-rouse/maas:debug-false-means-false-2.6 into maas:2.6

Proposed by Blake Rouse
Status: Merged
Approved by: Blake Rouse
Approved revision: d4bdf1cdf5f2d428d5a2c1b6ed8ba06ad83a8821
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~blake-rouse/maas:debug-false-means-false-2.6
Merge into: maas:2.6
Diff against target: 190 lines (+56/-13)
8 files modified
src/maasserver/config.py (+6/-8)
src/maasserver/management/commands/tests/test_config.py (+1/-1)
src/maasserver/tests/test_config.py (+1/-1)
src/provisioningserver/config.py (+2/-2)
src/provisioningserver/tests/test_cluster_config_command.py (+1/-1)
src/provisioningserver/tests/test_config.py (+24/-0)
src/provisioningserver/utils/config.py (+12/-0)
src/provisioningserver/utils/tests/test_config.py (+9/-0)
Reviewer Review Type Date Requested Status
Blake Rouse (community) Approve
Review via email: mp+372292@code.launchpad.net

Commit message

Fixes LP: #1724096 - Part 2 - Fix regiond.conf and rackd.conf parser to handle StringBool correctly for reading the value from the store.

Backport of f01a97d004b6775cfa3975f1d240ef5de3b479b3.

To post a comment you must log in.
Revision history for this message
Blake Rouse (blake-rouse) wrote :

Self-approving backport.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/config.py b/src/maasserver/config.py
2index 1eabe0d..4b0b75f 100644
3--- a/src/maasserver/config.py
4+++ b/src/maasserver/config.py
5@@ -7,10 +7,7 @@ __all__ = [
6 "RegionConfiguration",
7 ]
8
9-from formencode.validators import (
10- Int,
11- StringBool,
12-)
13+from formencode.validators import Int
14 from provisioningserver.config import (
15 Configuration,
16 ConfigurationFile,
17@@ -19,6 +16,7 @@ from provisioningserver.config import (
18 )
19 from provisioningserver.utils.config import (
20 ExtendedURL,
21+ OneWayStringBool,
22 UnicodeString,
23 )
24
25@@ -61,7 +59,7 @@ class RegionConfiguration(Configuration, metaclass=RegionConfigurationMeta):
26 database_keepalive = ConfigurationOption(
27 "database_keepalive",
28 "Whether keepalive for database connections is enabled.",
29- StringBool(if_missing=True))
30+ OneWayStringBool(if_missing=True))
31 database_keepalive_idle = ConfigurationOption(
32 "database_keepalive_idle",
33 "Time (in seconds) after which keepalives will be started.",
34@@ -83,14 +81,14 @@ class RegionConfiguration(Configuration, metaclass=RegionConfigurationMeta):
35 # Debug options.
36 debug = ConfigurationOption(
37 "debug", "Enable debug mode for detailed error and log reporting.",
38- StringBool(if_missing=False))
39+ OneWayStringBool(if_missing=False))
40 debug_queries = ConfigurationOption(
41 "debug_queries",
42 "Enable query debugging. Reports number of queries and time for all "
43 "actions performed. Requires debug to also be True. mode for detailed "
44 "error and log reporting.",
45- StringBool(if_missing=False))
46+ OneWayStringBool(if_missing=False))
47 debug_http = ConfigurationOption(
48 "debug_http",
49 "Enable HTTP debugging. Logs all HTTP requests and HTTP responses.",
50- StringBool(if_missing=False))
51+ OneWayStringBool(if_missing=False))
52diff --git a/src/maasserver/management/commands/tests/test_config.py b/src/maasserver/management/commands/tests/test_config.py
53index e738265..0e0b3f9 100644
54--- a/src/maasserver/management/commands/tests/test_config.py
55+++ b/src/maasserver/management/commands/tests/test_config.py
56@@ -126,7 +126,7 @@ class TestConfigurationSet(MAASTestCase):
57 elif self.option in [
58 "debug", "debug_queries", "debug_http",
59 "database_keepalive"]:
60- value = random.choice(['true', 'false'])
61+ value = random.choice([True, False])
62 else:
63 value = factory.make_name("foobar")
64
65diff --git a/src/maasserver/tests/test_config.py b/src/maasserver/tests/test_config.py
66index 1878e10..51b129a 100644
67--- a/src/maasserver/tests/test_config.py
68+++ b/src/maasserver/tests/test_config.py
69@@ -94,7 +94,7 @@ class TestRegionConfigurationDatabaseOptions(MAASTestCase):
70 if isinstance(getattr(config, self.option), str):
71 example_value = factory.make_name(self.option)
72 elif self.option == 'database_keepalive':
73- example_value = random.choice(['true', 'false'])
74+ example_value = random.choice([True, False])
75 else:
76 example_value = factory.pick_port()
77 # Argument values will most often be passed in from the command-line,
78diff --git a/src/provisioningserver/config.py b/src/provisioningserver/config.py
79index 52a3766..d973019 100644
80--- a/src/provisioningserver/config.py
81+++ b/src/provisioningserver/config.py
82@@ -140,13 +140,13 @@ from formencode.declarative import DeclarativeMeta
83 from formencode.validators import (
84 Number,
85 Set,
86- StringBool,
87 )
88 from provisioningserver.path import get_tentative_data_path
89 from provisioningserver.utils import typed
90 from provisioningserver.utils.config import (
91 DirectoryString,
92 ExtendedURL,
93+ OneWayStringBool,
94 UnicodeString,
95 UUIDString,
96 )
97@@ -795,7 +795,7 @@ class ClusterConfiguration(Configuration, metaclass=ClusterConfigurationMeta):
98 # Debug options.
99 debug = ConfigurationOption(
100 "debug", "Enable debug mode for detailed error and log reporting.",
101- StringBool(if_missing=False))
102+ OneWayStringBool(if_missing=False))
103
104
105 def is_dev_environment():
106diff --git a/src/provisioningserver/tests/test_cluster_config_command.py b/src/provisioningserver/tests/test_cluster_config_command.py
107index 7f50836..2a3050e 100644
108--- a/src/provisioningserver/tests/test_cluster_config_command.py
109+++ b/src/provisioningserver/tests/test_cluster_config_command.py
110@@ -226,7 +226,7 @@ class TestUpdateMaasClusterConf(MAASTestCase):
111 cluster_config_command.run(self.make_args(debug=expected))
112 with ClusterConfiguration.open() as config:
113 observed = config.debug
114- self.assertEqual(str(expected).lower(), observed)
115+ self.assertEqual(expected, observed)
116
117 def test_config_set_debug_without_setting_does_nothing(self):
118 with ClusterConfiguration.open() as config:
119diff --git a/src/provisioningserver/tests/test_config.py b/src/provisioningserver/tests/test_config.py
120index 962c94e..2532bf3 100644
121--- a/src/provisioningserver/tests/test_config.py
122+++ b/src/provisioningserver/tests/test_config.py
123@@ -662,6 +662,30 @@ class TestClusterConfiguration(MAASTestCase):
124 # It's also stored in the configuration database.
125 self.assertEqual({"cluster_uuid": str(example_uuid)}, config.store)
126
127+ def test_default_debug(self):
128+ config = ClusterConfiguration({})
129+ self.assertFalse(config.debug)
130+
131+ def test_set_and_get_debug_false(self):
132+ config = ClusterConfiguration({})
133+ config.debug = False
134+ self.assertFalse(config.debug)
135+
136+ def test_set_and_get_debug_false_str(self):
137+ config = ClusterConfiguration({})
138+ config.debug = "false"
139+ self.assertFalse(config.debug)
140+
141+ def test_set_and_get_debug_true(self):
142+ config = ClusterConfiguration({})
143+ config.debug = True
144+ self.assertTrue(config.debug)
145+
146+ def test_set_and_get_debug_true_str(self):
147+ config = ClusterConfiguration({})
148+ config.debug = "true"
149+ self.assertTrue(config.debug)
150+
151
152 class TestClusterConfigurationGRUBRoot(MAASTestCase):
153 """Tests for `ClusterConfiguration.grub_root`."""
154diff --git a/src/provisioningserver/utils/config.py b/src/provisioningserver/utils/config.py
155index b0985f2..196dbca 100644
156--- a/src/provisioningserver/utils/config.py
157+++ b/src/provisioningserver/utils/config.py
158@@ -185,3 +185,15 @@ class Schema(formencode.Schema):
159 return False
160 else:
161 return super(Schema, self)._value_is_iterator(value)
162+
163+
164+class OneWayStringBool(formencode.validators.StringBool):
165+ """A `StringBool` that doesn't convert a boolean back into a string.
166+
167+ Used for "true" and "false" values, but doesn't convert a boolean back
168+ to a string.
169+ """
170+
171+ def from_python(self, value):
172+ """Do nothing."""
173+ return value
174diff --git a/src/provisioningserver/utils/tests/test_config.py b/src/provisioningserver/utils/tests/test_config.py
175index e4dfe7d..4a6674c 100644
176--- a/src/provisioningserver/utils/tests/test_config.py
177+++ b/src/provisioningserver/utils/tests/test_config.py
178@@ -314,3 +314,12 @@ class TestExtendedURL(MAASTestCase):
179 netloc="[%s]" % addr.upper(), port=factory.pick_bool())
180 self.assertEqual(
181 url, self.validator.to_python(url), "url: %s" % url)
182+
183+
184+class TestOneWayStringBool(MAASTestCase):
185+ """Tests for `OneWayStringBool`."""
186+
187+ def test__from_python(self):
188+ validator = config.OneWayStringBool()
189+ self.assertFalse(validator.from_python(False))
190+ self.assertTrue(validator.from_python(True))

Subscribers

People subscribed via source and target branches