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())