/
resourcecalculator_types.go
91 lines (76 loc) · 2.9 KB
/
resourcecalculator_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
/*
Copyright AppsCode Inc. and Contributors.
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 (
kmapi "kmodules.xyz/client-go/api/v1"
"kmodules.xyz/resource-metrics/api"
core "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
)
const (
ResourceKindResourceCalculator = "ResourceCalculator"
ResourceResourceCalculator = "resourcecalculator"
ResourceResourceCalculators = "resourcecalculators"
)
// ResourceCalculator is the Schema for any resource supported by resource-metrics library
// +genclient
// +genclient:nonNamespaced
// +genclient:onlyVerbs=create
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
type ResourceCalculator struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
// +kubebuilder:pruning:PreserveUnknownFields
Request *ResourceCalculatorRequest `json:"request,omitempty"`
// +optional
Response *ResourceCalculatorResponse `json:"response,omitempty"`
}
type ResourceCalculatorRequest struct {
Resource *runtime.RawExtension `json:"resource,omitempty"`
Edit bool `json:"edit,omitempty"`
}
type ResourceCalculatorResponse struct {
APIType kmapi.ResourceID `json:"apiType"`
// +optional
Version string `json:"version,omitempty"`
// +optional
Replicas int64 `json:"replicas,omitempty"`
// +optional
RoleReplicas api.ReplicaList `json:"roleReplicas,omitempty"`
// +optional
Mode string `json:"mode,omitempty"`
// +optional
TotalResource core.ResourceRequirements `json:"totalResource,omitempty"`
// +optional
AppResource core.ResourceRequirements `json:"appResource,omitempty"`
// +optional
RoleResourceLimits map[api.PodRole]core.ResourceList `json:"roleResourceLimits,omitempty"`
// +optional
RoleResourceRequests map[api.PodRole]core.ResourceList `json:"roleResourceRequests,omitempty"`
Quota QuotaDecision `json:"quota"`
}
// +kubebuilder:validation:Enum=Allow;Deny
type Decision string
const (
// DecisionNoOpionion means that quota restrictions have no opinion on an action.
DecisionNoOpinion Decision = ""
// DecisionAllow means that quota restrictions allow the action.
DecisionAllow Decision = "Allow"
// DecisionDeny means that quota restrictions deny the action.
DecisionDeny Decision = "Deny"
)
type QuotaDecision struct {
Decision Decision `json:"decision"`
Violations []string `json:"violations,omitempty"`
}