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.
This commit is contained in:
parent
2996bbc0d1
commit
62bf88cc62
3 changed files with 15 additions and 5 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue