-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathcoderprovisioner_types.go
More file actions
141 lines (126 loc) · 7.08 KB
/
Copy pathcoderprovisioner_types.go
File metadata and controls
141 lines (126 loc) · 7.08 KB
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
package v1alpha1
import (
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
const (
// CoderProvisionerPhasePending indicates the provisioner deployment is not ready.
CoderProvisionerPhasePending = "Pending"
// CoderProvisionerPhaseReady indicates at least one provisioner pod is ready.
CoderProvisionerPhaseReady = "Ready"
// CoderProvisionerConditionControlPlaneReady indicates whether the referenced control plane is reachable.
CoderProvisionerConditionControlPlaneReady = "ControlPlaneReady"
// CoderProvisionerConditionBootstrapSecretReady indicates whether the bootstrap credentials secret is available.
CoderProvisionerConditionBootstrapSecretReady = "BootstrapSecretReady"
// CoderProvisionerConditionProvisionerKeyReady indicates whether the provisioner key exists in coderd.
CoderProvisionerConditionProvisionerKeyReady = "ProvisionerKeyReady"
// CoderProvisionerConditionProvisionerKeySecretReady indicates whether the provisioner key secret is populated.
CoderProvisionerConditionProvisionerKeySecretReady = "ProvisionerKeySecretReady"
// CoderProvisionerConditionExternalProvisionersEntitled indicates whether the
// referenced Coder deployment is entitled to run external provisioner daemons.
CoderProvisionerConditionExternalProvisionersEntitled = "ExternalProvisionersEntitled"
// CoderProvisionerConditionDeploymentReady indicates whether the provisioner deployment has ready replicas.
CoderProvisionerConditionDeploymentReady = "DeploymentReady"
// DefaultProvisionerKeySecretKey is the default data key for provisioner key secrets.
DefaultProvisionerKeySecretKey = "key"
// ProvisionerKeyCleanupFinalizer is applied to ensure coderd key cleanup on deletion.
ProvisionerKeyCleanupFinalizer = "coder.com/provisioner-key-cleanup"
)
// CoderProvisionerBootstrapSpec configures credentials for provisioner key management.
type CoderProvisionerBootstrapSpec struct {
// CredentialsSecretRef points to a Secret containing a Coder session token
// with permission to manage provisioner keys.
CredentialsSecretRef SecretKeySelector `json:"credentialsSecretRef"`
}
// CoderProvisionerKeySpec configures provisioner key naming and storage.
type CoderProvisionerKeySpec struct {
// Name is the provisioner key name in coderd. Defaults to the CR name.
// +kubebuilder:validation:MaxLength=128
Name string `json:"name,omitempty"`
// SecretName is the Kubernetes Secret to store the key. Defaults to "{crName}-provisioner-key".
// +kubebuilder:validation:MaxLength=253
SecretName string `json:"secretName,omitempty"`
// SecretKey is the data key in the Secret. Defaults to "key".
// +kubebuilder:validation:MaxLength=253
SecretKey string `json:"secretKey,omitempty"`
}
// CoderProvisionerSpec defines the desired state of a CoderProvisioner.
type CoderProvisionerSpec struct {
// ControlPlaneRef identifies which CoderControlPlane instance to join.
ControlPlaneRef corev1.LocalObjectReference `json:"controlPlaneRef"`
// OrganizationName is the Coder organization. Defaults to "default".
// +kubebuilder:validation:MaxLength=128
OrganizationName string `json:"organizationName,omitempty"`
// Bootstrap configures credentials for provisioner key management.
Bootstrap CoderProvisionerBootstrapSpec `json:"bootstrap"`
// Key configures provisioner key naming and secret storage.
Key CoderProvisionerKeySpec `json:"key,omitempty"`
// Replicas is the desired number of provisioner pods.
Replicas *int32 `json:"replicas,omitempty"`
// Tags are attached to the provisioner key for job routing.
Tags map[string]string `json:"tags,omitempty"`
// Image is the container image. Defaults to the control plane image.
Image string `json:"image,omitempty"`
// ExtraArgs are appended after "provisioner start".
ExtraArgs []string `json:"extraArgs,omitempty"`
// ExtraEnv are injected into the provisioner container.
ExtraEnv []corev1.EnvVar `json:"extraEnv,omitempty"`
// Resources for the provisioner container.
Resources corev1.ResourceRequirements `json:"resources,omitempty"`
// ImagePullSecrets are used by the pod to pull private images.
ImagePullSecrets []corev1.LocalObjectReference `json:"imagePullSecrets,omitempty"`
// TerminationGracePeriodSeconds for the provisioner pods.
TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty"`
}
// CoderProvisionerStatus defines the observed state of a CoderProvisioner.
type CoderProvisionerStatus struct {
// ObservedGeneration tracks the spec generation this status reflects.
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
// ReadyReplicas is the number of ready pods observed in the deployment.
ReadyReplicas int32 `json:"readyReplicas,omitempty"`
// Phase is a high-level readiness indicator.
Phase string `json:"phase,omitempty"`
// Conditions are Kubernetes-standard conditions for this resource.
Conditions []metav1.Condition `json:"conditions,omitempty"`
// OrganizationID is the organization ID last applied to the provisioner key.
OrganizationID string `json:"organizationID,omitempty"`
// OrganizationName is the organization name last applied to the provisioner key.
OrganizationName string `json:"organizationName,omitempty"`
// ProvisionerKeyID is the provisioner key ID last applied in coderd.
ProvisionerKeyID string `json:"provisionerKeyID,omitempty"`
// ProvisionerKeyName is the provisioner key name last applied in coderd.
ProvisionerKeyName string `json:"provisionerKeyName,omitempty"`
// TagsHash is a deterministic hash of spec.tags last applied to the provisioner key.
TagsHash string `json:"tagsHash,omitempty"`
// ControlPlaneRefName is the control plane ref name last applied to the provisioner key.
ControlPlaneRefName string `json:"controlPlaneRefName,omitempty"`
// ControlPlaneURL is the control plane URL last applied to the provisioner key.
ControlPlaneURL string `json:"controlPlaneURL,omitempty"`
// SecretRef references the provisioner key secret data currently in use.
SecretRef *SecretKeySelector `json:"secretRef,omitempty"`
}
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// +kubebuilder:object:root=true
// +kubebuilder:resource:scope=Namespaced
// +kubebuilder:subresource:status
// +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=`.status.phase`
// +kubebuilder:printcolumn:name="Replicas",type=integer,JSONPath=`.status.readyReplicas`
// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp"
// CoderProvisioner is the schema for Coder external provisioner daemon resources.
type CoderProvisioner struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec CoderProvisionerSpec `json:"spec,omitempty"`
Status CoderProvisionerStatus `json:"status,omitempty"`
}
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// +kubebuilder:object:root=true
// CoderProvisionerList contains a list of CoderProvisioner objects.
type CoderProvisionerList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []CoderProvisioner `json:"items"`
}
func init() {
SchemeBuilder.Register(&CoderProvisioner{}, &CoderProvisionerList{})
}