From 192649356e69ca06c335a86f41d50909a65d2dbb Mon Sep 17 00:00:00 2001 From: Zhenguo Niu Date: Thu, 17 Oct 2019 09:24:42 +0000 Subject: [PATCH] Add support for data disk iamge from OBS --- openstack/client.go | 8 ++++++ openstack/ims/v2/cloudimages/requests.go | 32 ++++++++++++++++++++++++ openstack/ims/v2/cloudimages/urls.go | 4 +++ 3 files changed, 44 insertions(+) diff --git a/openstack/client.go b/openstack/client.go index 93b4e8aa8..c6202dadc 100644 --- a/openstack/client.go +++ b/openstack/client.go @@ -617,6 +617,14 @@ func NewDNSV2(client *golangsdk.ProviderClient, eo golangsdk.EndpointOpts) (*gol return sc, err } +// NewImageServiceV1 creates a ServiceClient that may be used to access the v1 +// image service. +func NewImageServiceV1(client *golangsdk.ProviderClient, eo golangsdk.EndpointOpts) (*golangsdk.ServiceClient, error) { + sc, err := initClientOpts(client, eo, "image") + sc.ResourceBase = sc.Endpoint + "v1/" + return sc, err +} + // NewImageServiceV2 creates a ServiceClient that may be used to access the v2 // image service. func NewImageServiceV2(client *golangsdk.ProviderClient, eo golangsdk.EndpointOpts) (*golangsdk.ServiceClient, error) { diff --git a/openstack/ims/v2/cloudimages/requests.go b/openstack/ims/v2/cloudimages/requests.go index ecd893031..725e870bc 100644 --- a/openstack/ims/v2/cloudimages/requests.go +++ b/openstack/ims/v2/cloudimages/requests.go @@ -177,6 +177,22 @@ type CreateDataImageByServerOpts struct { DataImages []DataImage `json:"data_images" required:"true"` } +// CreateOpts represents options used to create an image. +type CreateDataImageByOBSOpts struct { + // the name of the data disk image + Name string `json:"name" required:"true"` + // Description of image + Description string `json:"description,omitempty"` + // the OS type + OsType string `json:"os_type" required:"true"` + // the URL of the external image file in the OBS bucket + ImageUrl string `json:"image_url" required:"true"` + // the minimum size of the system disk in the unit of GB + MinDisk int `json:"min_disk" required:"true"` + // the master key used for encrypting an image + CmkId string `json:"cmk_id,omitempty"` +} + type DataImage struct { // the data disk image name Name string `json:"name" required:"true"` @@ -207,6 +223,10 @@ func (opts CreateDataImageByServerOpts) ToImageCreateMap() (map[string]interface return golangsdk.BuildRequestBody(opts, "") } +func (opts CreateDataImageByOBSOpts) ToImageCreateMap() (map[string]interface{}, error) { + return golangsdk.BuildRequestBody(opts, "") +} + // Create implements create image request. func CreateImageByServer(client *golangsdk.ServiceClient, opts CreateOptsBuilder) (r JobResult) { b, err := opts.ToImageCreateMap() @@ -242,3 +262,15 @@ func CreateDataImageByServer(client *golangsdk.ServiceClient, opts CreateOptsBui _, r.Err = client.Post(createURL(client), b, &r.Body, &golangsdk.RequestOpts{OkCodes: []int{200}}) return } + +// Create implements create image request. +func CreateDataImageByOBS(client *golangsdk.ServiceClient, opts CreateOptsBuilder) (r JobResult) { + b, err := opts.ToImageCreateMap() + if err != nil { + r.Err = err + return + } + + _, r.Err = client.Post(createDataImageURL(client), b, &r.Body, &golangsdk.RequestOpts{OkCodes: []int{200}}) + return +} diff --git a/openstack/ims/v2/cloudimages/urls.go b/openstack/ims/v2/cloudimages/urls.go index 7ecb50c4e..31efa7334 100644 --- a/openstack/ims/v2/cloudimages/urls.go +++ b/openstack/ims/v2/cloudimages/urls.go @@ -17,6 +17,10 @@ func createURL(c *golangsdk.ServiceClient) string { return c.ServiceURL("cloudimages/action") } +func createDataImageURL(c *golangsdk.ServiceClient) string { + return c.ServiceURL("cloudimages/dataimages/action") +} + // builds next page full url based on current url func nextPageURL(serviceURL, requestedNext string) (string, error) { base, err := utils.BaseEndpoint(serviceURL)