diff --git a/internal/job.go b/internal/job.go index dcbf771..bdde546 100644 --- a/internal/job.go +++ b/internal/job.go @@ -47,6 +47,17 @@ type Container struct { Docker *DockerContainer `yaml:"docker"` } +type ValueConstraint struct { + Name string `yaml:"name"` + Values []string `yaml:"values"` + Negated bool `yaml:"negated"` +} + +type LimitConstraint struct { + Name string `yaml:"name"` + Limit int32 `yaml:"limit"` +} + type Job struct { Environment string `yaml:"environment"` Role string `yaml:"role"` @@ -64,6 +75,8 @@ type Job struct { Container *Container `yaml:"container,omitempty"` CronSchedule *string `yaml:"cronSchedule,omitempty"` CronCollisionPolicy *string `yaml:"cronCollisionPolicy,omitempty"` + ValueConstraints []ValueConstraint `yaml:"valueConstraints,flow,omitempty"` + LimitConstraints []LimitConstraint `yaml:"limitConstraints,flow,omitempty"` } func (j *Job) ToRealis() (*realis.AuroraJob, error) { @@ -125,6 +138,15 @@ func (j *Job) ToRealis() (*realis.AuroraJob, error) { } + // Setting Constraints + for _, valConstraint := range j.ValueConstraints { + auroraJob.AddValueConstraint(valConstraint.Name, valConstraint.Negated, valConstraint.Values...) + } + + for _, limit := range j.LimitConstraints { + auroraJob.AddLimitConstraint(limit.Name, limit.Limit) + } + return auroraJob, nil } @@ -162,6 +184,7 @@ func (j *Job) Validate() error { } return nil } + func (j *Job) ValidateCron() error { if j.CronSchedule == nil { return errors.New("cron schedule must be set") diff --git a/internal/util_test.go b/internal/util_test.go index 7853ce9..366ffb0 100644 --- a/internal/util_test.go +++ b/internal/util_test.go @@ -25,6 +25,11 @@ func TestUnmarshalJob(t *testing.T) { assert.NoError(t, err) } +func TestUnmarshalDedicatedJob(t *testing.T) { + _, err := UnmarshalJob("../test/hello_world_dedicated.yaml") + assert.NoError(t, err) +} + func TestUnmarshalCron(t *testing.T) { cron, err := UnmarshalJob("../test/hello_world_cron.yaml") assert.NoError(t, err) diff --git a/test/hello_world_dedicated.yaml b/test/hello_world_dedicated.yaml new file mode 100644 index 0000000..95dac27 --- /dev/null +++ b/test/hello_world_dedicated.yaml @@ -0,0 +1,30 @@ +--- +environment: "prod" +role: "vagrant" +name: "hello_world" +cpu: 0.09 +ram: 64 +disk: 128 +instances: 1 +valueConstraints: + - name: "dedicated" + values: + - "vagrant/bar" +thermos: + - name: "bootstrap" + cmd: "echo bootstrapping" + - name: "hello_gorealis" + cmd: "while true; do echo hello world from gorealis; sleep 10; done" +updateSettings: + maxPerInstanceFailures: 1 + maxFailedInstances: 1 + minTimeInRunning: 1m + rollbackOnFailure: true + instanceRanges: + - start: 1 + end: 4 + blockIfNoPulseAfter: 1m + slaAware: false + strategy: + name: Batch + groupSize: 2 \ No newline at end of file