The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/1569
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 58f290f77a33f6772543b37c9a27662abcbf9c6e Mon Sep 17 00:00:00 2001 From: Tycho Andersen <tycho.ander...@canonical.com> Date: Thu, 4 Feb 2016 15:15:08 -0700 Subject: [PATCH 1/2] remove i18n calls from client This also kills a few Printfs from the client as well. Signed-off-by: Tycho Andersen <tycho.ander...@canonical.com> --- client.go | 99 +++++++++++-------------- lxc/remote.go | 26 ++++++- po/lxd.pot | 235 ++++++++++++++-------------------------------------------- 3 files changed, 127 insertions(+), 233 deletions(-) diff --git a/client.go b/client.go index 0c16722..6664760 100644 --- a/client.go +++ b/client.go @@ -23,7 +23,6 @@ import ( "github.com/gorilla/websocket" - "github.com/lxc/lxd/i18n" "github.com/lxc/lxd/shared" ) @@ -110,7 +109,7 @@ func (r *Response) MetadataAsOperation() (*shared.Operation, error) { // response (e.g. to inspect the error code). func ParseResponse(r *http.Response) (*Response, error) { if r == nil { - return nil, fmt.Errorf(i18n.G("no response!")) + return nil, fmt.Errorf("no response!") } defer r.Body.Close() ret := Response{} @@ -146,7 +145,7 @@ func HoistResponse(r *http.Response, rtype ResponseType) (*Response, error) { } if resp.Type != rtype { - return nil, fmt.Errorf(i18n.G("got bad response type, expected %s got %s"), rtype, resp.Type) + return nil, fmt.Errorf("got bad response type, expected %s got %s", rtype, resp.Type) } return resp, nil @@ -184,7 +183,7 @@ func NewClient(config *Config, remote string) (*Client, error) { c.Name = remote if remote == "" { - return nil, fmt.Errorf(i18n.G("A remote name must be provided.")) + return nil, fmt.Errorf("A remote name must be provided.") } if r, ok := config.Remotes[remote]; ok { @@ -250,7 +249,7 @@ func NewClient(config *Config, remote string) (*Client, error) { c.Remote = &r } } else { - return nil, fmt.Errorf(i18n.G("unknown remote name: %q"), remote) + return nil, fmt.Errorf("unknown remote name: %q", remote) } return &c, nil @@ -268,11 +267,11 @@ func (c *Client) Addresses() ([]string, error) { } else if c.Transport == "https" { addresses = append(addresses, c.BaseURL[8:]) } else { - return nil, fmt.Errorf(i18n.G("unknown transport type: %s"), c.Transport) + return nil, fmt.Errorf("unknown transport type: %s", c.Transport) } if len(addresses) == 0 { - return nil, fmt.Errorf(i18n.G("The source remote isn't available over the network")) + return nil, fmt.Errorf("The source remote isn't available over the network") } return addresses, nil @@ -300,7 +299,7 @@ func (c *Client) baseGet(getUrl string) (*Response, error) { if c.scert != nil && resp.TLS != nil { if !bytes.Equal(resp.TLS.PeerCertificates[0].Raw, c.scert.Raw) { pUrl, _ := url.Parse(getUrl) - return nil, fmt.Errorf(i18n.G("Server certificate for host %s has changed. Add correct certificate or remove certificate in %s"), pUrl.Host, c.Config.ConfigPath("servercerts")) + return nil, fmt.Errorf("Server certificate for host %s has changed. Add correct certificate or remove certificate in %s", pUrl.Host, c.Config.ConfigPath("servercerts")) } } @@ -387,7 +386,7 @@ func (c *Client) getRaw(uri string) (*http.Response, error) { if err != nil { return nil, err } - return nil, fmt.Errorf(i18n.G("expected error, got %s"), resp) + return nil, fmt.Errorf("expected error, got %s", resp) } return raw, nil @@ -451,7 +450,7 @@ func (c *Client) Finger() error { } if serverAPICompat != shared.APICompat { - return fmt.Errorf(i18n.G("api version mismatch: mine: %q, daemon: %q"), shared.APICompat, serverAPICompat) + return fmt.Errorf("api version mismatch: mine: %q, daemon: %q", shared.APICompat, serverAPICompat) } shared.Debugf("Pong received") return nil @@ -630,7 +629,7 @@ func (c *Client) CopyImage(image string, dest *Client, copy_aliases bool, aliase dest.DeleteAlias(alias.Name) err = dest.PostAlias(alias.Name, alias.Description, info.Fingerprint) if err != nil { - fmt.Printf(i18n.G("Error adding alias %s")+"\n", alias.Name) + return fmt.Errorf("Error adding alias %s: %s", alias.Name, err) } } } @@ -640,7 +639,7 @@ func (c *Client) CopyImage(image string, dest *Client, copy_aliases bool, aliase dest.DeleteAlias(alias) err = dest.PostAlias(alias, alias, info.Fingerprint) if err != nil { - fmt.Printf(i18n.G("Error adding alias %s")+"\n", alias) + return fmt.Errorf("Error adding alias %s: %s\n", alias, err) } } @@ -662,7 +661,7 @@ func (c *Client) ExportImage(image string, target string) (*Response, string, er // Deal with split images if ctype == "multipart/form-data" { if !shared.IsDir(target) { - return nil, "", fmt.Errorf(i18n.G("Split images can only be written to a directory.")) + return nil, "", fmt.Errorf("Split images can only be written to a directory.") } // Parse the POST data @@ -795,7 +794,7 @@ func (c *Client) PostImageURL(imageFile string, public bool, aliases []string) ( } if op.Metadata == nil { - return "", fmt.Errorf(i18n.G("Missing operation metadata")) + return "", fmt.Errorf("Missing operation metadata") } fingerprint, err := op.Metadata.GetString("fingerprint") @@ -808,7 +807,7 @@ func (c *Client) PostImageURL(imageFile string, public bool, aliases []string) ( c.DeleteAlias(alias) err = c.PostAlias(alias, alias, fingerprint) if err != nil { - fmt.Printf(i18n.G("Error adding alias %s")+"\n", alias) + return "", fmt.Errorf("Error adding alias %s: %s", alias, err) } } @@ -902,7 +901,7 @@ func (c *Client) PostImage(imageFile string, rootfsFile string, properties []str if eqIndex > -1 { imgProps.Set(value[:eqIndex], value[eqIndex+1:]) } else { - return "", fmt.Errorf(i18n.G("Bad image property: %s"), value) + return "", fmt.Errorf("Bad image property: %s", value) } } @@ -935,7 +934,7 @@ func (c *Client) PostImage(imageFile string, rootfsFile string, properties []str c.DeleteAlias(alias) err = c.PostAlias(alias, alias, fingerprint) if err != nil { - fmt.Printf(i18n.G("Error adding alias %s")+"\n", alias) + return "", fmt.Errorf("Error adding alias %s: %s", alias, err) } } @@ -1011,48 +1010,40 @@ func (c *Client) ListAliases() ([]shared.ImageAlias, error) { return result, nil } -func (c *Client) UserAuthServerCert(name string, acceptCert bool) error { +// Try to verify the server's cert with the current host's CA list. +func (c *Client) TryVerifyServerCert(name string) (string, error) { + digest := fmt.Sprintf("%x", c.scertDigest) if !c.scertDigestSet { if err := c.Finger(); err != nil { - return err + return digest, err } if !c.scertDigestSet { - return fmt.Errorf(i18n.G("No certificate on this connection")) + return digest, fmt.Errorf("No certificate on this connection") } } if c.scert != nil { - return nil + return digest, nil } _, err := c.scertWire.Verify(x509.VerifyOptions{ DNSName: name, Intermediates: c.scertIntermediates, }) - if err == nil { - // Server trusted by system certificate - return nil - } - - if acceptCert == false { - fmt.Printf(i18n.G("Certificate fingerprint: %x")+"\n", c.scertDigest) - fmt.Printf(i18n.G("ok (y/n)?") + " ") - line, err := shared.ReadStdin() - if err != nil { - return err - } + return digest, err +} - if len(line) < 1 || line[0] != 'y' && line[0] != 'Y' { - return fmt.Errorf(i18n.G("Server certificate NACKed by user")) - } +func (c *Client) SaveCert(name string) error { + if c.scertWire == nil { + return fmt.Errorf("can't save empty server cert") } // User acked the cert, now add it to our store dnam := c.Config.ConfigPath("servercerts") - err = os.MkdirAll(dnam, 0750) + err := os.MkdirAll(dnam, 0750) if err != nil { - return fmt.Errorf(i18n.G("Could not create server cert dir")) + return fmt.Errorf("Could not create server cert dir") } certf := fmt.Sprintf("%s/%s.crt", dnam, c.Name) certOut, err := os.Create(certf) @@ -1142,7 +1133,7 @@ func (c *Client) Init(name string, imgremote string, image string, profiles *[]s source := shared.Jmap{"type": "image"} if image == "" { - return nil, fmt.Errorf(i18n.G("You must provide an image hash or alias name.")) + return nil, fmt.Errorf("You must provide an image hash or alias name.") } if imgremote != c.Name { @@ -1164,7 +1155,7 @@ func (c *Client) Init(name string, imgremote string, image string, profiles *[]s } if len(architectures) != 0 && !shared.IntInSlice(imageinfo.Architecture, architectures) { - return nil, fmt.Errorf(i18n.G("The image architecture is incompatible with the target server")) + return nil, fmt.Errorf("The image architecture is incompatible with the target server") } // FIXME: InterfaceToBool is there for backward compatibility @@ -1205,11 +1196,11 @@ func (c *Client) Init(name string, imgremote string, image string, profiles *[]s imageinfo, err := c.GetImageInfo(fingerprint) if err != nil { - return nil, fmt.Errorf(i18n.G("can't get info for image '%s': %s"), image, err) + return nil, fmt.Errorf("can't get info for image '%s': %s", image, err) } if len(architectures) != 0 && !shared.IntInSlice(imageinfo.Architecture, architectures) { - return nil, fmt.Errorf(i18n.G("The image architecture is incompatible with the target server")) + return nil, fmt.Errorf("The image architecture is incompatible with the target server") } source["fingerprint"] = fingerprint } @@ -1434,11 +1425,11 @@ func (c *Client) Exec(name string, cmd []string, env map[string]string, } if op.StatusCode != shared.Success { - return -1, fmt.Errorf(i18n.G("got bad op status %s"), op.Status) + return -1, fmt.Errorf("got bad op status %s", op.Status) } if op.Metadata == nil { - return -1, fmt.Errorf(i18n.G("no metadata received")) + return -1, fmt.Errorf("no metadata received") } return op.Metadata.GetInt("return") @@ -1616,7 +1607,7 @@ func (c *Client) Rename(name string, newName string) (*Response, error) { /* Wait for an operation */ func (c *Client) WaitFor(waitURL string) (*shared.Operation, error) { if len(waitURL) < 1 { - return nil, fmt.Errorf(i18n.G("invalid wait url %s"), waitURL) + return nil, fmt.Errorf("invalid wait url %s", waitURL) } /* For convenience, waitURL is expected to be in the form of a @@ -1832,7 +1823,7 @@ func (c *Client) SetProfileConfigItem(profile, key, value string) error { func (c *Client) PutProfile(name string, profile shared.ProfileConfig) error { if profile.Name != name { - return fmt.Errorf(i18n.G("Cannot change profile name")) + return fmt.Errorf("Cannot change profile name") } body := shared.Jmap{"name": name, "config": profile.Config, "devices": profile.Devices} _, err := c.put(fmt.Sprintf("profiles/%s", name), body, Sync) @@ -1863,11 +1854,11 @@ func (c *Client) ListProfiles() ([]string, error) { } if count != 2 { - return nil, fmt.Errorf(i18n.G("bad profile url %s"), url) + return nil, fmt.Errorf("bad profile url %s", url) } if version != shared.APIVersion { - return nil, fmt.Errorf(i18n.G("bad version in profile url")) + return nil, fmt.Errorf("bad version in profile url") } names = append(names, name) @@ -1909,14 +1900,14 @@ func (c *Client) ContainerDeviceAdd(container, devname, devtype string, props [] for _, p := range props { results := strings.SplitN(p, "=", 2) if len(results) != 2 { - return nil, fmt.Errorf(i18n.G("no value found in %q"), p) + return nil, fmt.Errorf("no value found in %q", p) } k := results[0] v := results[1] newdev[k] = v } if st.Devices != nil && st.Devices.ContainsName(devname) { - return nil, fmt.Errorf(i18n.G("device already exists")) + return nil, fmt.Errorf("device already exists") } newdev["type"] = devtype if st.Devices == nil { @@ -1966,14 +1957,14 @@ func (c *Client) ProfileDeviceAdd(profile, devname, devtype string, props []stri for _, p := range props { results := strings.SplitN(p, "=", 2) if len(results) != 2 { - return nil, fmt.Errorf(i18n.G("no value found in %q"), p) + return nil, fmt.Errorf("no value found in %q", p) } k := results[0] v := results[1] newdev[k] = v } if st.Devices != nil && st.Devices.ContainsName(devname) { - return nil, fmt.Errorf(i18n.G("device already exists")) + return nil, fmt.Errorf("device already exists") } newdev["type"] = devtype if st.Devices == nil { @@ -2037,7 +2028,7 @@ func (c *Client) AsyncWaitMeta(resp *Response) (*shared.Jmap, error) { } if op.StatusCode != shared.Success { - return nil, fmt.Errorf(i18n.G("got bad op status %s"), op.Status) + return nil, fmt.Errorf("got bad op status %s", op.Status) } return op.Metadata, nil @@ -2070,7 +2061,7 @@ func (c *Client) ImageFromContainer(cname string, public bool, aliases []string, c.DeleteAlias(alias) err = c.PostAlias(alias, alias, fingerprint) if err != nil { - fmt.Printf(i18n.G("Error adding alias %s")+"\n", alias) + return "", fmt.Errorf("Error adding alias %s: %s", alias, err) } } diff --git a/lxc/remote.go b/lxc/remote.go index 68b36e9..27f44b5 100644 --- a/lxc/remote.go +++ b/lxc/remote.go @@ -133,7 +133,31 @@ func addServer(config *lxd.Config, server string, addr string, acceptCert bool, return nil } - err = c.UserAuthServerCert(host, acceptCert) + /* grab the server's cert */ + err = c.Finger() + if err != nil { + return err + } + + if !acceptCert { + // Try to use the CAs on localhost to verify the cert so we + // don't have to bother the user. + digest, err := c.TryVerifyServerCert(host) + if err != nil { + fmt.Printf(i18n.G("Certificate fingerprint: %x")+"\n", digest) + fmt.Printf(i18n.G("ok (y/n)?") + " ") + line, err := shared.ReadStdin() + if err != nil { + return err + } + + if len(line) < 1 || line[0] != 'y' && line[0] != 'Y' { + return fmt.Errorf("Server certificate NACKed by user") + } + } + } + + err = c.SaveCert(host) if err != nil { return err } diff --git a/po/lxd.pot b/po/lxd.pot index 3216f97..1ef87b1 100644 --- a/po/lxd.pot +++ b/po/lxd.pot @@ -7,7 +7,7 @@ msgid "" msgstr "Project-Id-Version: lxd\n" "Report-Msgid-Bugs-To: lxc-devel@lists.linuxcontainers.org\n" - "POT-Creation-Date: 2016-01-29 02:55+0530\n" + "POT-Creation-Date: 2016-02-04 15:13-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <l...@li.org>\n" @@ -36,7 +36,7 @@ msgid "### This is a yaml representation of the configuration.\n" "### Note that the name is shown but cannot be changed" msgstr "" -#: lxc/image.go:28 +#: lxc/image.go:29 msgid "### This is a yaml representation of the image properties.\n" "### Any line starting with a '# will be ignored.\n" "###\n" @@ -65,7 +65,7 @@ msgid "### This is a yaml representation of the profile.\n" "### Note that the name is shown but cannot be changed" msgstr "" -#: lxc/image.go:500 +#: lxc/image.go:501 #, c-format msgid "%s (%d more)" msgstr "" @@ -78,15 +78,11 @@ msgstr "" msgid "(none)" msgstr "" -#: client.go:187 -msgid "A remote name must be provided." -msgstr "" - -#: lxc/image.go:521 lxc/image.go:543 +#: lxc/image.go:522 lxc/image.go:544 msgid "ALIAS" msgstr "" -#: lxc/image.go:525 +#: lxc/image.go:526 msgid "ARCH" msgstr "" @@ -94,12 +90,12 @@ msgstr "" msgid "Accept certificate" msgstr "" -#: lxc/remote.go:157 +#: lxc/remote.go:177 #, c-format msgid "Admin password for %s: " msgstr "" -#: lxc/image.go:281 +#: lxc/image.go:282 msgid "Aliases:" msgstr "" @@ -107,7 +103,7 @@ msgstr "" msgid "An environment variable of the form HOME=/home/foo" msgstr "" -#: lxc/image.go:264 +#: lxc/image.go:265 #, c-format msgid "Architecture: %s" msgstr "" @@ -116,24 +112,15 @@ msgstr "" msgid "Available commands:" msgstr "" -#: client.go:905 -#, c-format -msgid "Bad image property: %s" -msgstr "" - #: lxc/config.go:232 msgid "COMMON NAME" msgstr "" -#: client.go:1835 -msgid "Cannot change profile name" -msgstr "" - #: lxc/profile.go:325 msgid "Cannot provide container name to list" msgstr "" -#: client.go:1039 +#: lxc/remote.go:143 #, c-format msgid "Certificate fingerprint: %x" msgstr "" @@ -145,11 +132,11 @@ msgid "Changes state of one or more containers to %s.\n" "lxc %s <name> [<name>...]" msgstr "" -#: lxc/remote.go:180 +#: lxc/remote.go:200 msgid "Client certificate stored at server: " msgstr "" -#: lxc/list.go:79 +#: lxc/list.go:80 msgid "Columns" msgstr "" @@ -157,7 +144,7 @@ msgstr "" msgid "Config key/value to apply to the new container" msgstr "" -#: lxc/config.go:458 lxc/config.go:523 lxc/image.go:598 lxc/profile.go:185 +#: lxc/config.go:458 lxc/config.go:523 lxc/image.go:599 lxc/profile.go:185 #, c-format msgid "Config parsing error: %s" msgstr "" @@ -180,7 +167,7 @@ msgstr "" msgid "Container published with fingerprint: %s" msgstr "" -#: lxc/image.go:115 +#: lxc/image.go:116 msgid "Copy aliases from source" msgstr "" @@ -190,15 +177,11 @@ msgid "Copy containers within or in between lxd instances.\n" "lxc copy [remote:]<source container> [remote:]<destination container> [--ephemeral|e]" msgstr "" -#: lxc/image.go:210 +#: lxc/image.go:211 #, c-format msgid "Copying the image: %s" msgstr "" -#: client.go:1055 -msgid "Could not create server cert dir" -msgstr "" - #: lxc/snapshot.go:21 msgid "Create a read-only snapshot of a container.\n" "\n" @@ -215,7 +198,7 @@ msgid "Create a read-only snapshot of a container.\n" "lxc snapshot u1 snap0" msgstr "" -#: lxc/image.go:269 +#: lxc/image.go:270 #, c-format msgid "Created: %s" msgstr "" @@ -229,7 +212,7 @@ msgstr "" msgid "Creating the container" msgstr "" -#: lxc/image.go:524 +#: lxc/image.go:525 msgid "DESCRIPTION" msgstr "" @@ -251,7 +234,7 @@ msgstr "" msgid "Device %s removed from %s" msgstr "" -#: lxc/list.go:226 +#: lxc/list.go:239 msgid "EPHEMERAL" msgstr "" @@ -275,11 +258,6 @@ msgstr "" msgid "Ephemeral container" msgstr "" -#: client.go:633 client.go:643 client.go:811 client.go:938 client.go:2073 -#, c-format -msgid "Error adding alias %s" -msgstr "" - #: lxc/monitor.go:56 msgid "Event type to listen for" msgstr "" @@ -290,20 +268,20 @@ msgid "Execute the specified command in a container.\n" "lxc exec [remote:]container [--mode=auto|interactive|non-interactive] [--env EDITOR=/usr/bin/vim]... <command>" msgstr "" -#: lxc/image.go:273 +#: lxc/image.go:274 #, c-format msgid "Expires: %s" msgstr "" -#: lxc/image.go:275 +#: lxc/image.go:276 msgid "Expires: never" msgstr "" -#: lxc/config.go:231 lxc/image.go:522 lxc/image.go:544 +#: lxc/config.go:231 lxc/image.go:523 lxc/image.go:545 msgid "FINGERPRINT" msgstr "" -#: lxc/image.go:254 +#: lxc/image.go:255 #, c-format msgid "Fingerprint: %s" msgstr "" @@ -330,11 +308,11 @@ msgstr "" msgid "Generating a client certificate. This may take a minute..." msgstr "" -#: lxc/list.go:224 +#: lxc/list.go:237 msgid "IPV4" msgstr "" -#: lxc/list.go:225 +#: lxc/list.go:238 msgid "IPV6" msgstr "" @@ -346,11 +324,11 @@ msgstr "" msgid "If this is your first run, you will need to import images using the 'lxd-images' script." msgstr "" -#: lxc/image.go:215 +#: lxc/image.go:216 msgid "Image copied successfully!" msgstr "" -#: lxc/image.go:339 +#: lxc/image.go:340 #, c-format msgid "Image imported with fingerprint: %s" msgstr "" @@ -418,7 +396,7 @@ msgid "List information on containers.\n" "lxc info [<remote>:]container [--show-log]" msgstr "" -#: lxc/list.go:53 +#: lxc/list.go:54 msgid "Lists the available resources.\n" "\n" "lxc list [resource] [filters] -c [columns]\n" @@ -445,7 +423,7 @@ msgstr "" msgid "Log:" msgstr "" -#: lxc/image.go:114 +#: lxc/image.go:115 msgid "Make image public" msgstr "" @@ -544,7 +522,7 @@ msgid "Manage remote LXD servers.\n" "lxc remote get-default Print the default remote." msgstr "" -#: lxc/image.go:37 +#: lxc/image.go:38 msgid "Manipulate container images.\n" "\n" "In LXD containers are created from images. Those images were themselves\n" @@ -600,10 +578,6 @@ msgid "Manipulate container images.\n" " List the aliases.\n" msgstr "" -#: client.go:798 -msgid "Missing operation metadata" -msgstr "" - #: lxc/help.go:86 msgid "Missing summary." msgstr "" @@ -636,11 +610,11 @@ msgid "Move containers within or in between lxd instances.\n" " Rename a local container.\n" msgstr "" -#: lxc/list.go:222 lxc/remote.go:247 +#: lxc/list.go:235 lxc/remote.go:267 msgid "NAME" msgstr "" -#: lxc/list.go:291 lxc/remote.go:233 +#: lxc/list.go:304 lxc/remote.go:253 msgid "NO" msgstr "" @@ -649,14 +623,10 @@ msgstr "" msgid "Name: %s" msgstr "" -#: lxc/image.go:116 lxc/publish.go:30 +#: lxc/image.go:117 lxc/publish.go:30 msgid "New alias to define at target" msgstr "" -#: client.go:1021 -msgid "No certificate on this connection" -msgstr "" - #: lxc/config.go:245 msgid "No certificate provided to add" msgstr "" @@ -665,7 +635,7 @@ msgstr "" msgid "No fingerprint specified." msgstr "" -#: lxc/image.go:331 +#: lxc/image.go:332 msgid "Only https:// is supported for remote image import." msgstr "" @@ -673,7 +643,7 @@ msgstr "" msgid "Options:" msgstr "" -#: lxc/image.go:425 +#: lxc/image.go:426 #, c-format msgid "Output is in %s" msgstr "" @@ -682,11 +652,11 @@ msgstr "" msgid "Override the terminal mode (auto, interactive or non-interactive)" msgstr "" -#: lxc/list.go:228 +#: lxc/list.go:241 msgid "PID" msgstr "" -#: lxc/image.go:523 lxc/remote.go:249 +#: lxc/image.go:524 lxc/remote.go:269 msgid "PUBLIC" msgstr "" @@ -712,7 +682,7 @@ msgstr "" msgid "Press enter to open the editor again" msgstr "" -#: lxc/config.go:459 lxc/config.go:524 lxc/image.go:599 +#: lxc/config.go:459 lxc/config.go:524 lxc/image.go:600 msgid "Press enter to start the editor again" msgstr "" @@ -758,7 +728,7 @@ msgstr "" msgid "Profile to apply to the new container" msgstr "" -#: lxc/image.go:277 +#: lxc/image.go:278 msgid "Properties:" msgstr "" @@ -766,7 +736,7 @@ msgstr "" msgid "Public image server" msgstr "" -#: lxc/image.go:265 +#: lxc/image.go:266 #, c-format msgid "Public: %s" msgstr "" @@ -786,28 +756,19 @@ msgstr "" msgid "Retrieving image: %s" msgstr "" -#: lxc/image.go:526 +#: lxc/image.go:527 msgid "SIZE" msgstr "" -#: lxc/list.go:227 +#: lxc/list.go:240 msgid "SNAPSHOTS" msgstr "" -#: lxc/list.go:223 +#: lxc/list.go:236 msgid "STATE" msgstr "" -#: client.go:1047 -msgid "Server certificate NACKed by user" -msgstr "" - -#: client.go:303 -#, c-format -msgid "Server certificate for host %s has changed. Add correct certificate or remove certificate in %s" -msgstr "" - -#: lxc/remote.go:177 +#: lxc/remote.go:197 msgid "Server doesn't trust us after adding our cert" msgstr "" @@ -844,19 +805,15 @@ msgstr "" msgid "Show the container's last 100 log lines?" msgstr "" -#: lxc/image.go:262 +#: lxc/image.go:263 #, c-format msgid "Size: %.2fMB" msgstr "" -#: lxc/info.go:112 lxc/list.go:170 +#: lxc/info.go:112 lxc/list.go:183 msgid "Snapshots:" msgstr "" -#: client.go:665 -msgid "Split images can only be written to a directory." -msgstr "" - #: lxc/launch.go:118 #, c-format msgid "Starting %s" @@ -871,14 +828,6 @@ msgstr "" msgid "Stopping container failed!" msgstr "" -#: client.go:1167 client.go:1212 -msgid "The image architecture is incompatible with the target server" -msgstr "" - -#: client.go:275 -msgid "The source remote isn't available over the network" -msgstr "" - #: lxc/publish.go:57 msgid "There is no \"image name\". Did you want an alias?" msgstr "" @@ -887,7 +836,7 @@ msgstr "" msgid "Time to wait for the container before killing it." msgstr "" -#: lxc/image.go:266 +#: lxc/image.go:267 msgid "Timestamps:" msgstr "" @@ -904,15 +853,15 @@ msgstr "" msgid "Type: persistent" msgstr "" -#: lxc/image.go:527 +#: lxc/image.go:528 msgid "UPLOAD DATE" msgstr "" -#: lxc/remote.go:248 +#: lxc/remote.go:268 msgid "URL" msgstr "" -#: lxc/image.go:271 +#: lxc/image.go:272 #, c-format msgid "Uploaded: %s" msgstr "" @@ -938,61 +887,34 @@ msgstr "" msgid "Whether to show the expanded configuration" msgstr "" -#: lxc/list.go:289 lxc/remote.go:235 +#: lxc/list.go:302 lxc/remote.go:255 msgid "YES" msgstr "" -#: client.go:1145 -msgid "You must provide an image hash or alias name." -msgstr "" - #: lxc/main.go:65 msgid "`lxc config profile` is deprecated, please use `lxc profile`" msgstr "" -#: client.go:454 -#, c-format -msgid "api version mismatch: mine: %q, daemon: %q" -msgstr "" - #: lxc/launch.go:105 msgid "bad number of things scanned from image, container or snapshot" msgstr "" -#: client.go:1866 -#, c-format -msgid "bad profile url %s" -msgstr "" - #: lxc/action.go:58 msgid "bad result type from action" msgstr "" -#: client.go:1870 -msgid "bad version in profile url" -msgstr "" - #: lxc/copy.go:79 msgid "can't copy to the same container name" msgstr "" -#: client.go:1208 -#, c-format -msgid "can't get info for image '%s': %s" -msgstr "" - -#: lxc/remote.go:223 +#: lxc/remote.go:243 msgid "can't remove the default remote" msgstr "" -#: lxc/remote.go:240 +#: lxc/remote.go:260 msgid "default" msgstr "" -#: client.go:1919 client.go:1976 -msgid "device already exists" -msgstr "" - #: lxc/init.go:197 lxc/init.go:202 lxc/launch.go:89 lxc/launch.go:94 msgid "didn't get any affected image, container or snapshot from server" msgstr "" @@ -1007,52 +929,19 @@ msgstr "" msgid "error: unknown command: %s" msgstr "" -#: client.go:390 -#, c-format -msgid "expected error, got %s" -msgstr "" - -#: client.go:1437 client.go:2040 -#, c-format -msgid "got bad op status %s" -msgstr "" - -#: client.go:149 -#, c-format -msgid "got bad response type, expected %s got %s" -msgstr "" - #: lxc/launch.go:109 msgid "got bad version" msgstr "" -#: client.go:1619 -#, c-format -msgid "invalid wait url %s" -msgstr "" - -#: lxc/image.go:255 lxc/image.go:503 +#: lxc/image.go:256 lxc/image.go:504 msgid "no" msgstr "" -#: client.go:1441 -msgid "no metadata received" -msgstr "" - -#: client.go:113 -msgid "no response!" -msgstr "" - -#: client.go:1912 client.go:1969 -#, c-format -msgid "no value found in %q" -msgstr "" - #: lxc/copy.go:101 msgid "not all the profiles from the source exist on the target" msgstr "" -#: client.go:1040 +#: lxc/remote.go:144 msgid "ok (y/n)?" msgstr "" @@ -1061,31 +950,21 @@ msgstr "" msgid "processing aliases failed %s\n" msgstr "" -#: lxc/remote.go:267 +#: lxc/remote.go:287 #, c-format msgid "remote %s already exists" msgstr "" -#: lxc/remote.go:219 lxc/remote.go:263 lxc/remote.go:293 lxc/remote.go:304 +#: lxc/remote.go:239 lxc/remote.go:283 lxc/remote.go:313 lxc/remote.go:324 #, c-format msgid "remote %s doesn't exist" msgstr "" -#: lxc/remote.go:203 +#: lxc/remote.go:223 #, c-format msgid "remote %s exists as <%s>" msgstr "" -#: client.go:253 -#, c-format -msgid "unknown remote name: %q" -msgstr "" - -#: client.go:271 -#, c-format -msgid "unknown transport type: %s" -msgstr "" - #: lxc/exec.go:158 msgid "unreachable return reached" msgstr "" @@ -1094,7 +973,7 @@ msgstr "" msgid "wrong number of subcommand arguments" msgstr "" -#: lxc/image.go:259 lxc/image.go:508 +#: lxc/image.go:260 lxc/image.go:509 msgid "yes" msgstr "" From 4f6f3fa6896f21c20d87a22de60d9b31658aaa85 Mon Sep 17 00:00:00 2001 From: Tycho Andersen <tycho.ander...@canonical.com> Date: Thu, 4 Feb 2016 15:17:34 -0700 Subject: [PATCH 2/2] fix go vet error This isn't related to this patch, but I'd say it's a new thing that go vet starts warning about that the jenkins go vet doesn't know of. client.go:389: arg *resp for printf verb %s of wrong type: lxd.Response Signed-off-by: Tycho Andersen <tycho.ander...@canonical.com> --- client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client.go b/client.go index 6664760..6bb9550 100644 --- a/client.go +++ b/client.go @@ -386,7 +386,7 @@ func (c *Client) getRaw(uri string) (*http.Response, error) { if err != nil { return nil, err } - return nil, fmt.Errorf("expected error, got %s", resp) + return nil, fmt.Errorf("expected error, got %v", *resp) } return raw, nil
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel