func (sw Swarm) Initialize(servers []string) (err error) { var clusterContainers []*engine.Container var engines []docker.Docker // Ensure the cluster is in Store if err = sw.Store.Write("/cluster", "", ""); err != nil { return err } // Nodes for _, server := range servers { // Connect to Docker log.Infoln("Connecting to Docker on:", server) eng, err := docker.New(server, "") engines = append(engines, eng) if err != nil { return err } // Agent if _, err = sw.agent(server, eng); err != nil { return err } } // Manager var swarmManager *engine.Container for _, container := range clusterContainers { if container.Name == "swarm_manager" { swarmManager = container break } } if swarmManager == nil { i := utils.PickServer(servers) if swarmManager, err = sw.manager(servers[i], engines[i]); err != nil { return } } // Connect manager log.Infoln("Connecting to Swarm manager on:", "tcp://"+swarmManager.Addr()) for i := 0; i < 3; i++ { // We have to wait swarm manager to init time.Sleep(200 * time.Millisecond) _, err = docker.New("tcp://"+swarmManager.Addr(), "") if err == nil { break } } if err != nil { return } return sw.Store.Write("manager", swarmManager.Addr(), "cluster/docker/swarm") }