From 440a5acb41d6debd96df914872d7dc7dc181c869 Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Sat, 21 Mar 2020 22:45:40 +0100 Subject: [PATCH] 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 --- internal/mocks/rpmmd/fixtures.go | 5 ++- internal/weldr/upload.go | 71 ++++++++++++++++++++++---------- 2 files changed, 53 insertions(+), 23 deletions(-) diff --git a/internal/mocks/rpmmd/fixtures.go b/internal/mocks/rpmmd/fixtures.go index a54603d25..139e8dd05 100644 --- a/internal/mocks/rpmmd/fixtures.go +++ b/internal/mocks/rpmmd/fixtures.go @@ -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" diff --git a/internal/weldr/upload.go b/internal/weldr/upload.go index 6c3c31b7b..70810e36c 100644 --- a/internal/weldr/upload.go +++ b/internal/weldr/upload.go @@ -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 }