/
awsfargateprofile_types.go
166 lines (137 loc) · 6.49 KB
/
awsfargateprofile_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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
/*
Copyright 2020 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 v1alpha3
import (
"fmt"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
infrav1 "sigs.k8s.io/cluster-api-provider-aws/api/v1alpha3"
clusterv1 "sigs.k8s.io/cluster-api/api/v1alpha3"
"sigs.k8s.io/cluster-api/errors"
)
const (
// FargateProfileFinalizer allows the controller to clean up resources on delete
FargateProfileFinalizer = "awsfargateprofile.infrastructure.cluster.x-k8s.io"
)
var (
// DefaultEKSFargateRole is the name of the default IAM role to use for fargate
// profiles if no other role is supplied in the spec and if iam role creation
// is not enabled. The default can be created using clusterawsadm or created manually
DefaultEKSFargateRole = fmt.Sprintf("eks-fargate%s", infrav1.DefaultNameSuffix)
)
// FargateProfileSpec defines the desired state of FargateProfile
type FargateProfileSpec struct {
// ClusterName is the name of the Cluster this object belongs to.
// +kubebuilder:validation:MinLength=1
ClusterName string `json:"clusterName"`
// ProfileName specifies the profile name.
ProfileName string `json:"profileName,omitempty"`
// SubnetIDs specifies which subnets are used for the
// auto scaling group of this nodegroup.
// +optional
SubnetIDs []string `json:"subnetIDs,omitempty"`
// AdditionalTags is an optional set of tags to add to AWS resources managed by the AWS provider, in addition to the
// ones added by default.
// +optional
AdditionalTags infrav1.Tags `json:"additionalTags,omitempty"`
// RoleName specifies the name of IAM role for this fargate pool
// If the role is pre-existing we will treat it as unmanaged
// and not delete it on deletion. If the EKSEnableIAM feature
// flag is true and no name is supplied then a role is created.
// +optional
RoleName string `json:"roleName,omitempty"`
// Selectors specify fargate pod selectors.
Selectors []FargateSelector `json:"selectors,omitempty"`
}
// FargateSelector specifies a selector for pods that should run on this fargate
// pool
type FargateSelector struct {
// Labels specifies which pod labels this selector should match.
Labels map[string]string `json:"labels,omitempty"`
// Namespace specifies which namespace this selector should match.
Namespace string `json:"namespace,omitempty"`
}
// FargateProfileStatus defines the observed state of FargateProfile
type FargateProfileStatus struct {
// Ready denotes that the FargateProfile is available.
// +kubebuilder:default=false
Ready bool `json:"ready"`
// FailureReason will be set in the event that there is a terminal problem
// reconciling the FargateProfile and will contain a succinct value suitable
// for machine interpretation.
//
// This field should not be set for transitive errors that a controller
// faces that are expected to be fixed automatically over
// time (like service outages), but instead indicate that something is
// fundamentally wrong with the FargateProfile's spec or the configuration of
// the controller, and that manual intervention is required. Examples
// of terminal errors would be invalid combinations of settings in the
// spec, values that are unsupported by the controller, or the
// responsible controller itself being critically misconfigured.
//
// Any transient errors that occur during the reconciliation of
// FargateProfiles can be added as events to the FargateProfile object
// and/or logged in the controller's output.
// +optional
FailureReason *errors.MachineStatusError `json:"failureReason,omitempty"`
// FailureMessage will be set in the event that there is a terminal problem
// reconciling the FargateProfile and will contain a more verbose string suitable
// for logging and human consumption.
//
// This field should not be set for transitive errors that a controller
// faces that are expected to be fixed automatically over
// time (like service outages), but instead indicate that something is
// fundamentally wrong with the FargateProfile's spec or the configuration of
// the controller, and that manual intervention is required. Examples
// of terminal errors would be invalid combinations of settings in the
// spec, values that are unsupported by the controller, or the
// responsible controller itself being critically misconfigured.
//
// Any transient errors that occur during the reconciliation of
// FargateProfiles can be added as events to the FargateProfile
// object and/or logged in the controller's output.
// +optional
FailureMessage *string `json:"failureMessage,omitempty"`
// Conditions defines current state of the Fargate profile.
// +optional
Conditions clusterv1.Conditions `json:"conditions,omitempty"`
}
// +kubebuilder:object:root=true
// +kubebuilder:resource:path=awsfargateprofiles,scope=Namespaced,categories=cluster-api
// +kubebuilder:storageversion
// +kubebuilder:subresource:status
// +kubebuilder:printcolumn:name="Ready",type="string",JSONPath=".status.ready",description="AWSFargateProfile ready status"
// +kubebuilder:printcolumn:name="ProfileName",type="string",JSONPath=".spec.profileName",description="EKS Fargate profile name"
// +kubebuilder:printcolumn:name="FailureReason",type="string",JSONPath=".status.failureReason",description="Failure reason"
// AWSFargateProfile is the Schema for the awsfargateprofiles API
type AWSFargateProfile struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec FargateProfileSpec `json:"spec,omitempty"`
Status FargateProfileStatus `json:"status,omitempty"`
}
func (r *AWSFargateProfile) GetConditions() clusterv1.Conditions {
return r.Status.Conditions
}
func (r *AWSFargateProfile) SetConditions(conditions clusterv1.Conditions) {
r.Status.Conditions = conditions
}
// +kubebuilder:object:root=true
// AWSFargateProfileList contains a list of FargateProfiles
type AWSFargateProfileList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []AWSFargateProfile `json:"items"`
}
func init() {
SchemeBuilder.Register(&AWSFargateProfile{}, &AWSFargateProfileList{})
}