Skip to content

Commit 7de0bb7

Browse files
committed
chore(controller): use sh env
1 parent c075190 commit 7de0bb7

2 files changed

Lines changed: 29 additions & 14 deletions

File tree

rootfs/api/models/app.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,18 +130,33 @@ def _get_command(self, container_type):
130130
if release.build.dockerfile or not release.build.sha:
131131
# has profile
132132
if release.build.procfile and container_type in release.build.procfile:
133-
return release.build.procfile[container_type].split()
133+
cmd = release.build.procfile[container_type]
134+
# if the entrypoint is `/bin/bash -c`, we want to supply the list
135+
# as a script. Otherwise, we want to send it as a list of arguments.
136+
if self._get_entrypoint(container_type) == ['/bin/sh', '-c']:
137+
return [cmd]
138+
else:
139+
return cmd.split()
134140
return []
135141

142+
def _get_stack(self, release):
143+
stack = release.config.values.get("DRYCC_STACK", None)
144+
if stack is None:
145+
if release.build.procfile \
146+
and release.build.sha \
147+
and not release.build.dockerfile:
148+
stack = "buildpack"
149+
else:
150+
stack = "container"
151+
return stack
152+
136153
def _get_entrypoint(self, container_type):
137154
"""
138155
Return the kubernetes "container command" to be sent off to the scheduler.
139156
"""
140-
entrypoint = []
157+
entrypoint = ['/bin/sh', '-c']
141158
release = self.release_set.filter(failed=False).latest()
142-
if release.build.procfile \
143-
and release.build.sha \
144-
and not release.build.dockerfile:
159+
if self._get_stack(release) == "buildpack":
145160
if container_type in release.build.procfile:
146161
entrypoint = [container_type]
147162
else:

rootfs/api/tests/test_pods.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -521,22 +521,22 @@ def test_command_good(self, mock_requests):
521521
# switch to docker image app
522522
build.sha = ''
523523
build.save()
524-
self.assertEqual(app._get_command('web'), ["node", "server.js"])
524+
self.assertEqual(app._get_command('web'), ['node server.js'])
525525

526526
# switch to dockerfile app
527527
build.sha = 'european-swallow'
528528
build.dockerfile = 'dockerdockerdocker'
529529
build.save()
530-
self.assertEqual(app._get_command('web'), ["node", "server.js"])
530+
self.assertEqual(app._get_command('web'), ['node server.js'])
531531
self.assertEqual(app._get_command('cmd'), [])
532532

533533
# ensure we can override the cmd process type in a Procfile
534534
build.procfile['cmd'] = 'node server.js'
535535
build.save()
536-
self.assertEqual(app._get_entrypoint('cmd'), [])
537-
self.assertEqual(app._get_command('cmd'), ["node", "server.js"])
538-
self.assertEqual(app._get_entrypoint('worker'), [])
539-
self.assertEqual(app._get_command('worker'), ["node", "worker.js"])
536+
self.assertEqual(app._get_entrypoint('cmd'), ['/bin/sh', '-c'])
537+
self.assertEqual(app._get_command('cmd'), ['node server.js'])
538+
self.assertEqual(app._get_entrypoint('worker'), ['/bin/sh', '-c'])
539+
self.assertEqual(app._get_command('worker'), ['node worker.js'])
540540

541541
# for backwards compatibility if no Procfile is supplied
542542
build.procfile = {}
@@ -577,7 +577,7 @@ def test_run_command_good(self, mock_requests):
577577
response = self.client.post(url, body)
578578
self.assertEqual(response.status_code, 200, response.data)
579579
app = App.objects.get(id=app_id)
580-
self.assertEqual(app._get_entrypoint('web'), [])
580+
self.assertEqual(app._get_entrypoint('web'), ['/bin/sh', '-c'])
581581

582582
# docker image workflow
583583
build.dockerfile = ''
@@ -588,7 +588,7 @@ def test_run_command_good(self, mock_requests):
588588
response = self.client.post(url, body)
589589
self.assertEqual(response.status_code, 200, response.data)
590590
app = App.objects.get(id=app_id)
591-
self.assertEqual(app._get_entrypoint('cmd'), [])
591+
self.assertEqual(app._get_entrypoint('cmd'), ['/bin/sh', '-c'])
592592

593593
# procfile workflow
594594
build.sha = 'somereallylongsha'
@@ -637,7 +637,7 @@ def test_run_not_fail_on_debug(self, mock_requests):
637637
response = self.client.post(url, body)
638638
self.assertEqual(response.status_code, 200, response.data)
639639
app = App.objects.get(id=app_id)
640-
self.assertEqual(app._get_entrypoint('web'), [])
640+
self.assertEqual(app._get_entrypoint('web'), ['/bin/sh', '-c'])
641641

642642
def test_scaling_does_not_add_run_proctypes_to_structure(self, mock_requests):
643643
"""Test that app info doesn't show transient "run" proctypes."""

0 commit comments

Comments
 (0)