Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
 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
Exemplo n.º 7
0
    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)