9 "github.com/hashicorp/consul/api"
12 type consulService struct {
16 func (cs *consulService) Init(cfg *Config) {
20 "-advertise=127.0.0.1",
21 "-data-dir", cfg.DataDir + "/consul",
22 "-bootstrap-expect", fmt.Sprintf("%d", len(cfg.ControlHosts))}
23 cs.supervisor = newSupervisor("consul", "/usr/local/bin/consul", args...)
26 func (cs *consulService) Children() []task {
30 func (cs *consulService) ShortName() string {
31 return "consul running"
34 func (cs *consulService) String() string {
35 return "Ensure consul daemon is supervised & running"
38 func (cs *consulService) Check() error {
39 consul, err := api.NewClient(api.DefaultConfig())
43 _, err = consul.Catalog().Datacenters()
50 func (cs *consulService) CanFix() bool {
54 func (cs *consulService) Fix() error {
55 err := cs.supervisor.Start()
60 if len(cfg.ControlHosts) > 1 {
61 cmd := exec.Command("/usr/local/bin/consul", append([]string{"join"}, cfg.ControlHosts...)...)
62 cmd.Stdout = os.Stderr
63 cmd.Stderr = os.Stderr
70 timeout := time.After(10 * time.Second)
71 ticker := time.NewTicker(50 * time.Millisecond)
73 for cs.Check() != nil {