func main() { var ( justVersion bool address string nameserver string meshAddress string logLevel string noMulticastRoute bool ) flag.BoolVar(&justVersion, "version", false, "print version and exit") flag.StringVar(&logLevel, "log-level", "info", "logging level (debug, info, warning, error)") flag.StringVar(&address, "socket", "/run/docker/plugins/weave.sock", "socket on which to listen") flag.StringVar(&nameserver, "nameserver", "", "nameserver to provide to containers") flag.StringVar(&meshAddress, "meshsocket", "/run/docker/plugins/weavemesh.sock", "socket on which to listen in mesh mode") flag.BoolVar(&noMulticastRoute, "no-multicast-route", false, "do not add a multicast route to network endpoints") flag.Parse() if justVersion { fmt.Printf("weave plugin %s\n", version) os.Exit(0) } SetLogLevel(logLevel) // API 1.21 is the first version that supports docker network commands dockerClient, err := docker.NewVersionedClientFromEnv("1.21") if err != nil { Log.Fatalf("unable to connect to docker: %s", err) } Log.Println("Weave plugin", version, "Command line options:", os.Args[1:]) Log.Info(dockerClient.Info()) var globalListener, meshListener net.Listener endChan := make(chan error, 1) if address != "" { globalListener, err := listenAndServe(dockerClient, address, nameserver, noMulticastRoute, endChan, "global", false) if err != nil { Log.Fatalf("unable to create driver: %s", err) } defer globalListener.Close() } if meshAddress != "" { meshListener, err := listenAndServe(dockerClient, meshAddress, nameserver, noMulticastRoute, endChan, "local", true) if err != nil { Log.Fatalf("unable to create driver: %s", err) } defer meshListener.Close() } err = <-endChan if err != nil { Log.Errorf("Error from listener: %s", err) globalListener.Close() meshListener.Close() os.Exit(1) } }
func main() { var ( justVersion bool cniNet bool cniIpam bool address string meshAddress string logLevel string noMulticastRoute bool ) flag.BoolVar(&justVersion, "version", false, "print version and exit") flag.BoolVar(&cniNet, "cni-net", false, "act as a CNI network plugin") flag.BoolVar(&cniIpam, "cni-ipam", false, "act as a CNI IPAM plugin") flag.StringVar(&logLevel, "log-level", "info", "logging level (debug, info, warning, error)") flag.StringVar(&address, "socket", "/run/docker/plugins/weave.sock", "socket on which to listen") flag.StringVar(&meshAddress, "meshsocket", "/run/docker/plugins/weavemesh.sock", "socket on which to listen in mesh mode") flag.BoolVar(&noMulticastRoute, "no-multicast-route", false, "deprecated (this is now the default)") flag.Parse() if justVersion { fmt.Printf("weave plugin %s\n", version) os.Exit(0) } common.SetLogLevel(logLevel) weave := weaveapi.NewClient(os.Getenv("WEAVE_HTTP_ADDR"), Log) switch { case cniIpam || strings.HasSuffix(os.Args[0], "weave-ipam"): i := ipamplugin.NewIpam(weave) cni.PluginMain(i.CmdAdd, i.CmdDel) os.Exit(0) case cniNet || strings.HasSuffix(os.Args[0], "weave-net"): n := netplugin.NewCNIPlugin(weave) cni.PluginMain(n.CmdAdd, n.CmdDel) os.Exit(0) } // API 1.21 is the first version that supports docker network commands dockerClient, err := docker.NewVersionedClientFromEnv("1.21") if err != nil { Log.Fatalf("unable to connect to docker: %s", err) } Log.Println("Weave plugin", version, "Command line options:", os.Args[1:]) if noMulticastRoute { Log.Warning("--no-multicast-route option has been removed; multicast is off by default") } Log.Info(dockerClient.Info()) err = run(dockerClient, weave, address, meshAddress) if err != nil { Log.Fatal(err) } }
func main() { var ( justVersion bool address string meshAddress string logLevel string noMulticastRoute bool ) flag.BoolVar(&justVersion, "version", false, "print version and exit") flag.StringVar(&logLevel, "log-level", "info", "logging level (debug, info, warning, error)") flag.StringVar(&address, "socket", "/run/docker/plugins/weave.sock", "socket on which to listen") flag.StringVar(&meshAddress, "meshsocket", "/run/docker/plugins/weavemesh.sock", "socket on which to listen in mesh mode") flag.BoolVar(&noMulticastRoute, "no-multicast-route", false, "do not add a multicast route to network endpoints") flag.Parse() if justVersion { fmt.Printf("weave plugin %s\n", version) os.Exit(0) } SetLogLevel(logLevel) // API 1.21 is the first version that supports docker network commands dockerClient, err := docker.NewVersionedClientFromEnv("1.21") if err != nil { Log.Fatalf("unable to connect to docker: %s", err) } weave := weaveapi.NewClient(os.Getenv("WEAVE_HTTP_ADDR")) Log.Println("Weave plugin", version, "Command line options:", os.Args[1:]) Log.Info(dockerClient.Info()) err = run(dockerClient, weave, address, meshAddress, noMulticastRoute) if err != nil { Log.Fatal(err) } }
func main() { var ( justVersion bool address string nameserver string meshAddress string logLevel string meshNetworkName string noMulticastRoute bool removeNetwork bool ) flag.BoolVar(&justVersion, "version", false, "print version and exit") flag.StringVar(&logLevel, "log-level", "info", "logging level (debug, info, warning, error)") flag.StringVar(&address, "socket", "/run/docker/plugins/weave.sock", "socket on which to listen") flag.StringVar(&nameserver, "nameserver", "", "nameserver to provide to containers") flag.StringVar(&meshAddress, "meshsocket", "/run/docker/plugins/weavemesh.sock", "socket on which to listen in mesh mode") flag.StringVar(&meshNetworkName, "mesh-network-name", "weave", "network name to create in mesh mode") flag.BoolVar(&noMulticastRoute, "no-multicast-route", false, "do not add a multicast route to network endpoints") flag.BoolVar(&removeNetwork, "remove-network", false, "remove mesh network and exit") flag.Parse() if justVersion { fmt.Printf("weave plugin %s\n", version) os.Exit(0) } SetLogLevel(logLevel) // API 1.21 is the first version that supports docker network commands dockerClient, err := docker.NewVersionedClientFromEnv("1.21") if err != nil { Log.Fatalf("unable to connect to docker: %s", err) } if removeNetwork { if _, err = dockerClient.Client.NetworkInfo(meshNetworkName); err == nil { err = dockerClient.Client.RemoveNetwork(meshNetworkName) if err != nil { Log.Fatalf("unable to remove network: %s", err) } } os.Exit(0) } Log.Println("Weave plugin", version, "Command line options:", os.Args[1:]) Log.Info(dockerClient.Info()) var globalListener, meshListener net.Listener endChan := make(chan error, 1) if address != "" { globalListener, err := listenAndServe(dockerClient, address, nameserver, noMulticastRoute, endChan, "global", false) if err != nil { Log.Fatalf("unable to create driver: %s", err) } defer globalListener.Close() } if meshAddress != "" { meshListener, err := listenAndServe(dockerClient, meshAddress, nameserver, noMulticastRoute, endChan, "local", true) if err != nil { Log.Fatalf("unable to create driver: %s", err) } defer meshListener.Close() } if meshNetworkName != "" { createNetwork(dockerClient, meshNetworkName, meshAddress) } sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, os.Interrupt, os.Kill, syscall.SIGTERM) select { case sig := <-sigChan: Log.Debugf("Caught signal %s; shutting down", sig) if err := dockerClient.Client.RemoveNetwork(meshNetworkName); err != nil { Log.Fatal(err) } case err := <-endChan: if err != nil { Log.Errorf("Error from listener: %s", err) globalListener.Close() meshListener.Close() os.Exit(1) } } }