diff --git a/prog/plugin/main.go b/prog/plugin/main.go index 01bad7f6..98e5fe42 100644 --- a/prog/plugin/main.go +++ b/prog/plugin/main.go @@ -69,25 +69,35 @@ func main() { Log.Println("Weave plugin", version, "Command line options:", os.Args[1:]) Log.Info(dockerClient.Info()) - var globalListener, meshListener net.Listener + err = run(dockerClient, address, meshAddress, meshNetworkName, nameserver, noMulticastRoute) + if err != nil { + Log.Fatal(err) + } +} + +func run(dockerClient *docker.Client, address, meshAddress, meshNetworkName, nameserver string, noMulticastRoute bool) error { 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) + return err } + defer os.Remove(address) 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) + return err } + defer os.Remove(meshAddress) defer meshListener.Close() } if meshNetworkName != "" { - createNetwork(dockerClient, meshNetworkName, meshAddress) + if err := createNetwork(dockerClient, meshNetworkName, meshAddress); err != nil { + return err + } } sigChan := make(chan os.Signal, 1) @@ -96,16 +106,12 @@ func main() { select { case sig := <-sigChan: Log.Debugf("Caught signal %s; shutting down", sig) - if err := dockerClient.Client.RemoveNetwork(meshNetworkName); err != nil { - Log.Fatal(err) + if meshNetworkName != "" { + return dockerClient.Client.RemoveNetwork(meshNetworkName) } + return nil case err := <-endChan: - if err != nil { - Log.Errorf("Error from listener: %s", err) - globalListener.Close() - meshListener.Close() - os.Exit(1) - } + return err } } @@ -141,7 +147,7 @@ func listenAndServe(dockerClient *docker.Client, address, nameserver string, noM return listener, nil } -func createNetwork(dockerClient *docker.Client, networkName, address string) { +func createNetwork(dockerClient *docker.Client, networkName, address string) error { if _, err := dockerClient.Client.NetworkInfo(networkName); err == nil { Log.Printf("Docker network '%s' already exists", networkName) } else if _, ok := err.(*go_docker.NoSuchNetwork); ok { @@ -157,7 +163,8 @@ func createNetwork(dockerClient *docker.Client, networkName, address string) { } _, err := dockerClient.Client.CreateNetwork(options) if err != nil { - Log.Fatalf("Error creating network: %s", err) + return fmt.Errorf("Error creating network: %s", err) } } + return nil }