mirror of
https://github.com/mudler/luet.git
synced 2025-09-03 16:25:19 +00:00
Generate changes from CompilerBackendOptions and pass by image name so img can unpack images
This commit is contained in:
@@ -102,15 +102,15 @@ ENV PACKAGE_VERSION=1.4.0
|
|||||||
ENV PACKAGE_CATEGORY=app-admin
|
ENV PACKAGE_CATEGORY=app-admin
|
||||||
RUN echo foo > /test
|
RUN echo foo > /test
|
||||||
RUN echo bar > /test2`))
|
RUN echo bar > /test2`))
|
||||||
opts = CompilerBackendOptions{
|
opts2 := CompilerBackendOptions{
|
||||||
ImageName: "test",
|
ImageName: "test",
|
||||||
SourcePath: tmpdir,
|
SourcePath: tmpdir,
|
||||||
DockerFileName: "LuetDockerfile",
|
DockerFileName: "LuetDockerfile",
|
||||||
Destination: filepath.Join(tmpdir, "output2.tar"),
|
Destination: filepath.Join(tmpdir, "output2.tar"),
|
||||||
}
|
}
|
||||||
Expect(b.ImageDefinitionToTar(opts)).ToNot(HaveOccurred())
|
Expect(b.ImageDefinitionToTar(opts2)).ToNot(HaveOccurred())
|
||||||
Expect(helpers.Exists(filepath.Join(tmpdir, "output2.tar"))).To(BeTrue())
|
Expect(helpers.Exists(filepath.Join(tmpdir, "output2.tar"))).To(BeTrue())
|
||||||
diffs, err := b.Changes(filepath.Join(tmpdir2, "output1.tar"), filepath.Join(tmpdir, "output2.tar"))
|
diffs, err := b.Changes(opts, opts2)
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
artifacts := []ArtifactNode{}
|
artifacts := []ArtifactNode{}
|
||||||
|
@@ -52,7 +52,10 @@ import (
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// ]
|
// ]
|
||||||
func GenerateChanges(b compiler.CompilerBackend, srcImage, dstImage string) ([]compiler.ArtifactLayer, error) {
|
func GenerateChanges(b compiler.CompilerBackend, fromImage, toImage compiler.CompilerBackendOptions) ([]compiler.ArtifactLayer, error) {
|
||||||
|
|
||||||
|
srcImage := fromImage.Destination
|
||||||
|
dstImage := toImage.Destination
|
||||||
|
|
||||||
res := compiler.ArtifactLayer{FromImage: srcImage, ToImage: dstImage}
|
res := compiler.ArtifactLayer{FromImage: srcImage, ToImage: dstImage}
|
||||||
|
|
||||||
@@ -95,6 +98,7 @@ func GenerateChanges(b compiler.CompilerBackend, srcImage, dstImage string) ([]c
|
|||||||
|
|
||||||
srcImageExtract := compiler.CompilerBackendOptions{
|
srcImageExtract := compiler.CompilerBackendOptions{
|
||||||
SourcePath: srcImage,
|
SourcePath: srcImage,
|
||||||
|
ImageName: fromImage.ImageName,
|
||||||
Destination: srcRootFS,
|
Destination: srcRootFS,
|
||||||
}
|
}
|
||||||
err = b.ExtractRootfs(srcImageExtract, false) // No need to keep permissions as we just collect file diffs
|
err = b.ExtractRootfs(srcImageExtract, false) // No need to keep permissions as we just collect file diffs
|
||||||
@@ -123,6 +127,7 @@ func GenerateChanges(b compiler.CompilerBackend, srcImage, dstImage string) ([]c
|
|||||||
|
|
||||||
dstImageExtract := compiler.CompilerBackendOptions{
|
dstImageExtract := compiler.CompilerBackendOptions{
|
||||||
SourcePath: dstImage,
|
SourcePath: dstImage,
|
||||||
|
ImageName: toImage.ImageName,
|
||||||
Destination: dstRootFS,
|
Destination: dstRootFS,
|
||||||
}
|
}
|
||||||
err = b.ExtractRootfs(dstImageExtract, false)
|
err = b.ExtractRootfs(dstImageExtract, false)
|
||||||
|
@@ -32,12 +32,14 @@ var _ = Describe("Docker image diffs", func() {
|
|||||||
|
|
||||||
Context("Generate diffs from docker images", func() {
|
Context("Generate diffs from docker images", func() {
|
||||||
It("Detect no changes", func() {
|
It("Detect no changes", func() {
|
||||||
err := b.DownloadImage(compiler.CompilerBackendOptions{
|
opts := compiler.CompilerBackendOptions{
|
||||||
ImageName: "alpine:latest",
|
ImageName: "alpine:latest",
|
||||||
})
|
Destination: "alpine:latest",
|
||||||
|
}
|
||||||
|
err := b.DownloadImage(opts)
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
layers, err := GenerateChanges(b, "alpine:latest", "alpine:latest")
|
layers, err := GenerateChanges(b, opts, opts)
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
Expect(len(layers)).To(Equal(1))
|
Expect(len(layers)).To(Equal(1))
|
||||||
Expect(len(layers[0].Diffs.Additions)).To(Equal(0))
|
Expect(len(layers[0].Diffs.Additions)).To(Equal(0))
|
||||||
@@ -55,7 +57,13 @@ var _ = Describe("Docker image diffs", func() {
|
|||||||
})
|
})
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
layers, err := GenerateChanges(b, "quay.io/mocaccino/micro", "quay.io/mocaccino/extra")
|
layers, err := GenerateChanges(b, compiler.CompilerBackendOptions{
|
||||||
|
ImageName: "quay.io/mocaccino/micro",
|
||||||
|
Destination: "quay.io/mocaccino/micro",
|
||||||
|
}, compiler.CompilerBackendOptions{
|
||||||
|
ImageName: "quay.io/mocaccino/extra",
|
||||||
|
Destination: "quay.io/mocaccino/extra",
|
||||||
|
})
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
Expect(len(layers)).To(Equal(1))
|
Expect(len(layers)).To(Equal(1))
|
||||||
|
|
||||||
|
@@ -239,7 +239,7 @@ func (*SimpleDocker) ExtractRootfs(opts compiler.CompilerBackendOptions, keepPer
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Changes retrieves changes between image layers
|
// Changes retrieves changes between image layers
|
||||||
func (d *SimpleDocker) Changes(fromImage, toImage string) ([]compiler.ArtifactLayer, error) {
|
func (d *SimpleDocker) Changes(fromImage, toImage compiler.CompilerBackendOptions) ([]compiler.ArtifactLayer, error) {
|
||||||
diffs, err := GenerateChanges(d, fromImage, toImage)
|
diffs, err := GenerateChanges(d, fromImage, toImage)
|
||||||
|
|
||||||
if config.LuetCfg.GetGeneral().Debug {
|
if config.LuetCfg.GetGeneral().Debug {
|
||||||
|
@@ -93,13 +93,13 @@ ENV PACKAGE_VERSION=1.4.0
|
|||||||
ENV PACKAGE_CATEGORY=app-admin
|
ENV PACKAGE_CATEGORY=app-admin
|
||||||
RUN echo foo > /test
|
RUN echo foo > /test
|
||||||
RUN echo bar > /test2`))
|
RUN echo bar > /test2`))
|
||||||
opts = CompilerBackendOptions{
|
opts2 := CompilerBackendOptions{
|
||||||
ImageName: "test",
|
ImageName: "test",
|
||||||
SourcePath: tmpdir,
|
SourcePath: tmpdir,
|
||||||
DockerFileName: "LuetDockerfile",
|
DockerFileName: "LuetDockerfile",
|
||||||
Destination: filepath.Join(tmpdir, "output2.tar"),
|
Destination: filepath.Join(tmpdir, "output2.tar"),
|
||||||
}
|
}
|
||||||
Expect(b.ImageDefinitionToTar(opts)).ToNot(HaveOccurred())
|
Expect(b.ImageDefinitionToTar(opts2)).ToNot(HaveOccurred())
|
||||||
Expect(helpers.Exists(filepath.Join(tmpdir, "output2.tar"))).To(BeTrue())
|
Expect(helpers.Exists(filepath.Join(tmpdir, "output2.tar"))).To(BeTrue())
|
||||||
|
|
||||||
artifacts := []ArtifactNode{}
|
artifacts := []ArtifactNode{}
|
||||||
@@ -109,7 +109,7 @@ RUN echo bar > /test2`))
|
|||||||
artifacts = append(artifacts, ArtifactNode{Name: "/test", Size: 4})
|
artifacts = append(artifacts, ArtifactNode{Name: "/test", Size: 4})
|
||||||
artifacts = append(artifacts, ArtifactNode{Name: "/test2", Size: 4})
|
artifacts = append(artifacts, ArtifactNode{Name: "/test2", Size: 4})
|
||||||
|
|
||||||
Expect(b.Changes(filepath.Join(tmpdir2, "output1.tar"), filepath.Join(tmpdir, "output2.tar"))).To(Equal(
|
Expect(b.Changes(opts, opts2)).To(Equal(
|
||||||
[]ArtifactLayer{{
|
[]ArtifactLayer{{
|
||||||
FromImage: filepath.Join(tmpdir2, "output1.tar"),
|
FromImage: filepath.Join(tmpdir2, "output1.tar"),
|
||||||
ToImage: filepath.Join(tmpdir, "output2.tar"),
|
ToImage: filepath.Join(tmpdir, "output2.tar"),
|
||||||
|
@@ -149,7 +149,7 @@ func (*SimpleImg) ExtractRootfs(opts compiler.CompilerBackendOptions, keepPerms
|
|||||||
|
|
||||||
// TODO: Use container-diff (https://github.com/GoogleContainerTools/container-diff) for checking out layer diffs
|
// TODO: Use container-diff (https://github.com/GoogleContainerTools/container-diff) for checking out layer diffs
|
||||||
// Changes uses container-diff (https://github.com/GoogleContainerTools/container-diff) for retrieving out layer diffs
|
// Changes uses container-diff (https://github.com/GoogleContainerTools/container-diff) for retrieving out layer diffs
|
||||||
func (i *SimpleImg) Changes(fromImage, toImage string) ([]compiler.ArtifactLayer, error) {
|
func (i *SimpleImg) Changes(fromImage, toImage compiler.CompilerBackendOptions) ([]compiler.ArtifactLayer, error) {
|
||||||
return GenerateChanges(i, fromImage, toImage)
|
return GenerateChanges(i, fromImage, toImage)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -272,7 +272,7 @@ func (cs *LuetCompiler) unpackDelta(rootfs string, concurrency int, keepPermissi
|
|||||||
defer os.Remove(builderOpts.Destination)
|
defer os.Remove(builderOpts.Destination)
|
||||||
}
|
}
|
||||||
Info(pkgTag, ":hammer: Generating delta")
|
Info(pkgTag, ":hammer: Generating delta")
|
||||||
diffs, err := cs.Backend.Changes(builderOpts.Destination, runnerOpts.Destination)
|
diffs, err := cs.Backend.Changes(builderOpts, runnerOpts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "Could not generate changes from layers")
|
return nil, errors.Wrap(err, "Could not generate changes from layers")
|
||||||
}
|
}
|
||||||
|
@@ -79,7 +79,7 @@ type CompilerBackend interface {
|
|||||||
BuildImage(CompilerBackendOptions) error
|
BuildImage(CompilerBackendOptions) error
|
||||||
ExportImage(CompilerBackendOptions) error
|
ExportImage(CompilerBackendOptions) error
|
||||||
RemoveImage(CompilerBackendOptions) error
|
RemoveImage(CompilerBackendOptions) error
|
||||||
Changes(fromImage, toImage string) ([]ArtifactLayer, error)
|
Changes(fromImage, toImage CompilerBackendOptions) ([]ArtifactLayer, error)
|
||||||
ImageDefinitionToTar(CompilerBackendOptions) error
|
ImageDefinitionToTar(CompilerBackendOptions) error
|
||||||
ExtractRootfs(opts CompilerBackendOptions, keepPerms bool) error
|
ExtractRootfs(opts CompilerBackendOptions, keepPerms bool) error
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user