github.com/technosophos/deis@v1.7.1-0.20150915173815-f9005256004b/deisctl/cmd/mesos.go (about) 1 package cmd 2 3 import ( 4 "fmt" 5 "io" 6 "sync" 7 8 "github.com/deis/deis/deisctl/backend" 9 "github.com/deis/deis/pkg/prettyprint" 10 ) 11 12 // InstallMesos loads all Mesos units for StartMesos 13 func InstallMesos(b backend.Backend) error { 14 15 var wg sync.WaitGroup 16 17 io.WriteString(Stdout, prettyprint.DeisIfy("Installing Mesos/Marathon...")) 18 19 installMesosServices(b, &wg, Stdout, Stderr) 20 21 wg.Wait() 22 23 fmt.Fprintln(Stdout, "Done.\n ") 24 fmt.Fprintln(Stdout, "Please run `deisctl start mesos` to boot up Mesos.") 25 return nil 26 } 27 28 func installMesosServices(b backend.Backend, wg *sync.WaitGroup, out, err io.Writer) { 29 30 fmt.Fprintln(out, "Mesos/Marathon control plane...") 31 b.Create([]string{"zookeeper", "mesos-master"}, wg, out, err) 32 wg.Wait() 33 b.Create([]string{"mesos-marathon"}, wg, out, err) 34 wg.Wait() 35 36 fmt.Fprintln(out, "Mesos/Marathon data plane...") 37 b.Create([]string{"mesos-slave"}, wg, out, err) 38 wg.Wait() 39 } 40 41 // UninstallMesos unloads and uninstalls all Mesos component definitions 42 func UninstallMesos(b backend.Backend) error { 43 44 var wg sync.WaitGroup 45 46 io.WriteString(Stdout, prettyprint.DeisIfy("Uninstalling Mesos/Marathon...")) 47 48 uninstallMesosServices(b, &wg, Stdout, Stderr) 49 50 wg.Wait() 51 52 fmt.Fprintln(Stdout, "Done.\n ") 53 return nil 54 } 55 56 func uninstallMesosServices(b backend.Backend, wg *sync.WaitGroup, out, err io.Writer) error { 57 58 fmt.Fprintln(out, "Mesos/Marathon data plane...") 59 b.Destroy([]string{"mesos-slave"}, wg, out, err) 60 wg.Wait() 61 62 fmt.Fprintln(out, "Mesos/Marathon control plane...") 63 b.Destroy([]string{"mesos-marathon", "mesos-master", "zookeeper"}, wg, out, err) 64 wg.Wait() 65 66 return nil 67 } 68 69 // StartMesos activates all Mesos components. 70 func StartMesos(b backend.Backend) error { 71 72 var wg sync.WaitGroup 73 74 io.WriteString(Stdout, prettyprint.DeisIfy("Starting Mesos/Marathon...")) 75 76 startMesosServices(b, &wg, Stdout, Stderr) 77 78 wg.Wait() 79 80 fmt.Fprintln(Stdout, "Done.\n ") 81 fmt.Fprintln(Stdout, "Please use `deisctl config controller set schedulerModule=mesos_marathon`") 82 return nil 83 } 84 85 func startMesosServices(b backend.Backend, wg *sync.WaitGroup, out, err io.Writer) { 86 87 fmt.Fprintln(out, "Mesos/Marathon control plane...") 88 b.Start([]string{"zookeeper"}, wg, out, err) 89 wg.Wait() 90 b.Start([]string{"mesos-master"}, wg, out, err) 91 wg.Wait() 92 b.Start([]string{"mesos-marathon"}, wg, out, err) 93 wg.Wait() 94 95 fmt.Fprintln(out, "Mesos/Marathon data plane...") 96 b.Start([]string{"mesos-slave"}, wg, out, err) 97 wg.Wait() 98 99 wg.Wait() 100 } 101 102 // StopMesos deactivates all Mesos components. 103 func StopMesos(b backend.Backend) error { 104 105 var wg sync.WaitGroup 106 107 io.WriteString(Stdout, prettyprint.DeisIfy("Stopping Mesos/Marathon...")) 108 109 stopMesosServices(b, &wg, Stdout, Stderr) 110 111 wg.Wait() 112 113 fmt.Fprintln(Stdout, "Done.\n ") 114 fmt.Fprintln(Stdout, "Please run `deisctl start mesos` to restart Mesos.") 115 return nil 116 } 117 118 func stopMesosServices(b backend.Backend, wg *sync.WaitGroup, out, err io.Writer) { 119 120 fmt.Fprintln(out, "Mesos/Marathon data plane...") 121 b.Stop([]string{"mesos-slave"}, wg, out, err) 122 wg.Wait() 123 124 fmt.Fprintln(out, "Mesos/Marathon control plane...") 125 b.Stop([]string{"mesos-marathon"}, wg, out, err) 126 wg.Wait() 127 b.Stop([]string{"mesos-master"}, wg, out, err) 128 wg.Wait() 129 b.Stop([]string{"zookeeper"}, wg, out, err) 130 wg.Wait() 131 }