From 08cfc088056cf29efa302cbba4af16fb59f3853f Mon Sep 17 00:00:00 2001 From: Jozef Mikovic Date: Wed, 20 Jan 2021 11:48:12 +0100 Subject: [PATCH] weldr: add vmware upload target to api Extend Weldr API to allow user to specify option to upload built image to VMWare, makes use of previously define upload target. --- cmd/osbuild-worker/jobimpl-osbuild.go | 13 +++++----- internal/target/vmware_target.go | 2 +- internal/weldr/upload.go | 34 +++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/cmd/osbuild-worker/jobimpl-osbuild.go b/cmd/osbuild-worker/jobimpl-osbuild.go index 9da7080fe..b52d67acb 100644 --- a/cmd/osbuild-worker/jobimpl-osbuild.go +++ b/cmd/osbuild-worker/jobimpl-osbuild.go @@ -138,7 +138,6 @@ func (impl *OSBuildJobImpl) Run(job worker.Job) error { continue } case *target.VMWareTargetOptions: - // TODO if !osbuildOutput.Success { continue } @@ -154,12 +153,12 @@ func (impl *OSBuildJobImpl) Run(job worker.Job) error { imagePath = f.Name() credentials := vmware.Credentials{ - Username: options.Username, - Password: options.Password, - Host: options.Host, - Cluster: options.Cluster, - Datacenter: options.Datacenter, - Datastore: options.Datastore, + Username: options.Username, + Password: options.Password, + Host: options.Host, + Cluster: options.Cluster, + Datacenter: options.Datacenter, + Datastore: options.Datastore, } err = vmware.UploadImage(credentials, imagePath, t.ImageName) if err != nil { diff --git a/internal/target/vmware_target.go b/internal/target/vmware_target.go index 179e7cf29..7fcba6710 100644 --- a/internal/target/vmware_target.go +++ b/internal/target/vmware_target.go @@ -12,6 +12,6 @@ type VMWareTargetOptions struct { func (VMWareTargetOptions) isTargetOptions() {} -func NewVMWareTarget(options *VMWareTargetOptions) *Target{ +func NewVMWareTarget(options *VMWareTargetOptions) *Target { return newTarget("org.osbuild.vmware", options) } diff --git a/internal/weldr/upload.go b/internal/weldr/upload.go index 6c2e55f1d..eefb79e6c 100644 --- a/internal/weldr/upload.go +++ b/internal/weldr/upload.go @@ -43,6 +43,17 @@ type azureUploadSettings struct { func (azureUploadSettings) isUploadSettings() {} +type vmwareUploadSettings struct { + Host string `json:"host"` + Username string `json:"username"` + Password string `json:"password"` + Datacenter string `json:"datacenter"` + Cluster string `json:"cluster"` + Datastore string `json:"datastore"` +} + +func (vmwareUploadSettings) isUploadSettings() {} + type uploadRequest struct { Provider string `json:"provider"` ImageName string `json:"image_name"` @@ -68,6 +79,8 @@ func (u *uploadRequest) UnmarshalJSON(data []byte) error { settings = new(azureUploadSettings) case "aws": settings = new(awsUploadSettings) + case "vmware": + settings = new(vmwareUploadSettings) default: return errors.New("unexpected provider name") } @@ -128,6 +141,16 @@ func targetsToUploadResponses(targets []*target.Target, state ComposeState) []up // StorageAccount and StorageAccessKey are intentionally not included. } uploads = append(uploads, upload) + case *target.VMWareTargetOptions: + upload.ProviderName = "vmware" + upload.Settings = &vmwareUploadSettings{ + Host: options.Host, + Cluster: options.Cluster, + Datacenter: options.Datacenter, + Datastore: options.Datastore, + // Username and Password are intentionally not included. + } + uploads = append(uploads, upload) } } @@ -161,6 +184,17 @@ func uploadRequestToTarget(u uploadRequest, imageType distro.ImageType) *target. StorageAccessKey: options.StorageAccessKey, Container: options.Container, } + case *vmwareUploadSettings: + t.Name = "org.osbuild.vmware" + t.Options = &target.VMWareTargetOptions{ + Filename: imageType.Filename(), + Username: options.Username, + Password: options.Password, + Host: options.Host, + Cluster: options.Cluster, + Datacenter: options.Datacenter, + Datastore: options.Datastore, + } } return &t