-
Notifications
You must be signed in to change notification settings - Fork 583
Bugfix: Headers not be set #1170
Copy link
Copy link
Closed
Description
Let's look at this method link
package servers
func CreateImage(client *gophercloud.ServiceClient, id string, opts CreateImageOptsBuilder) (r CreateImageResult) {
b, err := opts.ToServerCreateImageMap()
if err != nil {
r.Err = err
return
}
resp, err := client.Post(actionURL(client, id), b, nil, &gophercloud.RequestOpts{
OkCodes: []int{202},
})
r.Err = err
r.Header = resp.Header
return
}Variable r CreateImageResult contain *http.Response headers
r.Header = resp.Headerand method return gophercloud.Result structure with fill Err error and Header http.Header field
package servers
type CreateImageResult struct {
gophercloud.Result
}package gophercloud
type Result struct {
// Body is the payload of the HTTP response from the server. In most cases,
// this will be the deserialized JSON structure.
Body interface{}
// Header contains the HTTP header structure from the original response.
Header http.Header
// Err is an error that occurred during the operation. It's deferred until
// extraction to make it easier to chain the Extract call.
Err error
}But why other methods ignore response headers?
For example: link
package servers
func Create(client *gophercloud.ServiceClient, opts CreateOptsBuilder) (r CreateResult) {
reqBody, err := opts.ToServerCreateMap()
if err != nil {
r.Err = err
return
}
_, r.Err = client.Post(listURL(client), reqBody, &r.Body, nil)
return
}package servers
type CreateResult struct {
serverResult
}package servers
type serverResult struct {
gophercloud.Result
}I suggest correcting these methods and adding the ability to return headers:
package servers
func Create(client *gophercloud.ServiceClient, opts CreateOptsBuilder) (r CreateResult) {
reqBody, err := opts.ToServerCreateMap()
if err != nil {
r.Err = err
return
}
resp, err := client.Post(listURL(client), reqBody, &r.Body, nil)
r.Err = err
r.Header = resp.Header
return
}With regard to these methods: link
package servers
func Delete(client *gophercloud.ServiceClient, id string) (r DeleteResult) {
_, r.Err = client.Delete(deleteURL(client, id), nil)
return
}I suggest add a second return variable http.Header
package servers
func Delete(client *gophercloud.ServiceClient, id string) (r DeleteResult, h http.Header) {
resp, err := client.Delete(deleteURL(client, id), nil)
r.Err = err
h = resp.Header
return
}or change DeleteResult
package servers
type DeleteResult struct {
gophercloud.ErrResult
}to:
package servers
type DeleteResult struct {
gophercloud.Result
}package servers
func Delete(client *gophercloud.ServiceClient, id string) (r DeleteResult) {
resp, err := client.Delete(deleteURL(client, id), nil)
r.Err = err
r.Header = resp.Header
return
}Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels