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.
This commit is contained in:
Jozef Mikovic 2021-01-20 11:48:12 +01:00 committed by Tom Gundersen
parent 1a81489ef1
commit 08cfc08805
3 changed files with 41 additions and 8 deletions

View file

@ -138,7 +138,6 @@ func (impl *OSBuildJobImpl) Run(job worker.Job) error {
continue continue
} }
case *target.VMWareTargetOptions: case *target.VMWareTargetOptions:
// TODO
if !osbuildOutput.Success { if !osbuildOutput.Success {
continue continue
} }
@ -154,12 +153,12 @@ func (impl *OSBuildJobImpl) Run(job worker.Job) error {
imagePath = f.Name() imagePath = f.Name()
credentials := vmware.Credentials{ credentials := vmware.Credentials{
Username: options.Username, Username: options.Username,
Password: options.Password, Password: options.Password,
Host: options.Host, Host: options.Host,
Cluster: options.Cluster, Cluster: options.Cluster,
Datacenter: options.Datacenter, Datacenter: options.Datacenter,
Datastore: options.Datastore, Datastore: options.Datastore,
} }
err = vmware.UploadImage(credentials, imagePath, t.ImageName) err = vmware.UploadImage(credentials, imagePath, t.ImageName)
if err != nil { if err != nil {

View file

@ -12,6 +12,6 @@ type VMWareTargetOptions struct {
func (VMWareTargetOptions) isTargetOptions() {} func (VMWareTargetOptions) isTargetOptions() {}
func NewVMWareTarget(options *VMWareTargetOptions) *Target{ func NewVMWareTarget(options *VMWareTargetOptions) *Target {
return newTarget("org.osbuild.vmware", options) return newTarget("org.osbuild.vmware", options)
} }

View file

@ -43,6 +43,17 @@ type azureUploadSettings struct {
func (azureUploadSettings) isUploadSettings() {} 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 { type uploadRequest struct {
Provider string `json:"provider"` Provider string `json:"provider"`
ImageName string `json:"image_name"` ImageName string `json:"image_name"`
@ -68,6 +79,8 @@ func (u *uploadRequest) UnmarshalJSON(data []byte) error {
settings = new(azureUploadSettings) settings = new(azureUploadSettings)
case "aws": case "aws":
settings = new(awsUploadSettings) settings = new(awsUploadSettings)
case "vmware":
settings = new(vmwareUploadSettings)
default: default:
return errors.New("unexpected provider name") 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. // StorageAccount and StorageAccessKey are intentionally not included.
} }
uploads = append(uploads, upload) 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, StorageAccessKey: options.StorageAccessKey,
Container: options.Container, 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 return &t