浏览代码

Add "fig build" command

Ben Firshman 11 年之前
父节点
当前提交
a39db86651
共有 3 个文件被更改,包括 20 次插入1 次删除
  1. 9 0
      fig/cli/main.py
  2. 7 0
      fig/project.py
  3. 4 1
      fig/service.py

+ 9 - 0
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.

+ 7 - 0
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)

+ 4 - 1
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.