feat: add global "ALLOWED_TASKS" variable
This commit is contained in:
parent
dd3c3eeb85
commit
cd5ad5d1ab
@ -24,6 +24,14 @@ arguments:
|
||||
|
||||
- `/healthz` - health endpoint, returns code `200` with text `OK`. Useful for kubernetes pods ready/live probes.
|
||||
|
||||
## global env variables
|
||||
|
||||
- `ALLOWED_TASKS` - list comma-separated task names, only tasks with these names will be processed. example:
|
||||
|
||||
```
|
||||
ALLOWED_TASKS=sleep,hello_world
|
||||
```
|
||||
|
||||
## config format
|
||||
|
||||
example:
|
||||
|
10
go.mod
10
go.mod
@ -1,9 +1,11 @@
|
||||
module github.com/jar3b/concron
|
||||
|
||||
go 1.13
|
||||
|
||||
require (
|
||||
github.com/jar3b/logrus-levelpad-formatter v1.0.0
|
||||
github.com/julienschmidt/httprouter v1.2.0
|
||||
github.com/robfig/cron v0.0.0-20180505203441-b41be1df6967
|
||||
github.com/sirupsen/logrus v1.4.0
|
||||
gopkg.in/yaml.v2 v2.2.2
|
||||
github.com/julienschmidt/httprouter v1.3.0
|
||||
github.com/robfig/cron v1.2.0
|
||||
github.com/sirupsen/logrus v1.4.2
|
||||
gopkg.in/yaml.v2 v2.2.7
|
||||
)
|
||||
|
13
src/main.go
13
src/main.go
@ -8,6 +8,8 @@ import (
|
||||
"github.com/julienschmidt/httprouter"
|
||||
log "github.com/sirupsen/logrus"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func healthHandler(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
||||
@ -39,8 +41,17 @@ func main() {
|
||||
|
||||
initLog(*debug)
|
||||
|
||||
// get allowed tasks
|
||||
var allowedTasks map[string]bool
|
||||
if os.Getenv("ALLOWED_TASKS") != "" {
|
||||
allowedTasks = make(map[string]bool, 0)
|
||||
for _, t := range strings.Split(os.Getenv("ALLOWED_TASKS"), ",") {
|
||||
allowedTasks[t] = true
|
||||
}
|
||||
}
|
||||
|
||||
// manage tasks
|
||||
taskList, err := tasks.LoadTasks(*configFile)
|
||||
taskList, err := tasks.LoadTasks(*configFile, &allowedTasks)
|
||||
if err != nil {
|
||||
log.Fatalf("cannot load %s: %v", *configFile, err)
|
||||
return
|
||||
|
@ -60,6 +60,9 @@ type Task struct {
|
||||
// task executions
|
||||
execCount int
|
||||
execMap map[int]*taskExecution
|
||||
|
||||
// allowed to run of not
|
||||
Enabled bool
|
||||
}
|
||||
|
||||
func (t *Task) init(shell string, systemEnvs *map[string]string) error {
|
||||
@ -163,7 +166,7 @@ type ConfigDescriptiveInfo struct {
|
||||
Tasks []*Task `yaml:"tasks"`
|
||||
}
|
||||
|
||||
func (di *ConfigDescriptiveInfo) InitTasks() []error {
|
||||
func (di *ConfigDescriptiveInfo) InitTasks(allowedTasksMap *map[string]bool) []error {
|
||||
var errList = make([]error, 0)
|
||||
var err error
|
||||
|
||||
@ -174,15 +177,32 @@ func (di *ConfigDescriptiveInfo) InitTasks() []error {
|
||||
env[pair[0]] = pair[1]
|
||||
}
|
||||
|
||||
var taskNames []string
|
||||
var taskNamesEnabled []string
|
||||
var taskNamesDisabled []string
|
||||
for _, t := range di.Tasks {
|
||||
if err = t.init(di.Shell, &env); err != nil {
|
||||
errList = append(errList, err)
|
||||
}
|
||||
taskNames = append(taskNames, t.Name)
|
||||
t.Enabled = true
|
||||
if allowedTasksMap != nil {
|
||||
t.Enabled = (*allowedTasksMap)[t.Name]
|
||||
}
|
||||
|
||||
log.Infof("%d tasks loaded - %s", len(di.Tasks), strings.Join(taskNames, ", "))
|
||||
if err = t.init(di.Shell, &env); err != nil {
|
||||
t.Enabled = false
|
||||
errList = append(errList, err)
|
||||
}
|
||||
|
||||
if t.Enabled {
|
||||
taskNamesEnabled = append(taskNamesEnabled, t.Name)
|
||||
} else {
|
||||
taskNamesDisabled = append(taskNamesDisabled, t.Name)
|
||||
}
|
||||
}
|
||||
|
||||
log.Infof(
|
||||
"%d tasks loaded - enabled: %s, disabled: %s",
|
||||
len(di.Tasks),
|
||||
strings.Join(taskNamesEnabled, ", "),
|
||||
strings.Join(taskNamesDisabled, ", "),
|
||||
)
|
||||
|
||||
return errList
|
||||
}
|
||||
|
@ -15,6 +15,11 @@ type Scheduler struct {
|
||||
func (s *Scheduler) AddTasks(taskList []*Task) error {
|
||||
s.tasks = taskList
|
||||
for _, task := range s.tasks {
|
||||
// pass task if it's not enabled
|
||||
if !task.Enabled {
|
||||
continue
|
||||
}
|
||||
|
||||
if err := s.cron.AddFunc(task.Crontab, task.Run); err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ import (
|
||||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
func LoadTasks(configFileName string) (*ConfigDescriptiveInfo, error) {
|
||||
func LoadTasks(configFileName string, allowedTasks *map[string]bool) (*ConfigDescriptiveInfo, error) {
|
||||
config := ConfigDescriptiveInfo{}
|
||||
data, err := helpers.ReadBinFile(configFileName)
|
||||
if err != nil {
|
||||
@ -19,8 +19,7 @@ func LoadTasks(configFileName string) (*ConfigDescriptiveInfo, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// init tasks
|
||||
errList := config.InitTasks()
|
||||
errList := config.InitTasks(allowedTasks)
|
||||
for _, err := range errList {
|
||||
log.Errorf(fmt.Sprintf("parse task error: %v", err))
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user