Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add utility functions for new status check #260

Merged
merged 1 commit into from
Oct 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions internal/controller/etcdcluster_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ func (r *EtcdClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request)
}

state := observables{}
state.instance = instance

// create two services and the pdb
err = r.ensureUnconditionalObjects(ctx, instance)
Expand Down Expand Up @@ -661,3 +662,37 @@ func (r *EtcdClusterReconciler) ensureUnconditionalObjects(ctx context.Context,
}
return nil
}

// TODO!
// nolint:unused
func (r *EtcdClusterReconciler) patchOrCreateObject(ctx context.Context, obj client.Object) error {
err := r.Patch(ctx, obj, client.Apply, &client.PatchOptions{FieldManager: "etcd-operator"}, client.ForceOwnership)
if err == nil {
return nil
}
if client.IgnoreNotFound(err) == nil {
err = r.Create(ctx, obj)
}
return err
}

// TODO!
// nolint:unparam,unused
func (r *EtcdClusterReconciler) createClusterFromScratch(ctx context.Context, state *observables) (ctrl.Result, error) {
cm := factory.TemplateClusterStateConfigMap(state.instance, "new", state.desiredReplicas())
err := ctrl.SetControllerReference(state.instance, cm, r.Scheme)
if err != nil {
return ctrl.Result{}, err
}
err = r.patchOrCreateObject(ctx, cm)
if err != nil {
return ctrl.Result{}, err
}
panic("not yet implemented")
}
lllamnyp marked this conversation as resolved.
Show resolved Hide resolved

// TODO!
// nolint:unused
func (r *EtcdClusterReconciler) scaleUpFromZero(ctx context.Context, state *observables) (ctrl.Result, error) {
panic("not yet implemented")
}
lllamnyp marked this conversation as resolved.
Show resolved Hide resolved
18 changes: 18 additions & 0 deletions internal/controller/factory/pvc.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,14 @@ import (
"k8s.io/apimachinery/pkg/types"
)

func PVCLabels(cluster *etcdaenixiov1alpha1.EtcdCluster) map[string]string {
labels := PodLabels(cluster)
for key, value := range cluster.Spec.Storage.VolumeClaimTemplate.Labels {
labels[key] = value
}
return labels
}

func GetPVCName(cluster *etcdaenixiov1alpha1.EtcdCluster) string {
if len(cluster.Spec.Storage.VolumeClaimTemplate.Name) > 0 {
return cluster.Spec.Storage.VolumeClaimTemplate.Name
Expand All @@ -38,6 +46,16 @@ func GetPVCName(cluster *etcdaenixiov1alpha1.EtcdCluster) string {
return "data"
}

func PVCs(ctx context.Context, cluster *etcdaenixiov1alpha1.EtcdCluster, cli client.Client) ([]corev1.PersistentVolumeClaim, error) {
labels := PVCLabels(cluster)
pvcs := corev1.PersistentVolumeClaimList{}
err := cli.List(ctx, &pvcs, client.MatchingLabels(labels))
if err != nil {
return nil, err
}
return pvcs.Items, nil
}

// UpdatePersistentVolumeClaims checks and updates the sizes of PVCs in an EtcdCluster if the specified storage size is larger than the current.
func UpdatePersistentVolumeClaims(ctx context.Context, cluster *etcdaenixiov1alpha1.EtcdCluster, rclient client.Client) error {
labelSelector := labels.SelectorFromSet(labels.Set{
Expand Down
25 changes: 18 additions & 7 deletions internal/controller/factory/statefulset.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,19 +41,30 @@ const (
defaultBackendQuotaBytesFraction = 0.95
)

// TODO!
func TemplateStatefulSet() *appsv1.StatefulSet {
panic("not yet implemented")
}

func PodLabels(cluster *etcdaenixiov1alpha1.EtcdCluster) map[string]string {
labels := NewLabelsBuilder().WithName().WithInstance(cluster.Name).WithManagedBy()

if cluster.Spec.PodTemplate.Labels != nil {
for key, value := range cluster.Spec.PodTemplate.Labels {
labels[key] = value
}
}

return labels
}

func CreateOrUpdateStatefulSet(
ctx context.Context,
cluster *etcdaenixiov1alpha1.EtcdCluster,
rclient client.Client,
) error {
podMetadata := metav1.ObjectMeta{
Labels: NewLabelsBuilder().WithName().WithInstance(cluster.Name).WithManagedBy(),
}

if cluster.Spec.PodTemplate.Labels != nil {
for key, value := range cluster.Spec.PodTemplate.Labels {
podMetadata.Labels[key] = value
}
Labels: PodLabels(cluster),
}

if cluster.Spec.PodTemplate.Annotations != nil {
Expand Down
13 changes: 10 additions & 3 deletions internal/controller/observables.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@ package controller

import (
"context"
// "strconv"
// "strings"
"sync"

"github.com/aenix-io/etcd-operator/api/v1alpha1"
// "github.com/aenix-io/etcd-operator/pkg/set"
clientv3 "go.etcd.io/etcd/client/v3"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
Expand All @@ -19,16 +23,18 @@ type etcdStatus struct {
memberListError error
}

// TODO: nolint
// observables stores observations that the operator can make about
// states of objects in kubernetes
type observables struct {
instance *v1alpha1.EtcdCluster
statefulSet appsv1.StatefulSet
stsExists bool
endpoints []string //nolint:unused
endpointsFound bool
etcdStatuses []etcdStatus
clusterID uint64
_ int
_ []corev1.PersistentVolumeClaim
pvcs []corev1.PersistentVolumeClaim //nolint:unused
}

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

// TODO: make a real function
func (o *observables) _() int {
// nolint:unused
func (o *observables) desiredReplicas() int {
if o.etcdStatuses != nil {
for i := range o.etcdStatuses {
if o.etcdStatuses[i].memberList != nil {
Expand Down