From f4282f0dbaf589d90d4ac753bdb1239ebdebbf5c Mon Sep 17 00:00:00 2001 From: Giuseppe Scrivano Date: Fri, 22 Jul 2016 12:39:50 +0200 Subject: [PATCH] iQIcBAABAgAGBQJXl4HqAAoJECY9bfLhY+HqrLwP/R4HjkMURTKdkMVqfPFklTQd DhhPRwdholRaXs192P0FFFPmLjNGB2VZzsNRpWhhNMt27Bkt8ivkxlcFW8OJoCmE 3Fs/l9hAYgf5NvIUISIVNUxoN2vd5gIczgm5FH7ZNN4J4a3j9PX8dpzmz+kjzfUL ZZjhZdcfDnd/4rb4pDrZ248wprUlzLu0mLpm9qeUgnRZqSHfx1zvPu9VgIPMq+jK Bta7NVC4uVWv9tLd74KmTeGT/hfzbjfsmjutw+qdIsnp80xJ6jhvQx+VMhF6C/cN 4f4GTV5B0t1i0Jc1vrgyfqyqCN5XpqTS1dgp8Bx80Pa36Eok1JmzGw0gsgJ/tpEE TiZTVe83EGDF/esZy2KfpnvAqIjoBRm/SuDMOHhQ8RnTfOmqY1eV0hQ1ZsfKyDUs 6gHmYgOEv+EWUM0PqyZ3UfgbOjSS626u3JGPxBwVVdDbeeW3ptsST8FlEhB+6MXf +g0W8ho44NL7j/PN6c5mdIEIFvjwphQ8PCPKtGA2Uc489RMaHME1miMd4rl5hyBO ed5fKB4qp9DeC8VWIQEz0ALtj3u0UvSGYAXMlSlnvSnwl5tu8dw7xpGqiNJQEDni +FnBNuBwcn/6HsDDoBP6eeiMkA4uFUnsa50bJsUKiuTQM0DF7nc8Y6lrLVmK8Iur X0Q8d1mZ8psYHLzSh/bQ =blTC -----END PGP SIGNATURE----- delete: support images from the OSTree repository Signed-off-by: Giuseppe Scrivano Closes: #497 Approved by: jlebon --- Atomic/delete.py | 19 +++++++++++-------- Atomic/syscontainers.py | 11 +++++++++++ tests/integration/test_system_containers.sh | 4 ++-- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/Atomic/delete.py b/Atomic/delete.py index 647b4173..330601dc 100644 --- a/Atomic/delete.py +++ b/Atomic/delete.py @@ -73,12 +73,15 @@ def _delete_remote(self, targets): def _delete_local(self, targets): results = 0 for target in targets: - try: - self.d.remove_image(target) - except NotFound as e: - util.write_err("Failed to delete Image {}: {}".format(target, e)) - results = 2 - except APIError as e: - util.write_err("Failed operation for delete Image {}: {}".format(target, e)) - results = 2 + if self.syscontainers.has_system_container_image(target): + self.syscontainers.delete_image(target) + else: + try: + self.d.remove_image(target) + except NotFound as e: + util.write_err("Failed to delete Image {}: {}".format(target, e)) + results = 2 + except APIError as e: + util.write_err("Failed operation for delete Image {}: {}".format(target, e)) + results = 2 return results diff --git a/Atomic/syscontainers.py b/Atomic/syscontainers.py index 9d7520c2..04f22093 100644 --- a/Atomic/syscontainers.py +++ b/Atomic/syscontainers.py @@ -358,6 +358,17 @@ def get_system_containers(self): ret.append(container) return ret + def delete_image(self, image): + repo = self._get_ostree_repo() + if not repo: + return + imagebranch = SystemContainers._get_ostree_image_branch(image) + commit_rev = repo.resolve_rev(imagebranch, True) + if not commit_rev[1]: + return + ref = OSTree.parse_refspec(imagebranch) + repo.set_ref_immediate(ref[1], ref[2], None) + def get_system_images(self, repo=None): if repo is None: repo = self._get_ostree_repo() diff --git a/tests/integration/test_system_containers.sh b/tests/integration/test_system_containers.sh index 46081c75..5c48a2e7 100755 --- a/tests/integration/test_system_containers.sh +++ b/tests/integration/test_system_containers.sh @@ -109,8 +109,8 @@ test \! -e ${ATOMIC_OSTREE_CHECKOUT_PATH}/${NAME}.0 test \! -e ${ATOMIC_OSTREE_CHECKOUT_PATH}/${NAME}.1 # check that there are not any "ociimage/" prefixed branch left after images prune -ostree --repo=${ATOMIC_OSTREE_REPO} refs --delete "ociimage/atomic-test-system-latest" -ostree --repo=${ATOMIC_OSTREE_REPO} refs --delete "ociimage/busybox-latest" +${ATOMIC} images delete -f atomic-test-system +${ATOMIC} images delete -f busybox ${ATOMIC} images prune OUTPUT=$(! ostree --repo=${ATOMIC_OSTREE_REPO} refs | grep -c ociimage) if test $OUTPUT \!= 0; then