-
Notifications
You must be signed in to change notification settings - Fork 45
/
taskresource_types.go
129 lines (112 loc) · 4.94 KB
/
taskresource_types.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// Copyright 2023 Ant Group Co., Ltd.
//
// 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 v1alpha1
import (
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN!
// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized.
// +genclient
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// +kubebuilder:printcolumn:name="MinReservedPods",type=integer,JSONPath=`.spec.minReservedPods`
// +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=`.status.phase`
// +kubebuilder:printcolumn:name="StartTime",type=date,JSONPath=`.status.startTime`
// +kubebuilder:printcolumn:name="CompletionTime",type=date,JSONPath=`.status.completionTime`
// +kubebuilder:printcolumn:name="LastTransitionTime",type=date,JSONPath=`.status.lastTransitionTime`
// +kubebuilder:object:root=true
// +kubebuilder:resource:shortName=tr
// TaskResource is the Schema for the task resource API.
type TaskResource struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata"`
Spec TaskResourceSpec `json:"spec"`
// +optional
Status TaskResourceStatus `json:"status,omitempty"`
}
// +kubebuilder:object:root=true
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// TaskResourceList contains a list of TaskResource.
type TaskResourceList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []TaskResource `json:"items"`
}
// TaskResourceSpec defines the details of TaskResource.
type TaskResourceSpec struct {
// +optional
Role string `json:"role,omitempty"`
// +kubebuilder:validation:Minimum:=1
MinReservedPods int `json:"minReservedPods"`
// +optional
ResourceReservedSeconds int `json:"resourceReservedSeconds,omitempty"`
// +optional
Initiator string `json:"initiator,omitempty"`
// +optional
Pods []TaskResourcePod `json:"pods,omitempty"`
}
// TaskResourcePod defines the details of task resource pod info.
type TaskResourcePod struct {
Name string `json:"name"`
// +optional
Resources corev1.ResourceRequirements `json:"resources,omitempty"`
}
const TaskResourceKey = GroupName + "/task-resource"
const TaskResourceUID = GroupName + "/task-resource-uid"
// TaskResourcePhase is a label for the condition of a task resource at the current time.
type TaskResourcePhase string
const (
// TaskResourcePhasePending means task resource is created.
TaskResourcePhasePending TaskResourcePhase = "Pending"
// TaskResourcePhaseReserving means resources are reserving.
TaskResourcePhaseReserving TaskResourcePhase = "Reserving"
// TaskResourcePhaseReserved means resources are reserved.
TaskResourcePhaseReserved TaskResourcePhase = "Reserved"
// TaskResourcePhaseSchedulable means pod related to the task resource can continue the subsequent scheduling process.
TaskResourcePhaseSchedulable TaskResourcePhase = "Schedulable"
// TaskResourcePhaseFailed means resources are reserved failed or task failed.
TaskResourcePhaseFailed TaskResourcePhase = "Failed"
)
// TaskResourceStatus defines the details of task resource status.
type TaskResourceStatus struct {
Phase TaskResourcePhase `json:"phase"`
// +optional
Conditions []TaskResourceCondition `json:"conditions,omitempty"`
// +optional
StartTime *metav1.Time `json:"startTime,omitempty"`
// +optional
CompletionTime *metav1.Time `json:"completionTime,omitempty"`
// +optional
LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"`
}
// TaskResourceConditionType is a valid value for a task resource condition type.
type TaskResourceConditionType string
const (
TaskResourceCondPending TaskResourceConditionType = "Pending"
TaskResourceCondReserving TaskResourceConditionType = "Reserving"
TaskResourceCondFailed TaskResourceConditionType = "Failed"
TaskResourceCondReserved TaskResourceConditionType = "Reserved"
TaskResourceCondSchedulable TaskResourceConditionType = "Schedulable"
)
const (
RetryReserveResourceReason = "Last reserved resources and need retry since partners doesn't reserve resources"
)
// TaskResourceCondition defines the details of task resource condition.
type TaskResourceCondition struct {
LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"`
Status corev1.ConditionStatus `json:"status"`
// +optional
Reason string `json:"reason,omitempty"`
Type TaskResourceConditionType `json:"type"`
}