github.com/billybanfield/evergreen@v0.0.0-20170525200750-eeee692790f7/model/host_manipulation.go (about) 1 package model 2 3 import ( 4 "time" 5 6 "github.com/evergreen-ci/evergreen" 7 "github.com/evergreen-ci/evergreen/cloud/providers/static" 8 "github.com/evergreen-ci/evergreen/model/distro" 9 "github.com/evergreen-ci/evergreen/model/host" 10 "github.com/evergreen-ci/evergreen/model/task" 11 "github.com/evergreen-ci/evergreen/util" 12 "github.com/mitchellh/mapstructure" 13 "github.com/pkg/errors" 14 ) 15 16 // TODO(MCI-2245): 17 // This is a temporary package for storing host-related interactions that involve multiple models. 18 19 // NextTaskForHost the next task that should be run on the host. 20 func NextTaskForHost(h *host.Host) (*task.Task, error) { 21 taskQueue, err := FindTaskQueueForDistro(h.Distro.Id) 22 if err != nil { 23 return nil, err 24 } 25 26 if taskQueue == nil || taskQueue.IsEmpty() { 27 return nil, nil 28 } 29 30 nextTaskId := taskQueue.Queue[0].Id 31 fullTask, err := task.FindOne(task.ById(nextTaskId)) 32 if err != nil { 33 return nil, err 34 } 35 36 return fullTask, nil 37 } 38 39 func UpdateStaticHosts(e *evergreen.Settings) error { 40 distros, err := distro.Find(distro.ByProvider(static.ProviderName)) 41 if err != nil { 42 return err 43 } 44 activeStaticHosts := make([]string, 0) 45 settings := &static.Settings{} 46 47 for _, d := range distros { 48 err = mapstructure.Decode(d.ProviderSettings, settings) 49 if err != nil { 50 return errors.Errorf("invalid static settings for '%v'", d.Id) 51 } 52 for _, h := range settings.Hosts { 53 hostInfo, err := util.ParseSSHInfo(h.Name) 54 if err != nil { 55 return err 56 } 57 user := hostInfo.User 58 if user == "" { 59 user = d.User 60 } 61 staticHost := host.Host{ 62 Id: h.Name, 63 User: user, 64 Host: h.Name, 65 Distro: d, 66 CreationTime: time.Now(), 67 Provider: evergreen.HostTypeStatic, 68 StartedBy: evergreen.User, 69 Status: evergreen.HostRunning, 70 Provisioned: true, 71 } 72 73 // upsert the host 74 _, err = staticHost.Upsert() 75 if err != nil { 76 return err 77 } 78 activeStaticHosts = append(activeStaticHosts, h.Name) 79 } 80 } 81 return host.DecommissionInactiveStaticHosts(activeStaticHosts) 82 }