157 lines
6.4 KiB
Go
157 lines
6.4 KiB
Go
|
/*
|
||
|
Copyright 2016 The Kubernetes Authors.
|
||
|
|
||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
you may not use this file except in compliance with the License.
|
||
|
You may obtain a copy of the License at
|
||
|
|
||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||
|
|
||
|
Unless required by applicable law or agreed to in writing, software
|
||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
See the License for the specific language governing permissions and
|
||
|
limitations under the License.
|
||
|
*/
|
||
|
|
||
|
package v2alpha1
|
||
|
|
||
|
import (
|
||
|
batchv1 "k8s.io/api/batch/v1"
|
||
|
"k8s.io/api/core/v1"
|
||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||
|
)
|
||
|
|
||
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||
|
|
||
|
// JobTemplate describes a template for creating copies of a predefined pod.
|
||
|
type JobTemplate struct {
|
||
|
metav1.TypeMeta `json:",inline"`
|
||
|
// Standard object's metadata.
|
||
|
// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
|
||
|
// +optional
|
||
|
metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
|
||
|
|
||
|
// Defines jobs that will be created from this template.
|
||
|
// https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
|
||
|
// +optional
|
||
|
Template JobTemplateSpec `json:"template,omitempty" protobuf:"bytes,2,opt,name=template"`
|
||
|
}
|
||
|
|
||
|
// JobTemplateSpec describes the data a Job should have when created from a template
|
||
|
type JobTemplateSpec struct {
|
||
|
// Standard object's metadata of the jobs created from this template.
|
||
|
// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
|
||
|
// +optional
|
||
|
metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
|
||
|
|
||
|
// Specification of the desired behavior of the job.
|
||
|
// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
|
||
|
// +optional
|
||
|
Spec batchv1.JobSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`
|
||
|
}
|
||
|
|
||
|
// +genclient
|
||
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||
|
|
||
|
// CronJob represents the configuration of a single cron job.
|
||
|
type CronJob struct {
|
||
|
metav1.TypeMeta `json:",inline"`
|
||
|
// Standard object's metadata.
|
||
|
// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
|
||
|
// +optional
|
||
|
metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
|
||
|
|
||
|
// Specification of the desired behavior of a cron job, including the schedule.
|
||
|
// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
|
||
|
// +optional
|
||
|
Spec CronJobSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`
|
||
|
|
||
|
// Current status of a cron job.
|
||
|
// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
|
||
|
// +optional
|
||
|
Status CronJobStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"`
|
||
|
}
|
||
|
|
||
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||
|
|
||
|
// CronJobList is a collection of cron jobs.
|
||
|
type CronJobList struct {
|
||
|
metav1.TypeMeta `json:",inline"`
|
||
|
|
||
|
// Standard list metadata.
|
||
|
// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
|
||
|
// +optional
|
||
|
metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
|
||
|
|
||
|
// items is the list of CronJobs.
|
||
|
Items []CronJob `json:"items" protobuf:"bytes,2,rep,name=items"`
|
||
|
}
|
||
|
|
||
|
// CronJobSpec describes how the job execution will look like and when it will actually run.
|
||
|
type CronJobSpec struct {
|
||
|
|
||
|
// The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.
|
||
|
Schedule string `json:"schedule" protobuf:"bytes,1,opt,name=schedule"`
|
||
|
|
||
|
// Optional deadline in seconds for starting the job if it misses scheduled
|
||
|
// time for any reason. Missed jobs executions will be counted as failed ones.
|
||
|
// +optional
|
||
|
StartingDeadlineSeconds *int64 `json:"startingDeadlineSeconds,omitempty" protobuf:"varint,2,opt,name=startingDeadlineSeconds"`
|
||
|
|
||
|
// Specifies how to treat concurrent executions of a Job.
|
||
|
// Valid values are:
|
||
|
// - "Allow" (default): allows CronJobs to run concurrently;
|
||
|
// - "Forbid": forbids concurrent runs, skipping next run if previous run hasn't finished yet;
|
||
|
// - "Replace": cancels currently running job and replaces it with a new one
|
||
|
// +optional
|
||
|
ConcurrencyPolicy ConcurrencyPolicy `json:"concurrencyPolicy,omitempty" protobuf:"bytes,3,opt,name=concurrencyPolicy,casttype=ConcurrencyPolicy"`
|
||
|
|
||
|
// This flag tells the controller to suspend subsequent executions, it does
|
||
|
// not apply to already started executions. Defaults to false.
|
||
|
// +optional
|
||
|
Suspend *bool `json:"suspend,omitempty" protobuf:"varint,4,opt,name=suspend"`
|
||
|
|
||
|
// Specifies the job that will be created when executing a CronJob.
|
||
|
JobTemplate JobTemplateSpec `json:"jobTemplate" protobuf:"bytes,5,opt,name=jobTemplate"`
|
||
|
|
||
|
// The number of successful finished jobs to retain.
|
||
|
// This is a pointer to distinguish between explicit zero and not specified.
|
||
|
// +optional
|
||
|
SuccessfulJobsHistoryLimit *int32 `json:"successfulJobsHistoryLimit,omitempty" protobuf:"varint,6,opt,name=successfulJobsHistoryLimit"`
|
||
|
|
||
|
// The number of failed finished jobs to retain.
|
||
|
// This is a pointer to distinguish between explicit zero and not specified.
|
||
|
// +optional
|
||
|
FailedJobsHistoryLimit *int32 `json:"failedJobsHistoryLimit,omitempty" protobuf:"varint,7,opt,name=failedJobsHistoryLimit"`
|
||
|
}
|
||
|
|
||
|
// ConcurrencyPolicy describes how the job will be handled.
|
||
|
// Only one of the following concurrent policies may be specified.
|
||
|
// If none of the following policies is specified, the default one
|
||
|
// is AllowConcurrent.
|
||
|
type ConcurrencyPolicy string
|
||
|
|
||
|
const (
|
||
|
// AllowConcurrent allows CronJobs to run concurrently.
|
||
|
AllowConcurrent ConcurrencyPolicy = "Allow"
|
||
|
|
||
|
// ForbidConcurrent forbids concurrent runs, skipping next run if previous
|
||
|
// hasn't finished yet.
|
||
|
ForbidConcurrent ConcurrencyPolicy = "Forbid"
|
||
|
|
||
|
// ReplaceConcurrent cancels currently running job and replaces it with a new one.
|
||
|
ReplaceConcurrent ConcurrencyPolicy = "Replace"
|
||
|
)
|
||
|
|
||
|
// CronJobStatus represents the current state of a cron job.
|
||
|
type CronJobStatus struct {
|
||
|
// A list of pointers to currently running jobs.
|
||
|
// +optional
|
||
|
Active []v1.ObjectReference `json:"active,omitempty" protobuf:"bytes,1,rep,name=active"`
|
||
|
|
||
|
// Information when was the last time the job was successfully scheduled.
|
||
|
// +optional
|
||
|
LastScheduleTime *metav1.Time `json:"lastScheduleTime,omitempty" protobuf:"bytes,4,opt,name=lastScheduleTime"`
|
||
|
}
|