From a2ec572fdf45655d5805df0abb0a84e76e6f8bf3 Mon Sep 17 00:00:00 2001 From: Boris HUISGEN Date: Sun, 6 May 2018 12:26:37 +0200 Subject: [PATCH 1/4] Use same tag as service definition Signed-off-by: Boris HUISGEN --- compose/cli/main.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/compose/cli/main.py b/compose/cli/main.py index e0acf0711..69d6ca4dd 100644 --- a/compose/cli/main.py +++ b/compose/cli/main.py @@ -579,10 +579,18 @@ class TopLevelCommand(object): rows = [] for container in containers: image_config = container.image_config - repo_tags = ( - image_config['RepoTags'][0].rsplit(':', 1) if image_config['RepoTags'] - else ('', '') - ) + service = self.project.get_service(container.service) + if service.image_name in image_config['RepoTags']: + index = image_config['RepoTags'].index(service.image_name) + repo_tags = ( + image_config['RepoTags'][index].rsplit(':', 1) if image_config['RepoTags'] + else ('', '') + ) + else: + repo_tags = ( + image_config['RepoTags'][0].rsplit(':', 1) if image_config['RepoTags'] + else ('', '') + ) image_id = image_config['Id'].split(':')[1][:12] size = human_readable_file_size(image_config['Size']) rows.append([ From 1b668973a2f3c28370a77d8af51cd2dc082dda0a Mon Sep 17 00:00:00 2001 From: Boris HUISGEN Date: Thu, 5 Jul 2018 23:33:13 +0200 Subject: [PATCH 2/4] Add acceptance test Signed-off-by: Boris HUISGEN --- tests/acceptance/cli_test.py | 13 +++++++++++++ tests/fixtures/images-service-tag/dev/Dockerfile | 2 ++ .../images-service-tag/dev/docker-compose.yml | 6 ++++++ .../fixtures/images-service-tag/docker-compose.yml | 5 +++++ tests/fixtures/images-service-tag/prod/Dockerfile | 2 ++ .../images-service-tag/prod/docker-compose.yml | 6 ++++++ 6 files changed, 34 insertions(+) create mode 100644 tests/fixtures/images-service-tag/dev/Dockerfile create mode 100644 tests/fixtures/images-service-tag/dev/docker-compose.yml create mode 100644 tests/fixtures/images-service-tag/docker-compose.yml create mode 100644 tests/fixtures/images-service-tag/prod/Dockerfile create mode 100644 tests/fixtures/images-service-tag/prod/docker-compose.yml diff --git a/tests/acceptance/cli_test.py b/tests/acceptance/cli_test.py index 015180bc7..ef7e88990 100644 --- a/tests/acceptance/cli_test.py +++ b/tests/acceptance/cli_test.py @@ -2770,3 +2770,16 @@ class CLITestCase(DockerClientTestCase): with pytest.raises(DuplicateOverrideFileFound): get_project(self.base_dir, []) self.base_dir = None + + def test_images_use_service_tag(self): + pull_busybox(self.client) + self.base_dir = 'tests/fixtures/images-service-tag/dev' + self.dispatch(['build']) + self.base_dir = 'tests/fixtures/images-service-tag/prod' + self.dispatch(['build']) + self.base_dir = 'tests/fixtures/images-service-tag' + self.dispatch(['up', '-d']) + result = self.dispatch(['images']) + self.dispatch(['down']) + + assert 'dev' in result.stdout diff --git a/tests/fixtures/images-service-tag/dev/Dockerfile b/tests/fixtures/images-service-tag/dev/Dockerfile new file mode 100644 index 000000000..570e11ae3 --- /dev/null +++ b/tests/fixtures/images-service-tag/dev/Dockerfile @@ -0,0 +1,2 @@ +FROM busybox:latest +RUN touch /same-image diff --git a/tests/fixtures/images-service-tag/dev/docker-compose.yml b/tests/fixtures/images-service-tag/dev/docker-compose.yml new file mode 100644 index 000000000..cb01f6f35 --- /dev/null +++ b/tests/fixtures/images-service-tag/dev/docker-compose.yml @@ -0,0 +1,6 @@ +version: "2.2" + +services: + test: + image: busybox:dev + build: . diff --git a/tests/fixtures/images-service-tag/docker-compose.yml b/tests/fixtures/images-service-tag/docker-compose.yml new file mode 100644 index 000000000..824b9416b --- /dev/null +++ b/tests/fixtures/images-service-tag/docker-compose.yml @@ -0,0 +1,5 @@ +version: "2.2" + +services: + test: + image: busybox:dev diff --git a/tests/fixtures/images-service-tag/prod/Dockerfile b/tests/fixtures/images-service-tag/prod/Dockerfile new file mode 100644 index 000000000..570e11ae3 --- /dev/null +++ b/tests/fixtures/images-service-tag/prod/Dockerfile @@ -0,0 +1,2 @@ +FROM busybox:latest +RUN touch /same-image diff --git a/tests/fixtures/images-service-tag/prod/docker-compose.yml b/tests/fixtures/images-service-tag/prod/docker-compose.yml new file mode 100644 index 000000000..cb01f6f35 --- /dev/null +++ b/tests/fixtures/images-service-tag/prod/docker-compose.yml @@ -0,0 +1,6 @@ +version: "2.2" + +services: + test: + image: busybox:dev + build: . From 7d0fb7d3f33a81e39d08871d71f38cc68b51f39f Mon Sep 17 00:00:00 2001 From: Joffrey F Date: Thu, 20 Sep 2018 15:34:14 -0700 Subject: [PATCH 3/4] Rewrite images command method to decrease complexity Also ensure we properly detect matching image names when tag is omitted Signed-off-by: Joffrey F --- compose/cli/main.py | 70 ++++++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 33 deletions(-) diff --git a/compose/cli/main.py b/compose/cli/main.py index 69d6ca4dd..f2e76c1ad 100644 --- a/compose/cli/main.py +++ b/compose/cli/main.py @@ -568,39 +568,43 @@ class TopLevelCommand(object): if options['--quiet']: for image in set(c.image for c in containers): print(image.split(':')[1]) - else: - headers = [ - 'Container', - 'Repository', - 'Tag', - 'Image Id', - 'Size' - ] - rows = [] - for container in containers: - image_config = container.image_config - service = self.project.get_service(container.service) - if service.image_name in image_config['RepoTags']: - index = image_config['RepoTags'].index(service.image_name) - repo_tags = ( - image_config['RepoTags'][index].rsplit(':', 1) if image_config['RepoTags'] - else ('', '') - ) - else: - repo_tags = ( - image_config['RepoTags'][0].rsplit(':', 1) if image_config['RepoTags'] - else ('', '') - ) - image_id = image_config['Id'].split(':')[1][:12] - size = human_readable_file_size(image_config['Size']) - rows.append([ - container.name, - repo_tags[0], - repo_tags[1], - image_id, - size - ]) - print(Formatter().table(headers, rows)) + return + + def add_default_tag(img_name): + if ':' not in img_name.split('/')[-1]: + return '{}:latest'.format(img_name) + return img_name + + headers = [ + 'Container', + 'Repository', + 'Tag', + 'Image Id', + 'Size' + ] + rows = [] + for container in containers: + image_config = container.image_config + service = self.project.get_service(container.service) + index = 0 + img_name = add_default_tag(service.image_name) + if img_name in image_config['RepoTags']: + index = image_config['RepoTags'].index(img_name) + repo_tags = ( + image_config['RepoTags'][index].rsplit(':', 1) if image_config['RepoTags'] + else ('', '') + ) + + image_id = image_config['Id'].split(':')[1][:12] + size = human_readable_file_size(image_config['Size']) + rows.append([ + container.name, + repo_tags[0], + repo_tags[1], + image_id, + size + ]) + print(Formatter().table(headers, rows)) def kill(self, options): """ From 834acca49712735ec9e64b39991d8d66989bf1d6 Mon Sep 17 00:00:00 2001 From: Joffrey F Date: Thu, 20 Sep 2018 15:37:42 -0700 Subject: [PATCH 4/4] Update acceptance test for image matching Signed-off-by: Joffrey F --- tests/acceptance/cli_test.py | 11 ++++------- tests/fixtures/images-service-tag/Dockerfile | 2 ++ tests/fixtures/images-service-tag/dev/Dockerfile | 2 -- .../images-service-tag/dev/docker-compose.yml | 6 ------ .../fixtures/images-service-tag/docker-compose.yml | 13 +++++++++---- tests/fixtures/images-service-tag/prod/Dockerfile | 2 -- .../images-service-tag/prod/docker-compose.yml | 6 ------ 7 files changed, 15 insertions(+), 27 deletions(-) create mode 100644 tests/fixtures/images-service-tag/Dockerfile delete mode 100644 tests/fixtures/images-service-tag/dev/Dockerfile delete mode 100644 tests/fixtures/images-service-tag/dev/docker-compose.yml delete mode 100644 tests/fixtures/images-service-tag/prod/Dockerfile delete mode 100644 tests/fixtures/images-service-tag/prod/docker-compose.yml diff --git a/tests/acceptance/cli_test.py b/tests/acceptance/cli_test.py index ef7e88990..3d063d853 100644 --- a/tests/acceptance/cli_test.py +++ b/tests/acceptance/cli_test.py @@ -2773,13 +2773,10 @@ class CLITestCase(DockerClientTestCase): def test_images_use_service_tag(self): pull_busybox(self.client) - self.base_dir = 'tests/fixtures/images-service-tag/dev' - self.dispatch(['build']) - self.base_dir = 'tests/fixtures/images-service-tag/prod' - self.dispatch(['build']) self.base_dir = 'tests/fixtures/images-service-tag' - self.dispatch(['up', '-d']) + self.dispatch(['up', '-d', '--build']) result = self.dispatch(['images']) - self.dispatch(['down']) - assert 'dev' in result.stdout + assert re.search(r'foo1.+test[ \t]+dev', result.stdout) is not None + assert re.search(r'foo2.+test[ \t]+prod', result.stdout) is not None + assert re.search(r'foo3.+_foo3[ \t]+latest', result.stdout) is not None diff --git a/tests/fixtures/images-service-tag/Dockerfile b/tests/fixtures/images-service-tag/Dockerfile new file mode 100644 index 000000000..145e0202f --- /dev/null +++ b/tests/fixtures/images-service-tag/Dockerfile @@ -0,0 +1,2 @@ +FROM busybox:latest +RUN touch /foo diff --git a/tests/fixtures/images-service-tag/dev/Dockerfile b/tests/fixtures/images-service-tag/dev/Dockerfile deleted file mode 100644 index 570e11ae3..000000000 --- a/tests/fixtures/images-service-tag/dev/Dockerfile +++ /dev/null @@ -1,2 +0,0 @@ -FROM busybox:latest -RUN touch /same-image diff --git a/tests/fixtures/images-service-tag/dev/docker-compose.yml b/tests/fixtures/images-service-tag/dev/docker-compose.yml deleted file mode 100644 index cb01f6f35..000000000 --- a/tests/fixtures/images-service-tag/dev/docker-compose.yml +++ /dev/null @@ -1,6 +0,0 @@ -version: "2.2" - -services: - test: - image: busybox:dev - build: . diff --git a/tests/fixtures/images-service-tag/docker-compose.yml b/tests/fixtures/images-service-tag/docker-compose.yml index 824b9416b..aff3cf285 100644 --- a/tests/fixtures/images-service-tag/docker-compose.yml +++ b/tests/fixtures/images-service-tag/docker-compose.yml @@ -1,5 +1,10 @@ -version: "2.2" - +version: "2.4" services: - test: - image: busybox:dev + foo1: + build: . + image: test:dev + foo2: + build: . + image: test:prod + foo3: + build: . diff --git a/tests/fixtures/images-service-tag/prod/Dockerfile b/tests/fixtures/images-service-tag/prod/Dockerfile deleted file mode 100644 index 570e11ae3..000000000 --- a/tests/fixtures/images-service-tag/prod/Dockerfile +++ /dev/null @@ -1,2 +0,0 @@ -FROM busybox:latest -RUN touch /same-image diff --git a/tests/fixtures/images-service-tag/prod/docker-compose.yml b/tests/fixtures/images-service-tag/prod/docker-compose.yml deleted file mode 100644 index cb01f6f35..000000000 --- a/tests/fixtures/images-service-tag/prod/docker-compose.yml +++ /dev/null @@ -1,6 +0,0 @@ -version: "2.2" - -services: - test: - image: busybox:dev - build: .