Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions hack/tools.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
//go:build tools
// +build tools

package tools

import _ "k8s.io/code-generator"
41 changes: 41 additions & 0 deletions pkg/apis/batch/v1alpha1/job.go
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,7 @@ const (
)

// LifecyclePolicy specifies the lifecycle and error handling of task and job.
// +kubebuilder:validation:XValidation:rule="self.action != 'WebHook' || has(self.webhookConfig)",message="webhookConfig is required when action is WebHook"
type LifecyclePolicy struct {
// The action that will be taken to the PodGroup according to Event.
// One of "Restart", "None".
Expand Down Expand Up @@ -202,6 +203,46 @@ type LifecyclePolicy struct {
// Default to nil (take action immediately).
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty" protobuf:"bytes,5,opt,name=timeout"`

// WebHookConfig specifies webhook configuration when Action is WebHook
// +optional
WebHookConfig *WebHookConfig `json:"webhookConfig,omitempty" protobuf:"bytes,6,opt,name=webhookConfig"`
}

// WebHookConfig defines webhook configuration
type WebHookConfig struct {
// URL is the webhook endpoint URL
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern=`^https?://.*`
URL string `json:"url" protobuf:"bytes,1,opt,name=url"`

// Method is the HTTP method, defaults to POST
// +kubebuilder:validation:Enum=GET;POST;PUT;PATCH
// +kubebuilder:default="POST"
// +optional
Method string `json:"method,omitempty" protobuf:"bytes,2,opt,name=method"`

// Headers are custom HTTP headers to send
// +optional
Headers map[string]string `json:"headers,omitempty" protobuf:"bytes,3,opt,name=headers"`

// Body is the JSON request body template, supports variable substitution
// +optional
Body string `json:"body,omitempty" protobuf:"bytes,4,opt,name=body"`

// TimeoutSeconds is request timeout in seconds, defaults to 30
// +kubebuilder:validation:Minimum=1
// +kubebuilder:validation:Maximum=300
// +kubebuilder:default=30
// +optional
TimeoutSeconds *int32 `json:"timeoutSeconds,omitempty" protobuf:"bytes,5,opt,name=timeoutSeconds"`

// Retries is the number of retry attempts for failed webhook requests, defaults to 3
// +kubebuilder:validation:Minimum=0
// +kubebuilder:validation:Maximum=10
// +kubebuilder:default=3
// +optional
Retries *int32 `json:"retries,omitempty" protobuf:"bytes,6,opt,name=retries"`
}

// +kubebuilder:validation:Enum=none;best-effort;restricted;single-numa-node
Expand Down
38 changes: 38 additions & 0 deletions pkg/apis/batch/v1alpha1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions pkg/apis/bus/v1alpha1/actions.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@ const (
// ResumeJobAction is the action to resume an aborted job.
ResumeJobAction Action = "ResumeJob"

// WebHookAction triggers a webhook call when event occurs.
WebHookAction Action = "WebHook"

// Note: actions below are only used internally, should not be used by users.

// SyncJobAction is the action to sync Job/Pod status.
Expand Down
14 changes: 13 additions & 1 deletion pkg/apis/bus/v1alpha1/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ limitations under the License.
package v1alpha1

// Event represent the phase of Job, e.g. pod-failed.
// +kubebuilder:validation:Enum=*;PodPending;PodRunning;PodFailed;PodEvicted;Unknown;TaskCompleted;OutOfSync;CommandIssued;JobUpdated;TaskFailed
// +kubebuilder:validation:Enum=*;PodPending;PodRunning;PodFailed;PodEvicted;Unknown;TaskCompleted;OutOfSync;CommandIssued;JobUpdated;TaskFailed;JobTerminated;JobCompleted;JobAborted;JobFailed
type Event string

const (
Expand Down Expand Up @@ -45,6 +45,18 @@ const (
// TaskCompletedEvent is triggered if the 'Replicas' amount of pods in one task are succeed
TaskCompletedEvent Event = "TaskCompleted"

// JobTerminatedEvent is triggered when job is terminated
JobTerminatedEvent Event = "JobTerminated"

// JobCompletedEvent is triggered when job is completed successfully
JobCompletedEvent Event = "JobCompleted"

// JobAbortedEvent is triggered when job is aborted
JobAbortedEvent Event = "JobAborted"

// JobFailedEvent is triggered when job failed permanently
JobFailedEvent Event = "JobFailed"

// Note: events below are used internally, should not be used by users.

// OutOfSyncEvent is triggered if Pod/Job is updated(add/update/delete)
Expand Down
19 changes: 14 additions & 5 deletions pkg/client/applyconfiguration/batch/v1alpha1/lifecyclepolicy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

89 changes: 89 additions & 0 deletions pkg/client/applyconfiguration/batch/v1alpha1/webhookconfig.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading