mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
a0a473125b
After moving libnetwork to this repo, we need to update all the import paths for libnetwork to point to docker/docker/libnetwork instead of docker/libnetwork. This change implements that. Signed-off-by: Brian Goff <cpuguy83@gmail.com>
111 lines
2.5 KiB
Go
111 lines
2.5 KiB
Go
package dbserver
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"log"
|
|
"net"
|
|
"net/http"
|
|
"os"
|
|
"strconv"
|
|
|
|
"github.com/docker/docker/libnetwork/cmd/networkdb-test/dummyclient"
|
|
"github.com/docker/docker/libnetwork/diagnostic"
|
|
"github.com/docker/docker/libnetwork/networkdb"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
var nDB *networkdb.NetworkDB
|
|
var server *diagnostic.Server
|
|
var ipAddr string
|
|
|
|
var testerPaths2Func = map[string]diagnostic.HTTPHandlerFunc{
|
|
"/myip": ipaddress,
|
|
}
|
|
|
|
func ipaddress(ctx interface{}, w http.ResponseWriter, r *http.Request) {
|
|
fmt.Fprintf(w, "%s\n", ipAddr)
|
|
}
|
|
|
|
// Server starts the server
|
|
func Server(args []string) {
|
|
logrus.Infof("[SERVER] Starting with arguments %v", args)
|
|
if len(args) < 1 {
|
|
log.Fatal("Port number is a mandatory argument, aborting...")
|
|
}
|
|
port, _ := strconv.Atoi(args[0])
|
|
var localNodeName string
|
|
var ok bool
|
|
if localNodeName, ok = os.LookupEnv("TASK_ID"); !ok {
|
|
log.Fatal("TASK_ID environment variable not set, aborting...")
|
|
}
|
|
logrus.Infof("[SERVER] Starting node %s on port %d", localNodeName, port)
|
|
|
|
ip, err := getIPInterface("eth0")
|
|
if err != nil {
|
|
logrus.Errorf("%s There was a problem with the IP %s\n", localNodeName, err)
|
|
return
|
|
}
|
|
ipAddr = ip
|
|
logrus.Infof("%s uses IP %s\n", localNodeName, ipAddr)
|
|
|
|
server = diagnostic.New()
|
|
server.Init()
|
|
conf := networkdb.DefaultConfig()
|
|
conf.Hostname = localNodeName
|
|
conf.AdvertiseAddr = ipAddr
|
|
conf.BindAddr = ipAddr
|
|
nDB, err = networkdb.New(conf)
|
|
if err != nil {
|
|
logrus.Infof("%s error in the DB init %s\n", localNodeName, err)
|
|
return
|
|
}
|
|
|
|
// Register network db handlers
|
|
server.RegisterHandler(nDB, networkdb.NetDbPaths2Func)
|
|
server.RegisterHandler(nil, testerPaths2Func)
|
|
server.RegisterHandler(nDB, dummyclient.DummyClientPaths2Func)
|
|
server.EnableDiagnostic("", port)
|
|
// block here
|
|
select {}
|
|
}
|
|
|
|
func getIPInterface(name string) (string, error) {
|
|
ifaces, err := net.Interfaces()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
for _, iface := range ifaces {
|
|
if iface.Name != name {
|
|
continue // not the name specified
|
|
}
|
|
|
|
if iface.Flags&net.FlagUp == 0 {
|
|
return "", errors.New("Interfaces is down")
|
|
}
|
|
|
|
addrs, err := iface.Addrs()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
for _, addr := range addrs {
|
|
var ip net.IP
|
|
switch v := addr.(type) {
|
|
case *net.IPNet:
|
|
ip = v.IP
|
|
case *net.IPAddr:
|
|
ip = v.IP
|
|
}
|
|
if ip == nil || ip.IsLoopback() {
|
|
continue
|
|
}
|
|
ip = ip.To4()
|
|
if ip == nil {
|
|
continue
|
|
}
|
|
return ip.String(), nil
|
|
}
|
|
return "", errors.New("Interfaces does not have a valid IPv4")
|
|
}
|
|
return "", errors.New("Interface not found")
|
|
}
|