main: add new upload command
This commit adds a new `upload` command that can be used to upload a raw image to the cloud. Currently only AWS is supported but as images adds more clouds to the uploader interfac we can easily expand more. The cloud is currently detected via the file extension, that mapping probably should also go into the `images` library.
This commit is contained in:
parent
0678d8ddfd
commit
e41377b82a
5 changed files with 162 additions and 2 deletions
|
|
@ -15,8 +15,10 @@ import (
|
|||
"github.com/sirupsen/logrus"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
//"github.com/osbuild/bootc-image-builder/bib/pkg/progress"
|
||||
"github.com/osbuild/images/pkg/cloud"
|
||||
"github.com/osbuild/images/pkg/cloud/awscloud"
|
||||
testrepos "github.com/osbuild/images/test/data/repositories"
|
||||
|
||||
main "github.com/osbuild/image-builder-cli/cmd/image-builder"
|
||||
|
|
@ -600,3 +602,64 @@ func TestProgressFromCmd(t *testing.T) {
|
|||
assert.Equal(t, tc.expectedProgress, fmt.Sprintf("%T", pbar))
|
||||
}
|
||||
}
|
||||
|
||||
type fakeAwsUploader struct {
|
||||
checkCalls int
|
||||
|
||||
uploadAndRegisterRead bytes.Buffer
|
||||
uploadAndRegisterCalls int
|
||||
}
|
||||
|
||||
var _ = cloud.Uploader(&fakeAwsUploader{})
|
||||
|
||||
func (fa *fakeAwsUploader) Check(status io.Writer) error {
|
||||
fa.checkCalls++
|
||||
return nil
|
||||
}
|
||||
|
||||
func (fa *fakeAwsUploader) UploadAndRegister(r io.Reader, status io.Writer) error {
|
||||
fa.uploadAndRegisterCalls++
|
||||
_, err := io.Copy(&fa.uploadAndRegisterRead, r)
|
||||
return err
|
||||
}
|
||||
|
||||
func TestUploadWithAWSMock(t *testing.T) {
|
||||
fakeDiskContent := "fake-raw-img"
|
||||
|
||||
fakeImageFilePath := filepath.Join(t.TempDir(), "disk.raw")
|
||||
err := os.WriteFile(fakeImageFilePath, []byte(fakeDiskContent), 0644)
|
||||
assert.NoError(t, err)
|
||||
|
||||
var regionName, bucketName, amiName string
|
||||
var fa fakeAwsUploader
|
||||
restore := main.MockAwscloudNewUploader(func(region string, bucket string, ami string, opts *awscloud.UploaderOptions) (cloud.Uploader, error) {
|
||||
regionName = region
|
||||
bucketName = bucket
|
||||
amiName = ami
|
||||
return &fa, nil
|
||||
})
|
||||
defer restore()
|
||||
|
||||
var fakeStdout bytes.Buffer
|
||||
restore = main.MockOsStdout(&fakeStdout)
|
||||
defer restore()
|
||||
|
||||
restore = main.MockOsArgs([]string{
|
||||
"upload",
|
||||
"--to=aws",
|
||||
"--aws-region=aws-region-1",
|
||||
"--aws-bucket=aws-bucket-2",
|
||||
"--aws-ami-name=aws-ami-3",
|
||||
fakeImageFilePath,
|
||||
})
|
||||
err = main.Run()
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, regionName, "aws-region-1")
|
||||
assert.Equal(t, bucketName, "aws-bucket-2")
|
||||
assert.Equal(t, amiName, "aws-ami-3")
|
||||
|
||||
assert.Equal(t, fakeDiskContent, fa.uploadAndRegisterRead.String())
|
||||
// progress was rendered
|
||||
assert.Contains(t, fakeStdout.String(), "--] 100.00%")
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue