Make smart recreate the default
Add --force-recreate flag to enable the old default behaviour of recreating everything. Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
This commit is contained in:
parent
b2cb5a48d2
commit
ced94a3504
8 changed files with 77 additions and 53 deletions
|
|
@ -9,6 +9,7 @@ from mock import patch
|
|||
|
||||
from .testcases import DockerClientTestCase
|
||||
from compose.cli.main import TopLevelCommand
|
||||
from compose.cli.errors import UserError
|
||||
from compose.project import NoSuchService
|
||||
|
||||
|
||||
|
|
@ -136,21 +137,21 @@ class CLITestCase(DockerClientTestCase):
|
|||
self.assertEqual(len(db.containers()), 0)
|
||||
self.assertEqual(len(console.containers()), 0)
|
||||
|
||||
def test_up_with_recreate(self):
|
||||
def test_up_with_force_recreate(self):
|
||||
self.command.dispatch(['up', '-d'], None)
|
||||
service = self.project.get_service('simple')
|
||||
self.assertEqual(len(service.containers()), 1)
|
||||
|
||||
old_ids = [c.id for c in service.containers()]
|
||||
|
||||
self.command.dispatch(['up', '-d'], None)
|
||||
self.command.dispatch(['up', '-d', '--force-recreate'], None)
|
||||
self.assertEqual(len(service.containers()), 1)
|
||||
|
||||
new_ids = [c.id for c in service.containers()]
|
||||
|
||||
self.assertNotEqual(old_ids, new_ids)
|
||||
|
||||
def test_up_with_keep_old(self):
|
||||
def test_up_with_no_recreate(self):
|
||||
self.command.dispatch(['up', '-d'], None)
|
||||
service = self.project.get_service('simple')
|
||||
self.assertEqual(len(service.containers()), 1)
|
||||
|
|
@ -164,6 +165,10 @@ class CLITestCase(DockerClientTestCase):
|
|||
|
||||
self.assertEqual(old_ids, new_ids)
|
||||
|
||||
def test_up_with_force_recreate_and_no_recreate(self):
|
||||
with self.assertRaises(UserError):
|
||||
self.command.dispatch(['up', '-d', '--force-recreate', '--no-recreate'], None)
|
||||
|
||||
def test_up_with_timeout(self):
|
||||
self.command.dispatch(['up', '-d', '-t', '1'], None)
|
||||
service = self.project.get_service('simple')
|
||||
|
|
|
|||
|
|
@ -197,7 +197,7 @@ class ProjectTest(DockerClientTestCase):
|
|||
self.assertEqual(len(db.containers()), 1)
|
||||
self.assertEqual(len(web.containers()), 1)
|
||||
|
||||
def test_project_up_recreates_containers(self):
|
||||
def test_recreate_preserves_volumes(self):
|
||||
web = self.create_service('web')
|
||||
db = self.create_service('db', volumes=['/etc'])
|
||||
project = Project('composetest', [web, db], self.client)
|
||||
|
|
@ -209,7 +209,7 @@ class ProjectTest(DockerClientTestCase):
|
|||
old_db_id = project.containers()[0].id
|
||||
db_volume_path = project.containers()[0].get('Volumes./etc')
|
||||
|
||||
project.up()
|
||||
project.up(force_recreate=True)
|
||||
self.assertEqual(len(project.containers()), 2)
|
||||
|
||||
db_container = [c for c in project.containers() if 'db' in c.name][0]
|
||||
|
|
|
|||
|
|
@ -17,14 +17,14 @@ class ResilienceTest(DockerClientTestCase):
|
|||
self.host_path = container.get('Volumes')['/var/db']
|
||||
|
||||
def test_successful_recreate(self):
|
||||
self.project.up()
|
||||
self.project.up(force_recreate=True)
|
||||
container = self.db.containers()[0]
|
||||
self.assertEqual(container.get('Volumes')['/var/db'], self.host_path)
|
||||
|
||||
def test_create_failure(self):
|
||||
with mock.patch('compose.service.Service.create_container', crash):
|
||||
with self.assertRaises(Crash):
|
||||
self.project.up()
|
||||
self.project.up(force_recreate=True)
|
||||
|
||||
self.project.up()
|
||||
container = self.db.containers()[0]
|
||||
|
|
@ -33,7 +33,7 @@ class ResilienceTest(DockerClientTestCase):
|
|||
def test_start_failure(self):
|
||||
with mock.patch('compose.service.Service.start_container', crash):
|
||||
with self.assertRaises(Crash):
|
||||
self.project.up()
|
||||
self.project.up(force_recreate=True)
|
||||
|
||||
self.project.up()
|
||||
container = self.db.containers()[0]
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ from .testcases import DockerClientTestCase
|
|||
|
||||
class ProjectTestCase(DockerClientTestCase):
|
||||
def run_up(self, cfg, **kwargs):
|
||||
kwargs.setdefault('smart_recreate', True)
|
||||
kwargs.setdefault('timeout', 1)
|
||||
|
||||
project = self.make_project(cfg)
|
||||
|
|
@ -155,7 +154,7 @@ class ProjectWithDependenciesTest(ProjectTestCase):
|
|||
|
||||
def converge(service,
|
||||
allow_recreate=True,
|
||||
smart_recreate=False,
|
||||
force_recreate=False,
|
||||
insecure_registry=False,
|
||||
do_build=True):
|
||||
"""
|
||||
|
|
@ -164,7 +163,7 @@ def converge(service,
|
|||
"""
|
||||
plan = service.convergence_plan(
|
||||
allow_recreate=allow_recreate,
|
||||
smart_recreate=smart_recreate,
|
||||
force_recreate=force_recreate,
|
||||
)
|
||||
|
||||
return service.execute_convergence_plan(
|
||||
|
|
@ -180,7 +179,7 @@ class ServiceStateTest(DockerClientTestCase):
|
|||
|
||||
def test_trigger_create(self):
|
||||
web = self.create_service('web')
|
||||
self.assertEqual(('create', []), web.convergence_plan(smart_recreate=True))
|
||||
self.assertEqual(('create', []), web.convergence_plan())
|
||||
|
||||
def test_trigger_noop(self):
|
||||
web = self.create_service('web')
|
||||
|
|
@ -188,7 +187,7 @@ class ServiceStateTest(DockerClientTestCase):
|
|||
web.start()
|
||||
|
||||
web = self.create_service('web')
|
||||
self.assertEqual(('noop', [container]), web.convergence_plan(smart_recreate=True))
|
||||
self.assertEqual(('noop', [container]), web.convergence_plan())
|
||||
|
||||
def test_trigger_start(self):
|
||||
options = dict(command=["top"])
|
||||
|
|
@ -205,7 +204,7 @@ class ServiceStateTest(DockerClientTestCase):
|
|||
web = self.create_service('web', **options)
|
||||
self.assertEqual(
|
||||
('start', containers[0:1]),
|
||||
web.convergence_plan(smart_recreate=True),
|
||||
web.convergence_plan(),
|
||||
)
|
||||
|
||||
def test_trigger_recreate_with_config_change(self):
|
||||
|
|
@ -213,14 +212,14 @@ class ServiceStateTest(DockerClientTestCase):
|
|||
container = web.create_container()
|
||||
|
||||
web = self.create_service('web', command=["top", "-d", "1"])
|
||||
self.assertEqual(('recreate', [container]), web.convergence_plan(smart_recreate=True))
|
||||
self.assertEqual(('recreate', [container]), web.convergence_plan())
|
||||
|
||||
def test_trigger_recreate_with_nonexistent_image_tag(self):
|
||||
web = self.create_service('web', image="busybox:latest")
|
||||
container = web.create_container()
|
||||
|
||||
web = self.create_service('web', image="nonexistent-image")
|
||||
self.assertEqual(('recreate', [container]), web.convergence_plan(smart_recreate=True))
|
||||
self.assertEqual(('recreate', [container]), web.convergence_plan())
|
||||
|
||||
def test_trigger_recreate_with_image_change(self):
|
||||
repo = 'composetest_myimage'
|
||||
|
|
@ -240,7 +239,7 @@ class ServiceStateTest(DockerClientTestCase):
|
|||
self.client.remove_container(c)
|
||||
|
||||
web = self.create_service('web', image=image)
|
||||
self.assertEqual(('recreate', [container]), web.convergence_plan(smart_recreate=True))
|
||||
self.assertEqual(('recreate', [container]), web.convergence_plan())
|
||||
|
||||
finally:
|
||||
self.client.remove_image(image)
|
||||
|
|
@ -263,7 +262,7 @@ class ServiceStateTest(DockerClientTestCase):
|
|||
web.build()
|
||||
|
||||
web = self.create_service('web', build=context)
|
||||
self.assertEqual(('recreate', [container]), web.convergence_plan(smart_recreate=True))
|
||||
self.assertEqual(('recreate', [container]), web.convergence_plan())
|
||||
finally:
|
||||
shutil.rmtree(context)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue