diff --git a/scheduler.go b/scheduler.go index 9735291..6cfdbe5 100644 --- a/scheduler.go +++ b/scheduler.go @@ -11,6 +11,7 @@ import ( "os" "time" "bitbucket.org/bingcloud/electron/pcp" + "strings" ) const ( @@ -179,13 +180,21 @@ func (s *electronScheduler) ResourceOffers(driver sched.SchedulerDriver, offers default: } - tasks := []*mesos.TaskInfo{} // First fit strategy taken := false for i, task := range s.tasks { + + // Check host if it exists + if task.Host != "" { + // Don't take offer if it doesn't match our task's host requirement + if !strings.HasPrefix(*offer.Hostname, task.Host) { + continue + } + } + // Decision to take the offer or not if TakeOffer(offer, task) { @@ -274,10 +283,16 @@ func (s *electronScheduler) Error(_ sched.SchedulerDriver, err string) { log.Printf("Receiving an error: %s", err) } +var master = flag.String("master", "xavier:5050", "Location of leading Mesos master") +var tasksFile = flag.String("workload", "", "JSON file containing task definitions") +var ignoreWatts = flag.Bool("ignoreWatts", false, "Don't use watts from offers") + +// Short hand args +func init(){ + flag.StringVar(tasksFile, "w", "", "JSON file containing task definitions") +} + func main() { - master := flag.String("master", "xavier:5050", "Location of leading Mesos master") - tasksFile := flag.String("workload", "", "JSON file containing task definitions") - ignoreWatts := flag.Bool("ignoreWatts", false, "Don't use watts from offers") flag.Parse() IGNORE_WATTS = *ignoreWatts diff --git a/task.go b/task.go index 9d4bd01..cbc0e5a 100644 --- a/task.go +++ b/task.go @@ -14,6 +14,7 @@ type Task struct { Image string `json:"image"` CMD string `json:"cmd"` Instances *int `json:"inst"` + Host string `json:"host"` } func TasksFromJSON(uri string) ([]Task, error) {