12 "github.com/hashicorp/nomad/api"
15 var nomad = &nomadBooter{}
17 type nomadBooter struct {
21 func (nb *nomadBooter) Boot(ctx context.Context) error {
25 if nb.check(ctx) == nil {
29 bin := cfg.UsrDir + "/bin/nomad"
31 URL: "https://releases.hashicorp.com/nomad/0.5.4/nomad_0.5.4_linux_amd64.zip",
40 masterToken, err := ioutil.ReadFile(cfg.masterTokenFile())
45 dataDir := path.Join(cfg.DataDir, "nomad")
46 if err := os.MkdirAll(dataDir, 0700); err != nil {
50 cf := path.Join(cfg.DataDir, "nomad.json")
51 err = atomicWriteJSON(cf, map[string]interface{}{
52 "client": map[string]interface{}{
54 "options": map[string]interface{}{
55 "driver.raw_exec.enable": true,
58 "consul": map[string]interface{}{
59 "address": fmt.Sprintf("127.0.0.1:%d", cfg.Ports.ConsulHTTP),
60 "token": string(masterToken),
63 "datacenter": cfg.SiteID,
64 "ports": map[string]int{
65 "http": cfg.Ports.NomadHTTP,
66 "rpc": cfg.Ports.NomadRPC,
67 "serf": cfg.Ports.NomadSerf,
69 "server": map[string]interface{}{
71 "bootstrap_expect": len(cfg.ControlHosts),
78 supervisor := newSupervisor(ctx, "arvados-nomad", bin, "agent", "-config="+cf)
79 running, err := supervisor.Running(ctx)
84 defer feedbackf(ctx, "starting nomad service")()
85 err = supervisor.Start(ctx)
87 return fmt.Errorf("starting nomad: %s", err)
90 return waitCheck(ctx, 30*time.Second, nb.check)
93 var nomadCfg = api.DefaultConfig()
95 func (nb *nomadBooter) check(ctx context.Context) error {
97 nomadCfg.Address = fmt.Sprintf("http://127.0.0.1:%d", cfg.Ports.NomadHTTP)
98 nomad, err := api.NewClient(nomadCfg)
102 _, err = nomad.Agent().Datacenter()