Skip to content

Commit

Permalink
v1: remove upload request
Browse files Browse the repository at this point in the history
  • Loading branch information
chloenayon committed Sep 12, 2022
1 parent 03b130c commit 7a0bf00
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 114 deletions.
62 changes: 31 additions & 31 deletions internal/v1/api.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion internal/v1/api.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -395,7 +395,6 @@ components:
required:
- architecture
- image_type
- upload_request
properties:
architecture:
type: string
Expand Down
102 changes: 40 additions & 62 deletions internal/v1/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -507,7 +507,7 @@ func (h *Handlers) ComposeImage(ctx echo.Context) error {
return err
}

if (composeRequest.ImageRequests[0].UploadRequest == UploadRequest{}) {
if (composeRequest.ImageRequests[0].UploadRequest == &UploadRequest{}) {
return echo.NewHTTPError(http.StatusBadRequest, "Exactly one upload request should be included")
}

Expand Down Expand Up @@ -610,23 +610,28 @@ func (h *Handlers) ComposeImage(ctx echo.Context) error {
})
}

func (s *Server) buildUploadOptions(ur UploadRequest, it ImageTypes) (composer.UploadOptions, composer.ImageTypes, error) {
func (s *Server) buildAWSS3UploadOptions(options []byte, composerImageType composer.ImageTypes) (composer.UploadOptions, composer.ImageTypes, error) {
var awsOptions AWSS3UploadRequestOptions
err := json.Unmarshal(options, &awsOptions)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "Unable to unmarshal UploadRequestOptions")
}
return composer.AWSS3UploadOptions{
Region: s.aws.Region,
}, composerImageType, nil
}

func (s *Server) buildUploadOptions(ur *UploadRequest, it ImageTypes) (composer.UploadOptions, composer.ImageTypes, error) {
// HACK deepmap doesn't really support `oneOf`, so marshal and unmarshal into target object
optionsJSON, err := json.Marshal(ur.Options)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "Unable to marshal UploadRequestOptions")
}
switch ur.Type {
case UploadTypesAws:
var composerImageType composer.ImageTypes
switch it {
case ImageTypesAws:
fallthrough
case ImageTypesAmi:
composerImageType = composer.ImageTypesAws
default:
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "Invalid image type for upload target")
}

switch it {

// Upload Type AWS
case ImageTypesAmi, ImageTypesAws:
var awsOptions AWSUploadRequestOptions
err = json.Unmarshal(optionsJSON, &awsOptions)
if err != nil {
Expand All @@ -635,43 +640,22 @@ func (s *Server) buildUploadOptions(ur UploadRequest, it ImageTypes) (composer.U
return composer.AWSEC2UploadOptions{
Region: s.aws.Region,
ShareWithAccounts: awsOptions.ShareWithAccounts,
}, composerImageType, nil
case UploadTypesAwsS3:
var composerImageType composer.ImageTypes
switch it {
case ImageTypesEdgeCommit:
fallthrough
case ImageTypesRhelEdgeCommit:
composerImageType = composer.ImageTypesEdgeCommit
case ImageTypesEdgeInstaller:
fallthrough
case ImageTypesRhelEdgeInstaller:
composerImageType = composer.ImageTypesEdgeInstaller
case ImageTypesGuestImage:
composerImageType = composer.ImageTypesGuestImage
case ImageTypesImageInstaller:
composerImageType = composer.ImageTypesImageInstaller
case ImageTypesVsphere:
composerImageType = composer.ImageTypesVsphere
default:
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "Invalid image type for upload target")
}
var awsOptions AWSS3UploadRequestOptions
err = json.Unmarshal(optionsJSON, &awsOptions)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "Unable to unmarshal UploadRequestOptions")
}
return composer.AWSS3UploadOptions{
Region: s.aws.Region,
}, composerImageType, nil
case UploadTypesGcp:
var composerImageType composer.ImageTypes
switch it {
case ImageTypesGcp:
composerImageType = composer.ImageTypesGcp
default:
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "Invalid image type for upload target")
}
}, composer.ImageTypesAws, nil

// Upload Type AWS S3
case ImageTypesEdgeCommit, ImageTypesRhelEdgeCommit:
return s.buildAWSS3UploadOptions(optionsJSON, composer.ImageTypesEdgeCommit)
case ImageTypesEdgeInstaller, ImageTypesRhelEdgeInstaller:
return s.buildAWSS3UploadOptions(optionsJSON, composer.ImageTypesEdgeInstaller)
case ImageTypesGuestImage:
return s.buildAWSS3UploadOptions(optionsJSON, composer.ImageTypesGuestImage)
case ImageTypesImageInstaller:
return s.buildAWSS3UploadOptions(optionsJSON, composer.ImageTypesImageInstaller)
case ImageTypesVsphere:
return s.buildAWSS3UploadOptions(optionsJSON, composer.ImageTypesVsphere)

// Upload Type GCP
case ImageTypesGcp:
var gcpOptions GCPUploadRequestOptions
err = json.Unmarshal(optionsJSON, &gcpOptions)
if err != nil {
Expand All @@ -681,17 +665,10 @@ func (s *Server) buildUploadOptions(ur UploadRequest, it ImageTypes) (composer.U
Bucket: s.gcp.Bucket,
Region: s.gcp.Region,
ShareWithAccounts: &gcpOptions.ShareWithAccounts,
}, composerImageType, nil
case UploadTypesAzure:
var composerImageType composer.ImageTypes
switch it {
case ImageTypesAzure:
fallthrough
case ImageTypesVhd:
composerImageType = composer.ImageTypesAzure
default:
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "Invalid image type for upload target")
}
}, composer.ImageTypesGcp, nil

// Upload Type Azure
case ImageTypesAzure, ImageTypesVhd:
var azureOptions AzureUploadRequestOptions
err = json.Unmarshal(optionsJSON, &azureOptions)
if err != nil {
Expand All @@ -702,7 +679,8 @@ func (s *Server) buildUploadOptions(ur UploadRequest, it ImageTypes) (composer.U
SubscriptionId: azureOptions.SubscriptionId,
ResourceGroup: azureOptions.ResourceGroup,
Location: s.azure.Location,
}, composerImageType, nil
}, composer.ImageTypesAzure, nil

default:
return nil, "", echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Unknown UploadRequest type %s", ur.Type))
}
Expand Down
37 changes: 17 additions & 20 deletions internal/v1/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -554,7 +554,7 @@ func TestComposeImage(t *testing.T) {
{
Architecture: "x86_64",
ImageType: ImageTypesAws,
UploadRequest: UploadRequest{
UploadRequest: &UploadRequest{
Type: UploadTypesAws,
Options: AWSUploadRequestOptions{
ShareWithAccounts: []string{"test-account"},
Expand All @@ -564,7 +564,7 @@ func TestComposeImage(t *testing.T) {
{
Architecture: "x86_64",
ImageType: ImageTypesAmi,
UploadRequest: UploadRequest{
UploadRequest: &UploadRequest{
Type: UploadTypesAws,
Options: AWSUploadRequestOptions{
ShareWithAccounts: []string{"test-account"},
Expand All @@ -578,22 +578,19 @@ func TestComposeImage(t *testing.T) {
require.Contains(t, body, `Error at \"/image_requests\": maximum number of items is 1`)
})

t.Run("ErrorsForZeroUploadRequests", func(t *testing.T) {
t.Run("NoErrorsForZeroUploadRequests", func(t *testing.T) {
payload := ComposeRequest{
Customizations: nil,
Distribution: "centos-8",
ImageRequests: []ImageRequest{
{
Architecture: "x86_64",
ImageType: ImageTypesAzure,
UploadRequest: UploadRequest{},
Architecture: "x86_64",
ImageType: ImageTypesAzure,
},
},
}
response, body := tutils.PostResponseBody(t, "http://localhost:8086/api/image-builder/v1/compose", payload)
require.Equal(t, 400, response.StatusCode)
require.Regexp(t, "image_requests/0/upload_request/options|image_requests/0/upload_request/type", body)
require.Regexp(t, "Value is not nullable|value is not one of the allowed values", body)
response, _ := tutils.PostResponseBody(t, "http://localhost:8086/api/image-builder/v1/compose", payload)
require.Equal(t, 200, response.StatusCode)
})

t.Run("ISEWhenRepositoriesNotFound", func(t *testing.T) {
Expand All @@ -606,7 +603,7 @@ func TestComposeImage(t *testing.T) {
{
Architecture: "unsupported-arch",
ImageType: ImageTypesAws,
UploadRequest: UploadRequest{
UploadRequest: &UploadRequest{
Type: UploadTypesAws,
Options: AWSUploadRequestOptions{
ShareWithAccounts: []string{"test-account"},
Expand Down Expand Up @@ -644,7 +641,7 @@ func TestComposeImage(t *testing.T) {
{
Architecture: "x86_64",
ImageType: ImageTypesAmi,
UploadRequest: UploadRequest{
UploadRequest: &UploadRequest{
Type: UploadTypesAws,
Options: AWSUploadRequestOptions{
ShareWithAccounts: []string{"test-account"},
Expand All @@ -667,7 +664,7 @@ func TestComposeImage(t *testing.T) {
{
Architecture: "x86_64",
ImageType: ImageTypesAzure,
UploadRequest: UploadRequest{
UploadRequest: &UploadRequest{
Type: "unknown",
Options: AWSUploadRequestOptions{
ShareWithAccounts: []string{"test-account"},
Expand Down Expand Up @@ -713,7 +710,7 @@ func TestComposeImageErrorsWhenStatusCodeIsNotStatusCreated(t *testing.T) {
{
Architecture: "x86_64",
ImageType: ImageTypesAws,
UploadRequest: UploadRequest{
UploadRequest: &UploadRequest{
Type: UploadTypesAws,
Options: AWSUploadRequestOptions{
ShareWithAccounts: []string{"test-account"},
Expand Down Expand Up @@ -757,7 +754,7 @@ func TestComposeImageErrorsWhenCannotParseResponse(t *testing.T) {
{
Architecture: "x86_64",
ImageType: ImageTypesAws,
UploadRequest: UploadRequest{
UploadRequest: &UploadRequest{
Type: UploadTypesAws,
Options: AWSUploadRequestOptions{
ShareWithAccounts: []string{"test-account"},
Expand Down Expand Up @@ -803,7 +800,7 @@ func TestComposeImageReturnsIdWhenNoErrors(t *testing.T) {
{
Architecture: "x86_64",
ImageType: ImageTypesAws,
UploadRequest: UploadRequest{
UploadRequest: &UploadRequest{
Type: UploadTypesAws,
Options: AWSUploadRequestOptions{
ShareWithAccounts: []string{"test-account"},
Expand Down Expand Up @@ -850,7 +847,7 @@ func TestComposeImageAllowList(t *testing.T) {
{
Architecture: "x86_64",
ImageType: ImageTypesAws,
UploadRequest: UploadRequest{
UploadRequest: &UploadRequest{
Type: UploadTypesAws,
Options: AWSUploadRequestOptions{
ShareWithAccounts: []string{"test-account"},
Expand Down Expand Up @@ -1008,7 +1005,7 @@ func TestComposeCustomizations(t *testing.T) {
{
Architecture: "x86_64",
ImageType: ImageTypesRhelEdgeInstaller,
UploadRequest: UploadRequest{
UploadRequest: &UploadRequest{
Type: UploadTypesAwsS3,
Options: AWSS3UploadRequestOptions{},
},
Expand Down Expand Up @@ -1105,7 +1102,7 @@ func TestComposeCustomizations(t *testing.T) {
Ostree: &OSTree{
Ref: strptr("edge/ref"),
},
UploadRequest: UploadRequest{
UploadRequest: &UploadRequest{
Type: UploadTypesAwsS3,
Options: AWSS3UploadRequestOptions{},
},
Expand Down Expand Up @@ -1169,7 +1166,7 @@ func TestComposeCustomizations(t *testing.T) {
Url: strptr("https://ostree.srv/"),
Parent: strptr("test/edge/ref2"),
},
UploadRequest: UploadRequest{
UploadRequest: &UploadRequest{
Type: UploadTypesAwsS3,
Options: AWSS3UploadRequestOptions{},
},
Expand Down

0 comments on commit 7a0bf00

Please sign in to comment.