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  }