Skip to content

Commit 828c13b

Browse files
committed
fix(port): Port can be made optional for non-routable apps
1 parent 836c285 commit 828c13b

3 files changed

Lines changed: 17 additions & 2 deletions

File tree

rootfs/api/models/app.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -825,7 +825,8 @@ def _build_env_vars(self, release):
825825

826826
# fetch application port and inject into ENV vars as needed
827827
port = release.get_port()
828-
default_env['PORT'] = port
828+
if port:
829+
default_env['PORT'] = port
829830

830831
# merge envs on top of default to make envs win
831832
default_env.update(release.config.values)

rootfs/api/models/release.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ def get_port(self):
153153
# application has registry auth - $PORT is required
154154
if (creds is not None) or (settings.REGISTRY_LOCATION != 'on-cluster'):
155155
if envs.get('PORT', None) is None:
156+
if not self.app.appsettings_set.latest().routable:
157+
return None
156158
raise DeisException(
157159
'PORT needs to be set in the application config '
158160
'when using a private registry'
@@ -167,7 +169,7 @@ def get_port(self):
167169

168170
# discover port from docker image
169171
port = docker_get_port(self.image, deis_registry, creds)
170-
if port is None:
172+
if port is None and self.app.appsettings_set.latest().routable:
171173
msg = "Expose a port or make the app non routable by changing the process type"
172174
self.app.log(msg, logging.ERROR)
173175
raise DeisException(msg)

rootfs/api/tests/test_release.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,3 +433,15 @@ def test_release_external_registry_no_port(self, mock_requests):
433433
):
434434
release = app.release_set.latest()
435435
release.get_port()
436+
437+
# Set routable to false and port should be None instead of error
438+
response = self.client.post(
439+
'/v2/apps/{app.id}/settings'.format(**locals()),
440+
{'routable': False}
441+
)
442+
self.assertEqual(response.status_code, 201, response.data)
443+
self.assertFalse(app.appsettings_set.latest().routable)
444+
445+
release = app.release_set.latest()
446+
port = release.get_port()
447+
self.assertIsNone(port)

0 commit comments

Comments
 (0)