Skip to content

Commit

Permalink
bib: add support for file/directory customizations
Browse files Browse the repository at this point in the history
This commit adds support for files/directories in blueprint
customizations.

This needs osbuild/images#1227

Closes: osbuild#834
  • Loading branch information
mvo5 committed Feb 18, 2025
1 parent 2f0538d commit 3a2e116
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 0 deletions.
22 changes: 22 additions & 0 deletions bib/cmd/bootc-image-builder/image.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
"github.com/osbuild/images/pkg/osbuild"
"github.com/osbuild/images/pkg/pathpolicy"
"github.com/osbuild/images/pkg/platform"
"github.com/osbuild/images/pkg/policies"
"github.com/osbuild/images/pkg/rpmmd"
"github.com/osbuild/images/pkg/runner"
"github.com/sirupsen/logrus"
Expand Down Expand Up @@ -379,6 +380,27 @@ func manifestForDiskImage(c *ManifestConfig, rng *rand.Rand) (*manifest.Manifest
}
img.PartitionTable = pt

// Check Directory/File Customizations are valid
dc := customizations.GetDirectories()
fc := customizations.GetFiles()
if err := blueprint.ValidateDirFileCustomizations(dc, fc); err != nil {
return nil, err
}
if err := blueprint.CheckDirectoryCustomizationsPolicy(dc, policies.OstreeCustomDirectoriesPolicies); err != nil {
return nil, err
}
if err := blueprint.CheckFileCustomizationsPolicy(fc, policies.OstreeCustomFilesPolicies); err != nil {
return nil, err
}
img.Files, err = blueprint.FileCustomizationsToFsNodeFiles(fc)
if err != nil {
return nil, err
}
img.Directories, err = blueprint.DirectoryCustomizationsToFsNodeDirectories(dc)
if err != nil {
return nil, err
}

// For the bootc-disk image, the filename is the basename and the extension
// is added automatically for each disk format
img.Filename = "disk"
Expand Down
40 changes: 40 additions & 0 deletions test/test_manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -779,3 +779,43 @@ def test_iso_manifest_use_librepo(build_container, use_librepo):
assert "org.osbuild.librepo" in manifest["sources"]
else:
assert "org.osbuild.curl" in manifest["sources"]


def test_manifest_customization_custom_file_smoke(tmp_path, build_container):
# no need to parameterize this test, toml is the same for all containers
container_ref = "quay.io/centos-bootc/centos-bootc:stream9"
testutil.pull_container(container_ref)

cfg = {
"blueprint": {
"customizations": {
"files": [
{
"path": "/etc/custom_file",
"data": "hello world"
},
],
"directories": [
{
"path": "/etc/custom_dir",
},
],
},
},
}

output_path = tmp_path / "output"
output_path.mkdir(exist_ok=True)
config_json_path = output_path / "config.json"
config_json_path.write_text(json.dumps(cfg), encoding="utf-8")

output = subprocess.check_output([
*testutil.podman_run_common,
"-v", f"{output_path}:/output",
build_container,
"manifest", f"{container_ref}",
"--config", "/output/config.json",
], stderr=subprocess.PIPE, encoding="utf8")
osbuild_manifest = json.loads(output)
assert '"to":"tree:///etc/custom_file"' in output
assert '{"type":"org.osbuild.mkdir","options":{"paths":[{"path":"/etc/custom_dir","exist_ok":true}]}}' in output

0 comments on commit 3a2e116

Please sign in to comment.