Skip to content

Commit 88faa1b

Browse files
samberstack72
authored andcommitted
Improving Rundeck provider: scheduler (hashicorp#9449)
* feat(rundeck provider): Scheduling (crontab) * fix(govendor-upgrade): Rundeck api wrapper
1 parent e558cbd commit 88faa1b

6 files changed

Lines changed: 479 additions & 27 deletions

File tree

builtin/providers/rundeck/resource_job.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package rundeck
22

33
import (
44
"fmt"
5+
"strings"
56

67
"github.com/hashicorp/terraform/helper/schema"
78

@@ -99,6 +100,11 @@ func resourceRundeckJob() *schema.Resource {
99100
Optional: true,
100101
},
101102

103+
"schedule": &schema.Schema{
104+
Type: schema.TypeString,
105+
Optional: true,
106+
},
107+
102108
"option": &schema.Schema{
103109
// This is a list because order is important when preserve_options_order is
104110
// set. When it's not set the order is unimportant but preserved by Rundeck/
@@ -455,6 +461,30 @@ func jobFromResourceData(d *schema.ResourceData) (*rundeck.JobDetail, error) {
455461
}
456462
}
457463

464+
if d.Get("schedule").(string) != "" {
465+
schedule := strings.Split(d.Get("schedule").(string), " ")
466+
if len(schedule) != 7 {
467+
return nil, fmt.Errorf("Rundeck schedule must be formated like a cron expression, as defined here: http://www.quartz-scheduler.org/documentation/quartz-2.2.x/tutorials/tutorial-lesson-06.html")
468+
}
469+
job.Schedule = &rundeck.JobSchedule{
470+
Time: rundeck.JobScheduleTime{
471+
Seconds: schedule[0],
472+
Minute: schedule[1],
473+
Hour: schedule[2],
474+
},
475+
Month: rundeck.JobScheduleMonth{
476+
Day: schedule[3],
477+
Month: schedule[4],
478+
},
479+
WeekDay: &rundeck.JobScheduleWeekDay{
480+
Day: schedule[5],
481+
},
482+
Year: rundeck.JobScheduleYear{
483+
Year: schedule[6],
484+
},
485+
}
486+
}
487+
458488
return job, nil
459489
}
460490

@@ -562,5 +592,22 @@ func jobToResourceData(job *rundeck.JobDetail, d *schema.ResourceData) error {
562592
}
563593
d.Set("command", commandConfigsI)
564594

595+
if job.Schedule != nil {
596+
schedule := []string{}
597+
schedule = append(schedule, job.Schedule.Time.Seconds)
598+
schedule = append(schedule, job.Schedule.Time.Minute)
599+
schedule = append(schedule, job.Schedule.Time.Hour)
600+
schedule = append(schedule, job.Schedule.Month.Day)
601+
schedule = append(schedule, job.Schedule.Month.Month)
602+
if job.Schedule.WeekDay != nil {
603+
schedule = append(schedule, job.Schedule.WeekDay.Day)
604+
} else {
605+
schedule = append(schedule, "*")
606+
}
607+
schedule = append(schedule, job.Schedule.Year.Year)
608+
609+
d.Set("schedule", strings.Join(schedule, " "))
610+
}
611+
565612
return nil
566613
}

builtin/providers/rundeck/resource_job_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ resource "rundeck_job" "test" {
9292
allow_concurrent_executions = 1
9393
max_thread_count = 1
9494
rank_order = "ascending"
95+
schedule = "0 0 12 * * * *"
9596
option {
9697
name = "foo"
9798
default_value = "bar"

vendor/github.com/apparentlymart/go-rundeck-api/README.md

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/apparentlymart/go-rundeck-api/rundeck/job.go

Lines changed: 102 additions & 27 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)