in kinder/pkg/cri/host/archive.go [91:133]
func EditArchiveRepositories(reader io.Reader, writer io.Writer, editRepositories func(string) string) error {
tarReader := tar.NewReader(reader)
tarWriter := tar.NewWriter(writer)
// iterate all entries in the tarball
for {
// read an entry
hdr, err := tarReader.Next()
if err == io.EOF {
return tarWriter.Close()
} else if err != nil {
return err
}
b, err := ioutil.ReadAll(tarReader)
if err != nil {
return err
}
// edit the repostories and manifests files when we find them
if hdr.Name == "repositories" {
b, err = editRepositoriesFile(b, editRepositories)
if err != nil {
return err
}
hdr.Size = int64(len(b))
} else if hdr.Name == "manifest.json" {
b, err = editManifestRepositories(b, editRepositories)
if err != nil {
return err
}
hdr.Size = int64(len(b))
}
// write to the output tarball
if err := tarWriter.WriteHeader(hdr); err != nil {
return err
}
if len(b) > 0 {
if _, err := tarWriter.Write(b); err != nil {
return err
}
}
}
}