diff --git a/internal/blueprint/filesystem_customizations.go b/internal/blueprint/filesystem_customizations.go index 02bc36439..d998f1ff1 100644 --- a/internal/blueprint/filesystem_customizations.go +++ b/internal/blueprint/filesystem_customizations.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/osbuild/osbuild-composer/internal/common" + "github.com/osbuild/osbuild-composer/internal/pathpolicy" ) type FilesystemCustomization struct { @@ -69,3 +70,20 @@ func (fsc *FilesystemCustomization) UnmarshalJSON(data []byte) error { return nil } + +// CheckMountpointsPolicy checks if the mountpoints are allowed by the policy +func CheckMountpointsPolicy(mountpoints []FilesystemCustomization, mountpointAllowList *pathpolicy.PathPolicies) error { + invalidMountpoints := []string{} + for _, m := range mountpoints { + err := mountpointAllowList.Check(m.Mountpoint) + if err != nil { + invalidMountpoints = append(invalidMountpoints, m.Mountpoint) + } + } + + if len(invalidMountpoints) > 0 { + return fmt.Errorf("The following custom mountpoints are not supported %+q", invalidMountpoints) + } + + return nil +} diff --git a/internal/disk/disk.go b/internal/disk/disk.go index 271c9c0ff..863563558 100644 --- a/internal/disk/disk.go +++ b/internal/disk/disk.go @@ -18,13 +18,10 @@ package disk import ( "encoding/hex" - "fmt" "io" "math/rand" "github.com/google/uuid" - "github.com/osbuild/osbuild-composer/internal/blueprint" - "github.com/osbuild/osbuild-composer/internal/pathpolicy" ) const ( @@ -53,19 +50,6 @@ const ( XBootLDRPartitionGUID = "BC13C2FF-59E6-4262-A352-B275FD6F7172" ) -var MountpointPolicies = pathpolicy.NewPathPolicies(map[string]pathpolicy.PathPolicy{ - "/": {Exact: true}, - "/boot": {Exact: true}, - "/var": {}, - "/opt": {}, - "/srv": {}, - "/usr": {}, - "/app": {}, - "/data": {}, - "/home": {}, - "/tmp": {}, -}) - // Entity is the base interface for all disk-related entities. type Entity interface { // IsContainer indicates if the implementing type can @@ -184,19 +168,3 @@ func NewVolIDFromRand(r *rand.Rand) string { } return hex.EncodeToString(volid) } - -func CheckMountpoints(mountpoints []blueprint.FilesystemCustomization, mountpointAllowList *pathpolicy.PathPolicies) error { - invalidMountpoints := []string{} - for _, m := range mountpoints { - err := mountpointAllowList.Check(m.Mountpoint) - if err != nil { - invalidMountpoints = append(invalidMountpoints, m.Mountpoint) - } - } - - if len(invalidMountpoints) > 0 { - return fmt.Errorf("The following custom mountpoints are not supported %+q", invalidMountpoints) - } - - return nil -} diff --git a/internal/distro/fedora/distro.go b/internal/distro/fedora/distro.go index 312c18be7..933e74d91 100644 --- a/internal/distro/fedora/distro.go +++ b/internal/distro/fedora/distro.go @@ -19,6 +19,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/image" "github.com/osbuild/osbuild-composer/internal/manifest" "github.com/osbuild/osbuild-composer/internal/oscap" + "github.com/osbuild/osbuild-composer/internal/pathpolicy" "github.com/osbuild/osbuild-composer/internal/platform" "github.com/osbuild/osbuild-composer/internal/rpmmd" "github.com/osbuild/osbuild-composer/internal/runner" @@ -778,7 +779,7 @@ func (t *imageType) checkOptions(customizations *blueprint.Customizations, optio return fmt.Errorf("Custom mountpoints are not supported for ostree types") } - err := disk.CheckMountpoints(mountpoints, disk.MountpointPolicies) + err := blueprint.CheckMountpointsPolicy(mountpoints, pathpolicy.MountpointPolicies) if err != nil { return err } diff --git a/internal/distro/rhel7/distro.go b/internal/distro/rhel7/distro.go index 19be4cbd7..8bacb7c0f 100644 --- a/internal/distro/rhel7/distro.go +++ b/internal/distro/rhel7/distro.go @@ -16,6 +16,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/image" "github.com/osbuild/osbuild-composer/internal/manifest" "github.com/osbuild/osbuild-composer/internal/osbuild" + "github.com/osbuild/osbuild-composer/internal/pathpolicy" "github.com/osbuild/osbuild-composer/internal/platform" "github.com/osbuild/osbuild-composer/internal/rpmmd" "github.com/osbuild/osbuild-composer/internal/runner" @@ -492,7 +493,7 @@ func (t *imageType) checkOptions(customizations *blueprint.Customizations, optio mountpoints := customizations.GetFilesystems() - err := disk.CheckMountpoints(mountpoints, disk.MountpointPolicies) + err := blueprint.CheckMountpointsPolicy(mountpoints, pathpolicy.MountpointPolicies) if err != nil { return err } diff --git a/internal/distro/rhel8/imagetype.go b/internal/distro/rhel8/imagetype.go index 2946a6286..2fa23c4cf 100644 --- a/internal/distro/rhel8/imagetype.go +++ b/internal/distro/rhel8/imagetype.go @@ -14,6 +14,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/image" "github.com/osbuild/osbuild-composer/internal/manifest" "github.com/osbuild/osbuild-composer/internal/oscap" + "github.com/osbuild/osbuild-composer/internal/pathpolicy" "github.com/osbuild/osbuild-composer/internal/platform" "github.com/osbuild/osbuild-composer/internal/rpmmd" "github.com/osbuild/osbuild-composer/internal/workload" @@ -411,7 +412,7 @@ func (t *imageType) checkOptions(customizations *blueprint.Customizations, optio return fmt.Errorf("Custom mountpoints are not supported for ostree types") } - err := disk.CheckMountpoints(mountpoints, disk.MountpointPolicies) + err := blueprint.CheckMountpointsPolicy(mountpoints, pathpolicy.MountpointPolicies) if err != nil { return err } diff --git a/internal/distro/rhel9/imagetype.go b/internal/distro/rhel9/imagetype.go index ed744324c..59c5c36da 100644 --- a/internal/distro/rhel9/imagetype.go +++ b/internal/distro/rhel9/imagetype.go @@ -14,6 +14,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/image" "github.com/osbuild/osbuild-composer/internal/manifest" "github.com/osbuild/osbuild-composer/internal/oscap" + "github.com/osbuild/osbuild-composer/internal/pathpolicy" "github.com/osbuild/osbuild-composer/internal/platform" "github.com/osbuild/osbuild-composer/internal/rpmmd" "github.com/osbuild/osbuild-composer/internal/workload" @@ -391,7 +392,7 @@ func (t *imageType) checkOptions(customizations *blueprint.Customizations, optio return fmt.Errorf("Custom mountpoints are not supported for ostree types") } - err := disk.CheckMountpoints(mountpoints, disk.MountpointPolicies) + err := blueprint.CheckMountpointsPolicy(mountpoints, pathpolicy.MountpointPolicies) if err != nil { return err } diff --git a/internal/pathpolicy/policies.go b/internal/pathpolicy/policies.go new file mode 100644 index 000000000..1dc9a283c --- /dev/null +++ b/internal/pathpolicy/policies.go @@ -0,0 +1,15 @@ +package pathpolicy + +// MountpointPolicies is a set of default mountpoint policies used for filesystem customizations +var MountpointPolicies = NewPathPolicies(map[string]PathPolicy{ + "/": {Exact: true}, + "/boot": {Exact: true}, + "/var": {}, + "/opt": {}, + "/srv": {}, + "/usr": {}, + "/app": {}, + "/data": {}, + "/home": {}, + "/tmp": {}, +})