Skip to content

Commit 672010f

Browse files
committed
Add utility functions
1 parent e00e6cb commit 672010f

File tree

4 files changed

+75
-10
lines changed

4 files changed

+75
-10
lines changed

internal/controller/etcdcluster_controller.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ func (r *EtcdClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request)
9191
}
9292

9393
state := observables{}
94+
state.instance = instance
9495

9596
// create two services and the pdb
9697
err = r.ensureUnconditionalObjects(ctx, instance)
@@ -661,3 +662,33 @@ func (r *EtcdClusterReconciler) ensureUnconditionalObjects(ctx context.Context,
661662
}
662663
return nil
663664
}
665+
666+
func (r *EtcdClusterReconciler) patchOrCreateObject(ctx context.Context, obj client.Object) error {
667+
err := r.Patch(ctx, obj, client.Apply, &client.PatchOptions{FieldManager: "etcd-operator"}, client.ForceOwnership)
668+
if err == nil {
669+
return nil
670+
}
671+
if client.IgnoreNotFound(err) == nil {
672+
err = r.Create(ctx, obj)
673+
}
674+
return err
675+
}
676+
677+
// TODO!
678+
func (r *EtcdClusterReconciler) createClusterFromScratch(ctx context.Context, state *observables) (ctrl.Result, error) {
679+
cm := factory.TemplateClusterStateConfigMap(state.instance, "new", state.desiredReplicas())
680+
err := ctrl.SetControllerReference(state.instance, cm, r.Scheme)
681+
if err != nil {
682+
return ctrl.Result{}, err
683+
}
684+
err = r.patchOrCreateObject(ctx, cm)
685+
if err != nil {
686+
return ctrl.Result{}, err
687+
}
688+
panic("not yet implemented")
689+
}
690+
691+
// TODO!
692+
func (r *EtcdClusterReconciler) scaleUpFromZero(ctx context.Context, state *observables) (ctrl.Result, error) {
693+
panic("not yet implemented")
694+
}

internal/controller/factory/pvc.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@ import (
3030
"k8s.io/apimachinery/pkg/types"
3131
)
3232

33+
func PVCLabels(cluster *etcdaenixiov1alpha1.EtcdCluster) map[string]string {
34+
labels := PodLabels(cluster)
35+
for key, value := range cluster.Spec.Storage.VolumeClaimTemplate.Labels {
36+
labels[key] = value
37+
}
38+
return labels
39+
}
40+
3341
func GetPVCName(cluster *etcdaenixiov1alpha1.EtcdCluster) string {
3442
if len(cluster.Spec.Storage.VolumeClaimTemplate.Name) > 0 {
3543
return cluster.Spec.Storage.VolumeClaimTemplate.Name
@@ -38,6 +46,16 @@ func GetPVCName(cluster *etcdaenixiov1alpha1.EtcdCluster) string {
3846
return "data"
3947
}
4048

49+
func PVCs(ctx context.Context, cluster *etcdaenixiov1alpha1.EtcdCluster, cli client.Client) ([]corev1.PersistentVolumeClaim, error) {
50+
labels := PVCLabels(cluster)
51+
pvcs := corev1.PersistentVolumeClaimList{}
52+
err := cli.List(ctx, &pvcs, client.MatchingLabels(labels))
53+
if err != nil {
54+
return nil, err
55+
}
56+
return pvcs.Items, nil
57+
}
58+
4159
// UpdatePersistentVolumeClaims checks and updates the sizes of PVCs in an EtcdCluster if the specified storage size is larger than the current.
4260
func UpdatePersistentVolumeClaims(ctx context.Context, cluster *etcdaenixiov1alpha1.EtcdCluster, rclient client.Client) error {
4361
labelSelector := labels.SelectorFromSet(labels.Set{

internal/controller/factory/statefulset.go

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,19 +41,30 @@ const (
4141
defaultBackendQuotaBytesFraction = 0.95
4242
)
4343

44+
// TODO!
45+
func TemplateStatefulSet() *appsv1.StatefulSet {
46+
panic("not yet implemented")
47+
}
48+
49+
func PodLabels(cluster *etcdaenixiov1alpha1.EtcdCluster) map[string]string {
50+
labels := NewLabelsBuilder().WithName().WithInstance(cluster.Name).WithManagedBy()
51+
52+
if cluster.Spec.PodTemplate.Labels != nil {
53+
for key, value := range cluster.Spec.PodTemplate.Labels {
54+
labels[key] = value
55+
}
56+
}
57+
58+
return labels
59+
}
60+
4461
func CreateOrUpdateStatefulSet(
4562
ctx context.Context,
4663
cluster *etcdaenixiov1alpha1.EtcdCluster,
4764
rclient client.Client,
4865
) error {
4966
podMetadata := metav1.ObjectMeta{
50-
Labels: NewLabelsBuilder().WithName().WithInstance(cluster.Name).WithManagedBy(),
51-
}
52-
53-
if cluster.Spec.PodTemplate.Labels != nil {
54-
for key, value := range cluster.Spec.PodTemplate.Labels {
55-
podMetadata.Labels[key] = value
56-
}
67+
Labels: PodLabels(cluster),
5768
}
5869

5970
if cluster.Spec.PodTemplate.Annotations != nil {

internal/controller/observables.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@ package controller
22

33
import (
44
"context"
5+
// "strconv"
6+
// "strings"
57
"sync"
68

9+
"github.com/aenix-io/etcd-operator/api/v1alpha1"
10+
// "github.com/aenix-io/etcd-operator/pkg/set"
711
clientv3 "go.etcd.io/etcd/client/v3"
812
appsv1 "k8s.io/api/apps/v1"
913
corev1 "k8s.io/api/core/v1"
@@ -22,13 +26,14 @@ type etcdStatus struct {
2226
// observables stores observations that the operator can make about
2327
// states of objects in kubernetes
2428
type observables struct {
29+
instance *v1alpha1.EtcdCluster
2530
statefulSet appsv1.StatefulSet
2631
stsExists bool
32+
endpoints []string
2733
endpointsFound bool
2834
etcdStatuses []etcdStatus
2935
clusterID uint64
30-
_ int
31-
_ []corev1.PersistentVolumeClaim
36+
pvcs []corev1.PersistentVolumeClaim
3237
}
3338

3439
// setClusterID populates the clusterID field based on etcdStatuses
@@ -68,7 +73,7 @@ func (s *etcdStatus) fill(ctx context.Context, c *clientv3.Client) {
6873
}
6974

7075
// TODO: make a real function
71-
func (o *observables) _() int {
76+
func (o *observables) desiredReplicas() int {
7277
if o.etcdStatuses != nil {
7378
for i := range o.etcdStatuses {
7479
if o.etcdStatuses[i].memberList != nil {

0 commit comments

Comments
 (0)