mirror of https://github.com/docker/compose.git
Bail out immediately if there are legacy containers
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
This commit is contained in:
parent
889d3636f4
commit
0b4d9401ee
|
@ -33,7 +33,7 @@ def main():
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
log.error("\nAborting.")
|
log.error("\nAborting.")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
except (UserError, NoSuchService, ConfigurationError) as e:
|
except (UserError, NoSuchService, ConfigurationError, legacy.LegacyContainersError) as e:
|
||||||
log.error(e.msg)
|
log.error(e.msg)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
except NoSuchCommand as e:
|
except NoSuchCommand as e:
|
||||||
|
|
|
@ -10,6 +10,20 @@ log = logging.getLogger(__name__)
|
||||||
# TODO: remove this section when migrate_project_to_labels is removed
|
# TODO: remove this section when migrate_project_to_labels is removed
|
||||||
NAME_RE = re.compile(r'^([^_]+)_([^_]+)_(run_)?(\d+)$')
|
NAME_RE = re.compile(r'^([^_]+)_([^_]+)_(run_)?(\d+)$')
|
||||||
|
|
||||||
|
ERROR_MESSAGE_FORMAT = """
|
||||||
|
Compose found the following containers without labels:
|
||||||
|
|
||||||
|
{names_list}
|
||||||
|
|
||||||
|
As of Compose 1.3.0, containers are identified with labels instead of naming convention. If you want to continue using these containers, run:
|
||||||
|
|
||||||
|
$ docker-compose migrate-to-labels
|
||||||
|
|
||||||
|
Alternatively, remove them:
|
||||||
|
|
||||||
|
$ docker rm -f {rm_args}
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
def check_for_legacy_containers(
|
def check_for_legacy_containers(
|
||||||
client,
|
client,
|
||||||
|
@ -21,20 +35,30 @@ def check_for_legacy_containers(
|
||||||
and warn the user that those containers may need to be migrated to
|
and warn the user that those containers may need to be migrated to
|
||||||
using labels, so that compose can find them.
|
using labels, so that compose can find them.
|
||||||
"""
|
"""
|
||||||
names = get_legacy_container_names(
|
names = list(get_legacy_container_names(
|
||||||
client,
|
client,
|
||||||
project,
|
project,
|
||||||
services,
|
services,
|
||||||
stopped=stopped,
|
stopped=stopped,
|
||||||
one_off=one_off)
|
one_off=one_off))
|
||||||
|
|
||||||
for name in names:
|
if names:
|
||||||
log.warn(
|
raise LegacyContainersError(names)
|
||||||
"Compose found a found a container named %s without any "
|
|
||||||
"labels. As of compose 1.3.0 containers are identified with "
|
|
||||||
"labels instead of naming convention. If you'd like compose "
|
class LegacyContainersError(Exception):
|
||||||
"to use this container, please run "
|
def __init__(self, names):
|
||||||
"`docker-compose migrate-to-labels`" % (name,))
|
self.names = names
|
||||||
|
|
||||||
|
self.msg = ERROR_MESSAGE_FORMAT.format(
|
||||||
|
names_list="\n".join(" {}".format(name) for name in names),
|
||||||
|
rm_args=" ".join(names),
|
||||||
|
)
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.msg
|
||||||
|
|
||||||
|
__str__ = __unicode__
|
||||||
|
|
||||||
|
|
||||||
def add_labels(project, container, name):
|
def add_labels(project, container, name):
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
import mock
|
|
||||||
|
|
||||||
from compose import legacy
|
from compose import legacy
|
||||||
from compose.project import Project
|
from compose.project import Project
|
||||||
from .testcases import DockerClientTestCase
|
from .testcases import DockerClientTestCase
|
||||||
|
@ -49,9 +47,13 @@ class ProjectTest(DockerClientTestCase):
|
||||||
self.assertEqual(len(self.get_names(one_off=True)), 1)
|
self.assertEqual(len(self.get_names(one_off=True)), 1)
|
||||||
|
|
||||||
def test_migration_to_labels(self):
|
def test_migration_to_labels(self):
|
||||||
with mock.patch.object(legacy, 'log', autospec=True) as mock_log:
|
with self.assertRaises(legacy.LegacyContainersError) as cm:
|
||||||
self.assertEqual(self.project.containers(stopped=True), [])
|
self.assertEqual(self.project.containers(stopped=True), [])
|
||||||
self.assertEqual(mock_log.warn.call_count, len(self.services))
|
|
||||||
|
self.assertEqual(
|
||||||
|
set(cm.exception.names),
|
||||||
|
set(['composetest_web_1', 'composetest_db_1']),
|
||||||
|
)
|
||||||
|
|
||||||
legacy.migrate_project_to_labels(self.project)
|
legacy.migrate_project_to_labels(self.project)
|
||||||
self.assertEqual(len(self.project.containers(stopped=True)), len(self.services))
|
self.assertEqual(len(self.project.containers(stopped=True)), len(self.services))
|
||||||
|
|
Loading…
Reference in New Issue