Merge ~andreserl/maas:2.3_lp1779712 into maas:2.3
- Git
- lp:~andreserl/maas
- 2.3_lp1779712
- Merge into 2.3
Proposed by
Andres Rodriguez
Status: | Merged |
---|---|
Approved by: | Andres Rodriguez |
Approved revision: | ec578401c24f610805003ee294e150147f57b417 |
Merge reported by: | MAAS Lander |
Merged at revision: | not available |
Proposed branch: | ~andreserl/maas:2.3_lp1779712 |
Merge into: | maas:2.3 |
Diff against target: |
408 lines (+150/-2) 11 files modified
src/maasserver/api/tests/test_maas.py (+34/-0) src/maasserver/compose_preseed.py (+3/-1) src/maasserver/forms/__init__.py (+1/-0) src/maasserver/forms/settings.py (+38/-0) src/maasserver/models/config.py (+1/-0) src/maasserver/proxyconfig.py (+2/-0) src/maasserver/tests/test_compose_preseed.py (+23/-0) src/maasserver/tests/test_proxyconfig.py (+14/-0) src/maasserver/triggers/system.py (+2/-0) src/maasserver/triggers/tests/test_system_listener.py (+31/-0) src/provisioningserver/templates/proxy/maas-proxy.conf.template (+1/-1) |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Andres Rodriguez (community) | Approve | ||
MAAS Lander | unittests | Pending | |
Review via email: mp+349497@code.launchpad.net |
Commit message
Backport 2581bde - LP: #1779712 - Ability to select maas-proxy port.
Adds the ability to select which port the MAAS proxy binds to, which is
used by machines during the various operations.
Description of the change
To post a comment you must log in.
Revision history for this message
MAAS Lander (maas-lander) wrote : | # |
LANDING
-b 2.3_lp1779712 lp:~andreserl/maas/+git/maas into -b 2.3 lp:~maas-committers/maas
STATUS: FAILED BUILD
LOG: http://
Revision history for this message
MAAS Lander (maas-lander) wrote : | # |
LANDING
-b 2.3_lp1779712 lp:~andreserl/maas/+git/maas into -b 2.3 lp:~maas-committers/maas
STATUS: FAILED BUILD
LOG: http://
~andreserl/maas:2.3_lp1779712
updated
- ec57840... by Andres Rodriguez
-
Fix test_sends_
message_ for_config_ insert_ maas_proxy_ port
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | diff --git a/src/maasserver/api/tests/test_maas.py b/src/maasserver/api/tests/test_maas.py | |||
2 | index fbf89d5..72577a4 100644 | |||
3 | --- a/src/maasserver/api/tests/test_maas.py | |||
4 | +++ b/src/maasserver/api/tests/test_maas.py | |||
5 | @@ -8,6 +8,7 @@ __all__ = [] | |||
6 | 8 | import http.client | 8 | import http.client |
7 | 9 | import json | 9 | import json |
8 | 10 | from operator import itemgetter | 10 | from operator import itemgetter |
9 | 11 | import random | ||
10 | 11 | 12 | ||
11 | 12 | from django.conf import settings | 13 | from django.conf import settings |
12 | 13 | from maasserver.forms.settings import CONFIG_ITEMS_KEYS | 14 | from maasserver.forms.settings import CONFIG_ITEMS_KEYS |
13 | @@ -303,3 +304,36 @@ class MAASHandlerAPITest(APITestCase.ForUser): | |||
14 | 303 | }) | 304 | }) |
15 | 304 | self.assertEqual(http.client.OK, response.status_code) | 305 | self.assertEqual(http.client.OK, response.status_code) |
16 | 305 | self.assertTrue(Config.objects.get_config("boot_images_no_proxy")) | 306 | self.assertTrue(Config.objects.get_config("boot_images_no_proxy")) |
17 | 307 | |||
18 | 308 | |||
19 | 309 | class MAASHandlerAPITestForProxyPort(APITestCase.ForUser): | ||
20 | 310 | |||
21 | 311 | scenarios = [ | ||
22 | 312 | ('valid-port', { | ||
23 | 313 | 'port': random.randint(5300, 65535), 'valid': True}), | ||
24 | 314 | ('invalid-port_maas-reserved-range', { | ||
25 | 315 | 'port': random.randint(5240, 5270), 'valid': False}), | ||
26 | 316 | ('invalid-port_system-services', { | ||
27 | 317 | 'port': random.randint(0, 1023), 'valid': False}), | ||
28 | 318 | ('invalid-port_out-of-range', { | ||
29 | 319 | 'port': random.randint(65536, 70000), 'valid': False}), | ||
30 | 320 | ] | ||
31 | 321 | |||
32 | 322 | def test_set_config_maas_proxy_port(self): | ||
33 | 323 | self.become_admin() | ||
34 | 324 | port = self.port | ||
35 | 325 | response = self.client.post( | ||
36 | 326 | reverse('maas_handler'), { | ||
37 | 327 | "op": "set_config", | ||
38 | 328 | "name": "maas_proxy_port", | ||
39 | 329 | "value": port, | ||
40 | 330 | }) | ||
41 | 331 | if self.valid: | ||
42 | 332 | self.assertEqual(http.client.OK, response.status_code) | ||
43 | 333 | self.assertEqual( | ||
44 | 334 | port, Config.objects.get_config("maas_proxy_port")) | ||
45 | 335 | else: | ||
46 | 336 | self.assertEqual( | ||
47 | 337 | http.client.BAD_REQUEST, | ||
48 | 338 | response.status_code, | ||
49 | 339 | response.content) | ||
50 | diff --git a/src/maasserver/compose_preseed.py b/src/maasserver/compose_preseed.py | |||
51 | index cf8897c..8e5897d 100644 | |||
52 | --- a/src/maasserver/compose_preseed.py | |||
53 | +++ b/src/maasserver/compose_preseed.py | |||
54 | @@ -41,8 +41,10 @@ def get_apt_proxy(rack_controller=None, default_region_ip=None): | |||
55 | 41 | if http_proxy and not use_peer_proxy: | 41 | if http_proxy and not use_peer_proxy: |
56 | 42 | return http_proxy | 42 | return http_proxy |
57 | 43 | else: | 43 | else: |
58 | 44 | maas_proxy_port = Config.objects.get_config("maas_proxy_port") | ||
59 | 45 | url = "http://:%d/" % maas_proxy_port | ||
60 | 44 | return compose_URL( | 46 | return compose_URL( |
62 | 45 | "http://:8000/", get_maas_facing_server_host( | 47 | url, get_maas_facing_server_host( |
63 | 46 | rack_controller, default_region_ip=default_region_ip)) | 48 | rack_controller, default_region_ip=default_region_ip)) |
64 | 47 | else: | 49 | else: |
65 | 48 | return None | 50 | return None |
66 | diff --git a/src/maasserver/forms/__init__.py b/src/maasserver/forms/__init__.py | |||
67 | index cfe7e8c..c24186b 100644 | |||
68 | --- a/src/maasserver/forms/__init__.py | |||
69 | +++ b/src/maasserver/forms/__init__.py | |||
70 | @@ -1432,6 +1432,7 @@ class ProxyForm(ConfigForm): | |||
71 | 1432 | enable_http_proxy = get_config_field('enable_http_proxy') | 1432 | enable_http_proxy = get_config_field('enable_http_proxy') |
72 | 1433 | use_peer_proxy = get_config_field('use_peer_proxy') | 1433 | use_peer_proxy = get_config_field('use_peer_proxy') |
73 | 1434 | http_proxy = get_config_field('http_proxy') | 1434 | http_proxy = get_config_field('http_proxy') |
74 | 1435 | maas_proxy_port = get_config_field('maas_proxy_port') | ||
75 | 1435 | 1436 | ||
76 | 1436 | 1437 | ||
77 | 1437 | class DNSForm(ConfigForm): | 1438 | class DNSForm(ConfigForm): |
78 | diff --git a/src/maasserver/forms/settings.py b/src/maasserver/forms/settings.py | |||
79 | index ce47aad..339324e 100644 | |||
80 | --- a/src/maasserver/forms/settings.py | |||
81 | +++ b/src/maasserver/forms/settings.py | |||
82 | @@ -74,6 +74,26 @@ def make_default_osystem_field(*args, **kwargs): | |||
83 | 74 | return field | 74 | return field |
84 | 75 | 75 | ||
85 | 76 | 76 | ||
86 | 77 | def validate_port(value): | ||
87 | 78 | """Raise `ValidationError` when the value is set to a port number. that is | ||
88 | 79 | either reserved for known services, or for MAAS services to ensure this | ||
89 | 80 | doesn't break MAAS or other applications.""" | ||
90 | 81 | msg = "Unable to change port number" | ||
91 | 82 | if value > 65535 or value <= 0: | ||
92 | 83 | raise ValidationError( | ||
93 | 84 | "%s. Port number is not between 0 - 65535." % msg) | ||
94 | 85 | if value >= 0 and value <= 1023: | ||
95 | 86 | raise ValidationError( | ||
96 | 87 | "%s. Port number is reserved for system services." % msg) | ||
97 | 88 | # 5240 -> reserved for region HTTP. | ||
98 | 89 | # 5241 - 4247 -> reserved for other MAAS services. | ||
99 | 90 | # 5248 -> reserved for rack HTTP. | ||
100 | 91 | # 5250+ -> reserved for region workers (RPC). | ||
101 | 92 | if (value >= 5240 and value <= 5270): | ||
102 | 93 | raise ValidationError( | ||
103 | 94 | "%s. Port number is reserved for MAAS services." % msg) | ||
104 | 95 | |||
105 | 96 | |||
106 | 77 | def get_default_usable_osystem(default_osystem): | 97 | def get_default_usable_osystem(default_osystem): |
107 | 78 | """Return the osystem from the clusters that matches the default_osystem. | 98 | """Return the osystem from the clusters that matches the default_osystem. |
108 | 79 | """ | 99 | """ |
109 | @@ -92,6 +112,13 @@ def list_choices_for_releases(releases): | |||
110 | 92 | ] | 112 | ] |
111 | 93 | 113 | ||
112 | 94 | 114 | ||
113 | 115 | def make_maas_proxy_port_field(*args, **kwargs): | ||
114 | 116 | """Build and return the maas_proxy_port field.""" | ||
115 | 117 | return forms.IntegerField( | ||
116 | 118 | validators=[validate_port], | ||
117 | 119 | **kwargs) | ||
118 | 120 | |||
119 | 121 | |||
120 | 95 | def make_default_distro_series_field(*args, **kwargs): | 122 | def make_default_distro_series_field(*args, **kwargs): |
121 | 96 | """Build and return the default_distro_series field.""" | 123 | """Build and return the default_distro_series field.""" |
122 | 97 | default_osystem = Config.objects.get_config('default_osystem') | 124 | default_osystem = Config.objects.get_config('default_osystem') |
123 | @@ -225,6 +252,17 @@ CONFIG_ITEMS = { | |||
124 | 225 | "downloading boot images.") | 252 | "downloading boot images.") |
125 | 226 | } | 253 | } |
126 | 227 | }, | 254 | }, |
127 | 255 | 'maas_proxy_port': { | ||
128 | 256 | 'default': 8000, | ||
129 | 257 | 'form': make_maas_proxy_port_field, | ||
130 | 258 | 'form_kwargs': { | ||
131 | 259 | 'label': "Port to bind the MAAS built-in proxy (default: 8000)", | ||
132 | 260 | 'required': False, | ||
133 | 261 | 'help_text': ( | ||
134 | 262 | "Defines the port used to bind the built-in proxy. The " | ||
135 | 263 | "default port is 8000.") | ||
136 | 264 | } | ||
137 | 265 | }, | ||
138 | 228 | 'use_peer_proxy': { | 266 | 'use_peer_proxy': { |
139 | 229 | 'default': False, | 267 | 'default': False, |
140 | 230 | 'form': forms.BooleanField, | 268 | 'form': forms.BooleanField, |
141 | diff --git a/src/maasserver/models/config.py b/src/maasserver/models/config.py | |||
142 | index f5837dc..353e980 100644 | |||
143 | --- a/src/maasserver/models/config.py | |||
144 | +++ b/src/maasserver/models/config.py | |||
145 | @@ -69,6 +69,7 @@ def get_default_config(): | |||
146 | 69 | 'default_osystem': DEFAULT_OS.name, | 69 | 'default_osystem': DEFAULT_OS.name, |
147 | 70 | 'default_distro_series': DEFAULT_OS.get_default_release(), | 70 | 'default_distro_series': DEFAULT_OS.get_default_release(), |
148 | 71 | 'enable_http_proxy': True, | 71 | 'enable_http_proxy': True, |
149 | 72 | 'maas_proxy_port': 8000, | ||
150 | 72 | 'use_peer_proxy': False, | 73 | 'use_peer_proxy': False, |
151 | 73 | 'http_proxy': None, | 74 | 'http_proxy': None, |
152 | 74 | 'upstream_dns': None, | 75 | 'upstream_dns': None, |
153 | diff --git a/src/maasserver/proxyconfig.py b/src/maasserver/proxyconfig.py | |||
154 | index 1c69be2..64d1d90 100644 | |||
155 | --- a/src/maasserver/proxyconfig.py | |||
156 | +++ b/src/maasserver/proxyconfig.py | |||
157 | @@ -71,6 +71,7 @@ def proxy_update_config(reload_proxy=True): | |||
158 | 71 | cidrs = [subnet.cidr for subnet in allowed_subnets] | 71 | cidrs = [subnet.cidr for subnet in allowed_subnets] |
159 | 72 | 72 | ||
160 | 73 | http_proxy = Config.objects.get_config("http_proxy") | 73 | http_proxy = Config.objects.get_config("http_proxy") |
161 | 74 | maas_proxy_port = Config.objects.get_config("maas_proxy_port") | ||
162 | 74 | upstream_proxy_enabled = ( | 75 | upstream_proxy_enabled = ( |
163 | 75 | Config.objects.get_config("use_peer_proxy") and http_proxy) | 76 | Config.objects.get_config("use_peer_proxy") and http_proxy) |
164 | 76 | context = { | 77 | context = { |
165 | @@ -83,6 +84,7 @@ def proxy_update_config(reload_proxy=True): | |||
166 | 83 | 'snap_data_path': snappy.get_snap_data_path(), | 84 | 'snap_data_path': snappy.get_snap_data_path(), |
167 | 84 | 'snap_common_path': snappy.get_snap_common_path(), | 85 | 'snap_common_path': snappy.get_snap_common_path(), |
168 | 85 | 'upstream_peer_proxy': upstream_proxy_enabled, | 86 | 'upstream_peer_proxy': upstream_proxy_enabled, |
169 | 87 | 'maas_proxy_port': maas_proxy_port, | ||
170 | 86 | } | 88 | } |
171 | 87 | 89 | ||
172 | 88 | proxy_enabled = Config.objects.get_config("enable_http_proxy") | 90 | proxy_enabled = Config.objects.get_config("enable_http_proxy") |
173 | diff --git a/src/maasserver/tests/test_compose_preseed.py b/src/maasserver/tests/test_compose_preseed.py | |||
174 | index 90f0529..eb9bccf 100644 | |||
175 | --- a/src/maasserver/tests/test_compose_preseed.py | |||
176 | +++ b/src/maasserver/tests/test_compose_preseed.py | |||
177 | @@ -50,6 +50,7 @@ class TestAptProxy(MAASServerTestCase): | |||
178 | 50 | ("ipv6", dict( | 50 | ("ipv6", dict( |
179 | 51 | default_region_ip=None, | 51 | default_region_ip=None, |
180 | 52 | rack='2001:db8::1', | 52 | rack='2001:db8::1', |
181 | 53 | maas_proxy_port='', | ||
182 | 53 | result='http://[2001:db8::1]:8000/', | 54 | result='http://[2001:db8::1]:8000/', |
183 | 54 | enable=True, | 55 | enable=True, |
184 | 55 | use_peer_proxy=False, | 56 | use_peer_proxy=False, |
185 | @@ -57,6 +58,7 @@ class TestAptProxy(MAASServerTestCase): | |||
186 | 57 | ("ipv4", dict( | 58 | ("ipv4", dict( |
187 | 58 | default_region_ip=None, | 59 | default_region_ip=None, |
188 | 59 | rack='10.0.1.1', | 60 | rack='10.0.1.1', |
189 | 61 | maas_proxy_port=8000, | ||
190 | 60 | result='http://10.0.1.1:8000/', | 62 | result='http://10.0.1.1:8000/', |
191 | 61 | enable=True, | 63 | enable=True, |
192 | 62 | use_peer_proxy=False, | 64 | use_peer_proxy=False, |
193 | @@ -64,6 +66,7 @@ class TestAptProxy(MAASServerTestCase): | |||
194 | 64 | ("builtin", dict( | 66 | ("builtin", dict( |
195 | 65 | default_region_ip=None, | 67 | default_region_ip=None, |
196 | 66 | rack='region.example.com', | 68 | rack='region.example.com', |
197 | 69 | maas_proxy_port=8000, | ||
198 | 67 | result='http://region.example.com:8000/', | 70 | result='http://region.example.com:8000/', |
199 | 68 | enable=True, | 71 | enable=True, |
200 | 69 | use_peer_proxy=False, | 72 | use_peer_proxy=False, |
201 | @@ -71,6 +74,7 @@ class TestAptProxy(MAASServerTestCase): | |||
202 | 71 | ("external", dict( | 74 | ("external", dict( |
203 | 72 | default_region_ip=None, | 75 | default_region_ip=None, |
204 | 73 | rack='region.example.com', | 76 | rack='region.example.com', |
205 | 77 | maas_proxy_port='', | ||
206 | 74 | result='http://proxy.example.com:111/', | 78 | result='http://proxy.example.com:111/', |
207 | 75 | enable=True, | 79 | enable=True, |
208 | 76 | use_peer_proxy=False, | 80 | use_peer_proxy=False, |
209 | @@ -78,6 +82,7 @@ class TestAptProxy(MAASServerTestCase): | |||
210 | 78 | ("peer-proxy", dict( | 82 | ("peer-proxy", dict( |
211 | 79 | default_region_ip=None, | 83 | default_region_ip=None, |
212 | 80 | rack='region.example.com', | 84 | rack='region.example.com', |
213 | 85 | maas_proxy_port='', | ||
214 | 81 | result='http://region.example.com:8000/', | 86 | result='http://region.example.com:8000/', |
215 | 82 | enable=True, | 87 | enable=True, |
216 | 83 | use_peer_proxy=True, | 88 | use_peer_proxy=True, |
217 | @@ -85,6 +90,7 @@ class TestAptProxy(MAASServerTestCase): | |||
218 | 85 | ("disabled", dict( | 90 | ("disabled", dict( |
219 | 86 | default_region_ip=None, | 91 | default_region_ip=None, |
220 | 87 | rack='example.com', | 92 | rack='example.com', |
221 | 93 | maas_proxy_port=8000, | ||
222 | 88 | result=None, | 94 | result=None, |
223 | 89 | enable=False, | 95 | enable=False, |
224 | 90 | use_peer_proxy=False, | 96 | use_peer_proxy=False, |
225 | @@ -95,6 +101,7 @@ class TestAptProxy(MAASServerTestCase): | |||
226 | 95 | ("ipv6_default", dict( | 101 | ("ipv6_default", dict( |
227 | 96 | default_region_ip='2001:db8::2', | 102 | default_region_ip='2001:db8::2', |
228 | 97 | rack='', | 103 | rack='', |
229 | 104 | maas_proxy_port=8000, | ||
230 | 98 | result='http://[2001:db8::2]:8000/', | 105 | result='http://[2001:db8::2]:8000/', |
231 | 99 | enable=True, | 106 | enable=True, |
232 | 100 | use_peer_proxy=False, | 107 | use_peer_proxy=False, |
233 | @@ -102,6 +109,7 @@ class TestAptProxy(MAASServerTestCase): | |||
234 | 102 | ("ipv4_default", dict( | 109 | ("ipv4_default", dict( |
235 | 103 | default_region_ip='10.0.1.2', | 110 | default_region_ip='10.0.1.2', |
236 | 104 | rack='', | 111 | rack='', |
237 | 112 | maas_proxy_port=8000, | ||
238 | 105 | result='http://10.0.1.2:8000/', | 113 | result='http://10.0.1.2:8000/', |
239 | 106 | enable=True, | 114 | enable=True, |
240 | 107 | use_peer_proxy=False, | 115 | use_peer_proxy=False, |
241 | @@ -109,6 +117,7 @@ class TestAptProxy(MAASServerTestCase): | |||
242 | 109 | ("builtin_default", dict( | 117 | ("builtin_default", dict( |
243 | 110 | default_region_ip='region.example.com', | 118 | default_region_ip='region.example.com', |
244 | 111 | rack='', | 119 | rack='', |
245 | 120 | maas_proxy_port=8000, | ||
246 | 112 | result='http://region.example.com:8000/', | 121 | result='http://region.example.com:8000/', |
247 | 113 | enable=True, | 122 | enable=True, |
248 | 114 | use_peer_proxy=False, | 123 | use_peer_proxy=False, |
249 | @@ -116,6 +125,7 @@ class TestAptProxy(MAASServerTestCase): | |||
250 | 116 | ("external_default", dict( | 125 | ("external_default", dict( |
251 | 117 | default_region_ip='10.0.0.1', | 126 | default_region_ip='10.0.0.1', |
252 | 118 | rack='', | 127 | rack='', |
253 | 128 | maas_proxy_port=8000, | ||
254 | 119 | result='http://proxy.example.com:111/', | 129 | result='http://proxy.example.com:111/', |
255 | 120 | enable=True, | 130 | enable=True, |
256 | 121 | use_peer_proxy=False, | 131 | use_peer_proxy=False, |
257 | @@ -123,6 +133,7 @@ class TestAptProxy(MAASServerTestCase): | |||
258 | 123 | ("peer-proxy_default", dict( | 133 | ("peer-proxy_default", dict( |
259 | 124 | default_region_ip='region2.example.com', | 134 | default_region_ip='region2.example.com', |
260 | 125 | rack='', | 135 | rack='', |
261 | 136 | maas_proxy_port=8000, | ||
262 | 126 | result='http://region2.example.com:8000/', | 137 | result='http://region2.example.com:8000/', |
263 | 127 | enable=True, | 138 | enable=True, |
264 | 128 | use_peer_proxy=True, | 139 | use_peer_proxy=True, |
265 | @@ -130,10 +141,19 @@ class TestAptProxy(MAASServerTestCase): | |||
266 | 130 | ("disabled_default", dict( | 141 | ("disabled_default", dict( |
267 | 131 | default_region_ip='10.0.0.1', | 142 | default_region_ip='10.0.0.1', |
268 | 132 | rack='', | 143 | rack='', |
269 | 144 | maas_proxy_port=8000, | ||
270 | 133 | result=None, | 145 | result=None, |
271 | 134 | enable=False, | 146 | enable=False, |
272 | 135 | use_peer_proxy=False, | 147 | use_peer_proxy=False, |
273 | 136 | http_proxy='')), | 148 | http_proxy='')), |
274 | 149 | ("changed-maas_proxy_port", dict( | ||
275 | 150 | default_region_ip='region2.example.com', | ||
276 | 151 | rack='', | ||
277 | 152 | maas_proxy_port=9000, | ||
278 | 153 | result='http://region2.example.com:9000/', | ||
279 | 154 | enable=True, | ||
280 | 155 | use_peer_proxy=True, | ||
281 | 156 | http_proxy='http://proxy.example.com:111/')), | ||
282 | 137 | ) | 157 | ) |
283 | 138 | 158 | ||
284 | 139 | def test__returns_correct_url(self): | 159 | def test__returns_correct_url(self): |
285 | @@ -153,6 +173,9 @@ class TestAptProxy(MAASServerTestCase): | |||
286 | 153 | Config.objects.set_config("enable_http_proxy", self.enable) | 173 | Config.objects.set_config("enable_http_proxy", self.enable) |
287 | 154 | Config.objects.set_config("http_proxy", self.http_proxy) | 174 | Config.objects.set_config("http_proxy", self.http_proxy) |
288 | 155 | Config.objects.set_config("use_peer_proxy", self.use_peer_proxy) | 175 | Config.objects.set_config("use_peer_proxy", self.use_peer_proxy) |
289 | 176 | if self.maas_proxy_port: | ||
290 | 177 | Config.objects.set_config( | ||
291 | 178 | "maas_proxy_port", self.maas_proxy_port) | ||
292 | 156 | actual = get_apt_proxy( | 179 | actual = get_apt_proxy( |
293 | 157 | node.get_boot_rack_controller(), | 180 | node.get_boot_rack_controller(), |
294 | 158 | default_region_ip=self.default_region_ip) | 181 | default_region_ip=self.default_region_ip) |
295 | diff --git a/src/maasserver/tests/test_proxyconfig.py b/src/maasserver/tests/test_proxyconfig.py | |||
296 | index d64ac19..68aa2b9 100644 | |||
297 | --- a/src/maasserver/tests/test_proxyconfig.py | |||
298 | +++ b/src/maasserver/tests/test_proxyconfig.py | |||
299 | @@ -7,6 +7,7 @@ __all__ = [] | |||
300 | 7 | 7 | ||
301 | 8 | import os | 8 | import os |
302 | 9 | from pathlib import Path | 9 | from pathlib import Path |
303 | 10 | import random | ||
304 | 10 | 11 | ||
305 | 11 | from crochet import wait_for | 12 | from crochet import wait_for |
306 | 12 | from django.conf import settings | 13 | from django.conf import settings |
307 | @@ -154,6 +155,19 @@ class TestProxyUpdateConfig(MAASTransactionServerTestCase): | |||
308 | 154 | 155 | ||
309 | 155 | @wait_for_reactor | 156 | @wait_for_reactor |
310 | 156 | @inlineCallbacks | 157 | @inlineCallbacks |
311 | 158 | def test__with_new_maas_proxy_port_changes_port(self): | ||
312 | 159 | self.patch(settings, "PROXY_CONNECT", True) | ||
313 | 160 | port = random.randint(1, 65535) | ||
314 | 161 | yield deferToDatabase( | ||
315 | 162 | transactional(Config.objects.set_config), | ||
316 | 163 | "maas_proxy_port", port) | ||
317 | 164 | yield proxyconfig.proxy_update_config(reload_proxy=False) | ||
318 | 165 | with self.proxy_path.open() as proxy_file: | ||
319 | 166 | lines = [line.strip() for line in proxy_file.readlines()] | ||
320 | 167 | self.assertIn('http_port %s' % port, lines) | ||
321 | 168 | |||
322 | 169 | @wait_for_reactor | ||
323 | 170 | @inlineCallbacks | ||
324 | 157 | def test__calls_reloadService(self): | 171 | def test__calls_reloadService(self): |
325 | 158 | self.patch(settings, "PROXY_CONNECT", True) | 172 | self.patch(settings, "PROXY_CONNECT", True) |
326 | 159 | yield deferToDatabase(self.make_subnet) | 173 | yield deferToDatabase(self.make_subnet) |
327 | diff --git a/src/maasserver/triggers/system.py b/src/maasserver/triggers/system.py | |||
328 | index 7661306..622c8e4 100644 | |||
329 | --- a/src/maasserver/triggers/system.py | |||
330 | +++ b/src/maasserver/triggers/system.py | |||
331 | @@ -1590,6 +1590,7 @@ PEER_PROXY_CONFIG_INSERT = dedent("""\ | |||
332 | 1590 | RETURNS trigger as $$ | 1590 | RETURNS trigger as $$ |
333 | 1591 | BEGIN | 1591 | BEGIN |
334 | 1592 | IF (NEW.name = 'enable_proxy' OR | 1592 | IF (NEW.name = 'enable_proxy' OR |
335 | 1593 | NEW.name = 'maas_proxy_port' OR | ||
336 | 1593 | NEW.name = 'use_peer_proxy' OR | 1594 | NEW.name = 'use_peer_proxy' OR |
337 | 1594 | NEW.name = 'http_proxy') THEN | 1595 | NEW.name = 'http_proxy') THEN |
338 | 1595 | PERFORM pg_notify('sys_proxy', ''); | 1596 | PERFORM pg_notify('sys_proxy', ''); |
339 | @@ -1606,6 +1607,7 @@ PEER_PROXY_CONFIG_UPDATE = dedent("""\ | |||
340 | 1606 | RETURNS trigger as $$ | 1607 | RETURNS trigger as $$ |
341 | 1607 | BEGIN | 1608 | BEGIN |
342 | 1608 | IF (NEW.name = 'enable_proxy' OR | 1609 | IF (NEW.name = 'enable_proxy' OR |
343 | 1610 | NEW.name = 'maas_proxy_port' OR | ||
344 | 1609 | NEW.name = 'use_peer_proxy' OR | 1611 | NEW.name = 'use_peer_proxy' OR |
345 | 1610 | NEW.name = 'http_proxy') THEN | 1612 | NEW.name = 'http_proxy') THEN |
346 | 1611 | PERFORM pg_notify('sys_proxy', ''); | 1613 | PERFORM pg_notify('sys_proxy', ''); |
347 | diff --git a/src/maasserver/triggers/tests/test_system_listener.py b/src/maasserver/triggers/tests/test_system_listener.py | |||
348 | index 9124424..be5cf39 100644 | |||
349 | --- a/src/maasserver/triggers/tests/test_system_listener.py | |||
350 | +++ b/src/maasserver/triggers/tests/test_system_listener.py | |||
351 | @@ -4258,6 +4258,21 @@ class TestProxyListener( | |||
352 | 4258 | 4258 | ||
353 | 4259 | @wait_for_reactor | 4259 | @wait_for_reactor |
354 | 4260 | @inlineCallbacks | 4260 | @inlineCallbacks |
355 | 4261 | def test_sends_message_for_config_insert_maas_proxy_port(self): | ||
356 | 4262 | yield deferToDatabase(register_system_triggers) | ||
357 | 4263 | dv = DeferredValue() | ||
358 | 4264 | listener = self.make_listener_without_delay() | ||
359 | 4265 | listener.register( | ||
360 | 4266 | "sys_proxy", lambda *args: dv.set(args)) | ||
361 | 4267 | yield listener.startService() | ||
362 | 4268 | try: | ||
363 | 4269 | yield deferToDatabase(self.create_config, "maas_proxy_port", 9000) | ||
364 | 4270 | yield dv.get(timeout=2) | ||
365 | 4271 | finally: | ||
366 | 4272 | yield listener.stopService() | ||
367 | 4273 | |||
368 | 4274 | @wait_for_reactor | ||
369 | 4275 | @inlineCallbacks | ||
370 | 4261 | def test_sends_message_for_config_insert_http_proxy(self): | 4276 | def test_sends_message_for_config_insert_http_proxy(self): |
371 | 4262 | yield deferToDatabase(register_system_triggers) | 4277 | yield deferToDatabase(register_system_triggers) |
372 | 4263 | dv = DeferredValue() | 4278 | dv = DeferredValue() |
373 | @@ -4306,6 +4321,22 @@ class TestProxyListener( | |||
374 | 4306 | 4321 | ||
375 | 4307 | @wait_for_reactor | 4322 | @wait_for_reactor |
376 | 4308 | @inlineCallbacks | 4323 | @inlineCallbacks |
377 | 4324 | def test_sends_message_for_config_update_maas_proxy_port(self): | ||
378 | 4325 | yield deferToDatabase(register_system_triggers) | ||
379 | 4326 | yield deferToDatabase(self.create_config, "maas_proxy_port", 8000) | ||
380 | 4327 | dv = DeferredValue() | ||
381 | 4328 | listener = self.make_listener_without_delay() | ||
382 | 4329 | listener.register( | ||
383 | 4330 | "sys_proxy", lambda *args: dv.set(args)) | ||
384 | 4331 | yield listener.startService() | ||
385 | 4332 | try: | ||
386 | 4333 | yield deferToDatabase(self.set_config, "maas_proxy_port", 9000) | ||
387 | 4334 | yield dv.get(timeout=2) | ||
388 | 4335 | finally: | ||
389 | 4336 | yield listener.stopService() | ||
390 | 4337 | |||
391 | 4338 | @wait_for_reactor | ||
392 | 4339 | @inlineCallbacks | ||
393 | 4309 | def test_sends_message_for_config_update_http_proxy(self): | 4340 | def test_sends_message_for_config_update_http_proxy(self): |
394 | 4310 | yield deferToDatabase(register_system_triggers) | 4341 | yield deferToDatabase(register_system_triggers) |
395 | 4311 | yield deferToDatabase( | 4342 | yield deferToDatabase( |
396 | diff --git a/src/provisioningserver/templates/proxy/maas-proxy.conf.template b/src/provisioningserver/templates/proxy/maas-proxy.conf.template | |||
397 | index 473c83c..ed6f383 100644 | |||
398 | --- a/src/provisioningserver/templates/proxy/maas-proxy.conf.template | |||
399 | +++ b/src/provisioningserver/templates/proxy/maas-proxy.conf.template | |||
400 | @@ -23,7 +23,7 @@ http_access allow localnet | |||
401 | 23 | http_access allow localhost | 23 | http_access allow localhost |
402 | 24 | http_access deny all | 24 | http_access deny all |
403 | 25 | http_port 3128 transparent | 25 | http_port 3128 transparent |
405 | 26 | http_port 8000 | 26 | http_port {{maas_proxy_port}} |
406 | 27 | refresh_pattern ^ftp: 1440 20% 10080 | 27 | refresh_pattern ^ftp: 1440 20% 10080 |
407 | 28 | refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 | 28 | refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 |
408 | 29 | refresh_pattern \/Release(|\.gpg)$ 0 0% 0 refresh-ims | 29 | refresh_pattern \/Release(|\.gpg)$ 0 0% 0 refresh-ims |
selfie!