func HostsList(configStore *config.Store, env, pool string) error { envs := []string{env} if env == "" { var err error envs, err = configStore.ListEnvs() if err != nil { return err } } columns := []string{"ENV | POOL | HOST IP "} for _, env := range envs { var err error pools := []string{pool} if pool == "" { pools, err = configStore.ListPools(env) if err != nil { return err } } for _, pool := range pools { hosts, err := configStore.ListHosts(env, pool) if err != nil { return err } if len(hosts) == 0 { columns = append(columns, strings.Join([]string{ env, pool, "", }, " | ")) continue } for _, p := range hosts { columns = append(columns, strings.Join([]string{ env, pool, p.HostIP, }, " | ")) } } } output, _ := columnize.SimpleFormat(columns) log.Println(output) return nil }
// Balanced returns the number of instances that should be run on the host // according to the desired state for the app in the given env and pool. The // number returned for the host represent an approximately equal distribution // across all hosts. func Balanced(configStore *config.Store, hostId, app, env, pool string) (int, error) { hosts, err := configStore.ListHosts(env, pool) if err != nil { return 0, err } cfg, err := configStore.GetApp(app, env) if err != nil { return 0, err } desired := cfg.GetProcesses(pool) if desired == 0 { return 0, nil } if desired == -1 { return 1, nil } hostIds := []string{} for _, h := range hosts { hostIds = append(hostIds, h.HostIP) } sort.Strings(hostIds) hostIdx := -1 for i, v := range hostIds { if v == hostId { hostIdx = i break } } if hostIdx < 0 { return 0, nil } count := 0 for i := 0; i < desired; i++ { if i%len(hosts) == hostIdx { count = count + 1 } } return count, nil }