9318: remove :output method in favor of :outputs method and correct the logic for...
[arvados.git] / services / dockercleaner / arvados_docker / cleaner.py
index f9d727f2ec54ec96d5e006e187a58b3969507b89..88b8a4bc3c5f3330d42859ee9a40d0b3ffdd2e47 100755 (executable)
@@ -177,10 +177,10 @@ class DockerImageUseRecorder(DockerEventListener):
 class DockerImageCleaner(DockerImageUseRecorder):
     event_handlers = DockerImageUseRecorder.event_handlers.copy()
 
-    def __init__(self, images, docker_client, events, remove_stopped_containers=False):
+    def __init__(self, images, docker_client, events, remove_containers_onexit=False):
         super().__init__(images, docker_client, events)
         self.logged_unknown = set()
-        self.remove_stopped_containers = remove_stopped_containers
+        self.remove_containers_onexit = remove_containers_onexit
 
     def new_container(self, event, container_hash):
         container_image_id = container_hash['Image']
@@ -191,7 +191,7 @@ class DockerImageCleaner(DockerImageUseRecorder):
 
     def _remove_container(self, cid):
         try:
-            self.docker_client.remove_container(cid)
+            self.docker_client.remove_container(cid, v=True)
         except docker.errors.APIError as error:
             logger.warning("Failed to remove container %s: %s", cid, error)
         else:
@@ -199,9 +199,8 @@ class DockerImageCleaner(DockerImageUseRecorder):
 
     @event_handlers.on('die')
     def clean_container(self, event=None):
-        if not self.remove_stopped_containers:
-            return
-        self._remove_container(event['id'])
+        if self.remove_containers_onexit:
+            self._remove_container(event['id'])
 
     def check_stopped_containers(self, remove=False):
         logger.info("Checking for stopped containers")
@@ -278,7 +277,7 @@ def run(args, docker_client):
     use_recorder.run()
     cleaner = DockerImageCleaner(
         images, docker_client, docker_client.events(since=start_time),
-        remove_stopped_containers=args.remove_stopped_containers != 'never')
+        remove_containers_onexit=args.remove_stopped_containers != 'never')
     cleaner.check_stopped_containers(
         remove=args.remove_stopped_containers == 'always')
     logger.info("Checking image quota at startup")
@@ -289,7 +288,7 @@ def run(args, docker_client):
 def main(arguments):
     args = parse_arguments(arguments)
     setup_logging(args)
-    run(args, docker.Client())
+    run(args, docker.Client(version='1.14'))
 
 if __name__ == '__main__':
     main(sys.argv[1:])