From a3d6b264ef9042254038408149c5c51b204e75de Mon Sep 17 00:00:00 2001 From: Giuseppe Scrivano Date: Tue, 3 Apr 2018 21:52:38 +0200 Subject: [PATCH] docker: restore uninstall when no container name is specified write_install does not write twice the same container id/name. Closes: https://github.com/projectatomic/atomic/issues/1217 Signed-off-by: Giuseppe Scrivano --- Atomic/util.py | 11 ++++++++++- tests/integration/test_display.sh | 8 ++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Atomic/util.py b/Atomic/util.py index c8e40c0f..09079258 100644 --- a/Atomic/util.py +++ b/Atomic/util.py @@ -901,6 +901,10 @@ def write_install_data_locked(cls, new_data, append=False): for k, v in new_data.items(): if k not in install_data: install_data[k] = [] + for index, c in enumerate(install_data[k]): + if c.get('container_name') == v.get('container_name') and c.get('id') == v.get('id'): + del install_data[k][index] + break install_data[k].append(v) temp_file = tempfile.NamedTemporaryFile(mode='w', delete=False) @@ -943,8 +947,13 @@ def delete_by_id(cls, iid, name, ignore=False): install_data = cls.read_install_data_locked() for installed_image in install_data: containers = install_data[installed_image] + if not name and len(containers) > 1: + raise ValueError("Name not specified but more than one container installed") + for index, container in enumerate(containers): - if container['id'] == iid and container['container_name'] == name: + if name is not None and container['container_name'] != name: + continue + if container['id'] == iid: del containers[index] install_data[installed_image] = containers if len(containers) == 0: diff --git a/tests/integration/test_display.sh b/tests/integration/test_display.sh index f3d7f76e..32ce5d7d 100755 --- a/tests/integration/test_display.sh +++ b/tests/integration/test_display.sh @@ -91,3 +91,11 @@ if [[ ${OUTPUT} != ${RESULT} ]]; then echo "Uninstall display failed for uninstall-1" exit 1 fi + +# Add test case for issue #1217 +export ATOMIC_INSTALL_JSON=empty.json +${ATOMIC} install atomic-test-1 +${ATOMIC} run atomic-test-1 +${ATOMIC} stop atomic-test-1 +${ATOMIC} --assumeyes containers delete atomic-test-1 +${ATOMIC} --debug uninstall atomic-test-1