Pārlūkot izejas kodu

Merge pull request #15330 from runcom/refactor-pkg-systemd

Vendor go-systemd daemon and refactor pkg systemd
Alexander Morozov 10 gadi atpakaļ
vecāks
revīzija
f6106fc3ce

+ 36 - 3
api/server/server_unix.go

@@ -10,8 +10,10 @@ import (
 
 	"github.com/docker/docker/daemon"
 	"github.com/docker/docker/pkg/sockets"
-	"github.com/docker/docker/pkg/systemd"
 	"github.com/docker/libnetwork/portallocator"
+
+	systemdActivation "github.com/coreos/go-systemd/activation"
+	systemdDaemon "github.com/coreos/go-systemd/daemon"
 )
 
 // newServer sets up the required serverClosers and does protocol specific checking.
@@ -22,7 +24,7 @@ func (s *Server) newServer(proto, addr string) ([]serverCloser, error) {
 	)
 	switch proto {
 	case "fd":
-		ls, err = systemd.ListenFD(addr)
+		ls, err = listenFD(addr)
 		if err != nil {
 			return nil, err
 		}
@@ -65,7 +67,7 @@ func (s *Server) AcceptConnections(d *daemon.Daemon) {
 	// Tell the init daemon we are accepting requests
 	s.daemon = d
 	s.registerSubRouter()
-	go systemd.SdNotify("READY=1")
+	go systemdDaemon.SdNotify("READY=1")
 	// close the lock so the listeners start accepting connections
 	select {
 	case <-s.start:
@@ -110,3 +112,34 @@ func getContainersByNameDownlevel(w http.ResponseWriter, s *Server, namevar stri
 	}
 	return writeJSON(w, http.StatusOK, containerJSONRaw)
 }
+
+// listenFD returns the specified socket activated files as a slice of
+// net.Listeners or all of the activated files if "*" is given.
+func listenFD(addr string) ([]net.Listener, error) {
+	// socket activation
+	listeners, err := systemdActivation.Listeners(false)
+	if err != nil {
+		return nil, err
+	}
+
+	if listeners == nil || len(listeners) == 0 {
+		return nil, fmt.Errorf("No sockets found")
+	}
+
+	// default to all fds just like unix:// and tcp://
+	if addr == "" {
+		addr = "*"
+	}
+
+	fdNum, _ := strconv.Atoi(addr)
+	fdOffset := fdNum - 3
+	if (addr != "*") && (len(listeners) < int(fdOffset)+1) {
+		return nil, fmt.Errorf("Too few socket activated files passed in")
+	}
+
+	if addr == "*" {
+		return listeners, nil
+	}
+
+	return []net.Listener{listeners[fdOffset]}, nil
+}

+ 0 - 40
pkg/systemd/listendfd.go

@@ -1,40 +0,0 @@
-package systemd
-
-import (
-	"errors"
-	"net"
-	"strconv"
-
-	"github.com/coreos/go-systemd/activation"
-)
-
-// ListenFD returns the specified socket activated files as a slice of
-// net.Listeners or all of the activated files if "*" is given.
-func ListenFD(addr string) ([]net.Listener, error) {
-	// socket activation
-	listeners, err := activation.Listeners(false)
-	if err != nil {
-		return nil, err
-	}
-
-	if listeners == nil || len(listeners) == 0 {
-		return nil, errors.New("No sockets found")
-	}
-
-	// default to all fds just like unix:// and tcp://
-	if addr == "" {
-		addr = "*"
-	}
-
-	fdNum, _ := strconv.Atoi(addr)
-	fdOffset := fdNum - 3
-	if (addr != "*") && (len(listeners) < int(fdOffset)+1) {
-		return nil, errors.New("Too few socket activated files passed in")
-	}
-
-	if addr == "*" {
-		return listeners, nil
-	}
-
-	return []net.Listener{listeners[fdOffset]}, nil
-}

+ 7 - 10
pkg/systemd/sd_notify.go → vendor/src/github.com/coreos/go-systemd/daemon/sdnotify.go

@@ -1,4 +1,5 @@
-package systemd
+// Code forked from Docker project
+package daemon
 
 import (
 	"errors"
@@ -6,10 +7,9 @@ import (
 	"os"
 )
 
-// ErrSdNotifyNoSocket is an error returned if no socket was specified.
-var ErrSdNotifyNoSocket = errors.New("No socket")
+var SdNotifyNoSocket = errors.New("No socket")
 
-// SdNotify sends a message to the init daemon. It is common to ignore the return value.
+// SdNotify sends a message to the init daemon. It is common to ignore the error.
 func SdNotify(state string) error {
 	socketAddr := &net.UnixAddr{
 		Name: os.Getenv("NOTIFY_SOCKET"),
@@ -17,18 +17,15 @@ func SdNotify(state string) error {
 	}
 
 	if socketAddr.Name == "" {
-		return ErrSdNotifyNoSocket
+		return SdNotifyNoSocket
 	}
 
 	conn, err := net.DialUnix(socketAddr.Net, nil, socketAddr)
 	if err != nil {
 		return err
 	}
+	defer conn.Close()
 
 	_, err = conn.Write([]byte(state))
-	if err != nil {
-		return err
-	}
-
-	return nil
+	return err
 }