|
@@ -1,13 +1,14 @@
|
|
|
from __future__ import unicode_literals
|
|
|
from __future__ import absolute_import
|
|
|
import logging
|
|
|
-
|
|
|
from functools import reduce
|
|
|
+
|
|
|
+from docker.errors import APIError
|
|
|
+
|
|
|
from .config import get_service_name_from_net, ConfigurationError
|
|
|
from .const import LABEL_PROJECT, LABEL_ONE_OFF
|
|
|
-from .service import Service
|
|
|
+from .service import Service, check_for_legacy_containers
|
|
|
from .container import Container
|
|
|
-from docker.errors import APIError
|
|
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
@@ -82,6 +83,10 @@ class Project(object):
|
|
|
volumes_from=volumes_from, **service_dict))
|
|
|
return project
|
|
|
|
|
|
+ @property
|
|
|
+ def service_names(self):
|
|
|
+ return [service.name for service in self.services]
|
|
|
+
|
|
|
def get_service(self, name):
|
|
|
"""
|
|
|
Retrieve a service by name. Raises NoSuchService
|
|
@@ -109,7 +114,7 @@ class Project(object):
|
|
|
"""
|
|
|
if service_names is None or len(service_names) == 0:
|
|
|
return self.get_services(
|
|
|
- service_names=[s.name for s in self.services],
|
|
|
+ service_names=self.service_names,
|
|
|
include_deps=include_deps
|
|
|
)
|
|
|
else:
|
|
@@ -230,10 +235,21 @@ class Project(object):
|
|
|
service.remove_stopped(**options)
|
|
|
|
|
|
def containers(self, service_names=None, stopped=False, one_off=False):
|
|
|
- return [Container.from_ps(self.client, container)
|
|
|
- for container in self.client.containers(
|
|
|
- all=stopped,
|
|
|
- filters={'label': self.labels(one_off=one_off)})]
|
|
|
+ containers = [
|
|
|
+ Container.from_ps(self.client, container)
|
|
|
+ for container in self.client.containers(
|
|
|
+ all=stopped,
|
|
|
+ filters={'label': self.labels(one_off=one_off)})]
|
|
|
+
|
|
|
+ if not containers:
|
|
|
+ check_for_legacy_containers(
|
|
|
+ self.client,
|
|
|
+ self.name,
|
|
|
+ self.service_names,
|
|
|
+ stopped=stopped,
|
|
|
+ one_off=one_off)
|
|
|
+
|
|
|
+ return containers
|
|
|
|
|
|
def _inject_deps(self, acc, service):
|
|
|
net_name = service.get_net_name()
|