weldr/upload: make translations between upload options explicit

The same types are used in the weldr API as internally. We want
to avoid sharing serialized types like this, as it easily leads
to layering vialotions.

For now just make the translation explicity, in a follow-up
we will introduce types dedicated to serialization in the weldr
API.

Signed-off-by: Tom Gundersen <teg@jklm.no>
This commit is contained in:
Tom Gundersen 2020-03-21 22:45:40 +01:00
parent 1bb8f7eee0
commit 440a5acb41
2 changed files with 53 additions and 23 deletions

View file

@ -2,11 +2,12 @@ package rpmmd_mock
import (
"fmt"
"sort"
"time"
"github.com/osbuild/osbuild-composer/internal/common"
"github.com/osbuild/osbuild-composer/internal/compose"
distro_mock "github.com/osbuild/osbuild-composer/internal/mocks/distro"
"sort"
"time"
"github.com/google/uuid"
"github.com/osbuild/osbuild-composer/internal/blueprint"

View file

@ -3,9 +3,10 @@ package weldr
import (
"encoding/json"
"errors"
"github.com/osbuild/osbuild-composer/internal/common"
"time"
"github.com/osbuild/osbuild-composer/internal/common"
"github.com/google/uuid"
"github.com/osbuild/osbuild-composer/internal/target"
)
@ -59,24 +60,6 @@ var providerNameToTargetNameMap = map[string]string{
"azure": "org.osbuild.azure",
}
func targetToUploadResponse(t *target.Target) UploadResponse {
var u UploadResponse
providerName, providerExist := targetNameToProviderNameMap[t.Name]
if !providerExist {
panic("target name " + t.Name + " is not defined in conversion map!")
}
u.CreationTime = float64(t.Created.UnixNano()) / 1000000000
u.ImageName = t.ImageName
u.ProviderName = providerName
u.Status = t.Status
u.Uuid = t.Uuid
u.Settings = t.Options
return u
}
func TargetsToUploadResponses(targets []*target.Target) []UploadResponse {
var uploads []UploadResponse
for _, t := range targets {
@ -84,8 +67,36 @@ func TargetsToUploadResponses(targets []*target.Target) []UploadResponse {
continue
}
upload := targetToUploadResponse(t)
providerName, providerExist := targetNameToProviderNameMap[t.Name]
if !providerExist {
panic("target name " + t.Name + " is not defined in conversion map!")
}
upload := UploadResponse{
Uuid: t.Uuid,
Status: t.Status,
ProviderName: providerName,
ImageName: t.ImageName,
CreationTime: float64(t.Created.UnixNano()) / 1000000000,
}
switch options := t.Options.(type) {
case *target.LocalTargetOptions:
continue
case *target.AWSTargetOptions:
upload.Settings = &target.AWSTargetOptions{
Region: options.Region,
AccessKeyID: options.AccessKeyID,
SecretAccessKey: options.SecretAccessKey,
Bucket: options.Bucket,
Key: options.Key,
}
case *target.AzureTargetOptions:
upload.Settings = &target.AzureTargetOptions{
Account: options.Account,
AccessKey: options.AccessKey,
Container: options.Container,
}
}
uploads = append(uploads, upload)
}
@ -102,10 +113,28 @@ func UploadRequestToTarget(u UploadRequest) (*target.Target, error) {
t.Uuid = uuid.New()
t.ImageName = u.ImageName
t.Options = u.Settings
t.Name = targetName
t.Status = common.IBWaiting
t.Created = time.Now()
switch options := u.Settings.(type) {
case *target.LocalTargetOptions:
t.Options = &target.LocalTargetOptions{}
case *target.AWSTargetOptions:
t.Options = &target.AWSTargetOptions{
Region: options.Region,
AccessKeyID: options.AccessKeyID,
SecretAccessKey: options.SecretAccessKey,
Bucket: options.Bucket,
Key: options.Key,
}
case *target.AzureTargetOptions:
t.Options = &target.AzureTargetOptions{
Account: options.Account,
AccessKey: options.AccessKey,
Container: options.Container,
}
}
return &t, nil
}