diff --git a/fig/cli/main.py b/fig/cli/main.py index e64769f0..4d65ce9e 100644 --- a/fig/cli/main.py +++ b/fig/cli/main.py @@ -170,19 +170,23 @@ class TopLevelCommand(Command): """ Remove stopped service containers. - Usage: rm [SERVICE...] + Usage: rm [options] [SERVICE...] Options: - -v Remove volumes associated with containers + --force Don't ask to confirm removal + -v Remove volumes associated with containers """ all_containers = self.project.containers(service_names=options['SERVICE'], stopped=True) stopped_containers = [c for c in all_containers if not c.is_running] if len(stopped_containers) > 0: print("Going to remove", list_containers(stopped_containers)) - if yesno("Are you sure? [yN] ", default=False): - self.project.remove_stopped(service_names=options['SERVICE'], - remove_volumes=options['-v']) + if options.get('--force') \ + or yesno("Are you sure? [yN] ", default=False): + self.project.remove_stopped( + service_names=options['SERVICE'], + v=options.get('-v', False) + ) else: print("No stopped containers") diff --git a/fig/container.py b/fig/container.py index a38828d0..3b004b92 100644 --- a/fig/container.py +++ b/fig/container.py @@ -112,8 +112,7 @@ class Container(object): return self.client.kill(self.id) def remove(self, **options): - v = options.get('remove_volumes', False) - return self.client.remove_container(self.id, v=v) + return self.client.remove_container(self.id, **options) def inspect_if_not_inspected(self): if not self.has_been_inspected: diff --git a/tests/cli_test.py b/tests/cli_test.py index 61e30b7a..2b81e26b 100644 --- a/tests/cli_test.py +++ b/tests/cli_test.py @@ -32,7 +32,7 @@ class CLITestCase(DockerClientTestCase): self.assertIn('fig_simple_1', mock_stdout.getvalue()) @patch('sys.stdout', new_callable=StringIO) - def test_default_figfile(self, mock_stdout): + def test_ps_default_figfile(self, mock_stdout): self.command.base_dir = 'tests/fixtures/multiple-figfiles' self.command.dispatch(['up', '-d'], None) self.command.dispatch(['ps'], None) @@ -43,7 +43,7 @@ class CLITestCase(DockerClientTestCase): self.assertNotIn('fig_yetanother_1', output) @patch('sys.stdout', new_callable=StringIO) - def test_alternate_figfile(self, mock_stdout): + def test_ps_alternate_figfile(self, mock_stdout): self.command.base_dir = 'tests/fixtures/multiple-figfiles' self.command.dispatch(['-f', 'fig2.yml', 'up', '-d'], None) self.command.dispatch(['-f', 'fig2.yml', 'ps'], None) @@ -53,6 +53,14 @@ class CLITestCase(DockerClientTestCase): self.assertNotIn('fig_another_1', output) self.assertIn('fig_yetanother_1', output) + def test_rm(self): + service = self.command.project.get_service('simple') + service.create_container() + service.kill() + self.assertEqual(len(service.containers(stopped=True)), 1) + self.command.dispatch(['rm', '--force'], None) + self.assertEqual(len(service.containers(stopped=True)), 0) + def test_scale(self): project = self.command.project @@ -74,4 +82,3 @@ class CLITestCase(DockerClientTestCase): self.command.scale({'SERVICE=NUM': ['simple=0', 'another=0']}) self.assertEqual(len(project.get_service('simple').containers()), 0) self.assertEqual(len(project.get_service('another').containers()), 0) -