From 1dae7a25b919dc70798cbab8107809690212cd69 Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Fri, 31 May 2013 15:53:57 -0700 Subject: [PATCH 01/38] Improve the docker version and docker info commands --- api_params.go | 23 +++++++++++------------ commands.go | 34 +++++++++++++++++++++------------- server.go | 26 ++++++++++++++------------ 3 files changed, 46 insertions(+), 37 deletions(-) diff --git a/api_params.go b/api_params.go index 1a24ab2875..e18238b735 100644 --- a/api_params.go +++ b/api_params.go @@ -3,7 +3,7 @@ package docker type ApiHistory struct { Id string Created int64 - CreatedBy string + CreatedBy string `json:",omitempty"` } type ApiImages struct { @@ -14,13 +14,13 @@ type ApiImages struct { } type ApiInfo struct { - Containers int - Version string - Images int Debug bool - GoVersion string - NFd int `json:",omitempty"` - NGoroutines int `json:",omitempty"` + Containers int + Images int + NFd int `json:",omitempty"` + NGoroutines int `json:",omitempty"` + MemoryLimit bool `json:",omitempty"` + SwapLimit bool `json:",omitempty"` } type ApiContainers struct { @@ -43,7 +43,7 @@ type ApiId struct { type ApiRun struct { Id string - Warnings []string + Warnings []string `json:",omitempty"` } type ApiPort struct { @@ -51,10 +51,9 @@ type ApiPort struct { } type ApiVersion struct { - Version string - GitCommit string - MemoryLimit bool - SwapLimit bool + Version string + GitCommit string `json:",omitempty"` + GoVersion string `json:",omitempty"` } type ApiWait struct { diff --git a/commands.go b/commands.go index 6109aebb13..9765b85cab 100644 --- a/commands.go +++ b/commands.go @@ -391,15 +391,14 @@ func (cli *DockerCli) CmdVersion(args ...string) error { utils.Debugf("Error unmarshal: body: %s, err: %s\n", body, err) return err } - fmt.Println("Version:", out.Version) - fmt.Println("Git Commit:", out.GitCommit) - if !out.MemoryLimit { - fmt.Println("WARNING: No memory limit support") + fmt.Println("Client version:", VERSION) + fmt.Println("Server version:", out.Version) + if out.GitCommit != "" { + fmt.Println("Git commit:", out.GitCommit) } - if !out.SwapLimit { - fmt.Println("WARNING: No swap limit support") + if out.GoVersion != "" { + fmt.Println("Go version:", out.GoVersion) } - return nil } @@ -420,14 +419,23 @@ func (cli *DockerCli) CmdInfo(args ...string) error { } var out ApiInfo - err = json.Unmarshal(body, &out) - if err != nil { + if err := json.Unmarshal(body, &out); err != nil { return err } - fmt.Printf("containers: %d\nversion: %s\nimages: %d\nGo version: %s\n", out.Containers, out.Version, out.Images, out.GoVersion) - if out.Debug { - fmt.Println("debug mode enabled") - fmt.Printf("fds: %d\ngoroutines: %d\n", out.NFd, out.NGoroutines) + + fmt.Printf("Containers: %d\n", out.Containers) + fmt.Printf("Images: %d\n", out.Images) + if out.Debug || os.Getenv("DEBUG") != "" { + fmt.Printf("Debug mode (server): %v\n", out.Debug) + fmt.Printf("Debug mode (client): %v\n", os.Getenv("DEBUG") != "") + fmt.Printf("Fds: %d\n", out.NFd) + fmt.Printf("Goroutines: %d\n", out.NGoroutines) + } + if !out.MemoryLimit { + fmt.Println("WARNING: No memory limit support") + } + if !out.SwapLimit { + fmt.Println("WARNING: No swap limit support") } return nil } diff --git a/server.go b/server.go index 90ec79986c..088353c3f7 100644 --- a/server.go +++ b/server.go @@ -17,7 +17,11 @@ import ( ) func (srv *Server) DockerVersion() ApiVersion { - return ApiVersion{VERSION, GIT_COMMIT, srv.runtime.capabilities.MemoryLimit, srv.runtime.capabilities.SwapLimit} + return ApiVersion{ + Version: VERSION, + GitCommit: GIT_COMMIT, + GoVersion: runtime.Version(), + } } func (srv *Server) ContainerKill(name string) error { @@ -187,7 +191,7 @@ func (srv *Server) Images(all bool, filter string) ([]ApiImages, error) { return outs, nil } -func (srv *Server) DockerInfo() ApiInfo { +func (srv *Server) DockerInfo() *ApiInfo { images, _ := srv.runtime.graph.All() var imgcount int if images == nil { @@ -195,17 +199,15 @@ func (srv *Server) DockerInfo() ApiInfo { } else { imgcount = len(images) } - var out ApiInfo - out.Containers = len(srv.runtime.List()) - out.Version = VERSION - out.Images = imgcount - out.GoVersion = runtime.Version() - if os.Getenv("DEBUG") != "" { - out.Debug = true - out.NFd = utils.GetTotalUsedFds() - out.NGoroutines = runtime.NumGoroutine() + return &ApiInfo{ + Containers: len(srv.runtime.List()), + Images: imgcount, + MemoryLimit: srv.runtime.capabilities.MemoryLimit, + SwapLimit: srv.runtime.capabilities.SwapLimit, + Debug: os.Getenv("DEBUG") != "", + NFd: utils.GetTotalUsedFds(), + NGoroutines: runtime.NumGoroutine(), } - return out } func (srv *Server) ImageHistory(name string) ([]ApiHistory, error) { From f41d2ec4d91f2fa1dc479d8bac32113fbb7e987e Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Fri, 31 May 2013 15:56:30 -0700 Subject: [PATCH 02/38] Update api docs --- docs/sources/api/docker_remote_api.rst | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/sources/api/docker_remote_api.rst b/docs/sources/api/docker_remote_api.rst index 5056a62a19..e350b9746c 100644 --- a/docs/sources/api/docker_remote_api.rst +++ b/docs/sources/api/docker_remote_api.rst @@ -914,10 +914,12 @@ Display system-wide information { "Containers":11, - "Version":"0.2.2", "Images":16, - "GoVersion":"go1.0.3", - "Debug":false + "Debug":false, + "NFd": 11, + "NGoroutines":21, + "MemoryLimit":true, + "SwapLimit":false } :statuscode 200: no error @@ -943,12 +945,11 @@ Show the docker version information HTTP/1.1 200 OK Content-Type: application/json - + { "Version":"0.2.2", "GitCommit":"5a2a5cc+CHANGES", - "MemoryLimit":true, - "SwapLimit":false + "GoVersion":"go1.0.3" } :statuscode 200: no error From 64f346779fbe4ba9587ec65eedd0e8373f7e29c0 Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Sat, 1 Jun 2013 15:51:45 -0700 Subject: [PATCH 03/38] Remove cgo from term --- term/term.go | 12 +++++------ term/termios_linux.go | 50 +++++++++++-------------------------------- 2 files changed, 19 insertions(+), 43 deletions(-) diff --git a/term/term.go b/term/term.go index 290bf174ad..ab90a3ef73 100644 --- a/term/term.go +++ b/term/term.go @@ -8,13 +8,13 @@ import ( ) type Termios struct { - Iflag uintptr - Oflag uintptr - Cflag uintptr - Lflag uintptr + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 Cc [20]byte - Ispeed uintptr - Ospeed uintptr + Ispeed uint32 + Ospeed uint32 } const ( diff --git a/term/termios_linux.go b/term/termios_linux.go index 92f21edde2..31a10a307c 100644 --- a/term/termios_linux.go +++ b/term/termios_linux.go @@ -5,26 +5,6 @@ import ( "unsafe" ) -// #include -// #include -/* -void MakeRaw(int fd) { - struct termios t; - - // FIXME: Handle errors? - ioctl(fd, TCGETS, &t); - - t.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON); - t.c_oflag &= ~OPOST; - t.c_lflag &= ~(ECHO | ECHONL | ICANON | IEXTEN | ISIG); - t.c_cflag &= ~(CSIZE | PARENB); - t.c_cflag |= CS8; - - ioctl(fd, TCSETS, &t); -} -*/ -import "C" - const ( getTermios = syscall.TCGETS setTermios = syscall.TCSETS @@ -35,24 +15,20 @@ const ( // restored. func MakeRaw(fd int) (*State, error) { var oldState State - if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), syscall.TCGETS, uintptr(unsafe.Pointer(&oldState.termios)), 0, 0, 0); err != 0 { + if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), getTermios, uintptr(unsafe.Pointer(&oldState.termios))); err != 0 { + return nil, err + } + + newState := oldState.termios + + newState.Iflag &^= (syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON) + newState.Oflag &^= syscall.OPOST + newState.Lflag &^= (syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.IEXTEN) + newState.Cflag &^= (syscall.CSIZE | syscall.PARENB) + newState.Cflag |= syscall.CS8 + + if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), setTermios, uintptr(unsafe.Pointer(&newState))); err != 0 { return nil, err } - C.MakeRaw(C.int(fd)) return &oldState, nil - - // FIXME: post on goland issues this: very same as the C function bug non-working - - // newState := oldState.termios - - // newState.Iflag &^= (IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON) - // newState.Oflag &^= OPOST - // newState.Lflag &^= (ECHO | syscall.ECHONL | ICANON | ISIG | IEXTEN) - // newState.Cflag &^= (CSIZE | syscall.PARENB) - // newState.Cflag |= CS8 - - // if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), syscall.TCSETS, uintptr(unsafe.Pointer(&newState))); err != 0 { - // return nil, err - // } - // return &oldState, nil } From 31eb01ae8aac22a4d768418d3cc4da6f903a8694 Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Sat, 1 Jun 2013 15:55:05 -0700 Subject: [PATCH 04/38] Use uintptr instead of int for Fd --- commands.go | 4 ++-- term/term.go | 14 +++++++------- term/termios_linux.go | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/commands.go b/commands.go index 7dd835856f..977ff12839 100644 --- a/commands.go +++ b/commands.go @@ -1414,7 +1414,7 @@ func (cli *DockerCli) hijack(method, path string, setRawTerminal bool, in *os.Fi return err }) - if in != nil && setRawTerminal && term.IsTerminal(int(in.Fd())) && os.Getenv("NORAW") == "" { + if in != nil && setRawTerminal && term.IsTerminal(in.Fd()) && os.Getenv("NORAW") == "" { if oldState, err := term.SetRawTerminal(); err != nil { return err } else { @@ -1433,7 +1433,7 @@ func (cli *DockerCli) hijack(method, path string, setRawTerminal bool, in *os.Fi return err } - if !term.IsTerminal(int(os.Stdin.Fd())) { + if !term.IsTerminal(os.Stdin.Fd()) { if err := <-sendStdin; err != nil { return err } diff --git a/term/term.go b/term/term.go index ab90a3ef73..4e29361533 100644 --- a/term/term.go +++ b/term/term.go @@ -128,21 +128,21 @@ func SetWinsize(fd uintptr, ws *Winsize) error { } // IsTerminal returns true if the given file descriptor is a terminal. -func IsTerminal(fd int) bool { +func IsTerminal(fd uintptr) bool { var termios Termios - _, _, err := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), uintptr(getTermios), uintptr(unsafe.Pointer(&termios))) + _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(getTermios), uintptr(unsafe.Pointer(&termios))) return err == 0 } // Restore restores the terminal connected to the given file descriptor to a // previous state. -func Restore(fd int, state *State) error { - _, _, err := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), uintptr(setTermios), uintptr(unsafe.Pointer(&state.termios))) +func Restore(fd uintptr, state *State) error { + _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(setTermios), uintptr(unsafe.Pointer(&state.termios))) return err } func SetRawTerminal() (*State, error) { - oldState, err := MakeRaw(int(os.Stdin.Fd())) + oldState, err := MakeRaw(os.Stdin.Fd()) if err != nil { return nil, err } @@ -150,12 +150,12 @@ func SetRawTerminal() (*State, error) { signal.Notify(c, os.Interrupt) go func() { _ = <-c - Restore(int(os.Stdin.Fd()), oldState) + Restore(os.Stdin.Fd(), oldState) os.Exit(0) }() return oldState, err } func RestoreTerminal(state *State) { - Restore(int(os.Stdin.Fd()), state) + Restore(os.Stdin.Fd(), state) } diff --git a/term/termios_linux.go b/term/termios_linux.go index 31a10a307c..7877cb89f8 100644 --- a/term/termios_linux.go +++ b/term/termios_linux.go @@ -13,9 +13,9 @@ const ( // MakeRaw put the terminal connected to the given file descriptor into raw // mode and returns the previous state of the terminal so that it can be // restored. -func MakeRaw(fd int) (*State, error) { +func MakeRaw(fd uintptr) (*State, error) { var oldState State - if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), getTermios, uintptr(unsafe.Pointer(&oldState.termios))); err != 0 { + if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, getTermios, uintptr(unsafe.Pointer(&oldState.termios))); err != 0 { return nil, err } @@ -27,7 +27,7 @@ func MakeRaw(fd int) (*State, error) { newState.Cflag &^= (syscall.CSIZE | syscall.PARENB) newState.Cflag |= syscall.CS8 - if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), setTermios, uintptr(unsafe.Pointer(&newState))); err != 0 { + if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, setTermios, uintptr(unsafe.Pointer(&newState))); err != 0 { return nil, err } return &oldState, nil From 3cc0963ad16a5abd67aeba22cefac34a40ac70ef Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Sat, 1 Jun 2013 15:55:52 -0700 Subject: [PATCH 05/38] Remove unused constants --- term/term.go | 88 ---------------------------------------------------- 1 file changed, 88 deletions(-) diff --git a/term/term.go b/term/term.go index 4e29361533..1f3e9d36bb 100644 --- a/term/term.go +++ b/term/term.go @@ -17,94 +17,6 @@ type Termios struct { Ospeed uint32 } -const ( - // Input flags - inpck = 0x010 - istrip = 0x020 - icrnl = 0x100 - ixon = 0x200 - - // Output flags - opost = 0x1 - - // Control flags - cs8 = 0x300 - - // Local flags - icanon = 0x100 - iexten = 0x400 -) - -const ( - HUPCL = 0x4000 - ICANON = 0x100 - ICRNL = 0x100 - IEXTEN = 0x400 - BRKINT = 0x2 - CFLUSH = 0xf - CLOCAL = 0x8000 - CREAD = 0x800 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0x14 - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - ISIG = 0x80 - ISTRIP = 0x20 - IUTF8 = 0x4000 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - NOFLSH = 0x80000000 - OCRNL = 0x10 - OFDEL = 0x20000 - OFILL = 0x80 - ONLCR = 0x2 - ONLRET = 0x40 - ONOCR = 0x20 - ONOEOT = 0x8 - OPOST = 0x1 - RENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - - TOSTOP = 0x400000 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VT0 = 0x0 - VT1 = 0x10000 - VTDLY = 0x10000 - VTIME = 0x11 - ECHO = 0x00000008 - - PENDIN = 0x20000000 -) - type State struct { termios Termios } From a70dd65964340b5c4ccedf497a2605b13e7ac8a8 Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Sat, 1 Jun 2013 16:19:50 -0700 Subject: [PATCH 06/38] Move Termios struct to os specific file --- term/term.go | 10 ---------- term/termios_darwin.go | 32 +++++++++++++++++++++++++++----- term/termios_linux.go | 10 ++++++++++ 3 files changed, 37 insertions(+), 15 deletions(-) diff --git a/term/term.go b/term/term.go index 1f3e9d36bb..0cc91ea1b6 100644 --- a/term/term.go +++ b/term/term.go @@ -7,16 +7,6 @@ import ( "unsafe" ) -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]byte - Ispeed uint32 - Ospeed uint32 -} - type State struct { termios Termios } diff --git a/term/termios_darwin.go b/term/termios_darwin.go index 7df54e7828..ac18aab692 100644 --- a/term/termios_darwin.go +++ b/term/termios_darwin.go @@ -8,23 +8,45 @@ import ( const ( getTermios = syscall.TIOCGETA setTermios = syscall.TIOCSETA + + ECHO = 0x00000008 + ONLCR = 0x2 + ISTRIP = 0x20 + INLCR = 0x40 + ISIG = 0x80 + IGNCR = 0x80 + ICANON = 0x100 + ICRNL = 0x100 + IXOFF = 0x400 + IXON = 0x200 ) +type Termios struct { + Iflag uint64 + Oflag uint64 + Cflag uint64 + Lflag uint64 + Cc [20]byte + Ispeed uint64 + Ospeed uint64 +} + // MakeRaw put the terminal connected to the given file descriptor into raw // mode and returns the previous state of the terminal so that it can be // restored. -func MakeRaw(fd int) (*State, error) { +func MakeRaw(fd uintptr) (*State, error) { var oldState State - if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), uintptr(getTermios), uintptr(unsafe.Pointer(&oldState.termios)), 0, 0, 0); err != 0 { + if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(getTermios), uintptr(unsafe.Pointer(&oldState.termios))); err != 0 { return nil, err } newState := oldState.termios - newState.Iflag &^= ISTRIP | INLCR | IGNCR | IXON | IXOFF + newState.Iflag &^= (ISTRIP | INLCR | IGNCR | IXON | IXOFF) newState.Iflag |= ICRNL newState.Oflag |= ONLCR - newState.Lflag &^= ECHO | ICANON | ISIG - if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), uintptr(setTermios), uintptr(unsafe.Pointer(&newState)), 0, 0, 0); err != 0 { + newState.Lflag &^= (ECHO | ICANON | ISIG) + + if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(setTermios), uintptr(unsafe.Pointer(&newState))); err != 0 { return nil, err } diff --git a/term/termios_linux.go b/term/termios_linux.go index 7877cb89f8..4a717c84a7 100644 --- a/term/termios_linux.go +++ b/term/termios_linux.go @@ -10,6 +10,16 @@ const ( setTermios = syscall.TCSETS ) +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]byte + Ispeed uint32 + Ospeed uint32 +} + // MakeRaw put the terminal connected to the given file descriptor into raw // mode and returns the previous state of the terminal so that it can be // restored. From e16c93486d16ac4f3a05f720ee6478b5cef93f10 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Mon, 3 Jun 2013 10:19:20 +0000 Subject: [PATCH 07/38] fix Path corruption in 'docker diff' --- changes.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changes.go b/changes.go index 4c79918887..e50b88758a 100644 --- a/changes.go +++ b/changes.go @@ -65,7 +65,7 @@ func Changes(layers []string, rw string) ([]Change, error) { file := filepath.Base(path) // If there is a whiteout, then the file was removed if strings.HasPrefix(file, ".wh.") { - originalFile := strings.TrimLeft(file, ".wh.") + originalFile := strings.TrimPrefix(file, ".wh.") change.Path = filepath.Join(filepath.Dir(path), originalFile) change.Kind = ChangeDelete } else { From 8243f2510e0ff0af8df18bf0febab819529106d4 Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Mon, 3 Jun 2013 06:44:00 -0700 Subject: [PATCH 08/38] Update test to reflect new ApiInfo struct --- api_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api_test.go b/api_test.go index f364c6c895..9121167e10 100644 --- a/api_test.go +++ b/api_test.go @@ -106,8 +106,8 @@ func TestGetInfo(t *testing.T) { if err != nil { t.Fatal(err) } - if infos.Version != VERSION { - t.Errorf("Excepted version %s, %s found", VERSION, infos.Version) + if infos.Images != 1 { + t.Errorf("Excepted images: %d, %d found", 1, infos.Images) } } From 1ce4ba6c9f381f7931615644675b0cad33e74492 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Mon, 3 Jun 2013 15:33:29 +0000 Subject: [PATCH 09/38] remove check on login --- commands.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/commands.go b/commands.go index 9f3168ac06..ddb2c1a52b 100644 --- a/commands.go +++ b/commands.go @@ -739,12 +739,6 @@ func (cli *DockerCli) CmdPull(args ...string) error { remote = remoteParts[0] } - if strings.Contains(remote, "/") { - if _, err := cli.checkIfLogged(true, "pull"); err != nil { - return err - } - } - v := url.Values{} v.Set("fromImage", remote) v.Set("tag", *tag) From 71b1657e8d22b6dfa0a426f6244c6a3101f66bc4 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Mon, 3 Jun 2013 17:02:57 +0000 Subject: [PATCH 10/38] added test --- container_test.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/container_test.go b/container_test.go index 3ed1763a3e..117f0f3eb3 100644 --- a/container_test.go +++ b/container_test.go @@ -217,6 +217,37 @@ func TestDiff(t *testing.T) { t.Fatalf("/etc/passwd should not be present in the diff after commit.") } } + + // Create a new containere + container3, err := builder.Create( + &Config{ + Image: GetTestImage(runtime).Id, + Cmd: []string{"rm", "/bin/httpd"}, + }, + ) + if err != nil { + t.Fatal(err) + } + defer runtime.Destroy(container3) + + if err := container3.Run(); err != nil { + t.Fatal(err) + } + + // Check the changelog + c, err = container3.Changes() + if err != nil { + t.Fatal(err) + } + success = false + for _, elem := range c { + if elem.Path == "/bin/httpd" && elem.Kind == 2 { + success = true + } + } + if !success { + t.Fatalf("/bin/httpd should be present in the diff after commit.") + } } func TestCommitAutoRun(t *testing.T) { From 854039b6ba9c707af07f9966b39150ce23150920 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Mon, 3 Jun 2013 17:25:51 +0000 Subject: [PATCH 11/38] remove TrimLeft as it's go1.1 --- changes.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changes.go b/changes.go index e50b88758a..dc1b015726 100644 --- a/changes.go +++ b/changes.go @@ -65,7 +65,7 @@ func Changes(layers []string, rw string) ([]Change, error) { file := filepath.Base(path) // If there is a whiteout, then the file was removed if strings.HasPrefix(file, ".wh.") { - originalFile := strings.TrimPrefix(file, ".wh.") + originalFile := file[len(".wh."):] change.Path = filepath.Join(filepath.Dir(path), originalFile) change.Kind = ChangeDelete } else { From a8ae398bf52e97148ee7bd0d5868de2e15bd297f Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Mon, 3 Jun 2013 10:59:48 -0700 Subject: [PATCH 12/38] Bumped version to 0.4.0 --- CHANGELOG.md | 5 +++++ commands.go | 2 +- packaging/ubuntu/changelog | 7 +++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a8464b5345..44e52eecb5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 0.4.0 (2013-06-03) + + Introducing Builder: 'docker build' builds a container, layer by layer, from a source repository containing a Dockerfile + + Introducing Remote API: control Docker programmatically using a simple HTTP/json API + * Runtime: various reliability and usability improvements + ## 0.3.4 (2013-05-30) + Builder: 'docker build' builds a container, layer by layer, from a source repository containing a Dockerfile + Builder: 'docker build -t FOO' applies the tag FOO to the newly built container. diff --git a/commands.go b/commands.go index ddb2c1a52b..c38c18a04c 100644 --- a/commands.go +++ b/commands.go @@ -28,7 +28,7 @@ import ( "unicode" ) -const VERSION = "0.3.4" +const VERSION = "0.4.0" var ( GIT_COMMIT string diff --git a/packaging/ubuntu/changelog b/packaging/ubuntu/changelog index 10151ed483..5fc2e49d5e 100644 --- a/packaging/ubuntu/changelog +++ b/packaging/ubuntu/changelog @@ -1,3 +1,10 @@ +lxc-docker (0.4.0-1) precise; urgency=low + - Introducing Builder: 'docker build' builds a container, layer by layer, from a source repository containing a Dockerfile + - Introducing Remote API: control Docker programmatically using a simple HTTP/json API + - Runtime: various reliability and usability improvements + + -- dotCloud Mon, 03 Jun 2013 00:00:00 -0700 + lxc-docker (0.3.4-1) precise; urgency=low - Builder: 'docker build' builds a container, layer by layer, from a source repository containing a Dockerfile - Builder: 'docker build -t FOO' applies the tag FOO to the newly built container. From 38f29f7d0c9cbdb4c458834d403fc128dcce3117 Mon Sep 17 00:00:00 2001 From: Thatcher Peskens Date: Mon, 3 Jun 2013 11:45:19 -0700 Subject: [PATCH 13/38] Changed some text on the website to include docker-club Fixed a link in the FAQ on the docs Fixed a detail in the Makefile for pushing the site to dotcloud --- docs/Makefile | 2 +- docs/sources/faq.rst | 7 +++---- docs/sources/installation/windows.rst | 1 + docs/website/gettingstarted/index.html | 16 ++++++++-------- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/Makefile b/docs/Makefile index dcbf111c29..517d01658f 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -63,7 +63,7 @@ site: connect: @echo connecting dotcloud to www.docker.io website, make sure to use user 1 @cd _build/website/ ; \ - dotcloud connect dockerwebsite ; + dotcloud connect dockerwebsite ; \ dotcloud list push: diff --git a/docs/sources/faq.rst b/docs/sources/faq.rst index 901e51ddbb..dfffa012f4 100644 --- a/docs/sources/faq.rst +++ b/docs/sources/faq.rst @@ -19,7 +19,8 @@ Most frequently asked questions. 3. **Does Docker run on Mac OS X or Windows?** - Not at this time, Docker currently only runs on Linux, but you can use VirtualBox to run Docker in a virtual machine on your box, and get the best of both worlds. Check out the MacOSX_ and Windows_ installation guides. + Not at this time, Docker currently only runs on Linux, but you can use VirtualBox to run Docker in a + virtual machine on your box, and get the best of both worlds. Check out the :ref:`install_using_vagrant` and :ref:`windows` installation guides. 4. **How do containers compare to virtual machines?** @@ -39,10 +40,8 @@ Most frequently asked questions. * `Ask questions on Stackoverflow`_ * `Join the conversation on Twitter`_ - .. _Windows: ../installation/windows/ - .. _MacOSX: ../installation/vagrant/ .. _the repo: http://www.github.com/dotcloud/docker - .. _IRC\: docker on freenode: irc://chat.freenode.net#docker + .. _IRC: docker on freenode: docker on freenode: irc://chat.freenode.net#docker .. _Github: http://www.github.com/dotcloud/docker .. _Ask questions on Stackoverflow: http://stackoverflow.com/search?q=docker .. _Join the conversation on Twitter: http://twitter.com/getdocker diff --git a/docs/sources/installation/windows.rst b/docs/sources/installation/windows.rst index 230ac78051..7830106020 100644 --- a/docs/sources/installation/windows.rst +++ b/docs/sources/installation/windows.rst @@ -2,6 +2,7 @@ :description: Docker's tutorial to run docker on Windows :keywords: Docker, Docker documentation, Windows, requirements, virtualbox, vagrant, git, ssh, putty, cygwin +.. _windows: Using Vagrant (Windows) ======================= diff --git a/docs/website/gettingstarted/index.html b/docs/website/gettingstarted/index.html index 5a8de3232b..a40289144f 100644 --- a/docs/website/gettingstarted/index.html +++ b/docs/website/gettingstarted/index.html @@ -62,7 +62,7 @@
-
+
Docker is still under heavy development. It should not yet be used in production. Check the repo for recent progress.
@@ -133,13 +133,13 @@
-

More resources

- +

Questions? Want to get in touch?

+

There are several ways to get in touch:

+

Join the discussion on IRC. We can be found in the #docker channel on chat.freenode.net

+

Discussions happen on our google group: docker-club at googlegroups.com

+

All our development and decisions are made out in the open on Github github.com/dotcloud/docker

+

Get help on using Docker by asking on Stackoverflow

+

And of course, tweet your tweets to twitter.com/getdocker

From 830c458fe761aca5ad2facec33b3d0798caab116 Mon Sep 17 00:00:00 2001 From: Sam Alba Date: Mon, 3 Jun 2013 12:14:57 -0700 Subject: [PATCH 14/38] Fixed missing Body.Close when doing some HTTP requests. It should improve some request issues. --- registry/registry.go | 7 ++++++- server.go | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/registry/registry.go b/registry/registry.go index 36b01d643a..d9f53ee9f9 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -64,6 +64,9 @@ func (r *Registry) LookupRemoteImage(imgId, registry string, authConfig *auth.Au } req.SetBasicAuth(authConfig.Username, authConfig.Password) res, err := rt.RoundTrip(req) + if err == nil { + defer res.Body.Close() + } return err == nil && res.StatusCode == 307 } @@ -152,7 +155,9 @@ func (r *Registry) GetRemoteTags(registries []string, repository string, token [ } req.Header.Set("Authorization", "Token "+strings.Join(token, ", ")) res, err := r.client.Do(req) - defer res.Body.Close() + if err == nil { + defer res.Body.Close() + } utils.Debugf("Got status code %d from %s", res.StatusCode, endpoint) if err != nil || (res.StatusCode != 200 && res.StatusCode != 404) { continue diff --git a/server.go b/server.go index fa847b9ce5..08cb37a72e 100644 --- a/server.go +++ b/server.go @@ -321,6 +321,7 @@ func (srv *Server) pullImage(r *registry.Registry, out io.Writer, imgId, endpoin if err != nil { return err } + defer layer.Close() if err := srv.runtime.graph.Register(utils.ProgressReader(layer, contentLength, out, sf.FormatProgress("Downloading", "%v/%v (%v)"), sf), false, img); err != nil { return err } From 82dd963e08778f8c563e058f1b19ccc358965615 Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Mon, 3 Jun 2013 12:20:52 -0700 Subject: [PATCH 15/38] Minor changes in registry.go --- registry/registry.go | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/registry/registry.go b/registry/registry.go index d9f53ee9f9..8283bf4437 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -64,10 +64,11 @@ func (r *Registry) LookupRemoteImage(imgId, registry string, authConfig *auth.Au } req.SetBasicAuth(authConfig.Username, authConfig.Password) res, err := rt.RoundTrip(req) - if err == nil { - defer res.Body.Close() + if err != nil { + return false } - return err == nil && res.StatusCode == 307 + res.Body.Close() + return res.StatusCode == 307 } func (r *Registry) getImagesInRepository(repository string, authConfig *auth.AuthConfig) ([]map[string]string, error) { @@ -155,18 +156,19 @@ func (r *Registry) GetRemoteTags(registries []string, repository string, token [ } req.Header.Set("Authorization", "Token "+strings.Join(token, ", ")) res, err := r.client.Do(req) - if err == nil { - defer res.Body.Close() - } utils.Debugf("Got status code %d from %s", res.StatusCode, endpoint) - if err != nil || (res.StatusCode != 200 && res.StatusCode != 404) { + if err != nil { + return nil, err + } + defer res.Body.Close() + + if res.StatusCode != 200 && res.StatusCode != 404 { continue } else if res.StatusCode == 404 { return nil, fmt.Errorf("Repository not found") } result := make(map[string]string) - rawJson, err := ioutil.ReadAll(res.Body) if err != nil { return nil, err From cff3b37a61b8da883437eec799b7b852d22538f0 Mon Sep 17 00:00:00 2001 From: Sam Alba Date: Mon, 3 Jun 2013 14:42:21 -0700 Subject: [PATCH 16/38] Disabled HTTP keep-alive in the default HTTP client for Registry calls --- registry/registry.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/registry/registry.go b/registry/registry.go index 8283bf4437..aeae3fe4a4 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -477,9 +477,15 @@ func NewRegistry(root string) *Registry { // If the auth file does not exist, keep going authConfig, _ := auth.LoadConfig(root) + httpTransport := &http.Transport{ + DisableKeepAlives: true, + } + r := &Registry{ authConfig: authConfig, - client: &http.Client{}, + client: &http.Client{ + Transport: httpTransport, + }, } r.client.Jar = cookiejar.NewCookieJar() return r From b515a5a9ec5792c67be5fe8476df96903f43df71 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Tue, 4 Jun 2013 13:24:58 +0000 Subject: [PATCH 17/38] go vet --- container.go | 2 -- network.go | 1 - 2 files changed, 3 deletions(-) diff --git a/container.go b/container.go index c6b7c8a51c..e552fba036 100644 --- a/container.go +++ b/container.go @@ -606,7 +606,6 @@ func (container *Container) waitLxc() error { } time.Sleep(500 * time.Millisecond) } - return nil } func (container *Container) monitor() { @@ -795,7 +794,6 @@ func (container *Container) WaitTimeout(timeout time.Duration) error { case <-done: return nil } - panic("unreachable") } func (container *Container) EnsureMounted() error { diff --git a/network.go b/network.go index 77a82ed9f0..dbf5480f1c 100644 --- a/network.go +++ b/network.go @@ -258,7 +258,6 @@ func proxy(listener net.Listener, proto, address string) error { utils.Debugf("Connected to backend, splicing") splice(src, dst) } - return nil } func halfSplice(dst, src net.Conn) error { From 86ada2fa5d00820288df8a59eca3deef83f4aeb6 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Tue, 4 Jun 2013 13:51:12 +0000 Subject: [PATCH 18/38] drop/omit --- auth/auth.go | 2 +- builder_client.go | 6 +++--- buildfile.go | 6 +++--- commands.go | 31 +++++++++++++++---------------- container.go | 30 +++++++++++++++--------------- contrib/crashTest.go | 2 +- image.go | 3 +-- network.go | 9 ++++----- registry/registry.go | 8 ++++---- runtime.go | 36 ++++++++++++++++++------------------ server.go | 15 +++++++-------- utils/utils.go | 2 +- 12 files changed, 73 insertions(+), 77 deletions(-) diff --git a/auth/auth.go b/auth/auth.go index 9c34604419..a57d019dce 100644 --- a/auth/auth.go +++ b/auth/auth.go @@ -21,7 +21,7 @@ const INDEX_SERVER = "https://index.docker.io/v1" //const INDEX_SERVER = "http://indexstaging-docker.dotcloud.com/" var ( - ErrConfigFileMissing error = errors.New("The Auth config file is missing") + ErrConfigFileMissing = errors.New("The Auth config file is missing") ) type AuthConfig struct { diff --git a/builder_client.go b/builder_client.go index 144e11b415..4ea2a9f95f 100644 --- a/builder_client.go +++ b/builder_client.go @@ -222,11 +222,11 @@ func (b *builderClient) commit(id string) error { if id == "" { cmd := b.config.Cmd b.config.Cmd = []string{"true"} - if cid, err := b.run(); err != nil { + cid, err := b.run() + if err != nil { return err - } else { - id = cid } + id = cid b.config.Cmd = cmd } diff --git a/buildfile.go b/buildfile.go index a015830e0d..fb5c1c9d5c 100644 --- a/buildfile.go +++ b/buildfile.go @@ -272,11 +272,11 @@ func (b *buildFile) commit(id string, autoCmd []string, comment string) error { utils.Debugf("[BUILDER] Cache miss") } - if cid, err := b.run(); err != nil { + cid, err := b.run() + if err != nil { return err - } else { - id = cid } + id = cid } container := b.runtime.Get(id) diff --git a/commands.go b/commands.go index c38c18a04c..943b2198c1 100644 --- a/commands.go +++ b/commands.go @@ -159,11 +159,11 @@ func (cli *DockerCli) CmdBuild(args ...string) error { file = os.Stdin } else { // Send Dockerfile from arg/Dockerfile (deprecate later) - if f, err := os.Open(path.Join(cmd.Arg(0), "Dockerfile")); err != nil { + f, err := os.Open(path.Join(cmd.Arg(0), "Dockerfile")) + if err != nil { return err - } else { - file = f } + file = f // Send context from arg // Create a FormFile multipart for the context if needed // FIXME: Use NewTempArchive in order to have the size and avoid too much memory usage? @@ -176,21 +176,21 @@ func (cli *DockerCli) CmdBuild(args ...string) error { if err != nil { return err } - if wField, err := w.CreateFormFile("Context", filepath.Base(absPath)+"."+compression.Extension()); err != nil { + wField, err := w.CreateFormFile("Context", filepath.Base(absPath)+"."+compression.Extension()) + if err != nil { return err - } else { - // FIXME: Find a way to have a progressbar for the upload too - sf := utils.NewStreamFormatter(false) - io.Copy(wField, utils.ProgressReader(ioutil.NopCloser(context), -1, os.Stdout, sf.FormatProgress("Caching Context", "%v/%v (%v)"), sf)) } + // FIXME: Find a way to have a progressbar for the upload too + sf := utils.NewStreamFormatter(false) + io.Copy(wField, utils.ProgressReader(ioutil.NopCloser(context), -1, os.Stdout, sf.FormatProgress("Caching Context", "%v/%v (%v)"), sf)) multipartBody = io.MultiReader(multipartBody, boundary) } // Create a FormFile multipart for the Dockerfile - if wField, err := w.CreateFormFile("Dockerfile", "Dockerfile"); err != nil { + wField, err := w.CreateFormFile("Dockerfile", "Dockerfile") + if err != nil { return err - } else { - io.Copy(wField, file) } + io.Copy(wField, file) multipartBody = io.MultiReader(multipartBody, boundary) v := &url.Values{} @@ -276,9 +276,8 @@ func (cli *DockerCli) CmdLogin(args ...string) error { oldState, err := term.SetRawTerminal() if err != nil { return err - } else { - defer term.RestoreTerminal(oldState) } + defer term.RestoreTerminal(oldState) cmd := Subcmd("login", "", "Register or Login to the docker registry server") if err := cmd.Parse(args); err != nil { @@ -1417,11 +1416,11 @@ func (cli *DockerCli) hijack(method, path string, setRawTerminal bool, in *os.Fi }) if in != nil && setRawTerminal && term.IsTerminal(in.Fd()) && os.Getenv("NORAW") == "" { - if oldState, err := term.SetRawTerminal(); err != nil { + oldState, err := term.SetRawTerminal() + if err != nil { return err - } else { - defer term.RestoreTerminal(oldState) } + defer term.RestoreTerminal(oldState) } sendStdin := utils.Go(func() error { _, err := io.Copy(rwc, in) diff --git a/container.go b/container.go index e552fba036..9c28e5aa23 100644 --- a/container.go +++ b/container.go @@ -431,14 +431,14 @@ func (container *Container) Start() error { // Create the requested volumes volumes for volPath := range container.Config.Volumes { - if c, err := container.runtime.volumes.Create(nil, container, "", "", nil); err != nil { + c, err := container.runtime.volumes.Create(nil, container, "", "", nil) + if err != nil { return err - } else { - if err := os.MkdirAll(path.Join(container.RootfsPath(), volPath), 0755); err != nil { - return nil - } - container.Volumes[volPath] = c.Id } + if err := os.MkdirAll(path.Join(container.RootfsPath(), volPath), 0755); err != nil { + return nil + } + container.Volumes[volPath] = c.Id } if container.Config.VolumesFrom != "" { @@ -573,12 +573,12 @@ func (container *Container) allocateNetwork() error { } container.NetworkSettings.PortMapping = make(map[string]string) for _, spec := range container.Config.PortSpecs { - if nat, err := iface.AllocatePort(spec); err != nil { + nat, err := iface.AllocatePort(spec) + if err != nil { iface.Release() return err - } else { - container.NetworkSettings.PortMapping[strconv.Itoa(nat.Backend)] = strconv.Itoa(nat.Frontend) } + container.NetworkSettings.PortMapping[strconv.Itoa(nat.Backend)] = strconv.Itoa(nat.Frontend) } container.network = iface container.NetworkSettings.Bridge = container.runtime.networkManager.bridgeIface @@ -597,12 +597,12 @@ func (container *Container) releaseNetwork() { // FIXME: replace this with a control socket within docker-init func (container *Container) waitLxc() error { for { - if output, err := exec.Command("lxc-info", "-n", container.Id).CombinedOutput(); err != nil { + output, err := exec.Command("lxc-info", "-n", container.Id).CombinedOutput() + if err != nil { return err - } else { - if !strings.Contains(string(output), "RUNNING") { - return nil - } + } + if !strings.Contains(string(output), "RUNNING") { + return nil } time.Sleep(500 * time.Millisecond) } @@ -625,7 +625,7 @@ func (container *Container) monitor() { } utils.Debugf("Process finished") - var exitCode int = -1 + exitCode := -1 if container.cmd != nil { exitCode = container.cmd.ProcessState.Sys().(syscall.WaitStatus).ExitStatus() } diff --git a/contrib/crashTest.go b/contrib/crashTest.go index d4a889e8d3..320e97c52a 100644 --- a/contrib/crashTest.go +++ b/contrib/crashTest.go @@ -11,7 +11,7 @@ import ( "time" ) -var DOCKER_PATH string = path.Join(os.Getenv("DOCKERPATH"), "docker") +var DOCKER_PATH = path.Join(os.Getenv("DOCKERPATH"), "docker") // WARNING: this crashTest will 1) crash your host, 2) remove all containers func runDaemon() (*exec.Cmd, error) { diff --git a/image.go b/image.go index d825b4bba2..3617d7dd19 100644 --- a/image.go +++ b/image.go @@ -49,9 +49,8 @@ func LoadImage(root string) (*Image, error) { if stat, err := os.Stat(layerPath(root)); err != nil { if os.IsNotExist(err) { return nil, fmt.Errorf("Couldn't load image %s: no filesystem layer", img.Id) - } else { - return nil, err } + return nil, err } else if !stat.IsDir() { return nil, fmt.Errorf("Couldn't load image %s: %s is not a directory", img.Id, layerPath(root)) } diff --git a/network.go b/network.go index dbf5480f1c..2bdb4862ce 100644 --- a/network.go +++ b/network.go @@ -132,9 +132,8 @@ func CreateBridgeIface(ifaceName string) error { } if ifaceAddr == "" { return fmt.Errorf("Could not find a free IP address range for interface '%s'. Please configure its address manually and run 'docker -b %s'", ifaceName, ifaceName) - } else { - utils.Debugf("Creating bridge %s with network %s", ifaceName, ifaceAddr) } + utils.Debugf("Creating bridge %s with network %s", ifaceName, ifaceAddr) if output, err := ip("link", "add", ifaceName, "type", "bridge"); err != nil { return fmt.Errorf("Error creating bridge: %s (output: %s)", err, output) @@ -464,11 +463,11 @@ func (iface *NetworkInterface) AllocatePort(spec string) (*Nat, error) { return nil, err } // Allocate a random port if Frontend==0 - if extPort, err := iface.manager.portAllocator.Acquire(nat.Frontend); err != nil { + extPort, err := iface.manager.portAllocator.Acquire(nat.Frontend) + if err != nil { return nil, err - } else { - nat.Frontend = extPort } + nat.Frontend = extPort if err := iface.manager.portMapper.Map(nat.Frontend, net.TCPAddr{IP: iface.IPNet.IP, Port: nat.Backend}); err != nil { iface.manager.portAllocator.Release(nat.Frontend) return nil, err diff --git a/registry/registry.go b/registry/registry.go index aeae3fe4a4..b6cda92841 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -15,7 +15,7 @@ import ( "strings" ) -var ErrAlreadyExists error = errors.New("Image already exists") +var ErrAlreadyExists = errors.New("Image already exists") func doWithCookies(c *http.Client, req *http.Request) (*http.Response, error) { for _, cookie := range c.Jar.Cookies(req.URL) { @@ -396,11 +396,11 @@ func (r *Registry) PushImageJsonIndex(remote string, imgList []*ImgData, validat } if validate { if res.StatusCode != 204 { - if errBody, err := ioutil.ReadAll(res.Body); err != nil { + errBody, err := ioutil.ReadAll(res.Body) + if err != nil { return nil, err - } else { - return nil, fmt.Errorf("Error: Status %d trying to push checksums %s: %s", res.StatusCode, remote, errBody) } + return nil, fmt.Errorf("Error: Status %d trying to push checksums %s: %s", res.StatusCode, remote, errBody) } } diff --git a/runtime.go b/runtime.go index 3c190e934e..ad1852e902 100644 --- a/runtime.go +++ b/runtime.go @@ -133,25 +133,25 @@ func (runtime *Runtime) Register(container *Container) error { // if so, then we need to restart monitor and init a new lock // If the container is supposed to be running, make sure of it if container.State.Running { - if output, err := exec.Command("lxc-info", "-n", container.Id).CombinedOutput(); err != nil { + output, err := exec.Command("lxc-info", "-n", container.Id).CombinedOutput() + if err != nil { return err - } else { - if !strings.Contains(string(output), "RUNNING") { - utils.Debugf("Container %s was supposed to be running be is not.", container.Id) - if runtime.autoRestart { - utils.Debugf("Restarting") - container.State.Ghost = false - container.State.setStopped(0) - if err := container.Start(); err != nil { - return err - } - nomonitor = true - } else { - utils.Debugf("Marking as stopped") - container.State.setStopped(-127) - if err := container.ToDisk(); err != nil { - return err - } + } + if !strings.Contains(string(output), "RUNNING") { + utils.Debugf("Container %s was supposed to be running be is not.", container.Id) + if runtime.autoRestart { + utils.Debugf("Restarting") + container.State.Ghost = false + container.State.setStopped(0) + if err := container.Start(); err != nil { + return err + } + nomonitor = true + } else { + utils.Debugf("Marking as stopped") + container.State.setStopped(-127) + if err := container.ToDisk(); err != nil { + return err } } } diff --git a/server.go b/server.go index 08cb37a72e..9e98b87c21 100644 --- a/server.go +++ b/server.go @@ -216,7 +216,7 @@ func (srv *Server) ImageHistory(name string) ([]ApiHistory, error) { return nil, err } - var outs []ApiHistory = []ApiHistory{} //produce [] when empty instead of 'null' + outs := []ApiHistory{} //produce [] when empty instead of 'null' err = image.WalkHistory(func(img *Image) error { var out ApiHistory out.Id = srv.runtime.repositories.ImageName(img.ShortId()) @@ -356,11 +356,11 @@ func (srv *Server) pullRepository(r *registry.Registry, out io.Writer, remote, a } } else { // Otherwise, check that the tag exists and use only that one - if id, exists := tagsList[askedTag]; !exists { + id, exists := tagsList[askedTag] + if !exists { return fmt.Errorf("Tag %s not found in repositoy %s", askedTag, remote) - } else { - repoData.ImgList[id].Tag = askedTag } + repoData.ImgList[id].Tag = askedTag } for _, img := range repoData.ImgList { @@ -714,10 +714,9 @@ func (srv *Server) ImageDelete(name string) error { img, err := srv.runtime.repositories.LookupImage(name) if err != nil { return fmt.Errorf("No such image: %s", name) - } else { - if err := srv.runtime.graph.Delete(img.Id); err != nil { - return fmt.Errorf("Error deleting image %s: %s", name, err.Error()) - } + } + if err := srv.runtime.graph.Delete(img.Id); err != nil { + return fmt.Errorf("Error deleting image %s: %s", name, err.Error()) } return nil } diff --git a/utils/utils.go b/utils/utils.go index 33aa2eba8c..eb6b35677e 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -34,7 +34,7 @@ func Go(f func() error) chan error { // Request a given URL and return an io.Reader func Download(url string, stderr io.Writer) (*http.Response, error) { var resp *http.Response - var err error = nil + var err error if resp, err = http.Get(url); err != nil { return nil, err } From e61af8bc62c84a1bc70d0b323c1b6bf21dddb4b6 Mon Sep 17 00:00:00 2001 From: John Costa Date: Mon, 3 Jun 2013 17:29:41 -0400 Subject: [PATCH 19/38] some installations of ubuntu 13.04 (digital ocean Ubuntu 13.04 x64 Server in this case) require software-properties-common to be installed before being able to use add-apt-repository --- docs/sources/installation/ubuntulinux.rst | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/sources/installation/ubuntulinux.rst b/docs/sources/installation/ubuntulinux.rst index 1fb1ce5299..5ccbd59c29 100644 --- a/docs/sources/installation/ubuntulinux.rst +++ b/docs/sources/installation/ubuntulinux.rst @@ -92,6 +92,17 @@ have AUFS filesystem support enabled, so we need to install it. sudo apt-get update sudo apt-get install linux-image-extra-`uname -r` +**add-apt-repository support** + +Some installations of Ubuntu 13.04 (Digital Ocean's Ubuntu 13.04 x64 Server in +this case) require software-properties-common to be installed before being able +to use add-apt-repository. + +.. code-block:: bash + + sudo apt-get install software-properties-common + + Installation ------------ From 06b585ce8a397fffcc9051e2faa6f968e51fccd5 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Tue, 4 Jun 2013 15:44:27 +0000 Subject: [PATCH 20/38] fix proxy --- registry/registry.go | 1 + 1 file changed, 1 insertion(+) diff --git a/registry/registry.go b/registry/registry.go index aeae3fe4a4..ede8eda722 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -479,6 +479,7 @@ func NewRegistry(root string) *Registry { httpTransport := &http.Transport{ DisableKeepAlives: true, + Proxy: http.ProxyFromEnvironment, } r := &Registry{ From 3922691fb99a99cec0a5d239da522cc3d8778e6c Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Tue, 4 Jun 2013 16:09:08 +0000 Subject: [PATCH 21/38] fix progress message in client --- commands.go | 2 +- docs/sources/api/docker_remote_api.rst | 6 +++--- server.go | 2 +- utils/utils.go | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/commands.go b/commands.go index c38c18a04c..93bae63a29 100644 --- a/commands.go +++ b/commands.go @@ -1379,7 +1379,7 @@ func (cli *DockerCli) stream(method, path string, in io.Reader, out io.Writer) e return err } if m.Progress != "" { - fmt.Fprintf(out, "Downloading %s\r", m.Progress) + fmt.Fprintf(out, "%s %s\r", m.Status, m.Progress) } else if m.Error != "" { return fmt.Errorf(m.Error) } else { diff --git a/docs/sources/api/docker_remote_api.rst b/docs/sources/api/docker_remote_api.rst index dca4599c55..1c46cf148a 100644 --- a/docs/sources/api/docker_remote_api.rst +++ b/docs/sources/api/docker_remote_api.rst @@ -564,7 +564,7 @@ Create an image Content-Type: application/json {"status":"Pulling..."} - {"progress":"1/? (n/a)"} + {"status":"Pulling", "progress":"1/? (n/a)"} {"error":"Invalid..."} ... @@ -607,7 +607,7 @@ Insert a file in a image Content-Type: application/json {"status":"Inserting..."} - {"progress":"1/? (n/a)"} + {"status":"Inserting", "progress":"1/? (n/a)"} {"error":"Invalid..."} ... @@ -734,7 +734,7 @@ Push an image on the registry Content-Type: application/json {"status":"Pushing..."} - {"progress":"1/? (n/a)"} + {"status":"Pushing", "progress":"1/? (n/a)"} {"error":"Invalid..."} ... diff --git a/server.go b/server.go index 08cb37a72e..ec2157d803 100644 --- a/server.go +++ b/server.go @@ -573,7 +573,7 @@ func (srv *Server) pushImage(r *registry.Registry, out io.Writer, remote, imgId, } // Send the layer - if err := r.PushImageLayerRegistry(imgData.Id, utils.ProgressReader(layerData, int(layerData.Size), out, sf.FormatProgress("", "%v/%v (%v)"), sf), ep, token); err != nil { + if err := r.PushImageLayerRegistry(imgData.Id, utils.ProgressReader(layerData, int(layerData.Size), out, sf.FormatProgress("Pushing", "%v/%v (%v)"), sf), ep, token); err != nil { return err } return nil diff --git a/utils/utils.go b/utils/utils.go index 33aa2eba8c..2cd23ad6d2 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -608,7 +608,7 @@ func (sf *StreamFormatter) FormatError(err error) []byte { func (sf *StreamFormatter) FormatProgress(action, str string) []byte { sf.used = true if sf.json { - b, err := json.Marshal(&JsonMessage{Progress:str}) + b, err := json.Marshal(&JsonMessage{Status: action, Progress:str}) if err != nil { return nil } From fd224ee590dc9f003f6507b529a9f47cceb02c44 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Tue, 4 Jun 2013 18:00:22 +0000 Subject: [PATCH 22/38] linted names --- api.go | 72 ++++++++++----------- api_params.go | 36 +++++------ api_test.go | 146 +++++++++++++++++++++---------------------- auth/auth.go | 6 +- builder.go | 10 +-- builder_client.go | 34 +++++----- buildfile.go | 14 ++--- buildfile_test.go | 6 +- commands.go | 62 +++++++++--------- container.go | 60 +++++++++--------- container_test.go | 68 ++++++++++---------- contrib/crashTest.go | 6 +- docker/docker.go | 4 +- graph.go | 42 ++++++------- graph_test.go | 22 +++---- image.go | 32 +++++----- lxc_template.go | 2 +- network.go | 4 +- network_test.go | 2 +- registry/registry.go | 36 +++++------ runtime.go | 30 ++++----- runtime_test.go | 50 +++++++-------- server.go | 116 +++++++++++++++++----------------- server_test.go | 4 +- tags.go | 26 ++++---- utils/utils.go | 12 ++-- 26 files changed, 451 insertions(+), 451 deletions(-) diff --git a/api.go b/api.go index 7666b79a5f..5a9bdbbe23 100644 --- a/api.go +++ b/api.go @@ -13,7 +13,7 @@ import ( "strings" ) -const API_VERSION = 1.1 +const APIVERSION = 1.1 func hijackServer(w http.ResponseWriter) (io.ReadCloser, io.Writer, error) { conn, _, err := w.(http.Hijacker).Hijack() @@ -52,7 +52,7 @@ func httpError(w http.ResponseWriter, err error) { } } -func writeJson(w http.ResponseWriter, b []byte) { +func writeJSON(w http.ResponseWriter, b []byte) { w.Header().Set("Content-Type", "application/json") w.Write(b) } @@ -82,7 +82,7 @@ func getAuth(srv *Server, version float64, w http.ResponseWriter, r *http.Reques if err != nil { return err } - writeJson(w, b) + writeJSON(w, b) return nil } @@ -111,11 +111,11 @@ func postAuth(srv *Server, version float64, w http.ResponseWriter, r *http.Reque } if status != "" { - b, err := json.Marshal(&ApiAuth{Status: status}) + b, err := json.Marshal(&APIAuth{Status: status}) if err != nil { return err } - writeJson(w, b) + writeJSON(w, b) return nil } w.WriteHeader(http.StatusNoContent) @@ -128,7 +128,7 @@ func getVersion(srv *Server, version float64, w http.ResponseWriter, r *http.Req if err != nil { return err } - writeJson(w, b) + writeJSON(w, b) return nil } @@ -157,7 +157,7 @@ func getContainersExport(srv *Server, version float64, w http.ResponseWriter, r return nil } -func getImagesJson(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func getImagesJSON(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if err := parseForm(r); err != nil { return err } @@ -176,7 +176,7 @@ func getImagesJson(srv *Server, version float64, w http.ResponseWriter, r *http. if err != nil { return err } - writeJson(w, b) + writeJSON(w, b) return nil } @@ -193,7 +193,7 @@ func getInfo(srv *Server, version float64, w http.ResponseWriter, r *http.Reques if err != nil { return err } - writeJson(w, b) + writeJSON(w, b) return nil } @@ -210,7 +210,7 @@ func getImagesHistory(srv *Server, version float64, w http.ResponseWriter, r *ht if err != nil { return err } - writeJson(w, b) + writeJSON(w, b) return nil } @@ -227,11 +227,11 @@ func getContainersChanges(srv *Server, version float64, w http.ResponseWriter, r if err != nil { return err } - writeJson(w, b) + writeJSON(w, b) return nil } -func getContainersJson(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func getContainersJSON(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if err := parseForm(r); err != nil { return err } @@ -251,7 +251,7 @@ func getContainersJson(srv *Server, version float64, w http.ResponseWriter, r *h if err != nil { return err } - writeJson(w, b) + writeJSON(w, b) return nil } @@ -294,12 +294,12 @@ func postCommit(srv *Server, version float64, w http.ResponseWriter, r *http.Req if err != nil { return err } - b, err := json.Marshal(&ApiId{id}) + b, err := json.Marshal(&APIID{id}) if err != nil { return err } w.WriteHeader(http.StatusCreated) - writeJson(w, b) + writeJSON(w, b) return nil } @@ -353,7 +353,7 @@ func getImagesSearch(srv *Server, version float64, w http.ResponseWriter, r *htt if err != nil { return err } - writeJson(w, b) + writeJSON(w, b) return nil } @@ -372,18 +372,18 @@ func postImagesInsert(srv *Server, version float64, w http.ResponseWriter, r *ht w.Header().Set("Content-Type", "application/json") } sf := utils.NewStreamFormatter(version > 1.0) - imgId, err := srv.ImageInsert(name, url, path, w, sf) + imgID, err := srv.ImageInsert(name, url, path, w, sf) if err != nil { if sf.Used() { w.Write(sf.FormatError(err)) return nil } } - b, err := json.Marshal(&ApiId{Id: imgId}) + b, err := json.Marshal(&APIID{ID: imgID}) if err != nil { return err } - writeJson(w, b) + writeJSON(w, b) return nil } @@ -421,8 +421,8 @@ func postContainersCreate(srv *Server, version float64, w http.ResponseWriter, r return err } - out := &ApiRun{ - Id: id, + out := &APIRun{ + ID: id, } if config.Memory > 0 && !srv.runtime.capabilities.MemoryLimit { log.Println("WARNING: Your kernel does not support memory limit capabilities. Limitation discarded.") @@ -437,7 +437,7 @@ func postContainersCreate(srv *Server, version float64, w http.ResponseWriter, r return err } w.WriteHeader(http.StatusCreated) - writeJson(w, b) + writeJSON(w, b) return nil } @@ -534,11 +534,11 @@ func postContainersWait(srv *Server, version float64, w http.ResponseWriter, r * if err != nil { return err } - b, err := json.Marshal(&ApiWait{StatusCode: status}) + b, err := json.Marshal(&APIWait{StatusCode: status}) if err != nil { return err } - writeJson(w, b) + writeJSON(w, b) return nil } @@ -625,7 +625,7 @@ func getContainersByName(srv *Server, version float64, w http.ResponseWriter, r if err != nil { return err } - writeJson(w, b) + writeJSON(w, b) return nil } @@ -643,17 +643,17 @@ func getImagesByName(srv *Server, version float64, w http.ResponseWriter, r *htt if err != nil { return err } - writeJson(w, b) + writeJSON(w, b) return nil } func postImagesGetCache(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { - apiConfig := &ApiImageConfig{} + apiConfig := &APIImageConfig{} if err := json.NewDecoder(r.Body).Decode(apiConfig); err != nil { return err } - image, err := srv.ImageGetCached(apiConfig.Id, apiConfig.Config) + image, err := srv.ImageGetCached(apiConfig.ID, apiConfig.Config) if err != nil { return err } @@ -661,12 +661,12 @@ func postImagesGetCache(srv *Server, version float64, w http.ResponseWriter, r * w.WriteHeader(http.StatusNotFound) return nil } - apiId := &ApiId{Id: image.Id} - b, err := json.Marshal(apiId) + apiID := &APIID{ID: image.ID} + b, err := json.Marshal(apiID) if err != nil { return err } - writeJson(w, b) + writeJSON(w, b) return nil } @@ -712,13 +712,13 @@ func ListenAndServe(addr string, srv *Server, logging bool) error { "/auth": getAuth, "/version": getVersion, "/info": getInfo, - "/images/json": getImagesJson, + "/images/json": getImagesJSON, "/images/viz": getImagesViz, "/images/search": getImagesSearch, "/images/{name:.*}/history": getImagesHistory, "/images/{name:.*}/json": getImagesByName, - "/containers/ps": getContainersJson, - "/containers/json": getContainersJson, + "/containers/ps": getContainersJSON, + "/containers/json": getContainersJSON, "/containers/{name:.*}/export": getContainersExport, "/containers/{name:.*}/changes": getContainersChanges, "/containers/{name:.*}/json": getContainersByName, @@ -767,9 +767,9 @@ func ListenAndServe(addr string, srv *Server, logging bool) error { } version, err := strconv.ParseFloat(mux.Vars(r)["version"], 64) if err != nil { - version = API_VERSION + version = APIVERSION } - if version == 0 || version > API_VERSION { + if version == 0 || version > APIVERSION { w.WriteHeader(http.StatusNotFound) return } diff --git a/api_params.go b/api_params.go index e18238b735..b8596d854b 100644 --- a/api_params.go +++ b/api_params.go @@ -1,19 +1,19 @@ package docker -type ApiHistory struct { - Id string +type APIHistory struct { + ID string `json:"Id"` Created int64 CreatedBy string `json:",omitempty"` } -type ApiImages struct { +type APIImages struct { Repository string `json:",omitempty"` Tag string `json:",omitempty"` - Id string + ID string `json:"Id"` Created int64 } -type ApiInfo struct { +type APIInfo struct { Debug bool Containers int Images int @@ -23,8 +23,8 @@ type ApiInfo struct { SwapLimit bool `json:",omitempty"` } -type ApiContainers struct { - Id string +type APIContainers struct { + ID string `json:"Id"` Image string Command string Created int64 @@ -32,39 +32,39 @@ type ApiContainers struct { Ports string } -type ApiSearch struct { +type APISearch struct { Name string Description string } -type ApiId struct { - Id string +type APIID struct { + ID string `json:"Id"` } -type ApiRun struct { - Id string +type APIRun struct { + ID string `json:"Id"` Warnings []string `json:",omitempty"` } -type ApiPort struct { +type APIPort struct { Port string } -type ApiVersion struct { +type APIVersion struct { Version string GitCommit string `json:",omitempty"` GoVersion string `json:",omitempty"` } -type ApiWait struct { +type APIWait struct { StatusCode int } -type ApiAuth struct { +type APIAuth struct { Status string } -type ApiImageConfig struct { - Id string +type APIImageConfig struct { + ID string `json:"Id"` *Config } diff --git a/api_test.go b/api_test.go index 9121167e10..e122786b86 100644 --- a/api_test.go +++ b/api_test.go @@ -37,17 +37,17 @@ func TestGetAuth(t *testing.T) { Email: "utest@yopmail.com", } - authConfigJson, err := json.Marshal(authConfig) + authConfigJSON, err := json.Marshal(authConfig) if err != nil { t.Fatal(err) } - req, err := http.NewRequest("POST", "/auth", bytes.NewReader(authConfigJson)) + req, err := http.NewRequest("POST", "/auth", bytes.NewReader(authConfigJSON)) if err != nil { t.Fatal(err) } - if err := postAuth(srv, API_VERSION, r, req, nil); err != nil { + if err := postAuth(srv, APIVERSION, r, req, nil); err != nil { t.Fatal(err) } @@ -73,11 +73,11 @@ func TestGetVersion(t *testing.T) { r := httptest.NewRecorder() - if err := getVersion(srv, API_VERSION, r, nil, nil); err != nil { + if err := getVersion(srv, APIVERSION, r, nil, nil); err != nil { t.Fatal(err) } - v := &ApiVersion{} + v := &APIVersion{} if err = json.Unmarshal(r.Body.Bytes(), v); err != nil { t.Fatal(err) } @@ -97,11 +97,11 @@ func TestGetInfo(t *testing.T) { r := httptest.NewRecorder() - if err := getInfo(srv, API_VERSION, r, nil, nil); err != nil { + if err := getInfo(srv, APIVERSION, r, nil, nil); err != nil { t.Fatal(err) } - infos := &ApiInfo{} + infos := &APIInfo{} err = json.Unmarshal(r.Body.Bytes(), infos) if err != nil { t.Fatal(err) @@ -111,7 +111,7 @@ func TestGetInfo(t *testing.T) { } } -func TestGetImagesJson(t *testing.T) { +func TestGetImagesJSON(t *testing.T) { runtime, err := newTestRuntime() if err != nil { t.Fatal(err) @@ -128,11 +128,11 @@ func TestGetImagesJson(t *testing.T) { r := httptest.NewRecorder() - if err := getImagesJson(srv, API_VERSION, r, req, nil); err != nil { + if err := getImagesJSON(srv, APIVERSION, r, req, nil); err != nil { t.Fatal(err) } - images := []ApiImages{} + images := []APIImages{} if err := json.Unmarshal(r.Body.Bytes(), &images); err != nil { t.Fatal(err) } @@ -153,11 +153,11 @@ func TestGetImagesJson(t *testing.T) { t.Fatal(err) } - if err := getImagesJson(srv, API_VERSION, r2, req2, nil); err != nil { + if err := getImagesJSON(srv, APIVERSION, r2, req2, nil); err != nil { t.Fatal(err) } - images2 := []ApiImages{} + images2 := []APIImages{} if err := json.Unmarshal(r2.Body.Bytes(), &images2); err != nil { t.Fatal(err) } @@ -166,8 +166,8 @@ func TestGetImagesJson(t *testing.T) { t.Errorf("Excepted 1 image, %d found", len(images2)) } - if images2[0].Id != GetTestImage(runtime).Id { - t.Errorf("Retrieved image Id differs, expected %s, received %s", GetTestImage(runtime).Id, images2[0].Id) + if images2[0].ID != GetTestImage(runtime).ID { + t.Errorf("Retrieved image Id differs, expected %s, received %s", GetTestImage(runtime).ID, images2[0].ID) } r3 := httptest.NewRecorder() @@ -178,11 +178,11 @@ func TestGetImagesJson(t *testing.T) { t.Fatal(err) } - if err := getImagesJson(srv, API_VERSION, r3, req3, nil); err != nil { + if err := getImagesJSON(srv, APIVERSION, r3, req3, nil); err != nil { t.Fatal(err) } - images3 := []ApiImages{} + images3 := []APIImages{} if err := json.Unmarshal(r3.Body.Bytes(), &images3); err != nil { t.Fatal(err) } @@ -199,7 +199,7 @@ func TestGetImagesJson(t *testing.T) { t.Fatal(err) } - err = getImagesJson(srv, API_VERSION, r4, req4, nil) + err = getImagesJSON(srv, APIVERSION, r4, req4, nil) if err == nil { t.Fatalf("Error expected, received none") } @@ -220,7 +220,7 @@ func TestGetImagesViz(t *testing.T) { srv := &Server{runtime: runtime} r := httptest.NewRecorder() - if err := getImagesViz(srv, API_VERSION, r, nil, nil); err != nil { + if err := getImagesViz(srv, APIVERSION, r, nil, nil); err != nil { t.Fatal(err) } @@ -256,11 +256,11 @@ func TestGetImagesSearch(t *testing.T) { t.Fatal(err) } - if err := getImagesSearch(srv, API_VERSION, r, req, nil); err != nil { + if err := getImagesSearch(srv, APIVERSION, r, req, nil); err != nil { t.Fatal(err) } - results := []ApiSearch{} + results := []APISearch{} if err := json.Unmarshal(r.Body.Bytes(), &results); err != nil { t.Fatal(err) } @@ -280,11 +280,11 @@ func TestGetImagesHistory(t *testing.T) { r := httptest.NewRecorder() - if err := getImagesHistory(srv, API_VERSION, r, nil, map[string]string{"name": unitTestImageName}); err != nil { + if err := getImagesHistory(srv, APIVERSION, r, nil, map[string]string{"name": unitTestImageName}); err != nil { t.Fatal(err) } - history := []ApiHistory{} + history := []APIHistory{} if err := json.Unmarshal(r.Body.Bytes(), &history); err != nil { t.Fatal(err) } @@ -303,7 +303,7 @@ func TestGetImagesByName(t *testing.T) { srv := &Server{runtime: runtime} r := httptest.NewRecorder() - if err := getImagesByName(srv, API_VERSION, r, nil, map[string]string{"name": unitTestImageName}); err != nil { + if err := getImagesByName(srv, APIVERSION, r, nil, map[string]string{"name": unitTestImageName}); err != nil { t.Fatal(err) } @@ -311,12 +311,12 @@ func TestGetImagesByName(t *testing.T) { if err := json.Unmarshal(r.Body.Bytes(), img); err != nil { t.Fatal(err) } - if img.Id != GetTestImage(runtime).Id || img.Comment != "Imported from http://get.docker.io/images/busybox" { + if img.ID != GetTestImage(runtime).ID || img.Comment != "Imported from http://get.docker.io/images/busybox" { t.Errorf("Error inspecting image") } } -func TestGetContainersJson(t *testing.T) { +func TestGetContainersJSON(t *testing.T) { runtime, err := newTestRuntime() if err != nil { t.Fatal(err) @@ -326,7 +326,7 @@ func TestGetContainersJson(t *testing.T) { srv := &Server{runtime: runtime} container, err := NewBuilder(runtime).Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"echo", "test"}, }) if err != nil { @@ -340,18 +340,18 @@ func TestGetContainersJson(t *testing.T) { } r := httptest.NewRecorder() - if err := getContainersJson(srv, API_VERSION, r, req, nil); err != nil { + if err := getContainersJSON(srv, APIVERSION, r, req, nil); err != nil { t.Fatal(err) } - containers := []ApiContainers{} + containers := []APIContainers{} if err := json.Unmarshal(r.Body.Bytes(), &containers); err != nil { t.Fatal(err) } if len(containers) != 1 { t.Fatalf("Excepted %d container, %d found", 1, len(containers)) } - if containers[0].Id != container.Id { - t.Fatalf("Container ID mismatch. Expected: %s, received: %s\n", container.Id, containers[0].Id) + if containers[0].ID != container.ID { + t.Fatalf("Container ID mismatch. Expected: %s, received: %s\n", container.ID, containers[0].ID) } } @@ -369,7 +369,7 @@ func TestGetContainersExport(t *testing.T) { // Create a container and remove a file container, err := builder.Create( &Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"touch", "/test"}, }, ) @@ -383,7 +383,7 @@ func TestGetContainersExport(t *testing.T) { } r := httptest.NewRecorder() - if err = getContainersExport(srv, API_VERSION, r, nil, map[string]string{"name": container.Id}); err != nil { + if err = getContainersExport(srv, APIVERSION, r, nil, map[string]string{"name": container.ID}); err != nil { t.Fatal(err) } @@ -424,7 +424,7 @@ func TestGetContainersChanges(t *testing.T) { // Create a container and remove a file container, err := builder.Create( &Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/rm", "/etc/passwd"}, }, ) @@ -438,7 +438,7 @@ func TestGetContainersChanges(t *testing.T) { } r := httptest.NewRecorder() - if err := getContainersChanges(srv, API_VERSION, r, nil, map[string]string{"name": container.Id}); err != nil { + if err := getContainersChanges(srv, APIVERSION, r, nil, map[string]string{"name": container.ID}); err != nil { t.Fatal(err) } changes := []Change{} @@ -472,7 +472,7 @@ func TestGetContainersByName(t *testing.T) { // Create a container and remove a file container, err := builder.Create( &Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"echo", "test"}, }, ) @@ -482,15 +482,15 @@ func TestGetContainersByName(t *testing.T) { defer runtime.Destroy(container) r := httptest.NewRecorder() - if err := getContainersByName(srv, API_VERSION, r, nil, map[string]string{"name": container.Id}); err != nil { + if err := getContainersByName(srv, APIVERSION, r, nil, map[string]string{"name": container.ID}); err != nil { t.Fatal(err) } outContainer := &Container{} if err := json.Unmarshal(r.Body.Bytes(), outContainer); err != nil { t.Fatal(err) } - if outContainer.Id != container.Id { - t.Fatalf("Wrong containers retrieved. Expected %s, recieved %s", container.Id, outContainer.Id) + if outContainer.ID != container.ID { + t.Fatalf("Wrong containers retrieved. Expected %s, recieved %s", container.ID, outContainer.ID) } } @@ -514,7 +514,7 @@ func TestPostAuth(t *testing.T) { auth.SaveConfig(runtime.root, authStr, config.Email) r := httptest.NewRecorder() - if err := getAuth(srv, API_VERSION, r, nil, nil); err != nil { + if err := getAuth(srv, APIVERSION, r, nil, nil); err != nil { t.Fatal(err) } @@ -542,7 +542,7 @@ func TestPostCommit(t *testing.T) { // Create a container and remove a file container, err := builder.Create( &Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"touch", "/test"}, }, ) @@ -555,24 +555,24 @@ func TestPostCommit(t *testing.T) { t.Fatal(err) } - req, err := http.NewRequest("POST", "/commit?repo=testrepo&testtag=tag&container="+container.Id, bytes.NewReader([]byte{})) + req, err := http.NewRequest("POST", "/commit?repo=testrepo&testtag=tag&container="+container.ID, bytes.NewReader([]byte{})) if err != nil { t.Fatal(err) } r := httptest.NewRecorder() - if err := postCommit(srv, API_VERSION, r, req, nil); err != nil { + if err := postCommit(srv, APIVERSION, r, req, nil); err != nil { t.Fatal(err) } if r.Code != http.StatusCreated { t.Fatalf("%d Created expected, received %d\n", http.StatusCreated, r.Code) } - apiId := &ApiId{} - if err := json.Unmarshal(r.Body.Bytes(), apiId); err != nil { + apiID := &APIID{} + if err := json.Unmarshal(r.Body.Bytes(), apiID); err != nil { t.Fatal(err) } - if _, err := runtime.graph.Get(apiId.Id); err != nil { + if _, err := runtime.graph.Get(apiID.ID); err != nil { t.Fatalf("The image has not been commited") } } @@ -715,7 +715,7 @@ func TestPostImagesInsert(t *testing.T) { // t.Fatalf("The test file has not been found") // } - // if err := srv.runtime.graph.Delete(img.Id); err != nil { + // if err := srv.runtime.graph.Delete(img.ID); err != nil { // t.Fatal(err) // } } @@ -824,8 +824,8 @@ func TestPostContainersCreate(t *testing.T) { srv := &Server{runtime: runtime} - configJson, err := json.Marshal(&Config{ - Image: GetTestImage(runtime).Id, + configJSON, err := json.Marshal(&Config{ + Image: GetTestImage(runtime).ID, Memory: 33554432, Cmd: []string{"touch", "/test"}, }) @@ -833,25 +833,25 @@ func TestPostContainersCreate(t *testing.T) { t.Fatal(err) } - req, err := http.NewRequest("POST", "/containers/create", bytes.NewReader(configJson)) + req, err := http.NewRequest("POST", "/containers/create", bytes.NewReader(configJSON)) if err != nil { t.Fatal(err) } r := httptest.NewRecorder() - if err := postContainersCreate(srv, API_VERSION, r, req, nil); err != nil { + if err := postContainersCreate(srv, APIVERSION, r, req, nil); err != nil { t.Fatal(err) } if r.Code != http.StatusCreated { t.Fatalf("%d Created expected, received %d\n", http.StatusCreated, r.Code) } - apiRun := &ApiRun{} + apiRun := &APIRun{} if err := json.Unmarshal(r.Body.Bytes(), apiRun); err != nil { t.Fatal(err) } - container := srv.runtime.Get(apiRun.Id) + container := srv.runtime.Get(apiRun.ID) if container == nil { t.Fatalf("Container not created") } @@ -880,7 +880,7 @@ func TestPostContainersKill(t *testing.T) { container, err := NewBuilder(runtime).Create( &Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/cat"}, OpenStdin: true, }, @@ -902,7 +902,7 @@ func TestPostContainersKill(t *testing.T) { } r := httptest.NewRecorder() - if err := postContainersKill(srv, API_VERSION, r, nil, map[string]string{"name": container.Id}); err != nil { + if err := postContainersKill(srv, APIVERSION, r, nil, map[string]string{"name": container.ID}); err != nil { t.Fatal(err) } if r.Code != http.StatusNoContent { @@ -924,7 +924,7 @@ func TestPostContainersRestart(t *testing.T) { container, err := NewBuilder(runtime).Create( &Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/cat"}, OpenStdin: true, }, @@ -945,12 +945,12 @@ func TestPostContainersRestart(t *testing.T) { t.Errorf("Container should be running") } - req, err := http.NewRequest("POST", "/containers/"+container.Id+"/restart?t=1", bytes.NewReader([]byte{})) + req, err := http.NewRequest("POST", "/containers/"+container.ID+"/restart?t=1", bytes.NewReader([]byte{})) if err != nil { t.Fatal(err) } r := httptest.NewRecorder() - if err := postContainersRestart(srv, API_VERSION, r, req, map[string]string{"name": container.Id}); err != nil { + if err := postContainersRestart(srv, APIVERSION, r, req, map[string]string{"name": container.ID}); err != nil { t.Fatal(err) } if r.Code != http.StatusNoContent { @@ -980,7 +980,7 @@ func TestPostContainersStart(t *testing.T) { container, err := NewBuilder(runtime).Create( &Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/cat"}, OpenStdin: true, }, @@ -991,7 +991,7 @@ func TestPostContainersStart(t *testing.T) { defer runtime.Destroy(container) r := httptest.NewRecorder() - if err := postContainersStart(srv, API_VERSION, r, nil, map[string]string{"name": container.Id}); err != nil { + if err := postContainersStart(srv, APIVERSION, r, nil, map[string]string{"name": container.ID}); err != nil { t.Fatal(err) } if r.Code != http.StatusNoContent { @@ -1006,7 +1006,7 @@ func TestPostContainersStart(t *testing.T) { } r = httptest.NewRecorder() - if err = postContainersStart(srv, API_VERSION, r, nil, map[string]string{"name": container.Id}); err == nil { + if err = postContainersStart(srv, APIVERSION, r, nil, map[string]string{"name": container.ID}); err == nil { t.Fatalf("A running containter should be able to be started") } @@ -1026,7 +1026,7 @@ func TestPostContainersStop(t *testing.T) { container, err := NewBuilder(runtime).Create( &Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/cat"}, OpenStdin: true, }, @@ -1048,12 +1048,12 @@ func TestPostContainersStop(t *testing.T) { } // Note: as it is a POST request, it requires a body. - req, err := http.NewRequest("POST", "/containers/"+container.Id+"/stop?t=1", bytes.NewReader([]byte{})) + req, err := http.NewRequest("POST", "/containers/"+container.ID+"/stop?t=1", bytes.NewReader([]byte{})) if err != nil { t.Fatal(err) } r := httptest.NewRecorder() - if err := postContainersStop(srv, API_VERSION, r, req, map[string]string{"name": container.Id}); err != nil { + if err := postContainersStop(srv, APIVERSION, r, req, map[string]string{"name": container.ID}); err != nil { t.Fatal(err) } if r.Code != http.StatusNoContent { @@ -1075,7 +1075,7 @@ func TestPostContainersWait(t *testing.T) { container, err := NewBuilder(runtime).Create( &Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/sleep", "1"}, OpenStdin: true, }, @@ -1091,10 +1091,10 @@ func TestPostContainersWait(t *testing.T) { setTimeout(t, "Wait timed out", 3*time.Second, func() { r := httptest.NewRecorder() - if err := postContainersWait(srv, API_VERSION, r, nil, map[string]string{"name": container.Id}); err != nil { + if err := postContainersWait(srv, APIVERSION, r, nil, map[string]string{"name": container.ID}); err != nil { t.Fatal(err) } - apiWait := &ApiWait{} + apiWait := &APIWait{} if err := json.Unmarshal(r.Body.Bytes(), apiWait); err != nil { t.Fatal(err) } @@ -1119,7 +1119,7 @@ func TestPostContainersAttach(t *testing.T) { container, err := NewBuilder(runtime).Create( &Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/cat"}, OpenStdin: true, }, @@ -1148,12 +1148,12 @@ func TestPostContainersAttach(t *testing.T) { out: stdoutPipe, } - req, err := http.NewRequest("POST", "/containers/"+container.Id+"/attach?stream=1&stdin=1&stdout=1&stderr=1", bytes.NewReader([]byte{})) + req, err := http.NewRequest("POST", "/containers/"+container.ID+"/attach?stream=1&stdin=1&stdout=1&stderr=1", bytes.NewReader([]byte{})) if err != nil { t.Fatal(err) } - if err := postContainersAttach(srv, API_VERSION, r, req, map[string]string{"name": container.Id}); err != nil { + if err := postContainersAttach(srv, APIVERSION, r, req, map[string]string{"name": container.ID}); err != nil { t.Fatal(err) } }() @@ -1206,7 +1206,7 @@ func TestDeleteContainers(t *testing.T) { srv := &Server{runtime: runtime} container, err := NewBuilder(runtime).Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"touch", "/test"}, }) if err != nil { @@ -1218,19 +1218,19 @@ func TestDeleteContainers(t *testing.T) { t.Fatal(err) } - req, err := http.NewRequest("DELETE", "/containers/"+container.Id, nil) + req, err := http.NewRequest("DELETE", "/containers/"+container.ID, nil) if err != nil { t.Fatal(err) } r := httptest.NewRecorder() - if err := deleteContainers(srv, API_VERSION, r, req, map[string]string{"name": container.Id}); err != nil { + if err := deleteContainers(srv, APIVERSION, r, req, map[string]string{"name": container.ID}); err != nil { t.Fatal(err) } if r.Code != http.StatusNoContent { t.Fatalf("%d NO CONTENT expected, received %d\n", http.StatusNoContent, r.Code) } - if c := runtime.Get(container.Id); c != nil { + if c := runtime.Get(container.ID); c != nil { t.Fatalf("The container as not been deleted") } diff --git a/auth/auth.go b/auth/auth.go index a57d019dce..72cf36efa5 100644 --- a/auth/auth.go +++ b/auth/auth.go @@ -16,9 +16,9 @@ import ( const CONFIGFILE = ".dockercfg" // the registry server we want to login against -const INDEX_SERVER = "https://index.docker.io/v1" +const INDEXSERVER = "https://index.docker.io/v1" -//const INDEX_SERVER = "http://indexstaging-docker.dotcloud.com/" +//const INDEXSERVER = "http://indexstaging-docker.dotcloud.com/" var ( ErrConfigFileMissing = errors.New("The Auth config file is missing") @@ -44,7 +44,7 @@ func IndexServerAddress() string { if os.Getenv("DOCKER_INDEX_URL") != "" { return os.Getenv("DOCKER_INDEX_URL") + "/v1" } - return INDEX_SERVER + return INDEXSERVER } // create a base64 encoded auth string to store in config diff --git a/builder.go b/builder.go index 5f56f65d05..808b7efcab 100644 --- a/builder.go +++ b/builder.go @@ -40,7 +40,7 @@ func (builder *Builder) Create(config *Config) (*Container, error) { } // Generate id - id := GenerateId() + id := GenerateID() // Generate default hostname // FIXME: the lxc template no longer needs to set a default hostname if config.Hostname == "" { @@ -49,17 +49,17 @@ func (builder *Builder) Create(config *Config) (*Container, error) { container := &Container{ // FIXME: we should generate the ID here instead of receiving it as an argument - Id: id, + ID: id, Created: time.Now(), Path: config.Cmd[0], Args: config.Cmd[1:], //FIXME: de-duplicate from config Config: config, - Image: img.Id, // Always use the resolved image id + Image: img.ID, // Always use the resolved image id NetworkSettings: &NetworkSettings{}, // FIXME: do we need to store this in the container? SysInitPath: sysInitPath, } - container.root = builder.runtime.containerRoot(container.Id) + container.root = builder.runtime.containerRoot(container.ID) // Step 1: create the container directory. // This doubles as a barrier to avoid race conditions. if err := os.Mkdir(container.root, 0700); err != nil { @@ -110,7 +110,7 @@ func (builder *Builder) Commit(container *Container, repository, tag, comment, a } // Register the image if needed if repository != "" { - if err := builder.repositories.Set(repository, tag, img.Id, true); err != nil { + if err := builder.repositories.Set(repository, tag, img.ID, true); err != nil { return img, err } } diff --git a/builder_client.go b/builder_client.go index 4ea2a9f95f..dc9528ff41 100644 --- a/builder_client.go +++ b/builder_client.go @@ -63,11 +63,11 @@ func (b *builderClient) CmdFrom(name string) error { return err } - img := &ApiId{} + img := &APIID{} if err := json.Unmarshal(obj, img); err != nil { return err } - b.image = img.Id + b.image = img.ID utils.Debugf("Using image %s", b.image) return nil } @@ -91,19 +91,19 @@ func (b *builderClient) CmdRun(args string) error { b.config.Cmd = nil MergeConfig(b.config, config) - body, statusCode, err := b.cli.call("POST", "/images/getCache", &ApiImageConfig{Id: b.image, Config: b.config}) + body, statusCode, err := b.cli.call("POST", "/images/getCache", &APIImageConfig{ID: b.image, Config: b.config}) if err != nil { if statusCode != 404 { return err } } if statusCode != 404 { - apiId := &ApiId{} - if err := json.Unmarshal(body, apiId); err != nil { + apiID := &APIID{} + if err := json.Unmarshal(body, apiID); err != nil { return err } utils.Debugf("Use cached version") - b.image = apiId.Id + b.image = apiID.ID return nil } cid, err := b.run() @@ -163,7 +163,7 @@ func (b *builderClient) CmdInsert(args string) error { // return err // } - // apiId := &ApiId{} + // apiId := &APIId{} // if err := json.Unmarshal(body, apiId); err != nil { // return err // } @@ -182,7 +182,7 @@ func (b *builderClient) run() (string, error) { return "", err } - apiRun := &ApiRun{} + apiRun := &APIRun{} if err := json.Unmarshal(body, apiRun); err != nil { return "", err } @@ -191,18 +191,18 @@ func (b *builderClient) run() (string, error) { } //start the container - _, _, err = b.cli.call("POST", "/containers/"+apiRun.Id+"/start", nil) + _, _, err = b.cli.call("POST", "/containers/"+apiRun.ID+"/start", nil) if err != nil { return "", err } - b.tmpContainers[apiRun.Id] = struct{}{} + b.tmpContainers[apiRun.ID] = struct{}{} // Wait for it to finish - body, _, err = b.cli.call("POST", "/containers/"+apiRun.Id+"/wait", nil) + body, _, err = b.cli.call("POST", "/containers/"+apiRun.ID+"/wait", nil) if err != nil { return "", err } - apiWait := &ApiWait{} + apiWait := &APIWait{} if err := json.Unmarshal(body, apiWait); err != nil { return "", err } @@ -210,7 +210,7 @@ func (b *builderClient) run() (string, error) { return "", fmt.Errorf("The command %v returned a non-zero code: %d", b.config.Cmd, apiWait.StatusCode) } - return apiRun.Id, nil + return apiRun.ID, nil } func (b *builderClient) commit(id string) error { @@ -239,12 +239,12 @@ func (b *builderClient) commit(id string) error { if err != nil { return err } - apiId := &ApiId{} - if err := json.Unmarshal(body, apiId); err != nil { + apiID := &APIID{} + if err := json.Unmarshal(body, apiID); err != nil { return err } - b.tmpImages[apiId.Id] = struct{}{} - b.image = apiId.Id + b.tmpImages[apiID.ID] = struct{}{} + b.image = apiID.ID b.needCommit = false return nil } diff --git a/buildfile.go b/buildfile.go index fb5c1c9d5c..5ea5607fc7 100644 --- a/buildfile.go +++ b/buildfile.go @@ -73,7 +73,7 @@ func (b *buildFile) CmdFrom(name string) error { return err } } - b.image = image.Id + b.image = image.ID b.config = &Config{} return nil } @@ -102,7 +102,7 @@ func (b *buildFile) CmdRun(args string) error { return err } else if cache != nil { utils.Debugf("[BUILDER] Use cached version") - b.image = cache.Id + b.image = cache.ID return nil } else { utils.Debugf("[BUILDER] Cache miss") @@ -238,7 +238,7 @@ func (b *buildFile) run() (string, error) { if err != nil { return "", err } - b.tmpContainers[c.Id] = struct{}{} + b.tmpContainers[c.ID] = struct{}{} //start the container if err := c.Start(); err != nil { @@ -250,7 +250,7 @@ func (b *buildFile) run() (string, error) { return "", fmt.Errorf("The command %v returned a non-zero code: %d", b.config.Cmd, ret) } - return c.Id, nil + return c.ID, nil } // Commit the container with the autorun command @@ -266,7 +266,7 @@ func (b *buildFile) commit(id string, autoCmd []string, comment string) error { return err } else if cache != nil { utils.Debugf("[BUILDER] Use cached version") - b.image = cache.Id + b.image = cache.ID return nil } else { utils.Debugf("[BUILDER] Cache miss") @@ -292,8 +292,8 @@ func (b *buildFile) commit(id string, autoCmd []string, comment string) error { if err != nil { return err } - b.tmpImages[image.Id] = struct{}{} - b.image = image.Id + b.tmpImages[image.ID] = struct{}{} + b.image = image.ID return nil } diff --git a/buildfile_test.go b/buildfile_test.go index b6f4e62ae9..ffbcdbbddc 100644 --- a/buildfile_test.go +++ b/buildfile_test.go @@ -26,7 +26,7 @@ func TestBuild(t *testing.T) { buildfile := NewBuildFile(srv, &utils.NopWriter{}) - imgId, err := buildfile.Build(strings.NewReader(Dockerfile), nil) + imgID, err := buildfile.Build(strings.NewReader(Dockerfile), nil) if err != nil { t.Fatal(err) } @@ -34,7 +34,7 @@ func TestBuild(t *testing.T) { builder := NewBuilder(runtime) container, err := builder.Create( &Config{ - Image: imgId, + Image: imgID, Cmd: []string{"cat", "/tmp/passwd"}, }, ) @@ -53,7 +53,7 @@ func TestBuild(t *testing.T) { container2, err := builder.Create( &Config{ - Image: imgId, + Image: imgID, Cmd: []string{"ls", "-d", "/var/run/sshd"}, }, ) diff --git a/commands.go b/commands.go index 943b2198c1..f12e9bcb11 100644 --- a/commands.go +++ b/commands.go @@ -31,7 +31,7 @@ import ( const VERSION = "0.4.0" var ( - GIT_COMMIT string + GITCOMMIT string ) func (cli *DockerCli) getMethod(name string) (reflect.Method, bool) { @@ -330,7 +330,7 @@ func (cli *DockerCli) CmdLogin(args ...string) error { return err } - var out2 ApiAuth + var out2 APIAuth err = json.Unmarshal(body, &out2) if err != nil { return err @@ -357,7 +357,7 @@ func (cli *DockerCli) CmdWait(args ...string) error { if err != nil { fmt.Printf("%s", err) } else { - var out ApiWait + var out APIWait err = json.Unmarshal(body, &out) if err != nil { return err @@ -385,7 +385,7 @@ func (cli *DockerCli) CmdVersion(args ...string) error { return err } - var out ApiVersion + var out APIVersion err = json.Unmarshal(body, &out) if err != nil { utils.Debugf("Error unmarshal: body: %s, err: %s\n", body, err) @@ -418,7 +418,7 @@ func (cli *DockerCli) CmdInfo(args ...string) error { return err } - var out ApiInfo + var out APIInfo if err := json.Unmarshal(body, &out); err != nil { return err } @@ -603,7 +603,7 @@ func (cli *DockerCli) CmdHistory(args ...string) error { return err } - var outs []ApiHistory + var outs []APIHistory err = json.Unmarshal(body, &outs) if err != nil { return err @@ -612,7 +612,7 @@ func (cli *DockerCli) CmdHistory(args ...string) error { fmt.Fprintln(w, "ID\tCREATED\tCREATED BY") for _, out := range outs { - fmt.Fprintf(w, "%s\t%s ago\t%s\n", out.Id, utils.HumanDuration(time.Now().Sub(time.Unix(out.Created, 0))), out.CreatedBy) + fmt.Fprintf(w, "%s\t%s ago\t%s\n", out.ID, utils.HumanDuration(time.Now().Sub(time.Unix(out.Created, 0))), out.CreatedBy) } w.Flush() return nil @@ -785,7 +785,7 @@ func (cli *DockerCli) CmdImages(args ...string) error { return err } - var outs []ApiImages + var outs []APIImages err = json.Unmarshal(body, &outs) if err != nil { return err @@ -807,16 +807,16 @@ func (cli *DockerCli) CmdImages(args ...string) error { if !*quiet { fmt.Fprintf(w, "%s\t%s\t", out.Repository, out.Tag) if *noTrunc { - fmt.Fprintf(w, "%s\t", out.Id) + fmt.Fprintf(w, "%s\t", out.ID) } else { - fmt.Fprintf(w, "%s\t", utils.TruncateId(out.Id)) + fmt.Fprintf(w, "%s\t", utils.TruncateID(out.ID)) } fmt.Fprintf(w, "%s ago\n", utils.HumanDuration(time.Now().Sub(time.Unix(out.Created, 0)))) } else { if *noTrunc { - fmt.Fprintln(w, out.Id) + fmt.Fprintln(w, out.ID) } else { - fmt.Fprintln(w, utils.TruncateId(out.Id)) + fmt.Fprintln(w, utils.TruncateID(out.ID)) } } } @@ -863,7 +863,7 @@ func (cli *DockerCli) CmdPs(args ...string) error { return err } - var outs []ApiContainers + var outs []APIContainers err = json.Unmarshal(body, &outs) if err != nil { return err @@ -876,15 +876,15 @@ func (cli *DockerCli) CmdPs(args ...string) error { for _, out := range outs { if !*quiet { if *noTrunc { - fmt.Fprintf(w, "%s\t%s\t%s\t%s ago\t%s\t%s\n", out.Id, out.Image, out.Command, utils.HumanDuration(time.Now().Sub(time.Unix(out.Created, 0))), out.Status, out.Ports) + fmt.Fprintf(w, "%s\t%s\t%s\t%s ago\t%s\t%s\n", out.ID, out.Image, out.Command, utils.HumanDuration(time.Now().Sub(time.Unix(out.Created, 0))), out.Status, out.Ports) } else { - fmt.Fprintf(w, "%s\t%s\t%s\t%s ago\t%s\t%s\n", utils.TruncateId(out.Id), out.Image, utils.Trunc(out.Command, 20), utils.HumanDuration(time.Now().Sub(time.Unix(out.Created, 0))), out.Status, out.Ports) + fmt.Fprintf(w, "%s\t%s\t%s\t%s ago\t%s\t%s\n", utils.TruncateID(out.ID), out.Image, utils.Trunc(out.Command, 20), utils.HumanDuration(time.Now().Sub(time.Unix(out.Created, 0))), out.Status, out.Ports) } } else { if *noTrunc { - fmt.Fprintln(w, out.Id) + fmt.Fprintln(w, out.ID) } else { - fmt.Fprintln(w, utils.TruncateId(out.Id)) + fmt.Fprintln(w, utils.TruncateID(out.ID)) } } } @@ -927,13 +927,13 @@ func (cli *DockerCli) CmdCommit(args ...string) error { return err } - apiId := &ApiId{} - err = json.Unmarshal(body, apiId) + apiID := &APIID{} + err = json.Unmarshal(body, apiID) if err != nil { return err } - fmt.Println(apiId.Id) + fmt.Println(apiID.ID) return nil } @@ -1070,7 +1070,7 @@ func (cli *DockerCli) CmdSearch(args ...string) error { return err } - outs := []ApiSearch{} + outs := []APISearch{} err = json.Unmarshal(body, &outs) if err != nil { return err @@ -1202,7 +1202,7 @@ func (cli *DockerCli) CmdRun(args ...string) error { return err } - out := &ApiRun{} + out := &APIRun{} err = json.Unmarshal(body, out) if err != nil { return err @@ -1223,18 +1223,18 @@ func (cli *DockerCli) CmdRun(args ...string) error { } //start the container - _, _, err = cli.call("POST", "/containers/"+out.Id+"/start", nil) + _, _, err = cli.call("POST", "/containers/"+out.ID+"/start", nil) if err != nil { return err } if connections > 0 { chErrors := make(chan error, connections) - cli.monitorTtySize(out.Id) + cli.monitorTtySize(out.ID) if splitStderr && config.AttachStderr { go func() { - chErrors <- cli.hijack("POST", "/containers/"+out.Id+"/attach?logs=1&stream=1&stderr=1", config.Tty, nil, os.Stderr) + chErrors <- cli.hijack("POST", "/containers/"+out.ID+"/attach?logs=1&stream=1&stderr=1", config.Tty, nil, os.Stderr) }() } @@ -1252,7 +1252,7 @@ func (cli *DockerCli) CmdRun(args ...string) error { v.Set("stderr", "1") } go func() { - chErrors <- cli.hijack("POST", "/containers/"+out.Id+"/attach?"+v.Encode(), config.Tty, os.Stdin, os.Stdout) + chErrors <- cli.hijack("POST", "/containers/"+out.ID+"/attach?"+v.Encode(), config.Tty, os.Stdin, os.Stdout) }() for connections > 0 { err := <-chErrors @@ -1263,7 +1263,7 @@ func (cli *DockerCli) CmdRun(args ...string) error { } } if !config.AttachStdout && !config.AttachStderr { - fmt.Println(out.Id) + fmt.Println(out.ID) } return nil } @@ -1312,7 +1312,7 @@ func (cli *DockerCli) call(method, path string, data interface{}) ([]byte, int, params = bytes.NewBuffer(buf) } - req, err := http.NewRequest(method, fmt.Sprintf("http://%s:%d/v%g%s", cli.host, cli.port, API_VERSION, path), params) + req, err := http.NewRequest(method, fmt.Sprintf("http://%s:%d/v%g%s", cli.host, cli.port, APIVERSION, path), params) if err != nil { return nil, -1, err } @@ -1344,7 +1344,7 @@ func (cli *DockerCli) stream(method, path string, in io.Reader, out io.Writer) e if (method == "POST" || method == "PUT") && in == nil { in = bytes.NewReader([]byte{}) } - req, err := http.NewRequest(method, fmt.Sprintf("http://%s:%d/v%g%s", cli.host, cli.port, API_VERSION, path), in) + req, err := http.NewRequest(method, fmt.Sprintf("http://%s:%d/v%g%s", cli.host, cli.port, APIVERSION, path), in) if err != nil { return err } @@ -1371,7 +1371,7 @@ func (cli *DockerCli) stream(method, path string, in io.Reader, out io.Writer) e if resp.Header.Get("Content-Type") == "application/json" { dec := json.NewDecoder(resp.Body) for { - var m utils.JsonMessage + var m utils.JSONMessage if err := dec.Decode(&m); err == io.EOF { break } else if err != nil { @@ -1394,7 +1394,7 @@ func (cli *DockerCli) stream(method, path string, in io.Reader, out io.Writer) e } func (cli *DockerCli) hijack(method, path string, setRawTerminal bool, in *os.File, out io.Writer) error { - req, err := http.NewRequest(method, fmt.Sprintf("/v%g%s", API_VERSION, path), nil) + req, err := http.NewRequest(method, fmt.Sprintf("/v%g%s", APIVERSION, path), nil) if err != nil { return err } diff --git a/container.go b/container.go index 9c28e5aa23..2e383c0d4b 100644 --- a/container.go +++ b/container.go @@ -23,7 +23,7 @@ import ( type Container struct { root string - Id string + ID string Created time.Time @@ -167,8 +167,8 @@ func ParseRun(args []string, capabilities *Capabilities) (*Config, *flag.FlagSet } type NetworkSettings struct { - IpAddress string - IpPrefixLen int + IPAddress string + IPPrefixLen int Gateway string Bridge string PortMapping map[string]string @@ -409,7 +409,7 @@ func (container *Container) Start() error { defer container.State.unlock() if container.State.Running { - return fmt.Errorf("The container %s is already running.", container.Id) + return fmt.Errorf("The container %s is already running.", container.ID) } if err := container.EnsureMounted(); err != nil { return err @@ -438,17 +438,17 @@ func (container *Container) Start() error { if err := os.MkdirAll(path.Join(container.RootfsPath(), volPath), 0755); err != nil { return nil } - container.Volumes[volPath] = c.Id + container.Volumes[volPath] = c.ID } if container.Config.VolumesFrom != "" { c := container.runtime.Get(container.Config.VolumesFrom) if c == nil { - return fmt.Errorf("Container %s not found. Impossible to mount its volumes", container.Id) + return fmt.Errorf("Container %s not found. Impossible to mount its volumes", container.ID) } for volPath, id := range c.Volumes { if _, exists := container.Volumes[volPath]; exists { - return fmt.Errorf("The requested volume %s overlap one of the volume of the container %s", volPath, c.Id) + return fmt.Errorf("The requested volume %s overlap one of the volume of the container %s", volPath, c.ID) } if err := os.MkdirAll(path.Join(container.RootfsPath(), volPath), 0755); err != nil { return nil @@ -462,7 +462,7 @@ func (container *Container) Start() error { } params := []string{ - "-n", container.Id, + "-n", container.ID, "-f", container.lxcConfigPath(), "--", "/sbin/init", @@ -582,8 +582,8 @@ func (container *Container) allocateNetwork() error { } container.network = iface container.NetworkSettings.Bridge = container.runtime.networkManager.bridgeIface - container.NetworkSettings.IpAddress = iface.IPNet.IP.String() - container.NetworkSettings.IpPrefixLen, _ = iface.IPNet.Mask.Size() + container.NetworkSettings.IPAddress = iface.IPNet.IP.String() + container.NetworkSettings.IPPrefixLen, _ = iface.IPNet.Mask.Size() container.NetworkSettings.Gateway = iface.Gateway.String() return nil } @@ -597,7 +597,7 @@ func (container *Container) releaseNetwork() { // FIXME: replace this with a control socket within docker-init func (container *Container) waitLxc() error { for { - output, err := exec.Command("lxc-info", "-n", container.Id).CombinedOutput() + output, err := exec.Command("lxc-info", "-n", container.ID).CombinedOutput() if err != nil { return err } @@ -615,12 +615,12 @@ func (container *Container) monitor() { // If the command does not exists, try to wait via lxc if container.cmd == nil { if err := container.waitLxc(); err != nil { - utils.Debugf("%s: Process: %s", container.Id, err) + utils.Debugf("%s: Process: %s", container.ID, err) } } else { if err := container.cmd.Wait(); err != nil { // Discard the error as any signals or non 0 returns will generate an error - utils.Debugf("%s: Process: %s", container.Id, err) + utils.Debugf("%s: Process: %s", container.ID, err) } } utils.Debugf("Process finished") @@ -634,24 +634,24 @@ func (container *Container) monitor() { container.releaseNetwork() if container.Config.OpenStdin { if err := container.stdin.Close(); err != nil { - utils.Debugf("%s: Error close stdin: %s", container.Id, err) + utils.Debugf("%s: Error close stdin: %s", container.ID, err) } } if err := container.stdout.CloseWriters(); err != nil { - utils.Debugf("%s: Error close stdout: %s", container.Id, err) + utils.Debugf("%s: Error close stdout: %s", container.ID, err) } if err := container.stderr.CloseWriters(); err != nil { - utils.Debugf("%s: Error close stderr: %s", container.Id, err) + utils.Debugf("%s: Error close stderr: %s", container.ID, err) } if container.ptyMaster != nil { if err := container.ptyMaster.Close(); err != nil { - utils.Debugf("%s: Error closing Pty master: %s", container.Id, err) + utils.Debugf("%s: Error closing Pty master: %s", container.ID, err) } } if err := container.Unmount(); err != nil { - log.Printf("%v: Failed to umount filesystem: %v", container.Id, err) + log.Printf("%v: Failed to umount filesystem: %v", container.ID, err) } // Re-create a brand new stdin pipe once the container exited @@ -672,7 +672,7 @@ func (container *Container) monitor() { // This is because State.setStopped() has already been called, and has caused Wait() // to return. // FIXME: why are we serializing running state to disk in the first place? - //log.Printf("%s: Failed to dump configuration to the disk: %s", container.Id, err) + //log.Printf("%s: Failed to dump configuration to the disk: %s", container.ID, err) } } @@ -682,17 +682,17 @@ func (container *Container) kill() error { } // Sending SIGKILL to the process via lxc - output, err := exec.Command("lxc-kill", "-n", container.Id, "9").CombinedOutput() + output, err := exec.Command("lxc-kill", "-n", container.ID, "9").CombinedOutput() if err != nil { - log.Printf("error killing container %s (%s, %s)", container.Id, output, err) + log.Printf("error killing container %s (%s, %s)", container.ID, output, err) } // 2. Wait for the process to die, in last resort, try to kill the process directly if err := container.WaitTimeout(10 * time.Second); err != nil { if container.cmd == nil { - return fmt.Errorf("lxc-kill failed, impossible to kill the container %s", container.Id) + return fmt.Errorf("lxc-kill failed, impossible to kill the container %s", container.ID) } - log.Printf("Container %s failed to exit within 10 seconds of lxc SIGKILL - trying direct SIGKILL", container.Id) + log.Printf("Container %s failed to exit within 10 seconds of lxc SIGKILL - trying direct SIGKILL", container.ID) if err := container.cmd.Process.Kill(); err != nil { return err } @@ -720,7 +720,7 @@ func (container *Container) Stop(seconds int) error { } // 1. Send a SIGTERM - if output, err := exec.Command("lxc-kill", "-n", container.Id, "15").CombinedOutput(); err != nil { + if output, err := exec.Command("lxc-kill", "-n", container.ID, "15").CombinedOutput(); err != nil { log.Print(string(output)) log.Print("Failed to send SIGTERM to the process, force killing") if err := container.kill(); err != nil { @@ -730,7 +730,7 @@ func (container *Container) Stop(seconds int) error { // 2. Wait for the process to exit on its own if err := container.WaitTimeout(time.Duration(seconds) * time.Second); err != nil { - log.Printf("Container %v failed to exit within %d seconds of SIGTERM - using the force", container.Id, seconds) + log.Printf("Container %v failed to exit within %d seconds of SIGTERM - using the force", container.ID, seconds) if err := container.kill(); err != nil { return err } @@ -836,16 +836,16 @@ func (container *Container) Unmount() error { return Unmount(container.RootfsPath()) } -// ShortId returns a shorthand version of the container's id for convenience. +// ShortID returns a shorthand version of the container's id for convenience. // A collision with other container shorthands is very unlikely, but possible. // In case of a collision a lookup with Runtime.Get() will fail, and the caller // will need to use a langer prefix, or the full-length container Id. -func (container *Container) ShortId() string { - return utils.TruncateId(container.Id) +func (container *Container) ShortID() string { + return utils.TruncateID(container.ID) } func (container *Container) logPath(name string) string { - return path.Join(container.root, fmt.Sprintf("%s-%s.log", container.Id, name)) + return path.Join(container.root, fmt.Sprintf("%s-%s.log", container.ID, name)) } func (container *Container) ReadLog(name string) (io.Reader, error) { @@ -885,7 +885,7 @@ func (container *Container) rwPath() string { return path.Join(container.root, "rw") } -func validateId(id string) error { +func validateID(id string) error { if id == "" { return fmt.Errorf("Invalid empty id") } diff --git a/container_test.go b/container_test.go index 117f0f3eb3..8ec1fa40ee 100644 --- a/container_test.go +++ b/container_test.go @@ -14,7 +14,7 @@ import ( "time" ) -func TestIdFormat(t *testing.T) { +func TestIDFormat(t *testing.T) { runtime, err := newTestRuntime() if err != nil { t.Fatal(err) @@ -22,19 +22,19 @@ func TestIdFormat(t *testing.T) { defer nuke(runtime) container1, err := NewBuilder(runtime).Create( &Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/sh", "-c", "echo hello world"}, }, ) if err != nil { t.Fatal(err) } - match, err := regexp.Match("^[0-9a-f]{64}$", []byte(container1.Id)) + match, err := regexp.Match("^[0-9a-f]{64}$", []byte(container1.ID)) if err != nil { t.Fatal(err) } if !match { - t.Fatalf("Invalid container ID: %s", container1.Id) + t.Fatalf("Invalid container ID: %s", container1.ID) } } @@ -46,7 +46,7 @@ func TestMultipleAttachRestart(t *testing.T) { defer nuke(runtime) container, err := NewBuilder(runtime).Create( &Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/sh", "-c", "i=1; while [ $i -le 5 ]; do i=`expr $i + 1`; echo hello; done"}, }, @@ -153,7 +153,7 @@ func TestDiff(t *testing.T) { // Create a container and remove a file container1, err := builder.Create( &Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/rm", "/etc/passwd"}, }, ) @@ -194,7 +194,7 @@ func TestDiff(t *testing.T) { // Create a new container from the commited image container2, err := builder.Create( &Config{ - Image: img.Id, + Image: img.ID, Cmd: []string{"cat", "/etc/passwd"}, }, ) @@ -221,7 +221,7 @@ func TestDiff(t *testing.T) { // Create a new containere container3, err := builder.Create( &Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"rm", "/bin/httpd"}, }, ) @@ -260,7 +260,7 @@ func TestCommitAutoRun(t *testing.T) { builder := NewBuilder(runtime) container1, err := builder.Create( &Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/sh", "-c", "echo hello > /world"}, }, ) @@ -291,7 +291,7 @@ func TestCommitAutoRun(t *testing.T) { // FIXME: Make a TestCommit that stops here and check docker.root/layers/img.id/world container2, err := builder.Create( &Config{ - Image: img.Id, + Image: img.ID, }, ) if err != nil { @@ -340,7 +340,7 @@ func TestCommitRun(t *testing.T) { container1, err := builder.Create( &Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/sh", "-c", "echo hello > /world"}, }, ) @@ -372,7 +372,7 @@ func TestCommitRun(t *testing.T) { container2, err := builder.Create( &Config{ - Image: img.Id, + Image: img.ID, Cmd: []string{"cat", "/world"}, }, ) @@ -419,7 +419,7 @@ func TestStart(t *testing.T) { defer nuke(runtime) container, err := NewBuilder(runtime).Create( &Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Memory: 33554432, CpuShares: 1000, Cmd: []string{"/bin/cat"}, @@ -463,7 +463,7 @@ func TestRun(t *testing.T) { defer nuke(runtime) container, err := NewBuilder(runtime).Create( &Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"ls", "-al"}, }, ) @@ -491,7 +491,7 @@ func TestOutput(t *testing.T) { defer nuke(runtime) container, err := NewBuilder(runtime).Create( &Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"echo", "-n", "foobar"}, }, ) @@ -515,7 +515,7 @@ func TestKillDifferentUser(t *testing.T) { } defer nuke(runtime) container, err := NewBuilder(runtime).Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"tail", "-f", "/etc/resolv.conf"}, User: "daemon", }, @@ -563,7 +563,7 @@ func TestKill(t *testing.T) { } defer nuke(runtime) container, err := NewBuilder(runtime).Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"cat", "/dev/zero"}, }, ) @@ -611,7 +611,7 @@ func TestExitCode(t *testing.T) { builder := NewBuilder(runtime) trueContainer, err := builder.Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/true", ""}, }) if err != nil { @@ -626,7 +626,7 @@ func TestExitCode(t *testing.T) { } falseContainer, err := builder.Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/false", ""}, }) if err != nil { @@ -648,7 +648,7 @@ func TestRestart(t *testing.T) { } defer nuke(runtime) container, err := NewBuilder(runtime).Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"echo", "-n", "foobar"}, }, ) @@ -681,7 +681,7 @@ func TestRestartStdin(t *testing.T) { } defer nuke(runtime) container, err := NewBuilder(runtime).Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"cat"}, OpenStdin: true, @@ -763,7 +763,7 @@ func TestUser(t *testing.T) { // Default user must be root container, err := builder.Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"id"}, }, ) @@ -781,7 +781,7 @@ func TestUser(t *testing.T) { // Set a username container, err = builder.Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"id"}, User: "root", @@ -801,7 +801,7 @@ func TestUser(t *testing.T) { // Set a UID container, err = builder.Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"id"}, User: "0", @@ -821,7 +821,7 @@ func TestUser(t *testing.T) { // Set a different user by uid container, err = builder.Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"id"}, User: "1", @@ -843,7 +843,7 @@ func TestUser(t *testing.T) { // Set a different user by username container, err = builder.Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"id"}, User: "daemon", @@ -872,7 +872,7 @@ func TestMultipleContainers(t *testing.T) { builder := NewBuilder(runtime) container1, err := builder.Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"cat", "/dev/zero"}, }, ) @@ -882,7 +882,7 @@ func TestMultipleContainers(t *testing.T) { defer runtime.Destroy(container1) container2, err := builder.Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"cat", "/dev/zero"}, }, ) @@ -928,7 +928,7 @@ func TestStdin(t *testing.T) { } defer nuke(runtime) container, err := NewBuilder(runtime).Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"cat"}, OpenStdin: true, @@ -975,7 +975,7 @@ func TestTty(t *testing.T) { } defer nuke(runtime) container, err := NewBuilder(runtime).Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"cat"}, OpenStdin: true, @@ -1022,7 +1022,7 @@ func TestEnv(t *testing.T) { } defer nuke(runtime) container, err := NewBuilder(runtime).Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"/usr/bin/env"}, }, ) @@ -1100,7 +1100,7 @@ func TestLXCConfig(t *testing.T) { cpuMax := 10000 cpu := cpuMin + rand.Intn(cpuMax-cpuMin) container, err := NewBuilder(runtime).Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"/bin/true"}, Hostname: "foobar", @@ -1128,7 +1128,7 @@ func BenchmarkRunSequencial(b *testing.B) { defer nuke(runtime) for i := 0; i < b.N; i++ { container, err := NewBuilder(runtime).Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"echo", "-n", "foo"}, }, ) @@ -1163,7 +1163,7 @@ func BenchmarkRunParallel(b *testing.B) { tasks = append(tasks, complete) go func(i int, complete chan error) { container, err := NewBuilder(runtime).Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"echo", "-n", "foo"}, }, ) diff --git a/contrib/crashTest.go b/contrib/crashTest.go index 320e97c52a..b3dbacaf03 100644 --- a/contrib/crashTest.go +++ b/contrib/crashTest.go @@ -11,13 +11,13 @@ import ( "time" ) -var DOCKER_PATH = path.Join(os.Getenv("DOCKERPATH"), "docker") +var DOCKERPATH = path.Join(os.Getenv("DOCKERPATH"), "docker") // WARNING: this crashTest will 1) crash your host, 2) remove all containers func runDaemon() (*exec.Cmd, error) { os.Remove("/var/run/docker.pid") exec.Command("rm", "-rf", "/var/lib/docker/containers").Run() - cmd := exec.Command(DOCKER_PATH, "-d") + cmd := exec.Command(DOCKERPATH, "-d") outPipe, err := cmd.StdoutPipe() if err != nil { return nil, err @@ -77,7 +77,7 @@ func crashTest() error { stop = false for i := 0; i < 100 && !stop; { func() error { - cmd := exec.Command(DOCKER_PATH, "run", "base", "echo", fmt.Sprintf("%d", totalTestCount)) + cmd := exec.Command(DOCKERPATH, "run", "base", "echo", fmt.Sprintf("%d", totalTestCount)) i++ totalTestCount++ outPipe, err := cmd.StdoutPipe() diff --git a/docker/docker.go b/docker/docker.go index 7b8aa7f858..dada16e11e 100644 --- a/docker/docker.go +++ b/docker/docker.go @@ -15,7 +15,7 @@ import ( ) var ( - GIT_COMMIT string + GITCOMMIT string ) func main() { @@ -59,7 +59,7 @@ func main() { if *flDebug { os.Setenv("DEBUG", "1") } - docker.GIT_COMMIT = GIT_COMMIT + docker.GITCOMMIT = GITCOMMIT if *flDaemon { if flag.NArg() != 0 { flag.Usage() diff --git a/graph.go b/graph.go index 7a819dce64..daa21f3053 100644 --- a/graph.go +++ b/graph.go @@ -86,14 +86,14 @@ func (graph *Graph) Get(name string) (*Image, error) { if err != nil { return nil, err } - if img.Id != id { - return nil, fmt.Errorf("Image stored at '%s' has wrong id '%s'", id, img.Id) + if img.ID != id { + return nil, fmt.Errorf("Image stored at '%s' has wrong id '%s'", id, img.ID) } img.graph = graph graph.lockSumMap.Lock() defer graph.lockSumMap.Unlock() - if _, exists := graph.checksumLock[img.Id]; !exists { - graph.checksumLock[img.Id] = &sync.Mutex{} + if _, exists := graph.checksumLock[img.ID]; !exists { + graph.checksumLock[img.ID] = &sync.Mutex{} } return img, nil } @@ -101,7 +101,7 @@ func (graph *Graph) Get(name string) (*Image, error) { // Create creates a new image and registers it in the graph. func (graph *Graph) Create(layerData Archive, container *Container, comment, author string, config *Config) (*Image, error) { img := &Image{ - Id: GenerateId(), + ID: GenerateID(), Comment: comment, Created: time.Now(), DockerVersion: VERSION, @@ -111,7 +111,7 @@ func (graph *Graph) Create(layerData Archive, container *Container, comment, aut } if container != nil { img.Parent = container.Image - img.Container = container.Id + img.Container = container.ID img.ContainerConfig = *container.Config } if err := graph.Register(layerData, layerData != nil, img); err != nil { @@ -124,12 +124,12 @@ func (graph *Graph) Create(layerData Archive, container *Container, comment, aut // Register imports a pre-existing image into the graph. // FIXME: pass img as first argument func (graph *Graph) Register(layerData Archive, store bool, img *Image) error { - if err := ValidateId(img.Id); err != nil { + if err := ValidateID(img.ID); err != nil { return err } // (This is a convenience to save time. Race conditions are taken care of by os.Rename) - if graph.Exists(img.Id) { - return fmt.Errorf("Image %s already exists", img.Id) + if graph.Exists(img.ID) { + return fmt.Errorf("Image %s already exists", img.ID) } tmp, err := graph.Mktemp("") defer os.RemoveAll(tmp) @@ -140,12 +140,12 @@ func (graph *Graph) Register(layerData Archive, store bool, img *Image) error { return err } // Commit - if err := os.Rename(tmp, graph.imageRoot(img.Id)); err != nil { + if err := os.Rename(tmp, graph.imageRoot(img.ID)); err != nil { return err } img.graph = graph - graph.idIndex.Add(img.Id) - graph.checksumLock[img.Id] = &sync.Mutex{} + graph.idIndex.Add(img.ID) + graph.checksumLock[img.ID] = &sync.Mutex{} return nil } @@ -173,7 +173,7 @@ func (graph *Graph) TempLayerArchive(id string, compression Compression, output // Mktemp creates a temporary sub-directory inside the graph's filesystem. func (graph *Graph) Mktemp(id string) (string, error) { if id == "" { - id = GenerateId() + id = GenerateID() } tmp, err := graph.tmp() if err != nil { @@ -230,7 +230,7 @@ func (graph *Graph) Map() (map[string]*Image, error) { } images := make(map[string]*Image, len(all)) for _, image := range all { - images[image.Id] = image + images[image.ID] = image } return images, nil } @@ -273,10 +273,10 @@ func (graph *Graph) ByParent() (map[string][]*Image, error) { if err != nil { return } - if children, exists := byParent[parent.Id]; exists { - byParent[parent.Id] = []*Image{image} + if children, exists := byParent[parent.ID]; exists { + byParent[parent.ID] = []*Image{image} } else { - byParent[parent.Id] = append(children, image) + byParent[parent.ID] = append(children, image) } }) return byParent, err @@ -293,8 +293,8 @@ func (graph *Graph) Heads() (map[string]*Image, error) { err = graph.WalkAll(func(image *Image) { // If it's not in the byParent lookup table, then // it's not a parent -> so it's a head! - if _, exists := byParent[image.Id]; !exists { - heads[image.Id] = image + if _, exists := byParent[image.ID]; !exists { + heads[image.ID] = image } }) return heads, err @@ -317,11 +317,11 @@ func (graph *Graph) getStoredChecksums() (map[string]string, error) { } func (graph *Graph) storeChecksums(checksums map[string]string) error { - checksumJson, err := json.Marshal(checksums) + checksumJSON, err := json.Marshal(checksums) if err != nil { return err } - if err := ioutil.WriteFile(path.Join(graph.Root, "checksums"), checksumJson, 0600); err != nil { + if err := ioutil.WriteFile(path.Join(graph.Root, "checksums"), checksumJSON, 0600); err != nil { return err } return nil diff --git a/graph_test.go b/graph_test.go index 7c1e5c0978..8dedb96669 100644 --- a/graph_test.go +++ b/graph_test.go @@ -34,14 +34,14 @@ func TestInterruptedRegister(t *testing.T) { defer os.RemoveAll(graph.Root) badArchive, w := io.Pipe() // Use a pipe reader as a fake archive which never yields data image := &Image{ - Id: GenerateId(), + ID: GenerateID(), Comment: "testing", Created: time.Now(), } go graph.Register(badArchive, false, image) time.Sleep(200 * time.Millisecond) w.CloseWithError(errors.New("But I'm not a tarball!")) // (Nobody's perfect, darling) - if _, err := graph.Get(image.Id); err == nil { + if _, err := graph.Get(image.ID); err == nil { t.Fatal("Image should not exist after Register is interrupted") } // Registering the same image again should succeed if the first register was interrupted @@ -67,7 +67,7 @@ func TestGraphCreate(t *testing.T) { if err != nil { t.Fatal(err) } - if err := ValidateId(image.Id); err != nil { + if err := ValidateID(image.ID); err != nil { t.Fatal(err) } if image.Comment != "Testing" { @@ -91,7 +91,7 @@ func TestRegister(t *testing.T) { t.Fatal(err) } image := &Image{ - Id: GenerateId(), + ID: GenerateID(), Comment: "testing", Created: time.Now(), } @@ -104,11 +104,11 @@ func TestRegister(t *testing.T) { } else if l := len(images); l != 1 { t.Fatalf("Wrong number of images. Should be %d, not %d", 1, l) } - if resultImg, err := graph.Get(image.Id); err != nil { + if resultImg, err := graph.Get(image.ID); err != nil { t.Fatal(err) } else { - if resultImg.Id != image.Id { - t.Fatalf("Wrong image ID. Should be '%s', not '%s'", image.Id, resultImg.Id) + if resultImg.ID != image.ID { + t.Fatalf("Wrong image ID. Should be '%s', not '%s'", image.ID, resultImg.ID) } if resultImg.Comment != image.Comment { t.Fatalf("Wrong image comment. Should be '%s', not '%s'", image.Comment, resultImg.Comment) @@ -156,7 +156,7 @@ func TestDeletePrefix(t *testing.T) { graph := tempGraph(t) defer os.RemoveAll(graph.Root) img := createTestImage(graph, t) - if err := graph.Delete(utils.TruncateId(img.Id)); err != nil { + if err := graph.Delete(utils.TruncateID(img.ID)); err != nil { t.Fatal(err) } assertNImages(graph, t, 0) @@ -187,7 +187,7 @@ func TestDelete(t *testing.T) { t.Fatal(err) } assertNImages(graph, t, 1) - if err := graph.Delete(img.Id); err != nil { + if err := graph.Delete(img.ID); err != nil { t.Fatal(err) } assertNImages(graph, t, 0) @@ -201,7 +201,7 @@ func TestDelete(t *testing.T) { t.Fatal(err) } assertNImages(graph, t, 2) - if err := graph.Delete(img1.Id); err != nil { + if err := graph.Delete(img1.ID); err != nil { t.Fatal(err) } assertNImages(graph, t, 1) @@ -216,7 +216,7 @@ func TestDelete(t *testing.T) { if err := graph.Register(archive, false, img1); err != nil { t.Fatal(err) } - if err := graph.Delete(img1.Id); err != nil { + if err := graph.Delete(img1.ID); err != nil { t.Fatal(err) } assertNImages(graph, t, 1) diff --git a/image.go b/image.go index 3617d7dd19..7a98ef41a1 100644 --- a/image.go +++ b/image.go @@ -18,7 +18,7 @@ import ( ) type Image struct { - Id string `json:"id"` + ID string `json:"id"` Parent string `json:"parent,omitempty"` Comment string `json:"comment,omitempty"` Created time.Time `json:"created"` @@ -42,17 +42,17 @@ func LoadImage(root string) (*Image, error) { if err := json.Unmarshal(jsonData, img); err != nil { return nil, err } - if err := ValidateId(img.Id); err != nil { + if err := ValidateID(img.ID); err != nil { return nil, err } // Check that the filesystem layer exists if stat, err := os.Stat(layerPath(root)); err != nil { if os.IsNotExist(err) { - return nil, fmt.Errorf("Couldn't load image %s: no filesystem layer", img.Id) + return nil, fmt.Errorf("Couldn't load image %s: no filesystem layer", img.ID) } return nil, err } else if !stat.IsDir() { - return nil, fmt.Errorf("Couldn't load image %s: %s is not a directory", img.Id, layerPath(root)) + return nil, fmt.Errorf("Couldn't load image %s: %s is not a directory", img.ID, layerPath(root)) } return img, nil } @@ -60,7 +60,7 @@ func LoadImage(root string) (*Image, error) { func StoreImage(img *Image, layerData Archive, root string, store bool) error { // Check that root doesn't already exist if _, err := os.Stat(root); err == nil { - return fmt.Errorf("Image %s already exists", img.Id) + return fmt.Errorf("Image %s already exists", img.ID) } else if !os.IsNotExist(err) { return err } @@ -180,11 +180,11 @@ func (image *Image) Changes(rw string) ([]Change, error) { return Changes(layers, rw) } -func (image *Image) ShortId() string { - return utils.TruncateId(image.Id) +func (image *Image) ShortID() string { + return utils.TruncateID(image.ID) } -func ValidateId(id string) error { +func ValidateID(id string) error { if id == "" { return fmt.Errorf("Image id can't be empty") } @@ -194,7 +194,7 @@ func ValidateId(id string) error { return nil } -func GenerateId() string { +func GenerateID() string { id := make([]byte, 32) _, err := io.ReadFull(rand.Reader, id) if err != nil { @@ -240,7 +240,7 @@ func (img *Image) layers() ([]string, error) { return nil, e } if len(list) == 0 { - return nil, fmt.Errorf("No layer found for image %s\n", img.Id) + return nil, fmt.Errorf("No layer found for image %s\n", img.ID) } return list, nil } @@ -275,7 +275,7 @@ func (img *Image) root() (string, error) { if img.graph == nil { return "", fmt.Errorf("Can't lookup root of unregistered image") } - return img.graph.imageRoot(img.Id), nil + return img.graph.imageRoot(img.ID), nil } // Return the path of an image's layer @@ -288,8 +288,8 @@ func (img *Image) layer() (string, error) { } func (img *Image) Checksum() (string, error) { - img.graph.checksumLock[img.Id].Lock() - defer img.graph.checksumLock[img.Id].Unlock() + img.graph.checksumLock[img.ID].Lock() + defer img.graph.checksumLock[img.ID].Unlock() root, err := img.root() if err != nil { @@ -300,7 +300,7 @@ func (img *Image) Checksum() (string, error) { if err != nil { return "", err } - if checksum, ok := checksums[img.Id]; ok { + if checksum, ok := checksums[img.ID]; ok { return checksum, nil } @@ -351,7 +351,7 @@ func (img *Image) Checksum() (string, error) { return "", err } - checksums[img.Id] = hash + checksums[img.ID] = hash // Dump the checksums to disc if err := img.graph.storeChecksums(checksums); err != nil { @@ -362,7 +362,7 @@ func (img *Image) Checksum() (string, error) { } // Build an Image object from raw json data -func NewImgJson(src []byte) (*Image, error) { +func NewImgJSON(src []byte) (*Image, error) { ret := &Image{} utils.Debugf("Json string: {%s}\n", src) diff --git a/lxc_template.go b/lxc_template.go index 008a717bad..3d102a5a2e 100644 --- a/lxc_template.go +++ b/lxc_template.go @@ -19,7 +19,7 @@ lxc.network.flags = up lxc.network.link = {{.NetworkSettings.Bridge}} lxc.network.name = eth0 lxc.network.mtu = 1500 -lxc.network.ipv4 = {{.NetworkSettings.IpAddress}}/{{.NetworkSettings.IpPrefixLen}} +lxc.network.ipv4 = {{.NetworkSettings.IPAddress}}/{{.NetworkSettings.IPPrefixLen}} # root filesystem {{$ROOTFS := .RootfsPath}} diff --git a/network.go b/network.go index 2bdb4862ce..f78e320fd2 100644 --- a/network.go +++ b/network.go @@ -52,7 +52,7 @@ func ipToInt(ip net.IP) int32 { } // Converts 32 bit integer into a 4 bytes IP address -func intToIp(n int32) net.IP { +func intToIP(n int32) net.IP { b := make([]byte, 4) binary.BigEndian.PutUint32(b, uint32(n)) return net.IP(b) @@ -396,7 +396,7 @@ func (alloc *IPAllocator) run() { } } - ip := allocatedIP{ip: intToIp(newNum)} + ip := allocatedIP{ip: intToIP(newNum)} if inUse { ip.err = errors.New("No unallocated IP available") } diff --git a/network_test.go b/network_test.go index 8bae9e3c32..df19a73d74 100644 --- a/network_test.go +++ b/network_test.go @@ -137,7 +137,7 @@ func TestConversion(t *testing.T) { if i == 0 { t.Fatal("converted to zero") } - conv := intToIp(i) + conv := intToIP(i) if !ip.Equal(conv) { t.Error(conv.String()) } diff --git a/registry/registry.go b/registry/registry.go index b6cda92841..befceb8e27 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -107,8 +107,8 @@ func (r *Registry) getImagesInRepository(repository string, authConfig *auth.Aut // Retrieve an image from the Registry. // Returns the Image object as well as the layer as an Archive (io.Reader) -func (r *Registry) GetRemoteImageJson(imgId, registry string, token []string) ([]byte, error) { - // Get the Json +func (r *Registry) GetRemoteImageJSON(imgId, registry string, token []string) ([]byte, error) { + // Get the JSON req, err := http.NewRequest("GET", registry+"/images/"+imgId+"/json", nil) if err != nil { return nil, fmt.Errorf("Failed to download json: %s", err) @@ -169,11 +169,11 @@ func (r *Registry) GetRemoteTags(registries []string, repository string, token [ } result := make(map[string]string) - rawJson, err := ioutil.ReadAll(res.Body) + rawJSON, err := ioutil.ReadAll(res.Body) if err != nil { return nil, err } - if err := json.Unmarshal(rawJson, &result); err != nil { + if err := json.Unmarshal(rawJSON, &result); err != nil { return nil, err } return result, nil @@ -219,19 +219,19 @@ func (r *Registry) GetRepositoryData(remote string) (*RepositoryData, error) { return nil, fmt.Errorf("Index response didn't contain any endpoints") } - checksumsJson, err := ioutil.ReadAll(res.Body) + checksumsJSON, err := ioutil.ReadAll(res.Body) if err != nil { return nil, err } remoteChecksums := []*ImgData{} - if err := json.Unmarshal(checksumsJson, &remoteChecksums); err != nil { + if err := json.Unmarshal(checksumsJSON, &remoteChecksums); err != nil { return nil, err } // Forge a better object from the retrieved data imgsData := make(map[string]*ImgData) for _, elem := range remoteChecksums { - imgsData[elem.Id] = elem + imgsData[elem.ID] = elem } return &RepositoryData{ @@ -242,10 +242,10 @@ func (r *Registry) GetRepositoryData(remote string) (*RepositoryData, error) { } // Push a local image to the registry -func (r *Registry) PushImageJsonRegistry(imgData *ImgData, jsonRaw []byte, registry string, token []string) error { +func (r *Registry) PushImageJSONRegistry(imgData *ImgData, jsonRaw []byte, registry string, token []string) error { registry = "https://" + registry + "/v1" // FIXME: try json with UTF8 - req, err := http.NewRequest("PUT", registry+"/images/"+imgData.Id+"/json", strings.NewReader(string(jsonRaw))) + req, err := http.NewRequest("PUT", registry+"/images/"+imgData.ID+"/json", strings.NewReader(string(jsonRaw))) if err != nil { return err } @@ -253,7 +253,7 @@ func (r *Registry) PushImageJsonRegistry(imgData *ImgData, jsonRaw []byte, regis req.Header.Set("Authorization", "Token "+strings.Join(token, ",")) req.Header.Set("X-Docker-Checksum", imgData.Checksum) - utils.Debugf("Setting checksum for %s: %s", imgData.Id, imgData.Checksum) + utils.Debugf("Setting checksum for %s: %s", imgData.ID, imgData.Checksum) res, err := doWithCookies(r.client, req) if err != nil { return fmt.Errorf("Failed to upload metadata: %s", err) @@ -328,8 +328,8 @@ func (r *Registry) PushRegistryTag(remote, revision, tag, registry string, token return nil } -func (r *Registry) PushImageJsonIndex(remote string, imgList []*ImgData, validate bool) (*RepositoryData, error) { - imgListJson, err := json.Marshal(imgList) +func (r *Registry) PushImageJSONIndex(remote string, imgList []*ImgData, validate bool) (*RepositoryData, error) { + imgListJSON, err := json.Marshal(imgList) if err != nil { return nil, err } @@ -338,14 +338,14 @@ func (r *Registry) PushImageJsonIndex(remote string, imgList []*ImgData, validat suffix = "images" } - utils.Debugf("Image list pushed to index:\n%s\n", imgListJson) + utils.Debugf("Image list pushed to index:\n%s\n", imgListJSON) - req, err := http.NewRequest("PUT", auth.IndexServerAddress()+"/repositories/"+remote+"/"+suffix, bytes.NewReader(imgListJson)) + req, err := http.NewRequest("PUT", auth.IndexServerAddress()+"/repositories/"+remote+"/"+suffix, bytes.NewReader(imgListJSON)) if err != nil { return nil, err } req.SetBasicAuth(r.authConfig.Username, r.authConfig.Password) - req.ContentLength = int64(len(imgListJson)) + req.ContentLength = int64(len(imgListJSON)) req.Header.Set("X-Docker-Token", "true") res, err := r.client.Do(req) @@ -357,12 +357,12 @@ func (r *Registry) PushImageJsonIndex(remote string, imgList []*ImgData, validat // Redirect if necessary for res.StatusCode >= 300 && res.StatusCode < 400 { utils.Debugf("Redirected to %s\n", res.Header.Get("Location")) - req, err = http.NewRequest("PUT", res.Header.Get("Location"), bytes.NewReader(imgListJson)) + req, err = http.NewRequest("PUT", res.Header.Get("Location"), bytes.NewReader(imgListJSON)) if err != nil { return nil, err } req.SetBasicAuth(r.authConfig.Username, r.authConfig.Password) - req.ContentLength = int64(len(imgListJson)) + req.ContentLength = int64(len(imgListJSON)) req.Header.Set("X-Docker-Token", "true") res, err = r.client.Do(req) @@ -463,7 +463,7 @@ type RepositoryData struct { } type ImgData struct { - Id string `json:"id"` + ID string `json:"id"` Checksum string `json:"checksum,omitempty"` Tag string `json:",omitempty"` } diff --git a/runtime.go b/runtime.go index ad1852e902..1c22bd085c 100644 --- a/runtime.go +++ b/runtime.go @@ -51,7 +51,7 @@ func (runtime *Runtime) List() []*Container { func (runtime *Runtime) getContainerElement(id string) *list.Element { for e := runtime.containers.Front(); e != nil; e = e.Next() { container := e.Value.(*Container) - if container.Id == id { + if container.ID == id { return e } } @@ -83,8 +83,8 @@ func (runtime *Runtime) Load(id string) (*Container, error) { if err := container.FromDisk(); err != nil { return nil, err } - if container.Id != id { - return container, fmt.Errorf("Container %s is stored at %s", container.Id, id) + if container.ID != id { + return container, fmt.Errorf("Container %s is stored at %s", container.ID, id) } if container.State.Running { container.State.Ghost = true @@ -95,12 +95,12 @@ func (runtime *Runtime) Load(id string) (*Container, error) { return container, nil } -// Register makes a container object usable by the runtime as +// Register makes a container object usable by the runtime as func (runtime *Runtime) Register(container *Container) error { - if container.runtime != nil || runtime.Exists(container.Id) { + if container.runtime != nil || runtime.Exists(container.ID) { return fmt.Errorf("Container is already loaded") } - if err := validateId(container.Id); err != nil { + if err := validateID(container.ID); err != nil { return err } @@ -123,7 +123,7 @@ func (runtime *Runtime) Register(container *Container) error { } // done runtime.containers.PushBack(container) - runtime.idIndex.Add(container.Id) + runtime.idIndex.Add(container.ID) // When we actually restart, Start() do the monitoring. // However, when we simply 'reattach', we have to restart a monitor @@ -133,12 +133,12 @@ func (runtime *Runtime) Register(container *Container) error { // if so, then we need to restart monitor and init a new lock // If the container is supposed to be running, make sure of it if container.State.Running { - output, err := exec.Command("lxc-info", "-n", container.Id).CombinedOutput() + output, err := exec.Command("lxc-info", "-n", container.ID).CombinedOutput() if err != nil { return err } if !strings.Contains(string(output), "RUNNING") { - utils.Debugf("Container %s was supposed to be running be is not.", container.Id) + utils.Debugf("Container %s was supposed to be running be is not.", container.ID) if runtime.autoRestart { utils.Debugf("Restarting") container.State.Ghost = false @@ -182,9 +182,9 @@ func (runtime *Runtime) Destroy(container *Container) error { return fmt.Errorf("The given container is ") } - element := runtime.getContainerElement(container.Id) + element := runtime.getContainerElement(container.ID) if element == nil { - return fmt.Errorf("Container %v not found - maybe it was already destroyed?", container.Id) + return fmt.Errorf("Container %v not found - maybe it was already destroyed?", container.ID) } if err := container.Stop(3); err != nil { @@ -194,14 +194,14 @@ func (runtime *Runtime) Destroy(container *Container) error { return err } else if mounted { if err := container.Unmount(); err != nil { - return fmt.Errorf("Unable to unmount container %v: %v", container.Id, err) + return fmt.Errorf("Unable to unmount container %v: %v", container.ID, err) } } // Deregister the container before removing its directory, to avoid race conditions - runtime.idIndex.Delete(container.Id) + runtime.idIndex.Delete(container.ID) runtime.containers.Remove(element) if err := os.RemoveAll(container.root); err != nil { - return fmt.Errorf("Unable to remove filesystem for %v: %v", container.Id, err) + return fmt.Errorf("Unable to remove filesystem for %v: %v", container.ID, err) } return nil } @@ -218,7 +218,7 @@ func (runtime *Runtime) restore() error { utils.Debugf("Failed to load container %v: %v", id, err) continue } - utils.Debugf("Loaded container %v", container.Id) + utils.Debugf("Loaded container %v", container.ID) } return nil } diff --git a/runtime_test.go b/runtime_test.go index 1190510279..642c8a0ce6 100644 --- a/runtime_test.go +++ b/runtime_test.go @@ -120,7 +120,7 @@ func TestRuntimeCreate(t *testing.T) { builder := NewBuilder(runtime) container, err := builder.Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"ls", "-al"}, }, ) @@ -140,29 +140,29 @@ func TestRuntimeCreate(t *testing.T) { } // Make sure the container List() returns is the right one - if runtime.List()[0].Id != container.Id { + if runtime.List()[0].ID != container.ID { t.Errorf("Unexpected container %v returned by List", runtime.List()[0]) } // Make sure we can get the container with Get() - if runtime.Get(container.Id) == nil { + if runtime.Get(container.ID) == nil { t.Errorf("Unable to get newly created container") } // Make sure it is the right container - if runtime.Get(container.Id) != container { + if runtime.Get(container.ID) != container { t.Errorf("Get() returned the wrong container") } // Make sure Exists returns it as existing - if !runtime.Exists(container.Id) { + if !runtime.Exists(container.ID) { t.Errorf("Exists() returned false for a newly created container") } // Make sure crete with bad parameters returns an error _, err = builder.Create( &Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, }, ) if err == nil { @@ -171,7 +171,7 @@ func TestRuntimeCreate(t *testing.T) { _, err = builder.Create( &Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{}, }, ) @@ -187,7 +187,7 @@ func TestDestroy(t *testing.T) { } defer nuke(runtime) container, err := NewBuilder(runtime).Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"ls", "-al"}, }, ) @@ -210,7 +210,7 @@ func TestDestroy(t *testing.T) { } // Make sure runtime.Get() refuses to return the unexisting container - if runtime.Get(container.Id) != nil { + if runtime.Get(container.ID) != nil { t.Errorf("Unable to get newly created container") } @@ -237,7 +237,7 @@ func TestGet(t *testing.T) { builder := NewBuilder(runtime) container1, err := builder.Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"ls", "-al"}, }, ) @@ -247,7 +247,7 @@ func TestGet(t *testing.T) { defer runtime.Destroy(container1) container2, err := builder.Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"ls", "-al"}, }, ) @@ -257,7 +257,7 @@ func TestGet(t *testing.T) { defer runtime.Destroy(container2) container3, err := builder.Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"ls", "-al"}, }, ) @@ -266,16 +266,16 @@ func TestGet(t *testing.T) { } defer runtime.Destroy(container3) - if runtime.Get(container1.Id) != container1 { - t.Errorf("Get(test1) returned %v while expecting %v", runtime.Get(container1.Id), container1) + if runtime.Get(container1.ID) != container1 { + t.Errorf("Get(test1) returned %v while expecting %v", runtime.Get(container1.ID), container1) } - if runtime.Get(container2.Id) != container2 { - t.Errorf("Get(test2) returned %v while expecting %v", runtime.Get(container2.Id), container2) + if runtime.Get(container2.ID) != container2 { + t.Errorf("Get(test2) returned %v while expecting %v", runtime.Get(container2.ID), container2) } - if runtime.Get(container3.Id) != container3 { - t.Errorf("Get(test3) returned %v while expecting %v", runtime.Get(container3.Id), container3) + if runtime.Get(container3.ID) != container3 { + t.Errorf("Get(test3) returned %v while expecting %v", runtime.Get(container3.ID), container3) } } @@ -283,7 +283,7 @@ func TestGet(t *testing.T) { func findAvailalblePort(runtime *Runtime, port int) (*Container, error) { strPort := strconv.Itoa(port) container, err := NewBuilder(runtime).Create(&Config{ - Image: GetTestImage(runtime).Id, + Image: GetTestImage(runtime).ID, Cmd: []string{"sh", "-c", "echo well hello there | nc -l -p " + strPort}, PortSpecs: []string{strPort}, }, @@ -379,7 +379,7 @@ func TestRestore(t *testing.T) { // Create a container with one instance of docker container1, err := builder.Create(&Config{ - Image: GetTestImage(runtime1).Id, + Image: GetTestImage(runtime1).ID, Cmd: []string{"ls", "-al"}, }, ) @@ -390,7 +390,7 @@ func TestRestore(t *testing.T) { // Create a second container meant to be killed container2, err := builder.Create(&Config{ - Image: GetTestImage(runtime1).Id, + Image: GetTestImage(runtime1).ID, Cmd: []string{"/bin/cat"}, OpenStdin: true, }, @@ -406,7 +406,7 @@ func TestRestore(t *testing.T) { } if !container2.State.Running { - t.Fatalf("Container %v should appear as running but isn't", container2.Id) + t.Fatalf("Container %v should appear as running but isn't", container2.ID) } // Simulate a crash/manual quit of dockerd: process dies, states stays 'Running' @@ -426,7 +426,7 @@ func TestRestore(t *testing.T) { } if !container2.State.Running { - t.Fatalf("Container %v should appear as running but isn't", container2.Id) + t.Fatalf("Container %v should appear as running but isn't", container2.ID) } // Here are are simulating a docker restart - that is, reloading all containers @@ -442,14 +442,14 @@ func TestRestore(t *testing.T) { runningCount := 0 for _, c := range runtime2.List() { if c.State.Running { - t.Errorf("Running container found: %v (%v)", c.Id, c.Path) + t.Errorf("Running container found: %v (%v)", c.ID, c.Path) runningCount++ } } if runningCount != 0 { t.Fatalf("Expected 0 container alive, %d found", runningCount) } - container3 := runtime2.Get(container1.Id) + container3 := runtime2.Get(container1.ID) if container3 == nil { t.Fatal("Unable to Get container") } diff --git a/server.go b/server.go index 9e98b87c21..3287bf9616 100644 --- a/server.go +++ b/server.go @@ -16,10 +16,10 @@ import ( "strings" ) -func (srv *Server) DockerVersion() ApiVersion { - return ApiVersion{ +func (srv *Server) DockerVersion() APIVersion { + return APIVersion{ Version: VERSION, - GitCommit: GIT_COMMIT, + GitCommit: GITCOMMIT, GoVersion: runtime.Version(), } } @@ -52,16 +52,16 @@ func (srv *Server) ContainerExport(name string, out io.Writer) error { return fmt.Errorf("No such container: %s", name) } -func (srv *Server) ImagesSearch(term string) ([]ApiSearch, error) { +func (srv *Server) ImagesSearch(term string) ([]APISearch, error) { results, err := registry.NewRegistry(srv.runtime.root).SearchRepositories(term) if err != nil { return nil, err } - var outs []ApiSearch + var outs []APISearch for _, repo := range results.Results { - var out ApiSearch + var out APISearch out.Description = repo["description"] if len(out.Description) > 45 { out.Description = utils.Trunc(out.Description, 42) + "..." @@ -85,7 +85,7 @@ func (srv *Server) ImageInsert(name, url, path string, out io.Writer, sf *utils. } defer file.Body.Close() - config, _, err := ParseRun([]string{img.Id, "echo", "insert", url, path}, srv.runtime.capabilities) + config, _, err := ParseRun([]string{img.ID, "echo", "insert", url, path}, srv.runtime.capabilities) if err != nil { return "", err } @@ -104,8 +104,8 @@ func (srv *Server) ImageInsert(name, url, path string, out io.Writer, sf *utils. if err != nil { return "", err } - out.Write(sf.FormatStatus(img.Id)) - return img.ShortId(), nil + out.Write(sf.FormatStatus(img.ID)) + return img.ShortID(), nil } func (srv *Server) ImagesViz(out io.Writer) error { @@ -125,9 +125,9 @@ func (srv *Server) ImagesViz(out io.Writer) error { return fmt.Errorf("Error while getting parent image: %v", err) } if parentImage != nil { - out.Write([]byte(" \"" + parentImage.ShortId() + "\" -> \"" + image.ShortId() + "\"\n")) + out.Write([]byte(" \"" + parentImage.ShortID() + "\" -> \"" + image.ShortID() + "\"\n")) } else { - out.Write([]byte(" base -> \"" + image.ShortId() + "\" [style=invis]\n")) + out.Write([]byte(" base -> \"" + image.ShortID() + "\" [style=invis]\n")) } } @@ -135,7 +135,7 @@ func (srv *Server) ImagesViz(out io.Writer) error { for name, repository := range srv.runtime.repositories.Repositories { for tag, id := range repository { - reporefs[utils.TruncateId(id)] = append(reporefs[utils.TruncateId(id)], fmt.Sprintf("%s:%s", name, tag)) + reporefs[utils.TruncateID(id)] = append(reporefs[utils.TruncateID(id)], fmt.Sprintf("%s:%s", name, tag)) } } @@ -146,7 +146,7 @@ func (srv *Server) ImagesViz(out io.Writer) error { return nil } -func (srv *Server) Images(all bool, filter string) ([]ApiImages, error) { +func (srv *Server) Images(all bool, filter string) ([]APIImages, error) { var ( allImages map[string]*Image err error @@ -159,13 +159,13 @@ func (srv *Server) Images(all bool, filter string) ([]ApiImages, error) { if err != nil { return nil, err } - outs := []ApiImages{} //produce [] when empty instead of 'null' + outs := []APIImages{} //produce [] when empty instead of 'null' for name, repository := range srv.runtime.repositories.Repositories { if filter != "" && name != filter { continue } for tag, id := range repository { - var out ApiImages + var out APIImages image, err := srv.runtime.graph.Get(id) if err != nil { log.Printf("Warning: couldn't load %s from %s/%s: %s", id, name, tag, err) @@ -174,7 +174,7 @@ func (srv *Server) Images(all bool, filter string) ([]ApiImages, error) { delete(allImages, id) out.Repository = name out.Tag = tag - out.Id = image.Id + out.ID = image.ID out.Created = image.Created.Unix() outs = append(outs, out) } @@ -182,8 +182,8 @@ func (srv *Server) Images(all bool, filter string) ([]ApiImages, error) { // Display images which aren't part of a if filter == "" { for _, image := range allImages { - var out ApiImages - out.Id = image.Id + var out APIImages + out.ID = image.ID out.Created = image.Created.Unix() outs = append(outs, out) } @@ -191,7 +191,7 @@ func (srv *Server) Images(all bool, filter string) ([]ApiImages, error) { return outs, nil } -func (srv *Server) DockerInfo() *ApiInfo { +func (srv *Server) DockerInfo() *APIInfo { images, _ := srv.runtime.graph.All() var imgcount int if images == nil { @@ -199,7 +199,7 @@ func (srv *Server) DockerInfo() *ApiInfo { } else { imgcount = len(images) } - return &ApiInfo{ + return &APIInfo{ Containers: len(srv.runtime.List()), Images: imgcount, MemoryLimit: srv.runtime.capabilities.MemoryLimit, @@ -210,16 +210,16 @@ func (srv *Server) DockerInfo() *ApiInfo { } } -func (srv *Server) ImageHistory(name string) ([]ApiHistory, error) { +func (srv *Server) ImageHistory(name string) ([]APIHistory, error) { image, err := srv.runtime.repositories.LookupImage(name) if err != nil { return nil, err } - outs := []ApiHistory{} //produce [] when empty instead of 'null' + outs := []APIHistory{} //produce [] when empty instead of 'null' err = image.WalkHistory(func(img *Image) error { - var out ApiHistory - out.Id = srv.runtime.repositories.ImageName(img.ShortId()) + var out APIHistory + out.ID = srv.runtime.repositories.ImageName(img.ShortID()) out.Created = img.Created.Unix() out.CreatedBy = strings.Join(img.ContainerConfig.Cmd, " ") outs = append(outs, out) @@ -236,17 +236,17 @@ func (srv *Server) ContainerChanges(name string) ([]Change, error) { return nil, fmt.Errorf("No such container: %s", name) } -func (srv *Server) Containers(all bool, n int, since, before string) []ApiContainers { +func (srv *Server) Containers(all bool, n int, since, before string) []APIContainers { var foundBefore bool var displayed int - retContainers := []ApiContainers{} + retContainers := []APIContainers{} for _, container := range srv.runtime.List() { if !container.State.Running && !all && n == -1 && since == "" && before == "" { continue } if before != "" { - if container.ShortId() == before { + if container.ShortID() == before { foundBefore = true continue } @@ -257,13 +257,13 @@ func (srv *Server) Containers(all bool, n int, since, before string) []ApiContai if displayed == n { break } - if container.ShortId() == since { + if container.ShortID() == since { break } displayed++ - c := ApiContainers{ - Id: container.Id, + c := APIContainers{ + ID: container.ID, } c.Image = srv.runtime.repositories.ImageName(container.Image) c.Command = fmt.Sprintf("%s %s", container.Path, strings.Join(container.Args, " ")) @@ -284,7 +284,7 @@ func (srv *Server) ContainerCommit(name, repo, tag, author, comment string, conf if err != nil { return "", err } - return img.ShortId(), err + return img.ShortID(), err } func (srv *Server) ContainerTag(name, repo, tag string, force bool) error { @@ -305,19 +305,19 @@ func (srv *Server) pullImage(r *registry.Registry, out io.Writer, imgId, endpoin for _, id := range history { if !srv.runtime.graph.Exists(id) { out.Write(sf.FormatStatus("Pulling %s metadata", id)) - imgJson, err := r.GetRemoteImageJson(id, endpoint, token) + imgJSON, err := r.GetRemoteImageJSON(id, endpoint, token) if err != nil { // FIXME: Keep goging in case of error? return err } - img, err := NewImgJson(imgJson) + img, err := NewImgJSON(imgJSON) if err != nil { return fmt.Errorf("Failed to parse json: %s", err) } // Get the layer out.Write(sf.FormatStatus("Pulling %s fs layer", id)) - layer, contentLength, err := r.GetRemoteImageLayer(img.Id, endpoint, token) + layer, contentLength, err := r.GetRemoteImageLayer(img.ID, endpoint, token) if err != nil { return err } @@ -365,13 +365,13 @@ func (srv *Server) pullRepository(r *registry.Registry, out io.Writer, remote, a for _, img := range repoData.ImgList { if askedTag != "" && img.Tag != askedTag { - utils.Debugf("(%s) does not match %s (id: %s), skipping", img.Tag, askedTag, img.Id) + utils.Debugf("(%s) does not match %s (id: %s), skipping", img.Tag, askedTag, img.ID) continue } - out.Write(sf.FormatStatus("Pulling image %s (%s) from %s", img.Id, img.Tag, remote)) + out.Write(sf.FormatStatus("Pulling image %s (%s) from %s", img.ID, img.Tag, remote)) success := false for _, ep := range repoData.Endpoints { - if err := srv.pullImage(r, out, img.Id, "https://"+ep+"/v1", repoData.Tokens, sf); err != nil { + if err := srv.pullImage(r, out, img.ID, "https://"+ep+"/v1", repoData.Tokens, sf); err != nil { out.Write(sf.FormatStatus("Error while retrieving image for tag: %s (%s); checking next endpoint", askedTag, err)) continue } @@ -461,16 +461,16 @@ func (srv *Server) getImageList(localRepo map[string]string) ([]*registry.ImgDat return nil, err } img.WalkHistory(func(img *Image) error { - if _, exists := imageSet[img.Id]; exists { + if _, exists := imageSet[img.ID]; exists { return nil } - imageSet[img.Id] = struct{}{} - checksum, err := srv.getChecksum(img.Id) + imageSet[img.ID] = struct{}{} + checksum, err := srv.getChecksum(img.ID) if err != nil { return err } imgList = append([]*registry.ImgData{{ - Id: img.Id, + ID: img.ID, Checksum: checksum, Tag: tag, }}, imgList...) @@ -489,7 +489,7 @@ func (srv *Server) pushRepository(r *registry.Registry, out io.Writer, name stri } out.Write(sf.FormatStatus("Sending image list")) - repoData, err := r.PushImageJsonIndex(name, imgList, false) + repoData, err := r.PushImageJSONIndex(name, imgList, false) if err != nil { return err } @@ -498,22 +498,22 @@ func (srv *Server) pushRepository(r *registry.Registry, out io.Writer, name stri out.Write(sf.FormatStatus("Pushing repository %s to %s (%d tags)", name, ep, len(localRepo))) // For each image within the repo, push them for _, elem := range imgList { - if _, exists := repoData.ImgList[elem.Id]; exists { + if _, exists := repoData.ImgList[elem.ID]; exists { out.Write(sf.FormatStatus("Image %s already on registry, skipping", name)) continue } - if err := srv.pushImage(r, out, name, elem.Id, ep, repoData.Tokens, sf); err != nil { + if err := srv.pushImage(r, out, name, elem.ID, ep, repoData.Tokens, sf); err != nil { // FIXME: Continue on error? return err } - out.Write(sf.FormatStatus("Pushing tags for rev [%s] on {%s}", elem.Id, ep+"/users/"+name+"/"+elem.Tag)) - if err := r.PushRegistryTag(name, elem.Id, elem.Tag, ep, repoData.Tokens); err != nil { + out.Write(sf.FormatStatus("Pushing tags for rev [%s] on {%s}", elem.ID, ep+"/users/"+name+"/"+elem.Tag)) + if err := r.PushRegistryTag(name, elem.ID, elem.Tag, ep, repoData.Tokens); err != nil { return err } } } - if _, err := r.PushImageJsonIndex(name, imgList, true); err != nil { + if _, err := r.PushImageJSONIndex(name, imgList, true); err != nil { return err } return nil @@ -533,14 +533,14 @@ func (srv *Server) pushImage(r *registry.Registry, out io.Writer, remote, imgId, return err } imgData := ®istry.ImgData{ - Id: imgId, + ID: imgId, Checksum: checksum, } // Send the json - if err := r.PushImageJsonRegistry(imgData, jsonRaw, ep, token); err != nil { + if err := r.PushImageJSONRegistry(imgData, jsonRaw, ep, token); err != nil { if err == registry.ErrAlreadyExists { - out.Write(sf.FormatStatus("Image %s already uploaded ; skipping", imgData.Id)) + out.Write(sf.FormatStatus("Image %s already uploaded ; skipping", imgData.ID)) return nil } return err @@ -573,7 +573,7 @@ func (srv *Server) pushImage(r *registry.Registry, out io.Writer, remote, imgId, } // Send the layer - if err := r.PushImageLayerRegistry(imgData.Id, utils.ProgressReader(layerData, int(layerData.Size), out, sf.FormatProgress("", "%v/%v (%v)"), sf), ep, token); err != nil { + if err := r.PushImageLayerRegistry(imgData.ID, utils.ProgressReader(layerData, int(layerData.Size), out, sf.FormatProgress("", "%v/%v (%v)"), sf), ep, token); err != nil { return err } return nil @@ -597,7 +597,7 @@ func (srv *Server) ImagePush(name, endpoint string, out io.Writer, sf *utils.Str return err } out.Write(sf.FormatStatus("The push refers to an image: [%s]", name)) - if err := srv.pushImage(r, out, name, img.Id, endpoint, nil, sf); err != nil { + if err := srv.pushImage(r, out, name, img.ID, endpoint, nil, sf); err != nil { return err } return nil @@ -634,11 +634,11 @@ func (srv *Server) ImageImport(src, repo, tag string, in io.Reader, out io.Write } // Optionally register the image at REPO/TAG if repo != "" { - if err := srv.runtime.repositories.Set(repo, tag, img.Id, true); err != nil { + if err := srv.runtime.repositories.Set(repo, tag, img.ID, true); err != nil { return err } } - out.Write(sf.FormatStatus(img.ShortId())) + out.Write(sf.FormatStatus(img.ShortID())) return nil } @@ -659,7 +659,7 @@ func (srv *Server) ContainerCreate(config *Config) (string, error) { } return "", err } - return container.ShortId(), nil + return container.ShortID(), nil } func (srv *Server) ContainerRestart(name string, t int) error { @@ -696,7 +696,7 @@ func (srv *Server) ContainerDestroy(name string, removeVolume bool) error { for volumeId := range volumes { // If the requested volu if c, exists := usedVolumes[volumeId]; exists { - log.Printf("The volume %s is used by the container %s. Impossible to remove it. Skipping.\n", volumeId, c.Id) + log.Printf("The volume %s is used by the container %s. Impossible to remove it. Skipping.\n", volumeId, c.ID) continue } if err := srv.runtime.volumes.Delete(volumeId); err != nil { @@ -715,7 +715,7 @@ func (srv *Server) ImageDelete(name string) error { if err != nil { return fmt.Errorf("No such image: %s", name) } - if err := srv.runtime.graph.Delete(img.Id); err != nil { + if err := srv.runtime.graph.Delete(img.ID); err != nil { return fmt.Errorf("Error deleting image %s: %s", name, err.Error()) } return nil @@ -735,7 +735,7 @@ func (srv *Server) ImageGetCached(imgId string, config *Config) (*Image, error) if _, exists := imageMap[img.Parent]; !exists { imageMap[img.Parent] = make(map[string]struct{}) } - imageMap[img.Parent][img.Id] = struct{}{} + imageMap[img.Parent][img.ID] = struct{}{} } // Loop on the children of the given image and check the config diff --git a/server_test.go b/server_test.go index b96e1dd5eb..ab43dd77e8 100644 --- a/server_test.go +++ b/server_test.go @@ -13,7 +13,7 @@ func TestCreateRm(t *testing.T) { srv := &Server{runtime: runtime} - config, _, err := ParseRun([]string{GetTestImage(runtime).Id, "echo test"}, nil) + config, _, err := ParseRun([]string{GetTestImage(runtime).ID, "echo test"}, nil) if err != nil { t.Fatal(err) } @@ -46,7 +46,7 @@ func TestCreateStartRestartStopStartKillRm(t *testing.T) { srv := &Server{runtime: runtime} - config, _, err := ParseRun([]string{GetTestImage(runtime).Id, "/bin/cat"}, nil) + config, _, err := ParseRun([]string{GetTestImage(runtime).ID, "/bin/cat"}, nil) if err != nil { t.Fatal(err) } diff --git a/tags.go b/tags.go index 5bc2978e09..d862289ce6 100644 --- a/tags.go +++ b/tags.go @@ -11,7 +11,7 @@ import ( "strings" ) -const DEFAULT_TAG = "latest" +const DEFAULTTAG = "latest" type TagStore struct { path string @@ -72,7 +72,7 @@ func (store *TagStore) LookupImage(name string) (*Image, error) { // (so we can pass all errors here) repoAndTag := strings.SplitN(name, ":", 2) if len(repoAndTag) == 1 { - repoAndTag = append(repoAndTag, DEFAULT_TAG) + repoAndTag = append(repoAndTag, DEFAULTTAG) } if i, err := store.GetImage(repoAndTag[0], repoAndTag[1]); err != nil { return nil, err @@ -87,27 +87,27 @@ func (store *TagStore) LookupImage(name string) (*Image, error) { // Return a reverse-lookup table of all the names which refer to each image // Eg. {"43b5f19b10584": {"base:latest", "base:v1"}} -func (store *TagStore) ById() map[string][]string { - byId := make(map[string][]string) +func (store *TagStore) ByID() map[string][]string { + byID := make(map[string][]string) for repoName, repository := range store.Repositories { for tag, id := range repository { name := repoName + ":" + tag - if _, exists := byId[id]; !exists { - byId[id] = []string{name} + if _, exists := byID[id]; !exists { + byID[id] = []string{name} } else { - byId[id] = append(byId[id], name) - sort.Strings(byId[id]) + byID[id] = append(byID[id], name) + sort.Strings(byID[id]) } } } - return byId + return byID } func (store *TagStore) ImageName(id string) string { - if names, exists := store.ById()[id]; exists && len(names) > 0 { + if names, exists := store.ByID()[id]; exists && len(names) > 0 { return names[0] } - return utils.TruncateId(id) + return utils.TruncateID(id) } func (store *TagStore) Set(repoName, tag, imageName string, force bool) error { @@ -116,7 +116,7 @@ func (store *TagStore) Set(repoName, tag, imageName string, force bool) error { return err } if tag == "" { - tag = DEFAULT_TAG + tag = DEFAULTTAG } if err := validateRepoName(repoName); err != nil { return err @@ -137,7 +137,7 @@ func (store *TagStore) Set(repoName, tag, imageName string, force bool) error { } store.Repositories[repoName] = repo } - repo[tag] = img.Id + repo[tag] = img.ID return store.Save() } diff --git a/utils/utils.go b/utils/utils.go index eb6b35677e..c84eff2d2c 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -349,11 +349,11 @@ func (idx *TruncIndex) Get(s string) (string, error) { return string(idx.bytes[before:after]), err } -// TruncateId returns a shorthand version of a string identifier for convenience. +// TruncateID returns a shorthand version of a string identifier for convenience. // A collision with other shorthands is very unlikely, but possible. // In case of a collision a lookup with TruncIndex.Get() will fail, and the caller // will need to use a langer prefix, or the full-length Id. -func TruncateId(id string) string { +func TruncateID(id string) string { shortLen := 12 if len(id) < shortLen { shortLen = len(id) @@ -566,7 +566,7 @@ func NewWriteFlusher(w io.Writer) *WriteFlusher { return &WriteFlusher{w: w, flusher: flusher} } -type JsonMessage struct { +type JSONMessage struct { Status string `json:"status,omitempty"` Progress string `json:"progress,omitempty"` Error string `json:"error,omitempty"` @@ -585,7 +585,7 @@ func (sf *StreamFormatter) FormatStatus(format string, a ...interface{}) []byte sf.used = true str := fmt.Sprintf(format, a...) if sf.json { - b, err := json.Marshal(&JsonMessage{Status:str}); + b, err := json.Marshal(&JSONMessage{Status:str}); if err != nil { return sf.FormatError(err) } @@ -597,7 +597,7 @@ func (sf *StreamFormatter) FormatStatus(format string, a ...interface{}) []byte func (sf *StreamFormatter) FormatError(err error) []byte { sf.used = true if sf.json { - if b, err := json.Marshal(&JsonMessage{Error:err.Error()}); err == nil { + if b, err := json.Marshal(&JSONMessage{Error:err.Error()}); err == nil { return b } return []byte("{\"error\":\"format error\"}") @@ -608,7 +608,7 @@ func (sf *StreamFormatter) FormatError(err error) []byte { func (sf *StreamFormatter) FormatProgress(action, str string) []byte { sf.used = true if sf.json { - b, err := json.Marshal(&JsonMessage{Progress:str}) + b, err := json.Marshal(&JSONMessage{Progress:str}) if err != nil { return nil } From 716892b95dd292c62d9bc7ca2951176e94657b00 Mon Sep 17 00:00:00 2001 From: Thatcher Peskens Date: Tue, 4 Jun 2013 11:33:39 -0700 Subject: [PATCH 23/38] Modified the navigation in both website and documentaion to include the Blog. --- docs/theme/docker/layout.html | 30 +++++++++---- docs/theme/docker/static/css/main.css | 41 +++++++++++++++++- docs/theme/docker/static/css/main.less | 41 ++++++++++++++++-- docs/website/gettingstarted/index.html | 27 +++++++----- docs/website/index.html | 58 +++++++++++++------------- 5 files changed, 145 insertions(+), 52 deletions(-) diff --git a/docs/theme/docker/layout.html b/docs/theme/docker/layout.html index d212c9ca86..baaaec9155 100755 --- a/docs/theme/docker/layout.html +++ b/docs/theme/docker/layout.html @@ -64,14 +64,15 @@
@@ -86,8 +87,13 @@
-

DOCUMENTATION

+
+ +

DOCUMENTATION

+
@@ -123,8 +129,14 @@