Skip to content

Commit

Permalink
blueprint/customization:filesystem customizations for edge images
Browse files Browse the repository at this point in the history
Filesystem customizations is enabled for edge-raw-image,
edge-ami,edge-vsphere,simplified-installer
relevent testing config is added to run in CI

Signed-off-by: Sayan Paul <[email protected]>
  • Loading branch information
say-paul committed Dec 13, 2023
1 parent 91789d7 commit 4935886
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 14 deletions.
6 changes: 3 additions & 3 deletions pkg/distro/rhel9/distro_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -671,7 +671,7 @@ func TestDistro_CustomFileSystemManifestError(t *testing.T) {
imgType, _ := arch.GetImageType(imgTypeName)
_, _, err := imgType.Manifest(&bp, distro.ImageOptions{}, nil, 0)
if imgTypeName == "edge-commit" || imgTypeName == "edge-container" {
assert.EqualError(t, err, "Custom mountpoints are not supported for ostree types")
assert.EqualError(t, err, "Custom mountpoints are not supported for edge-container and edge-commit")
} else if imgTypeName == "edge-installer" || imgTypeName == "edge-simplified-installer" || imgTypeName == "edge-raw-image" || imgTypeName == "edge-ami" || imgTypeName == "edge-vsphere" {
continue
} else {
Expand Down Expand Up @@ -699,7 +699,7 @@ func TestDistro_TestRootMountPoint(t *testing.T) {
imgType, _ := arch.GetImageType(imgTypeName)
_, _, err := imgType.Manifest(&bp, distro.ImageOptions{}, nil, 0)
if imgTypeName == "edge-commit" || imgTypeName == "edge-container" {
assert.EqualError(t, err, "Custom mountpoints are not supported for ostree types")
assert.EqualError(t, err, "Custom mountpoints are not supported for edge-container and edge-commit")
} else if imgTypeName == "edge-installer" || imgTypeName == "edge-simplified-installer" || imgTypeName == "edge-raw-image" || imgTypeName == "edge-ami" || imgTypeName == "edge-vsphere" {
continue
} else {
Expand Down Expand Up @@ -829,7 +829,7 @@ func TestDistro_CustomUsrPartitionNotLargeEnough(t *testing.T) {
imgType, _ := arch.GetImageType(imgTypeName)
_, _, err := imgType.Manifest(&bp, distro.ImageOptions{}, nil, 0)
if imgTypeName == "edge-commit" || imgTypeName == "edge-container" {
assert.EqualError(t, err, "Custom mountpoints are not supported for ostree types")
assert.EqualError(t, err, "Custom mountpoints are not supported for edge-container and edge-commit")
} else if imgTypeName == "edge-installer" || imgTypeName == "edge-simplified-installer" || imgTypeName == "edge-raw-image" || imgTypeName == "edge-ami" || imgTypeName == "edge-vsphere" {
continue
} else {
Expand Down
21 changes: 10 additions & 11 deletions pkg/distro/rhel9/imagetype.go
Original file line number Diff line number Diff line change
Expand Up @@ -167,12 +167,7 @@ func (t *imageType) getPartitionTable(
partitioningMode := options.PartitioningMode
if t.rpmOstree {
// Edge supports only LVM, force it.
// Raw is not supported, return an error if it is requested
// TODO Need a central location for logic like this
if partitioningMode == disk.RawPartitioningMode {
return nil, fmt.Errorf("partitioning mode raw not supported for %s on %s", t.Name(), t.arch.Name())
}

partitioningMode = disk.LVMPartitioningMode
}

Expand Down Expand Up @@ -308,7 +303,7 @@ func (t *imageType) checkOptions(bp *blueprint.Blueprint, options distro.ImageOp
}

if t.name == "edge-simplified-installer" {
allowed := []string{"InstallationDevice", "FDO", "Ignition", "Kernel", "User", "Group", "FIPS"}
allowed := []string{"InstallationDevice", "FDO", "Ignition", "Kernel", "User", "Group", "FIPS", "Filesystem"}
if err := customizations.CheckAllowed(allowed...); err != nil {
return warnings, fmt.Errorf("unsupported blueprint customizations found for boot ISO image type %q: (allowed: %s)", t.name, strings.Join(allowed, ", "))
}
Expand Down Expand Up @@ -358,8 +353,7 @@ func (t *imageType) checkOptions(bp *blueprint.Blueprint, options distro.ImageOp
if options.OSTree == nil || options.OSTree.URL == "" {
return warnings, fmt.Errorf("%q images require specifying a URL from which to retrieve the OSTree commit", t.name)
}

allowed := []string{"Ignition", "Kernel", "User", "Group", "FIPS"}
allowed := []string{"Ignition", "Kernel", "User", "Group", "FIPS", "Filesystem"}
if err := customizations.CheckAllowed(allowed...); err != nil {
return warnings, fmt.Errorf("unsupported blueprint customizations found for image type %q: (allowed: %s)", t.name, strings.Join(allowed, ", "))
}
Expand All @@ -386,9 +380,14 @@ func (t *imageType) checkOptions(bp *blueprint.Blueprint, options distro.ImageOp
}

mountpoints := customizations.GetFilesystems()

if mountpoints != nil && t.rpmOstree {
return warnings, fmt.Errorf("Custom mountpoints are not supported for ostree types")
if mountpoints != nil && t.rpmOstree && (t.name == "edge-container" || t.name == "edge-commit") {
return warnings, fmt.Errorf("Custom mountpoints are not supported for edge-container and edge-commit")
} else if mountpoints != nil && t.rpmOstree && !(t.name == "edge-container" || t.name == "edge-commit") {
//customization allowed for edge-raw-image,edge-ami,edge-vsphere,edge-simplified-installer
err := blueprint.CheckMountpointsPolicy(mountpoints, pathpolicy.OstreeMountpointPolicies)
if err != nil {
return warnings, err
}
}

err := blueprint.CheckMountpointsPolicy(mountpoints, pathpolicy.MountpointPolicies)
Expand Down
13 changes: 13 additions & 0 deletions test/config-map.json
Original file line number Diff line number Diff line change
Expand Up @@ -193,5 +193,18 @@
"image-types": [
"ec2-sap"
]
},
"./configs/ostree-filesystem-customizations.json": {
"image-types": [
"edge-raw-image",
"edge-ami",
"edge-vsphere",
"simplified-installer"
],
"distros": [
"rhel-92",
"rhel-93",
"rhel-94"
]
}
}
53 changes: 53 additions & 0 deletions test/configs/ostree-filesystem-customizations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
{
"name": "ostree-filesystem-customizations",
"ostree": {
"url": "http://example.com/repo"
},
"blueprint": {
"customizations": {
"user": [
{
"groups": [
"wheel"
],
"key": "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBNebAh6SjpAn8wB53K4695cGnHGuCtl4RdaX3futZgJUultHyzeYHnzMO7d4++qnRL+Rworew62LKP560uvtncc= github.com/osbuild/images",
"name": "osbuild"
}
],
"filesystem": [
{
"mountpoint": "/foo",
"minsize": "2147483648"
},
{
"mountpoint": "/foo/bar",
"minsize": "2 GiB"
},
{
"mountpoint": "/root",
"minsize": "1 GiB"
},
{
"mountpoint": "/mnt",
"minsize": "3 GiB"
},
{
"mountpoint": "/srv",
"minsize": "4 GiB"
},
{
"mountpoint": "/opt",
"minsize": "1 GiB"
},
{
"mountpoint": "/var/mydata",
"minsize": "1 GiB"
}
]
}
},
"depends": {
"image-type": "edge-container",
"config": "empty.json"
}
}

0 comments on commit 4935886

Please sign in to comment.