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

Reply via email to