-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: scheduled custom resource #40
Comments
Draft Design// ScheduleType is a typed definition to determine the type
// of a schedule
type ScheduleType string
const (
// ScheduleTypeRepeat creates & deletes the resource
// repeatedly based on schedule specifications
ScheduleTypeRepeat ScheduleType = "Repeat"
// ScheduleTypeHourly creates & deletes the resource
// once every hour
ScheduleTypeHourly ScheduleType = "Hourly"
// ScheduleTypeDaily creates & deletes the resource
// once everyday
ScheduleTypeDaily ScheduleType = "Daily"
// ScheduleTypeWeekly creates & deletes the resource
// once every week
ScheduleTypeWeekly ScheduleType = "Weekly"
// ScheduleTypeOnce triggers creation & deletion of the
// the target resource only once at a specific time in
// the lifetime of this CronResource
ScheduleTypeOnce ScheduleType = "Once"
// ScheduleTypeImmediately triggers creation & deletion
// of the the target resource immediately & then as
// specified in the schedule specifications
ScheduleTypeImmediately ScheduleType = "Immediately"
// ScheduleTypeImmediatelyOnce triggers creation & deletion
// of the the target resource immediately & only once in the
// lifetime of this CronResource
ScheduleTypeImmediatelyOnce ScheduleType = "ImmediatelyOnce"
)
// ScheduleDay is a typed definition to define supported
// days to schedule a resource
type ScheduleDay string
const (
// ScheduleDayEveryday represents all days as supported
// schedule days
ScheduleDayEveryday ScheduleDay = "Everyday"
// ScheduleDaySun represents Sunday as a supported schedule day
ScheduleDaySun ScheduleDay = "Sun"
// ScheduleDaySunday represents Sunday as a supported schedule day
ScheduleDaySunday ScheduleDay = "Sunday"
// ScheduleDayMon represents Monday as a supported schedule day
ScheduleDayMon ScheduleDay = "Mon"
// ScheduleDayMonday represents Monday as a supported schedule day
ScheduleDayMonday ScheduleDay = "Monday"
// ScheduleDayTue represents Tuesday as a supported schedule day
ScheduleDayTue ScheduleDay = "Tue"
// ScheduleDayTuesday represents Tuesday as a supported schedule day
ScheduleDayTuesday ScheduleDay = "Tuesday"
// ScheduleDayWed represents Wednesday as a supported schedule day
ScheduleDayWed ScheduleDay = "Wed"
// ScheduleDayWednesday represents Wednesday as a supported schedule day
ScheduleDayWednesday ScheduleDay = "Wednesday"
// ScheduleDayThu represents Thursday as a supported schedule day
ScheduleDayThu ScheduleDay = "Thu"
// ScheduleDayThursday represents Thursday as a supported schedule day
ScheduleDayThursday ScheduleDay = "Thursday"
// ScheduleDayFri represents Friday as a supported schedule day
ScheduleDayFri ScheduleDay = "Fri"
// ScheduleDayFriday represents Friday as a supported schedule day
ScheduleDayFriday ScheduleDay = "Friday"
// ScheduleDaySat represents Saturday as a supported schedule day
ScheduleDaySat ScheduleDay = "Sat"
// ScheduleDaySaturday represents Saturday as a supported schedule day
ScheduleDaySaturday ScheduleDay = "Saturday"
)
// CronResource is a kubernetes custom resource that defines
// the specifications to create & delete any kubernetes resource
// at specified intervals
type CronResource struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata"`
Spec CronResourceSpec `json:"spec"`
}
// CronResourceSpec defines the configuration required
// to create & delete a kubernetes resource at specified intervals
type CronResourceSpec struct {
// Supend indicates if all operations of this cron
// schedule should be stopped. The relevant resources
// created due to CronResource should be deleted.
Suspend *bool `json:"suspend,omitempty"`
// CompletionCriteria can be specified to mark the
// current schedule as completed or not
CompletionCriteria CronResourceCompletionCriteria `json:"completionCriteria,omitempty"`
// Schedule to be followed for this CronResource
Schedule CronResourceSchedule `json:"schedule,omitempty"`
// Template has the desired state of the resource that
// needs to be created or deleted as part of CronResource
// schedule
Template CronResourceTemplateReference `json:"template,omitempty"`
}
// CronResourceSchedule provides the schedule details that the
// entire CronResource reconciliation is based on
type CronResourceSchedule struct {
// ScheduleType provides the frequency of this schedule
//
// Defaults to Hourly schedule
ScheduleType ScheduleType `json:"scheduleType,omitempty"`
// Time to start the schedule. In other words, post this
// time schedule get activated.
//
// StartTime is optional
StartTime metav1.Time `json:"startTime,omitempty"`
// Time to end the schedule. Post this time resources created
// due to this CronResource will get deleted.
//
// EndTime is optional
EndTime metav1.Time `json:"endTime,omitempty"`
// RepeatInterval indicates the interval post which a new
// schedule instance gets triggered. In other words post
// this interval the existing resource created due to the
// schedule gets deleted & a new resource takes its place.
// The repeat interval is ignored if existing resource is
// not completed.
//
// RepeatInterval is used for ScheduleType **Repeat**
//
// RepeatInterval is optional & defaults to 1 hour if
// ScheduleType is Repeat
RepeatInterval time.Duration `json:"repeatInterval,omitempty"`
// RepeatCount provides the maximum number of times a schedule
// instance gets triggered
//
// If MaxCount is 5 and ScheduleType is Daily then, this
// CronResource is supposed to run only for the next 5 days
// with each new schedule occuring after 24 hours.
//
// RepeatCount is optional
MaxCount *int `json:"maxCount,omitempty"`
// Replicas / InstanceCount ?
// cc @karthik can you clarify ?
Replicas *int `json:"replicas,omitempty"`
// EligibleDays provides the list of days that are eligible
// to run this schedule. If there are any resources left due
// to an earlier schedule on a non-eligible day, then this
// resource gets deleted. No new resource will get created
// on a non-eligible day.
//
// EligibleDays provides an extra filter to evaluate if
// CronResource should be run or not.
//
// EligibleDays is optional & marks every day as eligible to
// run this schedule
EligibleDays []ScheduleDay `json:"eligibleDays,omitempty"`
}
// CronResourceCompletionCriteria is used to mark a CronResource
// schedule as completed or not
type CronResourceCompletionCriteria struct {
// Select terms applied over the resource to mark the
// current schedule as complete
Selector metac.ResourceSelector `json:"selector,omitempty"`
// Timeout indicates the time taken after which the
// current schedule can be marked as completed
Timeout time.Duration `json:"timeout,omitempty"`
}
// CronResourceTemplateReference provides the reference to the
// resource state or object or both. This is the resource that
// gets created & deleted as part of CronResource reconciliation.
type CronResourceTemplateReference struct {
// Desired state that gets created & deleted as part of
// CronResource reconciliation. This state can be in partial
// form which in turn gets applied against the specifications
// found in ObjectReference to arrive at the full resource
// specs.
//
// NOTE:
// - State is optional
// - Both State & ObjectReference can not be empty
// - Both State & ObjectReference can be set in a CronResource
State map[string]interface{} `json:"state,omitempty"`
// Resource instance has the resource state that gets created
// & deleted as part of CronResource reconciliation
//
// NOTE:
// - ObjectReference is optional
// - Both ObjectReference & State can not be empty
// - Both ObjectReference & State can be set in a CronResource
ObjectReference CronResourceTemplateObjectReference `json:"objectReference,omitempty"`
}
// CronResourceTemplateObjectReference refers to the resource
// observed in the cluster that will be created & deleted as
// part of CronResource reconciliation
type CronResourceTemplateObjectReference struct {
Name string `json:"objectName"`
Namespace string `json:"objectNamespace"`
}
// CronResourceTemplate is the placeholder for desired or default
// state of resource that gets created & deleted as part of
// CronResource reconciliation. This is a custom resource that can
// be applied separately against the kubernetes cluster.
type CronResourceTemplate struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata"`
Spec CronResourceTemplateSpec `json:"spec"`
}
// CronResourceTemplateSpec refers to the desired or default
// state of the resource that gets created & deleted as part
// of CronResource reconciliation
type CronResourceTemplateSpec struct {
// State represents the desired state of the resource
// that gets created & deleted as part of CronResource
// reconciliation.
State map[string]interface{} `json:"state,omitempty"`
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
litmuschaos/litmus#1223
The text was updated successfully, but these errors were encountered: