From 62bf88cc6203676bbbe9f830affc31ea18de1421 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 3 Jun 2025 11:36:07 +0200 Subject: [PATCH] bib: pass the boot-mode to AWS when doing combined build/upload This commit passes the boot mode to AWS when doing a combined build/upload. Here we know what boot mode to use and we can pass it easily. This also adds a "XXX" to think about how to handle what to do when uploading a pre-existing image where we do not know the boot mode. --- cmd/image-builder/main.go | 3 ++- cmd/image-builder/upload.go | 12 ++++++++---- cmd/image-builder/upload_test.go | 5 +++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/cmd/image-builder/main.go b/cmd/image-builder/main.go index 94ecf47..443b64d 100644 --- a/cmd/image-builder/main.go +++ b/cmd/image-builder/main.go @@ -334,7 +334,8 @@ func cmdBuild(cmd *cobra.Command, args []string) error { return err } - uploader, err := uploaderFor(cmd, res.ImgType.Name()) + bootMode := res.ImgType.BootMode() + uploader, err := uploaderFor(cmd, res.ImgType.Name(), &bootMode) if errors.Is(err, ErrUploadTypeUnsupported) || errors.Is(err, ErrUploadConfigNotProvided) { err = nil } diff --git a/cmd/image-builder/upload.go b/cmd/image-builder/upload.go index 62ef80a..da03cf1 100644 --- a/cmd/image-builder/upload.go +++ b/cmd/image-builder/upload.go @@ -13,6 +13,7 @@ import ( "github.com/osbuild/image-builder-cli/pkg/progress" "github.com/osbuild/images/pkg/cloud" "github.com/osbuild/images/pkg/cloud/awscloud" + "github.com/osbuild/images/pkg/platform" ) // ErrMissingUploadConfig is returned when the upload configuration is missing @@ -61,17 +62,17 @@ func uploaderCheckWithProgress(pbar progress.ProgressBar, uploader cloud.Uploade return uploader.Check(pw) } -func uploaderFor(cmd *cobra.Command, typeOrCloud string) (cloud.Uploader, error) { +func uploaderFor(cmd *cobra.Command, typeOrCloud string, bootMode *platform.BootMode) (cloud.Uploader, error) { switch typeOrCloud { case "ami", "aws": - return uploaderForCmdAWS(cmd) + return uploaderForCmdAWS(cmd, bootMode) default: return nil, fmt.Errorf("%w: %q", ErrUploadTypeUnsupported, typeOrCloud) } } -func uploaderForCmdAWS(cmd *cobra.Command) (cloud.Uploader, error) { +func uploaderForCmdAWS(cmd *cobra.Command, bootMode *platform.BootMode) (cloud.Uploader, error) { amiName, err := cmd.Flags().GetString("aws-ami-name") if err != nil { return nil, err @@ -109,6 +110,7 @@ func uploaderForCmdAWS(cmd *cobra.Command) (cloud.Uploader, error) { } opts := &awscloud.UploaderOptions{ TargetArch: targetArch, + BootMode: bootMode, } return awscloudNewUploader(region, bucketName, amiName, opts) @@ -124,7 +126,9 @@ func cmdUpload(cmd *cobra.Command, args []string) error { } imagePath := args[0] - uploader, err := uploaderFor(cmd, uploadTo) + // XXX: we need a way to introspect the image for bootmode here + // and/or error if no bootmode is specified + uploader, err := uploaderFor(cmd, uploadTo, nil) if err != nil { return err } diff --git a/cmd/image-builder/upload_test.go b/cmd/image-builder/upload_test.go index ab28db8..995de24 100644 --- a/cmd/image-builder/upload_test.go +++ b/cmd/image-builder/upload_test.go @@ -14,6 +14,7 @@ import ( "github.com/osbuild/images/pkg/cloud" "github.com/osbuild/images/pkg/cloud/awscloud" + "github.com/osbuild/images/pkg/platform" main "github.com/osbuild/image-builder-cli/cmd/image-builder" "github.com/osbuild/image-builder-cli/internal/testutil" @@ -144,10 +145,12 @@ func TestBuildAndUploadWithAWSMock(t *testing.T) { var regionName, bucketName, amiName string var fa fakeAwsUploader + var uploadOpts *awscloud.UploaderOptions restore := main.MockAwscloudNewUploader(func(region string, bucket string, ami string, opts *awscloud.UploaderOptions) (cloud.Uploader, error) { regionName = region bucketName = bucket amiName = ami + uploadOpts = opts return &fa, nil }) defer restore() @@ -178,6 +181,8 @@ func TestBuildAndUploadWithAWSMock(t *testing.T) { assert.Equal(t, regionName, "aws-region-1") assert.Equal(t, bucketName, "aws-bucket-2") assert.Equal(t, amiName, "aws-ami-3") + expectedBootMode := platform.BOOT_HYBRID + assert.Equal(t, &awscloud.UploaderOptions{BootMode: &expectedBootMode}, uploadOpts) assert.Equal(t, 1, fa.checkCalls) assert.Equal(t, 1, fa.uploadAndRegisterCalls) assert.Equal(t, "fake-img-raw\n", fa.uploadAndRegisterRead.String())