dev privileges, db
[arvados.git] / services / boot / consul.go
index 6ad5e6e69551f94718b1745c580613cc04205a25..9190aac53150a3404a34497d1e61b17362202c62 100644 (file)
@@ -8,6 +8,7 @@ import (
        "path"
        "strings"
        "sync"
+       "time"
 
        "github.com/hashicorp/consul/api"
 )
@@ -36,35 +37,37 @@ func (cb *consulBooter) Boot(ctx context.Context) error {
        if err != nil {
                return err
        }
-       dataDir := cfg.DataDir + "/consul"
+       dataDir := path.Join(cfg.DataDir, "consul")
        if err := os.MkdirAll(dataDir, 0700); err != nil {
                return err
        }
        args := []string{"agent"}
        {
                cf := path.Join(cfg.DataDir, "consul-encrypt.json")
-               _, err := os.Stat(cf)
-               if os.IsNotExist(err) {
+               if _, err := os.Stat(cf); err != nil && !os.IsNotExist(err) {
+                       return err
+               } else if err != nil {
                        key, err := exec.Command(bin, "keygen").CombinedOutput()
                        if err != nil {
                                return err
                        }
-                       err = atomicWriteJSON(cf, map[string]interface{}{
+                       if err = atomicWriteJSON(cf, map[string]interface{}{
                                "encrypt": strings.TrimSpace(string(key)),
-                       }, 0400)
-               }
-               if err != nil {
-                       return err
+                       }, 0400); err != nil {
+                               return err
+                       }
                }
                args = append(args, "-config-file="+cf)
        }
        {
                cf := path.Join(cfg.DataDir, "consul-ports.json")
                err = atomicWriteJSON(cf, map[string]interface{}{
+                       "client_addr":      "0.0.0.0",
                        "bootstrap_expect": len(cfg.ControlHosts),
                        "data_dir":         dataDir,
                        "datacenter":       cfg.SiteID,
                        "server":           true,
+                       "ui":               true,
                        "ports": map[string]int{
                                "dns":      cfg.Ports.ConsulDNS,
                                "http":     cfg.Ports.ConsulHTTP,
@@ -80,7 +83,7 @@ func (cb *consulBooter) Boot(ctx context.Context) error {
                }
                args = append(args, "-config-file="+cf)
        }
-       supervisor := newSupervisor(ctx, "consul", bin, args...)
+       supervisor := newSupervisor(ctx, "arvados-consul", bin, args...)
        running, err := supervisor.Running(ctx)
        if err != nil {
                return err
@@ -101,7 +104,7 @@ func (cb *consulBooter) Boot(ctx context.Context) error {
                        }
                }
        }
-       return cb.check(ctx)
+       return waitCheck(ctx, 30*time.Second, cb.check)
 }
 
 var consulCfg = api.DefaultConfig()