From a39db86651a62f9abda12f4272d10b2e4c5cff3b Mon Sep 17 00:00:00 2001 From: Ben Firshman Date: Thu, 2 Jan 2014 15:28:33 +0000 Subject: [PATCH] Add "fig build" command --- fig/cli/main.py | 9 +++++++++ fig/project.py | 7 +++++++ fig/service.py | 5 ++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/fig/cli/main.py b/fig/cli/main.py index f5b4f166..2f014a36 100644 --- a/fig/cli/main.py +++ b/fig/cli/main.py @@ -71,6 +71,7 @@ class TopLevelCommand(Command): --version Print version and exit Commands: + build Build or rebuild services kill Kill containers logs View output from containers ps List containers @@ -86,6 +87,14 @@ class TopLevelCommand(Command): options['version'] = "fig %s" % __version__ return options + def build(self, options): + """ + Build or rebuild services. + + Usage: build [SERVICE...] + """ + self.project.build(service_names=options['SERVICE']) + def kill(self, options): """ Kill containers. diff --git a/fig/project.py b/fig/project.py index eb9e8d43..9180dace 100644 --- a/fig/project.py +++ b/fig/project.py @@ -93,6 +93,13 @@ class Project(object): for service in self.get_services(service_names): service.kill(**options) + def build(self, service_names=None, **options): + for service in self.get_services(service_names): + if service.can_be_built(): + service.build(**options) + else: + log.info('%s uses an image, skipping') + def remove_stopped(self, service_names=None, **options): for service in self.get_services(service_names): service.remove_stopped(**options) diff --git a/fig/service.py b/fig/service.py index 537842db..3fb0e428 100644 --- a/fig/service.py +++ b/fig/service.py @@ -137,7 +137,7 @@ class Service(object): if 'volumes' in container_options: container_options['volumes'] = dict((v.split(':')[1], {}) for v in container_options['volumes']) - if 'build' in self.options: + if self.can_be_built(): if len(self.client.images(name=self._build_tag_name())) == 0: self.build() container_options['image'] = self._build_tag_name() @@ -167,6 +167,9 @@ class Service(object): return image_id + def can_be_built(self): + return 'build' in self.options + def _build_tag_name(self): """ The tag to give to images built for this service.