ostree: replace FetchChecksum with ParentRef on ostree.ImageOptions

The FetchChecksum on ostree.ImageOptions was the resolved commit ID of
the parent ref to be pulled (for ostree commits and containers) or the
commit ID of the content ref (for ostree installers and raw images).
With the new process of manifest creation and serialisation, using the
image options to transport resolved content references is bad and
confusing.  Image options should only reflect user and image type
options before any references are resolved.  With this change, the
ostree.ImageOptions should only reflect the ostree-related options
specified by the user.  Commit IDs will only be available after the
manifest is initialised when the commit sources are resolved (before
serialisation).
This commit is contained in:
Achilleas Koutsou 2023-06-01 13:25:20 +02:00 committed by Ondřej Budai
parent a5e8dfec43
commit d7a5bb99c1
15 changed files with 57 additions and 58 deletions

View file

@ -124,10 +124,10 @@ func makeManifestJob(name string, imgType distro.ImageType, cr composeRequest, d
options := distro.ImageOptions{Size: 0} options := distro.ImageOptions{Size: 0}
if cr.OSTree != nil { if cr.OSTree != nil {
options.OSTree = &ostree.ImageOptions{ options.OSTree = &ostree.ImageOptions{
URL: cr.OSTree.URL, URL: cr.OSTree.URL,
ImageRef: cr.OSTree.Ref, ImageRef: cr.OSTree.Ref,
FetchChecksum: cr.OSTree.Parent, ParentRef: cr.OSTree.Parent,
RHSM: cr.OSTree.RHSM, RHSM: cr.OSTree.RHSM,
} }
} else { } else {
// use default OSTreeRef for image type // use default OSTreeRef for image type

View file

@ -60,7 +60,7 @@ func TestCrossArchDepsolve(t *testing.T) {
OSTree: &ostree.ImageOptions{ OSTree: &ostree.ImageOptions{
URL: "foo", URL: "foo",
ImageRef: "bar", ImageRef: "bar",
FetchChecksum: "baz", ParentRef: "baz",
}, },
}, },
repos[archStr], 0) repos[archStr], 0)

View file

@ -50,9 +50,9 @@ func main() {
encoder.SetIndent("", " ") encoder.SetIndent("", " ")
options := distro.ImageOptions{ options := distro.ImageOptions{
OSTree: &ostree.ImageOptions{ OSTree: &ostree.ImageOptions{
URL: "foo", URL: "foo",
ImageRef: "bar", ImageRef: "bar",
FetchChecksum: "baz", ParentRef: "baz",
}, },
} }
manifest, _, err := image.Manifest(&blueprint.Blueprint{}, options, nil, 0) manifest, _, err := image.Manifest(&blueprint.Blueprint{}, options, nil, 0)

View file

@ -181,9 +181,9 @@ func main() {
options := distro.ImageOptions{ options := distro.ImageOptions{
Size: imageType.Size(0), Size: imageType.Size(0),
OSTree: &ostree.ImageOptions{ OSTree: &ostree.ImageOptions{
ImageRef: composeRequest.OSTree.Ref, ImageRef: composeRequest.OSTree.Ref,
FetchChecksum: composeRequest.OSTree.Parent, ParentRef: composeRequest.OSTree.Parent,
URL: composeRequest.OSTree.URL, URL: composeRequest.OSTree.URL,
}, },
} }

View file

@ -482,9 +482,9 @@ func generateManifest(ctx context.Context, workers *worker.Server, depsolveJobID
} }
options.OSTree = &ostree.ImageOptions{ options.OSTree = &ostree.ImageOptions{
ImageRef: result.Specs[0].Ref, ImageRef: result.Specs[0].Ref,
FetchChecksum: result.Specs[0].Checksum, ParentRef: result.Specs[0].Checksum,
URL: result.Specs[0].URL, URL: result.Specs[0].URL,
} }
} }

View file

@ -56,9 +56,9 @@ func TestImageType_PackageSetsChains(t *testing.T) {
} }
options := distro.ImageOptions{ options := distro.ImageOptions{
OSTree: &ostree.ImageOptions{ OSTree: &ostree.ImageOptions{
URL: "foo", URL: "foo",
ImageRef: "bar", ImageRef: "bar",
FetchChecksum: "baz", ParentRef: "baz",
}, },
} }
manifest, _, err := imageType.Manifest(&bp, options, nil, 0) manifest, _, err := imageType.Manifest(&bp, options, nil, 0)
@ -147,9 +147,9 @@ func TestImageTypePipelineNames(t *testing.T) {
// Add ostree options for image types that require them // Add ostree options for image types that require them
options.OSTree = &ostree.ImageOptions{ options.OSTree = &ostree.ImageOptions{
ImageRef: imageType.OSTreeRef(), ImageRef: imageType.OSTreeRef(),
URL: "https://example.com/repo", URL: "https://example.com/repo",
FetchChecksum: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", ParentRef: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
} }
// Pipelines that require package sets will fail if none // Pipelines that require package sets will fail if none
@ -461,9 +461,9 @@ func TestPipelineRepositories(t *testing.T) {
// Add ostree options for image types that require them // Add ostree options for image types that require them
options.OSTree = &ostree.ImageOptions{ options.OSTree = &ostree.ImageOptions{
ImageRef: imageType.OSTreeRef(), ImageRef: imageType.OSTreeRef(),
URL: "https://example.com/repo", URL: "https://example.com/repo",
FetchChecksum: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", ParentRef: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
} }
repos := tCase.repos repos := tCase.repos

View file

@ -105,10 +105,10 @@ func TestDistro_Manifest(t *testing.T, pipelinePath string, prefix string, regis
if ref := imageType.OSTreeRef(); ref != "" { if ref := imageType.OSTreeRef(); ref != "" {
if tt.ComposeRequest.OSTree != nil { if tt.ComposeRequest.OSTree != nil {
ostreeOptions = &ostree.ImageOptions{ ostreeOptions = &ostree.ImageOptions{
ImageRef: tt.ComposeRequest.OSTree.Ref, ImageRef: tt.ComposeRequest.OSTree.Ref,
FetchChecksum: tt.ComposeRequest.OSTree.Parent, ParentRef: tt.ComposeRequest.OSTree.Parent,
URL: tt.ComposeRequest.OSTree.URL, URL: tt.ComposeRequest.OSTree.URL,
RHSM: tt.ComposeRequest.OSTree.RHSM, RHSM: tt.ComposeRequest.OSTree.RHSM,
} }
} }
} }
@ -217,9 +217,9 @@ var knownKernels = []string{"kernel", "kernel-debug", "kernel-rt"}
// Returns the number of known kernels in the package list // Returns the number of known kernels in the package list
func kernelCount(imgType distro.ImageType, bp blueprint.Blueprint) int { func kernelCount(imgType distro.ImageType, bp blueprint.Blueprint) int {
ostreeOptions := &ostree.ImageOptions{ ostreeOptions := &ostree.ImageOptions{
URL: "foo", URL: "foo",
ImageRef: "bar", ImageRef: "bar",
FetchChecksum: "baz", ParentRef: "baz",
} }
manifest, _, err := imgType.Manifest(&bp, distro.ImageOptions{OSTree: ostreeOptions}, nil, 0) manifest, _, err := imgType.Manifest(&bp, distro.ImageOptions{OSTree: ostreeOptions}, nil, 0)
if err != nil { if err != nil {

View file

@ -297,9 +297,9 @@ func iotCommitImage(workload workload.Workload,
img.Environment = t.environment img.Environment = t.environment
img.Workload = workload img.Workload = workload
if options.OSTree.FetchChecksum != "" && options.OSTree.URL != "" { if options.OSTree.ParentRef != "" && options.OSTree.URL != "" {
img.OSTreeParent = &ostree.CommitSpec{ img.OSTreeParent = &ostree.CommitSpec{
Checksum: options.OSTree.FetchChecksum, Checksum: options.OSTree.ParentRef,
URL: options.OSTree.URL, URL: options.OSTree.URL,
ContentURL: options.OSTree.ContentURL, ContentURL: options.OSTree.ContentURL,
} }
@ -328,9 +328,9 @@ func iotContainerImage(workload workload.Workload,
img.Environment = t.environment img.Environment = t.environment
img.Workload = workload img.Workload = workload
if options.OSTree.FetchChecksum != "" && options.OSTree.URL != "" { if options.OSTree.ParentRef != "" && options.OSTree.URL != "" {
img.OSTreeParent = &ostree.CommitSpec{ img.OSTreeParent = &ostree.CommitSpec{
Checksum: options.OSTree.FetchChecksum, Checksum: options.OSTree.ParentRef,
URL: options.OSTree.URL, URL: options.OSTree.URL,
ContentURL: options.OSTree.ContentURL, ContentURL: options.OSTree.ContentURL,
} }
@ -359,7 +359,7 @@ func iotInstallerImage(workload workload.Workload,
Ref: options.OSTree.ImageRef, Ref: options.OSTree.ImageRef,
URL: options.OSTree.URL, URL: options.OSTree.URL,
ContentURL: options.OSTree.ContentURL, ContentURL: options.OSTree.ContentURL,
Checksum: options.OSTree.FetchChecksum, Checksum: options.OSTree.ParentRef,
} }
img := image.NewOSTreeInstaller(commit) img := image.NewOSTreeInstaller(commit)
@ -399,7 +399,7 @@ func iotRawImage(workload workload.Workload,
Ref: options.OSTree.ImageRef, Ref: options.OSTree.ImageRef,
URL: options.OSTree.URL, URL: options.OSTree.URL,
ContentURL: options.OSTree.ContentURL, ContentURL: options.OSTree.ContentURL,
Checksum: options.OSTree.FetchChecksum, Checksum: options.OSTree.ParentRef,
} }
img := image.NewOSTreeRawImage(commit) img := image.NewOSTreeRawImage(commit)

View file

@ -249,7 +249,7 @@ func (t *imageType) checkOptions(bp *blueprint.Blueprint, options distro.ImageOp
ostreeChecksum := "" ostreeChecksum := ""
if options.OSTree != nil { if options.OSTree != nil {
ostreeChecksum = options.OSTree.FetchChecksum ostreeChecksum = options.OSTree.ParentRef
} }
if t.bootISO && t.rpmOstree { if t.bootISO && t.rpmOstree {

View file

@ -320,9 +320,9 @@ func edgeCommitImage(workload workload.Workload,
img.Environment = t.environment img.Environment = t.environment
img.Workload = workload img.Workload = workload
if options.OSTree.FetchChecksum != "" && options.OSTree.URL != "" { if options.OSTree.ParentRef != "" && options.OSTree.URL != "" {
img.OSTreeParent = &ostree.CommitSpec{ img.OSTreeParent = &ostree.CommitSpec{
Checksum: options.OSTree.FetchChecksum, Checksum: options.OSTree.ParentRef,
URL: options.OSTree.URL, URL: options.OSTree.URL,
ContentURL: options.OSTree.ContentURL, ContentURL: options.OSTree.ContentURL,
} }
@ -354,9 +354,9 @@ func edgeContainerImage(workload workload.Workload,
img.Environment = t.environment img.Environment = t.environment
img.Workload = workload img.Workload = workload
if options.OSTree.FetchChecksum != "" && options.OSTree.URL != "" { if options.OSTree.ParentRef != "" && options.OSTree.URL != "" {
img.OSTreeParent = &ostree.CommitSpec{ img.OSTreeParent = &ostree.CommitSpec{
Checksum: options.OSTree.FetchChecksum, Checksum: options.OSTree.ParentRef,
URL: options.OSTree.URL, URL: options.OSTree.URL,
ContentURL: options.OSTree.ContentURL, ContentURL: options.OSTree.ContentURL,
} }
@ -388,7 +388,7 @@ func edgeInstallerImage(workload workload.Workload,
Ref: options.OSTree.ImageRef, Ref: options.OSTree.ImageRef,
URL: options.OSTree.URL, URL: options.OSTree.URL,
ContentURL: options.OSTree.ContentURL, ContentURL: options.OSTree.ContentURL,
Checksum: options.OSTree.FetchChecksum, Checksum: options.OSTree.ParentRef,
} }
if options.OSTree.RHSM { if options.OSTree.RHSM {
commit.Secrets = "org.osbuild.rhsm.consumer" commit.Secrets = "org.osbuild.rhsm.consumer"
@ -432,7 +432,7 @@ func edgeRawImage(workload workload.Workload,
Ref: options.OSTree.ImageRef, Ref: options.OSTree.ImageRef,
URL: options.OSTree.URL, URL: options.OSTree.URL,
ContentURL: options.OSTree.ContentURL, ContentURL: options.OSTree.ContentURL,
Checksum: options.OSTree.FetchChecksum, Checksum: options.OSTree.ParentRef,
} }
img := image.NewOSTreeRawImage(commit) img := image.NewOSTreeRawImage(commit)
@ -478,7 +478,7 @@ func edgeSimplifiedInstallerImage(workload workload.Workload,
Ref: options.OSTree.ImageRef, Ref: options.OSTree.ImageRef,
URL: options.OSTree.URL, URL: options.OSTree.URL,
ContentURL: options.OSTree.ContentURL, ContentURL: options.OSTree.ContentURL,
Checksum: options.OSTree.FetchChecksum, Checksum: options.OSTree.ParentRef,
} }
rawImg := image.NewOSTreeRawImage(commit) rawImg := image.NewOSTreeRawImage(commit)

View file

@ -315,7 +315,7 @@ func (t *imageType) checkOptions(bp *blueprint.Blueprint, options distro.ImageOp
ostreeChecksum := "" ostreeChecksum := ""
if options.OSTree != nil { if options.OSTree != nil {
ostreeChecksum = options.OSTree.FetchChecksum ostreeChecksum = options.OSTree.ParentRef
} }
if t.bootISO && t.rpmOstree { if t.bootISO && t.rpmOstree {

View file

@ -262,9 +262,9 @@ func edgeCommitImage(workload workload.Workload,
img.Environment = t.environment img.Environment = t.environment
img.Workload = workload img.Workload = workload
if options.OSTree.FetchChecksum != "" && options.OSTree.URL != "" { if options.OSTree.ParentRef != "" && options.OSTree.URL != "" {
img.OSTreeParent = &ostree.CommitSpec{ img.OSTreeParent = &ostree.CommitSpec{
Checksum: options.OSTree.FetchChecksum, Checksum: options.OSTree.ParentRef,
URL: options.OSTree.URL, URL: options.OSTree.URL,
ContentURL: options.OSTree.ContentURL, ContentURL: options.OSTree.ContentURL,
} }
@ -299,9 +299,9 @@ func edgeContainerImage(workload workload.Workload,
img.Environment = t.environment img.Environment = t.environment
img.Workload = workload img.Workload = workload
if options.OSTree.FetchChecksum != "" && options.OSTree.URL != "" { if options.OSTree.ParentRef != "" && options.OSTree.URL != "" {
img.OSTreeParent = &ostree.CommitSpec{ img.OSTreeParent = &ostree.CommitSpec{
Checksum: options.OSTree.FetchChecksum, Checksum: options.OSTree.ParentRef,
URL: options.OSTree.URL, URL: options.OSTree.URL,
ContentURL: options.OSTree.ContentURL, ContentURL: options.OSTree.ContentURL,
} }
@ -333,7 +333,7 @@ func edgeInstallerImage(workload workload.Workload,
Ref: options.OSTree.ImageRef, Ref: options.OSTree.ImageRef,
URL: options.OSTree.URL, URL: options.OSTree.URL,
ContentURL: options.OSTree.ContentURL, ContentURL: options.OSTree.ContentURL,
Checksum: options.OSTree.FetchChecksum, Checksum: options.OSTree.ParentRef,
} }
if options.OSTree.RHSM { if options.OSTree.RHSM {
commit.Secrets = "org.osbuild.rhsm.consumer" commit.Secrets = "org.osbuild.rhsm.consumer"
@ -382,7 +382,7 @@ func edgeRawImage(workload workload.Workload,
Ref: options.OSTree.ImageRef, Ref: options.OSTree.ImageRef,
URL: options.OSTree.URL, URL: options.OSTree.URL,
ContentURL: options.OSTree.ContentURL, ContentURL: options.OSTree.ContentURL,
Checksum: options.OSTree.FetchChecksum, Checksum: options.OSTree.ParentRef,
} }
img := image.NewOSTreeRawImage(commit) img := image.NewOSTreeRawImage(commit)
if !common.VersionLessThan(t.arch.distro.osVersion, "9.2") || t.arch.distro.osVersion == "9-stream" { if !common.VersionLessThan(t.arch.distro.osVersion, "9.2") || t.arch.distro.osVersion == "9-stream" {
@ -445,7 +445,7 @@ func edgeSimplifiedInstallerImage(workload workload.Workload,
Ref: options.OSTree.ImageRef, Ref: options.OSTree.ImageRef,
URL: options.OSTree.URL, URL: options.OSTree.URL,
ContentURL: options.OSTree.ContentURL, ContentURL: options.OSTree.ContentURL,
Checksum: options.OSTree.FetchChecksum, Checksum: options.OSTree.ParentRef,
} }
rawImg := image.NewOSTreeRawImage(commit) rawImg := image.NewOSTreeRawImage(commit)
if !common.VersionLessThan(t.arch.distro.osVersion, "9.2") || t.arch.distro.osVersion == "9-stream" { if !common.VersionLessThan(t.arch.distro.osVersion, "9.2") || t.arch.distro.osVersion == "9-stream" {

View file

@ -286,7 +286,7 @@ func (t *imageType) checkOptions(bp *blueprint.Blueprint, options distro.ImageOp
ostreeChecksum := "" ostreeChecksum := ""
if options.OSTree != nil { if options.OSTree != nil {
ostreeChecksum = options.OSTree.FetchChecksum ostreeChecksum = options.OSTree.ParentRef
} }
if t.bootISO && t.rpmOstree { if t.bootISO && t.rpmOstree {

View file

@ -56,11 +56,10 @@ type ImageOptions struct {
// embedded in the installer or deployed in the image. // embedded in the installer or deployed in the image.
ImageRef string ImageRef string
// For ostree commit and container types: The FetchChecksum specifies the parent // For ostree commit and container types: The ParentRef specifies the parent
// ostree commit that the new commit will be based on. // ostree commit that the new commit will be based on.
// For ostree installers and raw images: The FetchChecksum specifies the commit // For ostree installers and raw images: The ParentRef does not apply.
// ID that will be embedded in the installer or deployed in the image. ParentRef string
FetchChecksum string
// The URL from which to fetch the commit specified by the checksum. // The URL from which to fetch the commit specified by the checksum.
URL string URL string

View file

@ -2466,7 +2466,7 @@ func (api *API) composeHandler(writer http.ResponseWriter, request *http.Request
return return
} }
ostreeOptions.ImageRef = ref ostreeOptions.ImageRef = ref
ostreeOptions.FetchChecksum = checksum ostreeOptions.ParentRef = checksum
} }
var size uint64 var size uint64