From 6ed15c7227e8fb77defd6e7f5d7cd1d709ee5006 Mon Sep 17 00:00:00 2001 From: Itxaka Date: Thu, 2 Mar 2023 10:44:54 +0100 Subject: [PATCH] :bug: Load overlay config from cos-layout.env (#71) Load the base overlay config from the cos-layout.env file. This means we have to depend the base overlay mount to the load-config step, which moves things a bit in the DAG. Signed-off-by: Itxaka --- earthly.sh | 2 +- internal/utils/mounts.go | 1 + pkg/mount/dag_steps.go | 10 +++++++++- pkg/mount/state_test.go | 20 ++++++-------------- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/earthly.sh b/earthly.sh index 4e3151f1..18a4cda0 100755 --- a/earthly.sh +++ b/earthly.sh @@ -1,3 +1,3 @@ #!/bin/bash -docker run --privileged -v /var/run/docker.sock:/var/run/docker.sock --rm -t -v $(pwd):/workspace -v earthly-tmp:/tmp/earthly:rw earthly/earthly:v0.6.30 --allow-privileged $@ +docker run --privileged -v /var/run/docker.sock:/var/run/docker.sock --rm -t -v $(pwd):/workspace -v earthly-tmp:/tmp/earthly:rw earthly/earthly:v0.7.1 --allow-privileged $@ diff --git a/internal/utils/mounts.go b/internal/utils/mounts.go index 060157eb..74174e62 100644 --- a/internal/utils/mounts.go +++ b/internal/utils/mounts.go @@ -199,6 +199,7 @@ func GetOemTimeout() int { // GetOverlayBase parses the cdmline and gets the overlay config // Format is rd.cos.overlay=tmpfs:20% or rd.cos.overlay=LABEL=$LABEL or rd.cos.overlay=UUID=$UUID +// Notice that this can be later override by the config coming from cos-layout.env func GetOverlayBase() string { overlayConfig := ReadCMDLineArg("rd.cos.overlay=") if len(overlayConfig) == 0 { diff --git a/pkg/mount/dag_steps.go b/pkg/mount/dag_steps.go index a0d6c960..6e4b38dd 100644 --- a/pkg/mount/dag_steps.go +++ b/pkg/mount/dag_steps.go @@ -140,6 +140,12 @@ func (s *State) LoadEnvLayoutDagStep(g *herd.Graph, deps ...string) error { // Remove any duplicates s.BindMounts = internalUtils.UniqueSlice(internalUtils.CleanupSlice(s.BindMounts)) + // Load Overlay config + overlayConfig := env["OVERLAY"] + if overlayConfig != "" { + s.OverlayBase = overlayConfig + } + s.StateDir = env["PERSISTENT_STATE_TARGET"] if s.StateDir == "" { s.StateDir = cnst.PersistentStateTarget @@ -190,8 +196,10 @@ func (s *State) MountOemDagStep(g *herd.Graph, deps ...string) error { } // MountBaseOverlayDagStep will add mounting /run/overlay as an overlay dir +// Requires the config-load step because some parameters can come from there func (s *State) MountBaseOverlayDagStep(g *herd.Graph) error { return g.Add(cnst.OpMountBaseOverlay, + herd.WithDeps(cnst.OpLoadConfig), herd.WithCallback( func(ctx context.Context) error { op, err := baseOverlay(Overlay{ @@ -221,7 +229,7 @@ func (s *State) MountBaseOverlayDagStep(g *herd.Graph) error { // MountCustomOverlayDagStep will add mounting s.OverlayDirs under /run/overlay func (s *State) MountCustomOverlayDagStep(g *herd.Graph) error { return g.Add(cnst.OpOverlayMount, - herd.WithDeps(cnst.OpLoadConfig), + herd.WithDeps(cnst.OpLoadConfig, cnst.OpMountBaseOverlay), herd.WithCallback( func(ctx context.Context) error { var multierr *multierror.Error diff --git a/pkg/mount/state_test.go b/pkg/mount/state_test.go index 2eb9c377..9c7a9391 100644 --- a/pkg/mount/state_test.go +++ b/pkg/mount/state_test.go @@ -78,39 +78,30 @@ func checkLiveCDDag(dag [][]herd.GraphEntry, actualDag string) { func checkDag(dag [][]herd.GraphEntry, actualDag string) { Expect(len(dag)).To(Equal(10), actualDag) Expect(len(dag[0])).To(Equal(1), actualDag) - Expect(len(dag[1])).To(Equal(4), actualDag) + Expect(len(dag[1])).To(Equal(3), actualDag) Expect(len(dag[2])).To(Equal(1), actualDag) Expect(len(dag[3])).To(Equal(1), actualDag) Expect(len(dag[4])).To(Equal(1), actualDag) Expect(len(dag[5])).To(Equal(1), actualDag) Expect(len(dag[6])).To(Equal(1), actualDag) Expect(len(dag[7])).To(Equal(2), actualDag) - Expect(len(dag[8])).To(Equal(1), actualDag) + Expect(len(dag[8])).To(Equal(2), actualDag) Expect(len(dag[9])).To(Equal(1), actualDag) Expect(dag[0][0].Name).To(Equal("init")) Expect(dag[1][0].Name).To(Or( Equal("mount-tmpfs"), Equal("create-sentinel"), - Equal("mount-base-overlay"), Equal("mount-state"), ), actualDag) Expect(dag[1][1].Name).To(Or( Equal("mount-tmpfs"), Equal("create-sentinel"), - Equal("mount-base-overlay"), Equal("mount-state"), ), actualDag) Expect(dag[1][2].Name).To(Or( Equal("mount-tmpfs"), Equal("create-sentinel"), - Equal("mount-base-overlay"), - Equal("mount-state"), - ), actualDag) - Expect(dag[1][3].Name).To(Or( - Equal("mount-tmpfs"), - Equal("create-sentinel"), - Equal("mount-base-overlay"), Equal("mount-state"), ), actualDag) Expect(dag[2][0].Name).To(Equal("discover-state"), actualDag) @@ -118,8 +109,9 @@ func checkDag(dag [][]herd.GraphEntry, actualDag string) { Expect(dag[4][0].Name).To(Equal("mount-oem"), actualDag) Expect(dag[5][0].Name).To(Equal("rootfs-hook"), actualDag) Expect(dag[6][0].Name).To(Equal("load-config"), actualDag) - Expect(dag[7][0].Name).To(Or(Equal("overlay-mount"), Equal("custom-mount")), actualDag) - Expect(dag[7][1].Name).To(Or(Equal("overlay-mount"), Equal("custom-mount")), actualDag) - Expect(dag[8][0].Name).To(Equal("mount-bind"), actualDag) + Expect(dag[7][0].Name).To(Or(Equal("mount-base-overlay"), Equal("custom-mount")), actualDag) + Expect(dag[7][1].Name).To(Or(Equal("mount-base-overlay"), Equal("custom-mount")), actualDag) + Expect(dag[8][0].Name).To(Or(Equal("mount-bind"), Equal("overlay-mount")), actualDag) + Expect(dag[8][1].Name).To(Or(Equal("mount-bind"), Equal("overlay-mount")), actualDag) Expect(dag[9][0].Name).To(Equal("write-fstab"), actualDag) }