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:
parent
1bb8f7eee0
commit
440a5acb41
2 changed files with 53 additions and 23 deletions
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue