The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/5135
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) ===
From 20aa1bc8b30aa9d4344fe3b66577acecbb83aa79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com> Date: Wed, 10 Oct 2018 23:52:15 -0400 Subject: [PATCH 1/2] client: Always use the "do()" wrapper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber <stgra...@ubuntu.com> --- client/lxd_containers.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/lxd_containers.go b/client/lxd_containers.go index cf48cf97c5..285956878e 100644 --- a/client/lxd_containers.go +++ b/client/lxd_containers.go @@ -1388,7 +1388,7 @@ func (r *ProtocolLXD) GetContainerTemplateFile(containerName string, templateNam } // Send the request - resp, err := r.http.Do(req) + resp, err := r.do(req) if err != nil { return nil, err } @@ -1432,7 +1432,7 @@ func (r *ProtocolLXD) setContainerTemplateFile(containerName string, templateNam } // Send the request - resp, err := r.http.Do(req) + resp, err := r.do(req) // Check the return value for a cleaner error if resp.StatusCode != http.StatusOK { _, _, err := lxdParseResponse(resp) From ef17383e01c7cf4783e4a46b70b4b50ce431deb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com> Date: Thu, 11 Oct 2018 00:02:13 -0400 Subject: [PATCH 2/2] client: Fix URLs with missing project/target MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber <stgra...@ubuntu.com> --- client/lxd.go | 25 ++++++++++++++++++------- client/lxd_containers.go | 38 +++++++++++++++++++++++++++++++++++++- client/lxd_images.go | 6 +++++- 3 files changed, 60 insertions(+), 9 deletions(-) diff --git a/client/lxd.go b/client/lxd.go index 86759792da..cca5d242bb 100644 --- a/client/lxd.go +++ b/client/lxd.go @@ -77,6 +77,7 @@ func (r *ProtocolLXD) GetHTTPClient() (*http.Client, error) { // Do performs a Request, using macaroon authentication if set. func (r *ProtocolLXD) do(req *http.Request) (*http.Response, error) { + if r.bakeryClient != nil { r.addMacaroonHeaders(req) return r.bakeryClient.Do(req) @@ -225,14 +226,11 @@ func (r *ProtocolLXD) rawQuery(method string, url string, data interface{}, ETag return lxdParseResponse(resp) } -func (r *ProtocolLXD) query(method string, path string, data interface{}, ETag string) (*api.Response, string, error) { - // Generate the URL - url := fmt.Sprintf("%s/1.0%s", r.httpHost, path) - +func (r *ProtocolLXD) setQueryAttributes(uri string) (string, error) { // Parse the full URI - fields, err := neturl.Parse(url) + fields, err := neturl.Parse(uri) if err != nil { - return nil, "", err + return "", err } // Extract query fields and update for cluster targeting or project @@ -250,8 +248,21 @@ func (r *ProtocolLXD) query(method string, path string, data interface{}, ETag s } fields.RawQuery = values.Encode() + return fields.String(), nil +} + +func (r *ProtocolLXD) query(method string, path string, data interface{}, ETag string) (*api.Response, string, error) { + // Generate the URL + url := fmt.Sprintf("%s/1.0%s", r.httpHost, path) + + // Add project/target + url, err := r.setQueryAttributes(url) + if err != nil { + return nil, "", err + } + // Run the actual query - return r.rawQuery(method, fields.String(), data, ETag) + return r.rawQuery(method, url, data, ETag) } func (r *ProtocolLXD) queryStruct(method string, path string, data interface{}, ETag string, target interface{}) (string, error) { diff --git a/client/lxd_containers.go b/client/lxd_containers.go index 285956878e..3b4fccf05f 100644 --- a/client/lxd_containers.go +++ b/client/lxd_containers.go @@ -757,6 +757,11 @@ func (r *ProtocolLXD) GetContainerFile(containerName string, path string) (io.Re return nil, nil, err } + requestURL, err = r.setQueryAttributes(requestURL) + if err != nil { + return nil, nil, err + } + req, err := http.NewRequest("GET", requestURL, nil) if err != nil { return nil, nil, err @@ -836,7 +841,14 @@ func (r *ProtocolLXD) CreateContainerFile(containerName string, path string, arg } // Prepare the HTTP request - req, err := http.NewRequest("POST", fmt.Sprintf("%s/1.0/containers/%s/files?path=%s", r.httpHost, url.QueryEscape(containerName), url.QueryEscape(path)), args.Content) + requestURL := fmt.Sprintf("%s/1.0/containers/%s/files?path=%s", r.httpHost, url.QueryEscape(containerName), url.QueryEscape(path)) + + requestURL, err := r.setQueryAttributes(requestURL) + if err != nil { + return err + } + + req, err := http.NewRequest("POST", requestURL, args.Content) if err != nil { return err } @@ -1283,6 +1295,12 @@ func (r *ProtocolLXD) GetContainerLogfiles(name string) ([]string, error) { func (r *ProtocolLXD) GetContainerLogfile(name string, filename string) (io.ReadCloser, error) { // Prepare the HTTP request url := fmt.Sprintf("%s/1.0/containers/%s/logs/%s", r.httpHost, url.QueryEscape(name), url.QueryEscape(filename)) + + url, err := r.setQueryAttributes(url) + if err != nil { + return nil, err + } + req, err := http.NewRequest("GET", url, nil) if err != nil { return nil, err @@ -1377,6 +1395,12 @@ func (r *ProtocolLXD) GetContainerTemplateFile(containerName string, templateNam } url := fmt.Sprintf("%s/1.0/containers/%s/metadata/templates?path=%s", r.httpHost, url.QueryEscape(containerName), url.QueryEscape(templateName)) + + url, err := r.setQueryAttributes(url) + if err != nil { + return nil, err + } + req, err := http.NewRequest("GET", url, nil) if err != nil { return nil, err @@ -1420,6 +1444,12 @@ func (r *ProtocolLXD) setContainerTemplateFile(containerName string, templateNam } url := fmt.Sprintf("%s/1.0/containers/%s/metadata/templates?path=%s", r.httpHost, url.QueryEscape(containerName), url.QueryEscape(templateName)) + + url, err := r.setQueryAttributes(url) + if err != nil { + return err + } + req, err := http.NewRequest(httpMethod, url, content) if err != nil { return err @@ -1532,6 +1562,12 @@ func (r *ProtocolLXD) GetContainerConsoleLog(containerName string, args *Contain // Prepare the HTTP request url := fmt.Sprintf("%s/1.0/containers/%s/console", r.httpHost, url.QueryEscape(containerName)) + + url, err := r.setQueryAttributes(url) + if err != nil { + return nil, err + } + req, err := http.NewRequest("GET", url, nil) if err != nil { return nil, err diff --git a/client/lxd_images.go b/client/lxd_images.go index 2c5064ff53..43b8237c9c 100644 --- a/client/lxd_images.go +++ b/client/lxd_images.go @@ -391,7 +391,11 @@ func (r *ProtocolLXD) CreateImage(image api.ImagesPost, args *ImageCreateArgs) ( } // Prepare the HTTP request - reqURL := fmt.Sprintf("%s/1.0/images", r.httpHost) + reqURL, err := r.setQueryAttributes(fmt.Sprintf("%s/1.0/images", r.httpHost)) + if err != nil { + return nil, err + } + req, err := http.NewRequest("POST", reqURL, body) if err != nil { return nil, err
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel