The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/1709
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) === We need the other attributes of RemoteConfig in order to connect to the simplestreams and other 'static' hosts. Signed-off-by: John Arbash Meinel <j...@arbash-meinel.com> I'm not 100% sure this is enough for us, I want to update the Juju client to match, so that Juju can use the known remotes to copy images for LXD provider instead of "lxd-images import". But I wanted to check that this is an ok step in that direction.
From 0e9d8916223c1a79fb3ec7e6dbbcf49a2d22e15d Mon Sep 17 00:00:00 2001 From: John Arbash Meinel <j...@arbash-meinel.com> Date: Mon, 7 Mar 2016 17:59:17 +0400 Subject: [PATCH] Change ConnectInfo to take a RemoteConfig. We need the other attributes of RemoteConfig in order to connect to the simplestreams and other 'static' hosts. Signed-off-by: John Arbash Meinel <j...@arbash-meinel.com> --- client.go | 55 +++++++++++++++++++++++++------------------------------ 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/client.go b/client.go index b2f0512..f620ede 100644 --- a/client.go +++ b/client.go @@ -164,13 +164,13 @@ func NewClient(config *Config, remote string) (*Client, error) { } info := ConnectInfo{ Name: remote, - Addr: r.Addr, + RemoteConfig: r, } if strings.HasPrefix(r.Addr, "unix:") { // replace "unix://" with the official "unix:/var/lib/lxd/unix.socket" - if info.Addr == "unix://" { - info.Addr = fmt.Sprintf("unix:%s", shared.VarPath("unix.socket")) + if info.RemoteConfig.Addr == "unix://" { + info.RemoteConfig.Addr = fmt.Sprintf("unix:%s", shared.VarPath("unix.socket")) } } else { certf, keyf, err := ensureMyCert(config.ConfigDir) @@ -202,16 +202,6 @@ func NewClient(config *Config, remote string) (*Client, error) { return nil, err } c.Config = *config - c.Remote = &r - - if c.Remote.Protocol == "simplestreams" { - ss, err := shared.SimpleStreamsClient(c.Remote.Addr) - if err != nil { - return nil, err - } - - c.simplestreams = ss - } return c, nil } @@ -222,13 +212,10 @@ type ConnectInfo struct { // the name used to lookup the address and other information in the // config.yml file. Name string - // Addr is the host address to connect to. It can be - // unix:/path/to/socket to indicate we should connect over a unix - // socket, or it can be an IP Address or - // Hostname, or an https:// URL. - // The standard unix socket is located at $LXD_DIR/unix.socket - // See also github.com/lxc/lxd/shared.VarPath("unix.socket") - Addr string + // RemoteConfig is the information about the Remote that we are + // connecting to. This includes information like if the remote is + // Public and/or Static. + RemoteConfig RemoteConfig // ClientPEMCert is the PEM encoded bytes of the client's certificate. // If Addr indicates a Unix socket, the certificate and key bytes will // not be used. @@ -241,11 +228,10 @@ type ConnectInfo struct { ServerPEMCert string } -func connectViaUnix(c *Client, addr string) error { +func connectViaUnix(c *Client, remote *RemoteConfig) error { c.BaseURL = "http://unix.socket" c.BaseWSURL = "ws://unix.socket" c.Transport = "unix" - r := &RemoteConfig{Addr: addr} uDial := func(network, addr string) (net.Conn, error) { // The arguments 'network' and 'addr' are ignored because // they are the wrong information. @@ -255,7 +241,7 @@ func connectViaUnix(c *Client, addr string) error { // unix:///path/to/socket // unix:/path/to/socket // unix:path/to/socket - path := strings.TrimPrefix(r.Addr, "unix:") + path := strings.TrimPrefix(remote.Addr, "unix:") if strings.HasPrefix(path, "///") { // translate unix:///path/to, to just "/path/to" path = path[2:] @@ -268,7 +254,7 @@ func connectViaUnix(c *Client, addr string) error { } c.Http.Transport = &http.Transport{Dial: uDial} c.websocketDialer.NetDial = uDial - c.Remote = r + c.Remote = remote st, err := c.ServerStatus() if err != nil { @@ -278,7 +264,7 @@ func connectViaUnix(c *Client, addr string) error { return nil } -func connectViaHttp(c *Client, addr, clientCert, clientKey, serverCert string) error { +func connectViaHttp(c *Client, remote *RemoteConfig, clientCert, clientKey, serverCert string) error { tlsconfig, err := shared.GetTLSConfigMem(clientCert, clientKey, serverCert) if err != nil { return err @@ -293,12 +279,12 @@ func connectViaHttp(c *Client, addr, clientCert, clientKey, serverCert string) e c.websocketDialer.NetDial = shared.RFC3493Dialer c.websocketDialer.TLSClientConfig = tlsconfig - justAddr := strings.TrimPrefix(addr, "https://") + justAddr := strings.TrimPrefix(remote.Addr, "https://") c.BaseURL = "https://" + justAddr c.BaseWSURL = "wss://" + justAddr c.Transport = "https" c.Http.Transport = tr - c.Remote = &RemoteConfig{Addr: addr} + c.Remote = remote c.Certificate = serverCert // We don't actually need to connect yet, defer that until someone // needs something from the server. @@ -314,15 +300,24 @@ func NewClientFromInfo(info ConnectInfo) (*Client, error) { } c.Name = info.Name var err error - if info.Addr[0:5] == "unix:" { - err = connectViaUnix(c, info.Addr) + if strings.HasPrefix(info.RemoteConfig.Addr, "unix:") { + err = connectViaUnix(c, &info.RemoteConfig) } else { - err = connectViaHttp(c, info.Addr, info.ClientPEMCert, info.ClientPEMKey, info.ServerPEMCert) + err = connectViaHttp(c, &info.RemoteConfig, info.ClientPEMCert, info.ClientPEMKey, info.ServerPEMCert) } if err != nil { return nil, err } + if info.RemoteConfig.Protocol == "simplestreams" { + ss, err := shared.SimpleStreamsClient(c.Remote.Addr) + if err != nil { + return nil, err + } + + c.simplestreams = ss + } + return c, nil }
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel