Skip to content

Commit a8076da

Browse files
authored
Add utility functions for new status check (#260)
2 parents f0ec0a9 + 5e22c32 commit a8076da

File tree

4 files changed

+81
-10
lines changed

4 files changed

+81
-10
lines changed

internal/controller/etcdcluster_controller.go

+35
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,37 @@ func (r *EtcdClusterReconciler) ensureUnconditionalObjects(ctx context.Context,
661662
}
662663
return nil
663664
}
665+
666+
// TODO!
667+
// nolint:unused
668+
func (r *EtcdClusterReconciler) patchOrCreateObject(ctx context.Context, obj client.Object) error {
669+
err := r.Patch(ctx, obj, client.Apply, &client.PatchOptions{FieldManager: "etcd-operator"}, client.ForceOwnership)
670+
if err == nil {
671+
return nil
672+
}
673+
if client.IgnoreNotFound(err) == nil {
674+
err = r.Create(ctx, obj)
675+
}
676+
return err
677+
}
678+
679+
// TODO!
680+
// nolint:unparam,unused
681+
func (r *EtcdClusterReconciler) createClusterFromScratch(ctx context.Context, state *observables) (ctrl.Result, error) {
682+
cm := factory.TemplateClusterStateConfigMap(state.instance, "new", state.desiredReplicas())
683+
err := ctrl.SetControllerReference(state.instance, cm, r.Scheme)
684+
if err != nil {
685+
return ctrl.Result{}, err
686+
}
687+
err = r.patchOrCreateObject(ctx, cm)
688+
if err != nil {
689+
return ctrl.Result{}, err
690+
}
691+
panic("not yet implemented")
692+
}
693+
694+
// TODO!
695+
// nolint:unused
696+
func (r *EtcdClusterReconciler) scaleUpFromZero(ctx context.Context, state *observables) (ctrl.Result, error) {
697+
panic("not yet implemented")
698+
}

internal/controller/factory/pvc.go

+18
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

+18-7
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

+10-3
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"
@@ -19,16 +23,18 @@ type etcdStatus struct {
1923
memberListError error
2024
}
2125

26+
// TODO: nolint
2227
// observables stores observations that the operator can make about
2328
// states of objects in kubernetes
2429
type observables struct {
30+
instance *v1alpha1.EtcdCluster
2531
statefulSet appsv1.StatefulSet
2632
stsExists bool
33+
endpoints []string //nolint:unused
2734
endpointsFound bool
2835
etcdStatuses []etcdStatus
2936
clusterID uint64
30-
_ int
31-
_ []corev1.PersistentVolumeClaim
37+
pvcs []corev1.PersistentVolumeClaim //nolint:unused
3238
}
3339

3440
// setClusterID populates the clusterID field based on etcdStatuses
@@ -68,7 +74,8 @@ func (s *etcdStatus) fill(ctx context.Context, c *clientv3.Client) {
6874
}
6975

7076
// TODO: make a real function
71-
func (o *observables) _() int {
77+
// nolint:unused
78+
func (o *observables) desiredReplicas() int {
7279
if o.etcdStatuses != nil {
7380
for i := range o.etcdStatuses {
7481
if o.etcdStatuses[i].memberList != nil {

0 commit comments

Comments
 (0)