def prune_ostree_images(self): repo = self._get_ostree_repo() if not repo: return refs = {} app_refs = [] for i in repo.list_refs()[1]: if i.startswith(OSTREE_OCIIMAGE_PREFIX): if len(i) == len(OSTREE_OCIIMAGE_PREFIX) + 64: refs[i] = False else: app_refs.append(i) def visit(rev): commit = repo.resolve_rev(rev, False)[1] manifest = SystemContainers._get_commit_metadata(repo, commit, "docker.manifest") if not manifest: return for layer in SystemContainers._get_layers_from_manifest(json.loads(manifest)): refs[OSTREE_OCIIMAGE_PREFIX + layer.replace("sha256:", "")] = True for app in app_refs: visit(app) for k, v in refs.items(): if not v: ref = OSTree.parse_refspec(k) self.write_out("Deleting %s" % k) repo.set_ref_immediate(ref[1], ref[2], None) return
def prune_ostree_images(self): repo = self._get_ostree_repo() if not repo: return refs = {} app_refs = [] for i in repo.list_refs()[1]: if i.startswith(OSTREE_OCIIMAGE_PREFIX): if len(i) == len(OSTREE_OCIIMAGE_PREFIX) + 64: refs[i] = False else: app_refs.append(i) def visit(rev): manifest = self._image_manifest(repo, repo.resolve_rev(rev, True)[1]) if not manifest: return for layer in SystemContainers.get_layers_from_manifest( json.loads(manifest)): refs[OSTREE_OCIIMAGE_PREFIX + layer.replace("sha256:", "")] = True for app in app_refs: visit(app) for k, v in refs.items(): if not v: ref = OSTree.parse_refspec(k) util.write_out("Deleting %s" % k) repo.set_ref_immediate(ref[1], ref[2], None)
def delete_image(self, image): repo = self._get_ostree_repo() if not repo: return imagebranch, commit_rev = self._resolve_image(repo, image) if not commit_rev: return ref = OSTree.parse_refspec(imagebranch) repo.set_ref_immediate(ref[1], ref[2], None)
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 _look_up_ostree_ref_for_app_id(repo_path, app_id, remote_filter=None): ostree_repo = OSTree.Repo.new(Gio.File.new_for_path(repo_path)) ostree_repo.open() target_ref = None _, refs = ostree_repo.list_refs() logging.info("Searching for {} ref in {}".format(app_id, str(refs))) for refspec in refs.keys(): _, remote, ref = OSTree.parse_refspec(refspec) if remote_filter and remote != remote_filter: logging.info("{} != {}, skipping...".format(remote, remote_filter)) continue if str.startswith(ref, 'app/{}/'.format(app_id)): target_ref = ref break return target_ref
def prune_ostree_images(self): repo = self._get_ostree_repo() if not repo: return refs = {} app_refs = [] for i in repo.list_refs()[1]: if i.startswith(OSTREE_OCIIMAGE_PREFIX): if len(i) == len(OSTREE_OCIIMAGE_PREFIX) + 64: refs[i] = False else: invalid_encoding = False for c in i.replace(OSTREE_OCIIMAGE_PREFIX, ""): if not str.isalnum(str(c)) and c not in ".-_": invalid_encoding = True break if invalid_encoding: refs[i] = False else: app_refs.append(i) def visit(rev): manifest = self._image_manifest(repo, repo.resolve_rev(rev, True)[1]) if not manifest: return for layer in SystemContainers.get_layers_from_manifest(json.loads(manifest)): refs[OSTREE_OCIIMAGE_PREFIX + layer.replace("sha256:", "")] = True for app in app_refs: visit(app) for k, v in refs.items(): if not v: ref = OSTree.parse_refspec(k) util.write_out("Deleting %s" % k) repo.set_ref_immediate(ref[1], ref[2], None)