diff --git a/internal/controller/valkey_controller.go b/internal/controller/valkey_controller.go index d6e0400..6b86d4f 100644 --- a/internal/controller/valkey_controller.go +++ b/internal/controller/valkey_controller.go @@ -26,6 +26,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/log" hyperv1 "hyperspike.io/valkey-operator/api/v1" + appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -127,9 +128,11 @@ func (r *ValkeyReconciler) upsertService(ctx context.Context, valkey *hyperv1.Va if err := r.Create(ctx, svc); err != nil { if errors.IsAlreadyExists(err) { if err := r.Update(ctx, svc); err != nil { + logger.Error(err, "failed to update service", "valkey", valkey.Name, "namespace", valkey.Namespace) return err } } else { + logger.Error(err, "failed to create service", "valkey", valkey.Name, "namespace", valkey.Namespace) return err } } @@ -157,24 +160,106 @@ func (r *ValkeyReconciler) upsertServiceHeadless(ctx context.Context, valkey *hy if err := r.Create(ctx, svc); err != nil { if errors.IsAlreadyExists(err) { if err := r.Update(ctx, svc); err != nil { + logger.Error(err, "failed to update service", "valkey", valkey.Name, "namespace", valkey.Namespace) return err } } else { + logger.Error(err, "failed to create service", "valkey", valkey.Name, "namespace", valkey.Namespace) return err } } return nil } -func (r *ValkeyReconciler) upsertServiceAccount(ctx context.Context, valkey *hyperv1.Valkey) error { +func (r *ValkeyReconciler) upsertSecret(ctx context.Context, valkey *hyperv1.Valkey) error { + logger := log.FromContext(ctx) + + logger.Info("upserting secret", "valkey", valkey.Name, "namespace", valkey.Namespace) + + secret := &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: valkey.Name, + Namespace: valkey.Namespace, + }, + Data: map[string][]byte{ + "": {}, + }, + } + if err := r.Create(ctx, secret); err != nil { + if errors.IsAlreadyExists(err) { + if err := r.Update(ctx, secret); err != nil { + logger.Error(err, "failed to update secret", "valkey", valkey.Name, "namespace", valkey.Namespace) + return err + } + } else { + logger.Error(err, "failed to create secret", "valkey", valkey.Name, "namespace", valkey.Namespace) + return err + } + } return nil } -func (r *ValkeyReconciler) upsertStatefulSet(ctx context.Context, valkey *hyperv1.Valkey) error { +func (r *ValkeyReconciler) upsertServiceAccount(ctx context.Context, valkey *hyperv1.Valkey) error { + logger := log.FromContext(ctx) + + logger.Info("upserting service account", "valkey", valkey.Name, "namespace", valkey.Namespace) + svc := &corev1.ServiceAccount{ + ObjectMeta: metav1.ObjectMeta{ + Name: valkey.Name, + Namespace: valkey.Namespace, + }, + } + if err := r.Create(ctx, svc); err != nil { + if errors.IsAlreadyExists(err) { + if err := r.Update(ctx, svc); err != nil { + logger.Error(err, "failed to update service account", "valkey", valkey.Name, "namespace", valkey.Namespace) + return err + } + } else { + logger.Error(err, "failed to create service account", "valkey", valkey.Name, "namespace", valkey.Namespace) + return err + } + } return nil } -func (r *ValkeyReconciler) upsertSecret(ctx context.Context, valkey *hyperv1.Valkey) error { +func (r *ValkeyReconciler) upsertStatefulSet(ctx context.Context, valkey *hyperv1.Valkey) error { + logger := log.FromContext(ctx) + + logger.Info("upserting statefulset", "valkey", valkey.Name, "namespace", valkey.Namespace) + sts := &appsv1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: valkey.Name, + Namespace: valkey.Namespace, + }, + Spec: appsv1.StatefulSetSpec{ + Replicas: nil, + Selector: nil, + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + "": "", + }, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + {}, + }, + }, + }, + }, + } + if err := r.Create(ctx, sts); err != nil { + if errors.IsAlreadyExists(err) { + if err := r.Update(ctx, sts); err != nil { + logger.Error(err, "failed to update statefulset", "valkey", valkey.Name, "namespace", valkey.Namespace) + return err + } + } else { + logger.Error(err, "failed to create statefulset", "valkey", valkey.Name, "namespace", valkey.Namespace) + return err + } + } return nil } diff --git a/test/utils/utils.go b/test/utils/utils.go index e3eb79b..77e0a20 100644 --- a/test/utils/utils.go +++ b/test/utils/utils.go @@ -41,7 +41,7 @@ func warnError(err error) { // InstallPrometheusOperator installs the prometheus Operator to be used to export the enabled metrics. func InstallPrometheusOperator() error { url := fmt.Sprintf(prometheusOperatorURL, prometheusOperatorVersion) - cmd := exec.Command("kubectl", "create", "-f", url) + cmd := exec.Command("kubectl", "create", "-f", url) // #nosec G204 _, err := Run(cmd) return err } @@ -69,7 +69,7 @@ func Run(cmd *exec.Cmd) ([]byte, error) { // UninstallPrometheusOperator uninstalls the prometheus func UninstallPrometheusOperator() { url := fmt.Sprintf(prometheusOperatorURL, prometheusOperatorVersion) - cmd := exec.Command("kubectl", "delete", "-f", url) + cmd := exec.Command("kubectl", "delete", "-f", url) // #nosec G204 if _, err := Run(cmd); err != nil { warnError(err) } @@ -78,7 +78,7 @@ func UninstallPrometheusOperator() { // UninstallCertManager uninstalls the cert manager func UninstallCertManager() { url := fmt.Sprintf(certmanagerURLTmpl, certmanagerVersion) - cmd := exec.Command("kubectl", "delete", "-f", url) + cmd := exec.Command("kubectl", "delete", "-f", url) // #nosec G204 if _, err := Run(cmd); err != nil { warnError(err) } @@ -87,7 +87,7 @@ func UninstallCertManager() { // InstallCertManager installs the cert manager bundle. func InstallCertManager() error { url := fmt.Sprintf(certmanagerURLTmpl, certmanagerVersion) - cmd := exec.Command("kubectl", "apply", "-f", url) + cmd := exec.Command("kubectl", "apply", "-f", url) // #nosec G204 if _, err := Run(cmd); err != nil { return err } @@ -110,7 +110,7 @@ func LoadImageToKindClusterWithName(name string) error { cluster = v } kindOptions := []string{"load", "docker-image", name, "--name", cluster} - cmd := exec.Command("kind", kindOptions...) + cmd := exec.Command("kind", kindOptions...) // #nosec G204 _, err := Run(cmd) return err }