1package imageimport 2 3import "github.com/gophercloud/gophercloud" 4 5// ImportMethod represents valid Import API method. 6type ImportMethod string 7 8const ( 9 // GlanceDirectMethod represents glance-direct Import API method. 10 GlanceDirectMethod ImportMethod = "glance-direct" 11 12 // WebDownloadMethod represents web-download Import API method. 13 WebDownloadMethod ImportMethod = "web-download" 14) 15 16// Get retrieves Import API information data. 17func Get(c *gophercloud.ServiceClient) (r GetResult) { 18 resp, err := c.Get(infoURL(c), &r.Body, nil) 19 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 20 return 21} 22 23// CreateOptsBuilder allows to add additional parameters to the Create request. 24type CreateOptsBuilder interface { 25 ToImportCreateMap() (map[string]interface{}, error) 26} 27 28// CreateOpts specifies parameters of a new image import. 29type CreateOpts struct { 30 Name ImportMethod `json:"name"` 31 URI string `json:"uri"` 32} 33 34// ToImportCreateMap constructs a request body from CreateOpts. 35func (opts CreateOpts) ToImportCreateMap() (map[string]interface{}, error) { 36 b, err := gophercloud.BuildRequestBody(opts, "") 37 if err != nil { 38 return nil, err 39 } 40 return map[string]interface{}{"method": b}, nil 41} 42 43// Create requests the creation of a new image import on the server. 44func Create(client *gophercloud.ServiceClient, imageID string, opts CreateOptsBuilder) (r CreateResult) { 45 b, err := opts.ToImportCreateMap() 46 if err != nil { 47 r.Err = err 48 return 49 } 50 resp, err := client.Post(importURL(client, imageID), b, nil, &gophercloud.RequestOpts{ 51 OkCodes: []int{202}, 52 }) 53 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 54 return 55} 56