Skip to content
This repository was archived by the owner on Apr 18, 2018. It is now read-only.

Commit 367c3fd

Browse files
committed
Add a no-build option to fig up, to save time when services were already freshly built.
Signed-off-by: Daniel Nephin <dnephin@gmail.com>
1 parent b0fd594 commit 367c3fd

File tree

4 files changed

+41
-8
lines changed

4 files changed

+41
-8
lines changed

fig/cli/main.py

+2
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,7 @@ def up(self, project, options):
417417
--no-color Produce monochrome output.
418418
--no-deps Don't start linked services.
419419
--no-recreate If containers already exist, don't recreate them.
420+
--no-build Don't build an image if it's missing
420421
"""
421422
insecure_registry = options['--allow-insecure-ssl']
422423
detached = options['-d']
@@ -432,6 +433,7 @@ def up(self, project, options):
432433
start_links=start_links,
433434
recreate=recreate,
434435
insecure_registry=insecure_registry,
436+
do_build=not options['--no-build'],
435437
)
436438

437439
to_attach = [c for s in project.get_services(service_names) for c in s.containers()]

fig/project.py

+12-3
Original file line numberDiff line numberDiff line change
@@ -167,14 +167,23 @@ def build(self, service_names=None, no_cache=False):
167167
else:
168168
log.info('%s uses an image, skipping' % service.name)
169169

170-
def up(self, service_names=None, start_links=True, recreate=True, insecure_registry=False):
170+
def up(self,
171+
service_names=None,
172+
start_links=True,
173+
recreate=True,
174+
insecure_registry=False,
175+
do_build=True):
171176
running_containers = []
172177
for service in self.get_services(service_names, include_links=start_links):
173178
if recreate:
174-
for (_, container) in service.recreate_containers(insecure_registry=insecure_registry):
179+
for (_, container) in service.recreate_containers(
180+
insecure_registry=insecure_registry,
181+
do_build=do_build):
175182
running_containers.append(container)
176183
else:
177-
for container in service.start_or_create_containers(insecure_registry=insecure_registry):
184+
for container in service.start_or_create_containers(
185+
insecure_registry=insecure_registry,
186+
do_build=do_build):
178187
running_containers.append(container)
179188

180189
return running_containers

fig/service.py

+10-5
Original file line numberDiff line numberDiff line change
@@ -211,15 +211,18 @@ def create_container(self,
211211
return Container.create(self.client, **container_options)
212212
raise
213213

214-
def recreate_containers(self, insecure_registry=False, **override_options):
214+
def recreate_containers(self, insecure_registry=False, do_build=True, **override_options):
215215
"""
216216
If a container for this service doesn't exist, create and start one. If there are
217217
any, stop them, create+start new ones, and remove the old containers.
218218
"""
219219
containers = self.containers(stopped=True)
220220
if not containers:
221221
log.info("Creating %s..." % self._next_container_name(containers))
222-
container = self.create_container(insecure_registry=insecure_registry, **override_options)
222+
container = self.create_container(
223+
insecure_registry=insecure_registry,
224+
do_build=do_build,
225+
**override_options)
223226
self.start_container(container)
224227
return [(None, container)]
225228
else:
@@ -257,7 +260,7 @@ def recreate_container(self, container, **override_options):
257260
container.remove()
258261

259262
options = dict(override_options)
260-
new_container = self.create_container(**options)
263+
new_container = self.create_container(do_build=False, **options)
261264
self.start_container(new_container, intermediate_container=intermediate_container)
262265

263266
intermediate_container.remove()
@@ -302,12 +305,14 @@ def start_container(self, container, intermediate_container=None, **override_opt
302305
)
303306
return container
304307

305-
def start_or_create_containers(self, insecure_registry=False):
308+
def start_or_create_containers(self, insecure_registry=False, do_build=True):
306309
containers = self.containers(stopped=True)
307310

308311
if not containers:
309312
log.info("Creating %s..." % self._next_container_name(containers))
310-
new_container = self.create_container(insecure_registry=insecure_registry)
313+
new_container = self.create_container(
314+
insecure_registry=insecure_registry,
315+
do_build=do_build)
311316
return [self.start_container(new_container)]
312317
else:
313318
return [self.start_container_if_stopped(c) for c in containers]

tests/unit/service_test.py

+17
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,23 @@ def test_create_container_from_insecure_registry(
215215
mock_log.info.assert_called_once_with(
216216
'Pulling image someimage:sometag...')
217217

218+
def test_create_container_with_build(self):
219+
self.mock_client.images.return_value = []
220+
service = Service('foo', client=self.mock_client, build='.')
221+
service.build = mock.create_autospec(service.build)
222+
service.create_container(do_build=True)
223+
224+
self.mock_client.images.assert_called_once_with(name=service.full_name)
225+
service.build.assert_called_once_with()
226+
227+
def test_create_container_no_build(self):
228+
self.mock_client.images.return_value = []
229+
service = Service('foo', client=self.mock_client, build='.')
230+
service.create_container(do_build=False)
231+
232+
self.assertFalse(self.mock_client.images.called)
233+
self.assertFalse(self.mock_client.build.called)
234+
218235

219236
class ServiceVolumesTest(unittest.TestCase):
220237

0 commit comments

Comments
 (0)