summaryrefslogtreecommitdiff
path: root/libnetwork/cmd
diff options
context:
space:
mode:
authorSebastiaan van Stijn <github@gone.nl>2020-09-12 01:15:04 +0200
committerSebastiaan van Stijn <github@gone.nl>2020-09-12 02:38:39 +0200
commit681196c8f283c942e3b29ccf50063732ed40e2bb (patch)
tree4abcfd4787f3ffe0842a42ecb6fb9d84123b0934 /libnetwork/cmd
parentbf28003c99ef6900d0b006450cd9b6bdf3a23f72 (diff)
downloaddocker-681196c8f283c942e3b29ccf50063732ed40e2bb.tar.gz
Remove dependency on github.com/docker/docker/opts
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Diffstat (limited to 'libnetwork/cmd')
-rw-r--r--libnetwork/cmd/dnet/dnet.go79
1 files changed, 74 insertions, 5 deletions
diff --git a/libnetwork/cmd/dnet/dnet.go b/libnetwork/cmd/dnet/dnet.go
index f56011dfad..1543cbb989 100644
--- a/libnetwork/cmd/dnet/dnet.go
+++ b/libnetwork/cmd/dnet/dnet.go
@@ -11,19 +11,18 @@ import (
"net"
"net/http"
"net/http/httptest"
+ "net/url"
"os"
"os/signal"
+ "strconv"
"strings"
"syscall"
"time"
"github.com/BurntSushi/toml"
- "github.com/docker/docker/opts"
+ "github.com/docker/docker/api/types/network"
"github.com/docker/docker/pkg/discovery"
"github.com/docker/docker/pkg/reexec"
- "github.com/urfave/cli"
-
- "github.com/docker/docker/api/types/network"
"github.com/docker/docker/pkg/term"
"github.com/docker/libnetwork"
"github.com/docker/libnetwork/api"
@@ -37,6 +36,7 @@ import (
"github.com/docker/libnetwork/types"
"github.com/gorilla/mux"
"github.com/sirupsen/logrus"
+ "github.com/urfave/cli"
)
const (
@@ -416,7 +416,7 @@ func startTestDriver() error {
}
func newDnetConnection(val string) (*dnetConnection, error) {
- url, err := opts.ParseHost(false, false, val)
+ url, err := parseHost(val)
if err != nil {
return nil, err
}
@@ -431,6 +431,75 @@ func newDnetConnection(val string) (*dnetConnection, error) {
return &dnetConnection{protoAddrParts[0], protoAddrParts[1], &NetworkOrchestration{}, make(chan cluster.ConfigEventType, 10)}, nil
}
+const (
+ defaultUnixSocket = "unix:///var/run/docker.sock"
+ defaultTCPHost = "tcp://localhost:2375"
+)
+
+// parseHost and set defaults for a Daemon host string.
+func parseHost(val string) (string, error) {
+ host := strings.TrimSpace(val)
+ if host == "" {
+ return defaultUnixSocket, nil
+ }
+
+ addrParts := strings.SplitN(host, "://", 2)
+ if len(addrParts) == 1 && addrParts[0] != "" {
+ addrParts = []string{"tcp", addrParts[0]}
+ }
+ if addrParts[0] != "tcp" {
+ return "", errors.New("dnet currently only supports tcp transport")
+ }
+
+ return parseTCPAddr(addrParts[1], defaultTCPHost)
+}
+
+// parseTCPAddr parses and validates that the specified address is a valid TCP
+// address. It returns a formatted TCP address, either using the address parsed
+// from tryAddr, or the contents of defaultAddr if tryAddr is a blank string.
+// tryAddr is expected to have already been Trim()'d
+// defaultAddr must be in the full `tcp://host:port` form
+func parseTCPAddr(tryAddr string, defaultAddr string) (string, error) {
+ if tryAddr == "" || tryAddr == "tcp://" {
+ return defaultAddr, nil
+ }
+ addr := strings.TrimPrefix(tryAddr, "tcp://")
+ if strings.Contains(addr, "://") || addr == "" {
+ return "", fmt.Errorf("Invalid proto, expected tcp: %s", tryAddr)
+ }
+
+ defaultAddr = strings.TrimPrefix(defaultAddr, "tcp://")
+ defaultHost, defaultPort, err := net.SplitHostPort(defaultAddr)
+ if err != nil {
+ return "", err
+ }
+ u, err := url.Parse("tcp://" + addr)
+ if err != nil {
+ return "", err
+ }
+ host, port, err := net.SplitHostPort(u.Host)
+ if err != nil {
+ // try port addition once
+ host, port, err = net.SplitHostPort(net.JoinHostPort(u.Host, defaultPort))
+ }
+ if err != nil {
+ return "", fmt.Errorf("Invalid bind address format: %s", tryAddr)
+ }
+
+ if host == "" {
+ host = defaultHost
+ }
+ if port == "" {
+ port = defaultPort
+ }
+ p, err := strconv.Atoi(port)
+ if err != nil && p == 0 {
+ return "", fmt.Errorf("Invalid bind address format: %s", tryAddr)
+ }
+
+ return fmt.Sprintf("tcp://%s%s", net.JoinHostPort(host, port), u.Path), nil
+}
+
func (d *dnetConnection) httpCall(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, http.Header, int, error) {
var in io.Reader
in, err := encodeData(data)