@@ -493,7 +493,7 @@ func (c *Config) GetOverlay2() Overlay2 {
493
493
panic (fmt .Sprintf ("Overlay2 cannot be set when --overlay=true" ))
494
494
}
495
495
// Using a deprecated flag, honor it to avoid breaking users.
496
- return Overlay2 {rootMount : true , subMounts : true , medium : "memory" }
496
+ return Overlay2 {rootMount : true , subMounts : true , medium : OverlayMediumMemory () }
497
497
}
498
498
return c .Overlay2
499
499
}
@@ -844,49 +844,82 @@ func (g HostFifo) AllowOpen() bool {
844
844
return g & HostFifoOpen != 0
845
845
}
846
846
847
- // OverlayMedium describes how overlay medium is configured .
848
- type OverlayMedium string
847
+ // OverlayMediumType describes types of overlay medium.
848
+ type OverlayMediumType string
849
849
850
850
const (
851
851
// NoOverlay indicates that no overlay will be applied.
852
- NoOverlay = OverlayMedium ("" )
852
+ NoOverlay = OverlayMediumType ("" )
853
853
854
854
// MemoryOverlay indicates that the overlay is backed by app memory.
855
- MemoryOverlay = OverlayMedium ("memory" )
855
+ MemoryOverlay = OverlayMediumType ("memory" )
856
856
857
857
// SelfOverlay indicates that the overlaid mount is backed by itself.
858
- SelfOverlay = OverlayMedium ("self" )
858
+ SelfOverlay = OverlayMediumType ("self" )
859
+
860
+ AnonOverlay = OverlayMediumType ("dir" )
859
861
860
- // AnonOverlayPrefix is the prefix that users should specify in the
862
+ // anonOverlayPrefix is the prefix that users should specify in the
861
863
// config for the anonymous overlay.
862
- AnonOverlayPrefix = "dir="
864
+ anonOverlayPrefix = "dir="
863
865
)
864
866
867
+ // OverlayMedium describes how overlay medium is configured.
868
+ type OverlayMedium struct {
869
+ medium OverlayMediumType
870
+ // Set iff medium is AnonOverlay.
871
+ dir string
872
+ }
873
+
874
+ func OverlayMediumNoOverlay () OverlayMedium {
875
+ return OverlayMedium {medium : NoOverlay }
876
+ }
877
+
878
+ func OverlayMediumMemory () OverlayMedium {
879
+ return OverlayMedium {medium : MemoryOverlay }
880
+ }
881
+
865
882
// String returns a human-readable string representing the overlay medium config.
866
883
func (m OverlayMedium ) String () string {
867
- return string (m )
884
+ switch m .medium {
885
+ case NoOverlay , MemoryOverlay , SelfOverlay :
886
+ return string (m .medium )
887
+ case AnonOverlay :
888
+ return fmt .Sprintf ("%s=%s" , AnonOverlay , m .dir )
889
+ default :
890
+ panic (fmt .Sprintf ("Invalid overlay medium %q" , m .medium ))
891
+ }
868
892
}
869
893
870
894
// Set sets the value. Set(String()) should be idempotent.
871
895
func (m * OverlayMedium ) Set (v string ) error {
872
- switch OverlayMedium (v ) {
873
- case NoOverlay , MemoryOverlay , SelfOverlay : // OK
896
+ switch OverlayMediumType (v ) {
897
+ case NoOverlay , MemoryOverlay , SelfOverlay :
898
+ {
899
+ * m = OverlayMedium {medium : OverlayMediumType (v ), dir : "" }
900
+ return nil
901
+ }
874
902
default :
875
- if ! strings .HasPrefix (v , AnonOverlayPrefix ) {
903
+ if ! strings .HasPrefix (v , anonOverlayPrefix ) {
876
904
return fmt .Errorf ("unexpected medium: %q" , v )
877
905
}
878
- if hostFileDir := strings .TrimPrefix (v , AnonOverlayPrefix ); ! filepath .IsAbs (hostFileDir ) {
906
+ hostFileDir := strings .TrimPrefix (v , anonOverlayPrefix )
907
+ if ! filepath .IsAbs (hostFileDir ) {
879
908
return fmt .Errorf ("overlay host file directory should be an absolute path, got %q" , hostFileDir )
880
909
}
910
+ * m = OverlayMedium {medium : OverlayMediumType (v ), dir : hostFileDir }
881
911
}
882
- * m = OverlayMedium (v )
883
912
return nil
884
913
}
885
914
915
+ func (m OverlayMedium ) MediumType () OverlayMediumType {
916
+ return m .medium
917
+ }
918
+
886
919
// IsBackedByAnon indicates whether the overlaid mount is backed by a host file
887
920
// in an anonymous directory.
888
921
func (m OverlayMedium ) IsBackedByAnon () bool {
889
- return strings . HasPrefix ( string ( m ), AnonOverlayPrefix )
922
+ return m . medium == AnonOverlay
890
923
}
891
924
892
925
// HostFileDir indicates the directory in which the overlay-backing host file
@@ -895,9 +928,9 @@ func (m OverlayMedium) IsBackedByAnon() bool {
895
928
// Precondition: m.IsBackedByAnon().
896
929
func (m OverlayMedium ) HostFileDir () string {
897
930
if ! m .IsBackedByAnon () {
898
- panic (fmt .Sprintf ("anonymous overlay medium = %q does not have %v prefix" , m , AnonOverlayPrefix ))
931
+ panic (fmt .Sprintf ("anonymous overlay medium = %q does not have %v prefix" , m , anonOverlayPrefix ))
899
932
}
900
- return strings . TrimPrefix ( string ( m ), AnonOverlayPrefix )
933
+ return m . dir
901
934
}
902
935
903
936
// Overlay2 holds the configuration for setting up overlay filesystems for the
@@ -910,15 +943,15 @@ type Overlay2 struct {
910
943
911
944
func defaultOverlay2 () * Overlay2 {
912
945
// Rootfs overlay is enabled by default and backed by a file in rootfs itself.
913
- return & Overlay2 {rootMount : true , subMounts : false , medium : SelfOverlay }
946
+ return & Overlay2 {rootMount : true , subMounts : false , medium : OverlayMedium { medium : SelfOverlay } }
914
947
}
915
948
916
949
// Set implements flag.Value. Set(String()) should be idempotent.
917
950
func (o * Overlay2 ) Set (v string ) error {
918
951
if v == "none" {
919
952
o .rootMount = false
920
953
o .subMounts = false
921
- o .medium = NoOverlay
954
+ o .medium = OverlayMediumNoOverlay ()
922
955
return nil
923
956
}
924
957
vs := strings .Split (v , ":" )
@@ -963,21 +996,21 @@ func (o Overlay2) String() string {
963
996
964
997
// Enabled returns true if the overlay option is enabled for any mounts.
965
998
func (o * Overlay2 ) Enabled () bool {
966
- return o .medium != NoOverlay
999
+ return o .medium . medium != NoOverlay
967
1000
}
968
1001
969
1002
// RootOverlayMedium returns the overlay medium config of the root mount.
970
1003
func (o * Overlay2 ) RootOverlayMedium () OverlayMedium {
971
1004
if ! o .rootMount {
972
- return NoOverlay
1005
+ return OverlayMediumNoOverlay ()
973
1006
}
974
1007
return o .medium
975
1008
}
976
1009
977
1010
// SubMountOverlayMedium returns the overlay medium config of submounts.
978
1011
func (o * Overlay2 ) SubMountOverlayMedium () OverlayMedium {
979
1012
if ! o .subMounts {
980
- return NoOverlay
1013
+ return OverlayMediumNoOverlay ()
981
1014
}
982
1015
return o .medium
983
1016
}
0 commit comments