diff --git a/pkg/source/openstack/client.go b/pkg/source/openstack/client.go index d04897f..4b0f8f0 100644 --- a/pkg/source/openstack/client.go +++ b/pkg/source/openstack/client.go @@ -54,6 +54,15 @@ type ExtendedVolume struct { VolumeImageMetadata map[string]string `json:"volume_image_metadata,omitempty"` } +// ExtendedServer The original `Server` structure does not contain the `Description` field. +// References: +// - https://github.com/gophercloud/gophercloud/pull/1505 +// - https://docs.openstack.org/api-ref/compute/?expanded=list-all-metadata-detail%2Ccreate-server-detail#show-server-details +type ExtendedServer struct { + servers.Server + Description string `json:"description,omitempty"` +} + // NewClient will generate a GopherCloud client func NewClient(ctx context.Context, endpoint string, region string, secret *corev1.Secret) (*Client, error) { username, ok := secret.Data["username"] @@ -329,7 +338,7 @@ func (c *Client) GenerateVirtualMachine(vm *migration.VirtualMachineImport) (*ku return nil, fmt.Errorf("error looking up flavor: %v", err) } - uefi, tpm, secureboot, err := c.ImageFirmwareSettings(vmObj) + uefi, tpm, secureboot, err := c.ImageFirmwareSettings(&vmObj.Server) if err != nil { return nil, fmt.Errorf("error getting firware settings: %v", err) } @@ -355,6 +364,9 @@ func (c *Client) GenerateVirtualMachine(vm *migration.VirtualMachineImport) (*ku ObjectMeta: metav1.ObjectMeta{ Name: vm.Spec.VirtualMachineName, Namespace: vm.Namespace, + Annotations: map[string]string{ + "field.cattle.io/description": vmObj.Description, + }, }, } @@ -571,13 +583,15 @@ func (c *Client) checkOrGetUUID(input string) (string, error) { return filteredServers[0].ID, nil } -func (c *Client) findVM(name string) (*servers.Server, error) { +func (c *Client) findVM(name string) (*ExtendedServer, error) { parsedUUID, err := c.checkOrGetUUID(name) if err != nil { return nil, err } - return servers.Get(c.computeClient, parsedUUID).Extract() - + sr := servers.Get(c.computeClient, parsedUUID) + var s ExtendedServer + err = sr.ExtractInto(&s) + return &s, err } type networkInfo struct {