| /* |
| 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 v1 |
| |
| import ( |
| "k8s.io/api/core/v1" |
| metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" |
| ) |
| |
| // +genclient |
| // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object |
| |
| // Job represents the configuration of a single job. |
| type Job 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 job. |
| // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status |
| // +optional |
| Spec JobSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` |
| |
| // Current status of a job. |
| // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status |
| // +optional |
| Status JobStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` |
| } |
| |
| // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object |
| |
| // JobList is a collection of jobs. |
| type JobList 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 Jobs. |
| Items []Job `json:"items" protobuf:"bytes,2,rep,name=items"` |
| } |
| |
| // JobSpec describes how the job execution will look like. |
| type JobSpec struct { |
| |
| // Specifies the maximum desired number of pods the job should |
| // run at any given time. The actual number of pods running in steady state will |
| // be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), |
| // i.e. when the work left to do is less than max parallelism. |
| // More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ |
| // +optional |
| Parallelism *int32 `json:"parallelism,omitempty" protobuf:"varint,1,opt,name=parallelism"` |
| |
| // Specifies the desired number of successfully finished pods the |
| // job should be run with. Setting to nil means that the success of any |
| // pod signals the success of all pods, and allows parallelism to have any positive |
| // value. Setting to 1 means that parallelism is limited to 1 and the success of that |
| // pod signals the success of the job. |
| // More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ |
| // +optional |
| Completions *int32 `json:"completions,omitempty" protobuf:"varint,2,opt,name=completions"` |
| |
| // Specifies the duration in seconds relative to the startTime that the job may be active |
| // before the system tries to terminate it; value must be positive integer |
| // +optional |
| ActiveDeadlineSeconds *int64 `json:"activeDeadlineSeconds,omitempty" protobuf:"varint,3,opt,name=activeDeadlineSeconds"` |
| |
| // Specifies the number of retries before marking this job failed. |
| // Defaults to 6 |
| // +optional |
| BackoffLimit *int32 `json:"backoffLimit,omitempty" protobuf:"varint,7,opt,name=backoffLimit"` |
| |
| // TODO enabled it when https://github.com/kubernetes/kubernetes/issues/28486 has been fixed |
| // Optional number of failed pods to retain. |
| // +optional |
| // FailedPodsLimit *int32 `json:"failedPodsLimit,omitempty" protobuf:"varint,9,opt,name=failedPodsLimit"` |
| |
| // A label query over pods that should match the pod count. |
| // Normally, the system sets this field for you. |
| // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors |
| // +optional |
| Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,4,opt,name=selector"` |
| |
| // manualSelector controls generation of pod labels and pod selectors. |
| // Leave `manualSelector` unset unless you are certain what you are doing. |
| // When false or unset, the system pick labels unique to this job |
| // and appends those labels to the pod template. When true, |
| // the user is responsible for picking unique labels and specifying |
| // the selector. Failure to pick a unique label may cause this |
| // and other jobs to not function correctly. However, You may see |
| // `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` |
| // API. |
| // More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector |
| // +optional |
| ManualSelector *bool `json:"manualSelector,omitempty" protobuf:"varint,5,opt,name=manualSelector"` |
| |
| // Describes the pod that will be created when executing a job. |
| // More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ |
| Template v1.PodTemplateSpec `json:"template" protobuf:"bytes,6,opt,name=template"` |
| |
| // ttlSecondsAfterFinished limits the lifetime of a Job that has finished |
| // execution (either Complete or Failed). If this field is set, |
| // ttlSecondsAfterFinished after the Job finishes, it is eligible to be |
| // automatically deleted. When the Job is being deleted, its lifecycle |
| // guarantees (e.g. finalizers) will be honored. If this field is unset, |
| // the Job won't be automatically deleted. If this field is set to zero, |
| // the Job becomes eligible to be deleted immediately after it finishes. |
| // This field is alpha-level and is only honored by servers that enable the |
| // TTLAfterFinished feature. |
| // +optional |
| TTLSecondsAfterFinished *int32 `json:"ttlSecondsAfterFinished,omitempty" protobuf:"varint,8,opt,name=ttlSecondsAfterFinished"` |
| } |
| |
| // JobStatus represents the current state of a Job. |
| type JobStatus struct { |
| // The latest available observations of an object's current state. |
| // More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ |
| // +optional |
| // +patchMergeKey=type |
| // +patchStrategy=merge |
| Conditions []JobCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"` |
| |
| // Represents time when the job was acknowledged by the job controller. |
| // It is not guaranteed to be set in happens-before order across separate operations. |
| // It is represented in RFC3339 form and is in UTC. |
| // +optional |
| StartTime *metav1.Time `json:"startTime,omitempty" protobuf:"bytes,2,opt,name=startTime"` |
| |
| // Represents time when the job was completed. It is not guaranteed to |
| // be set in happens-before order across separate operations. |
| // It is represented in RFC3339 form and is in UTC. |
| // +optional |
| CompletionTime *metav1.Time `json:"completionTime,omitempty" protobuf:"bytes,3,opt,name=completionTime"` |
| |
| // The number of actively running pods. |
| // +optional |
| Active int32 `json:"active,omitempty" protobuf:"varint,4,opt,name=active"` |
| |
| // The number of pods which reached phase Succeeded. |
| // +optional |
| Succeeded int32 `json:"succeeded,omitempty" protobuf:"varint,5,opt,name=succeeded"` |
| |
| // The number of pods which reached phase Failed. |
| // +optional |
| Failed int32 `json:"failed,omitempty" protobuf:"varint,6,opt,name=failed"` |
| } |
| |
| type JobConditionType string |
| |
| // These are valid conditions of a job. |
| const ( |
| // JobComplete means the job has completed its execution. |
| JobComplete JobConditionType = "Complete" |
| // JobFailed means the job has failed its execution. |
| JobFailed JobConditionType = "Failed" |
| ) |
| |
| // JobCondition describes current state of a job. |
| type JobCondition struct { |
| // Type of job condition, Complete or Failed. |
| Type JobConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=JobConditionType"` |
| // Status of the condition, one of True, False, Unknown. |
| Status v1.ConditionStatus `json:"status" protobuf:"bytes,2,opt,name=status,casttype=k8s.io/api/core/v1.ConditionStatus"` |
| // Last time the condition was checked. |
| // +optional |
| LastProbeTime metav1.Time `json:"lastProbeTime,omitempty" protobuf:"bytes,3,opt,name=lastProbeTime"` |
| // Last time the condition transit from one status to another. |
| // +optional |
| LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,4,opt,name=lastTransitionTime"` |
| // (brief) reason for the condition's last transition. |
| // +optional |
| Reason string `json:"reason,omitempty" protobuf:"bytes,5,opt,name=reason"` |
| // Human readable message indicating details about last transition. |
| // +optional |
| Message string `json:"message,omitempty" protobuf:"bytes,6,opt,name=message"` |
| } |