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