Skip to content
This repository has been archived by the owner on Aug 29, 2024. It is now read-only.

Commit

Permalink
move seaweedfs service creation to join comand
Browse files Browse the repository at this point in the history
  • Loading branch information
laverya committed Jul 22, 2024
1 parent dbed7a6 commit f0411ef
Show file tree
Hide file tree
Showing 7 changed files with 3 additions and 282 deletions.
2 changes: 0 additions & 2 deletions controllers/installation_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -1059,8 +1059,6 @@ func (r *InstallationReconciler) SetupWithManager(mgr ctrl.Manager) error {
return ctrl.NewControllerManagedBy(mgr).
For(&v1beta1.Installation{}).
Owns(&corev1.Secret{}).
Owns(&corev1.Service{}).
Owns(&batchv1.Job{}).
Watches(&corev1.Node{}, &handler.EnqueueRequestForObject{}).
Watches(&apv1b2.Plan{}, &handler.EnqueueRequestForObject{}).
Watches(&k0shelm.Chart{}, &handler.EnqueueRequestForObject{}).
Expand Down
16 changes: 0 additions & 16 deletions pkg/registry/registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,22 +45,6 @@ func EnsureResources(ctx context.Context, in *clusterv1beta1.Installation, cli c
}
in.Status.SetCondition(getRegistryS3SecretReadyCondition(in, metav1.ConditionTrue, "SecretReady", ""))

seaweedfsS3ServiceIP, err := getSeaweedfsS3ServiceIP(serviceCIDR)
if err != nil {
err = fmt.Errorf("get seaweedfs s3 service IP: %w", err)
in.Status.SetCondition(getSeaweedfsS3ServiceReadyCondition(in, metav1.ConditionFalse, "Failed", err.Error()))
return err
}

op, err = ensureSeaweedfsS3Service(ctx, in, cli, seaweedfsS3ServiceIP)
if err != nil {
in.Status.SetCondition(getSeaweedfsS3ServiceReadyCondition(in, metav1.ConditionFalse, "Failed", err.Error()))
return fmt.Errorf("ensure seaweedfs s3 service: %w", err)
} else if op != controllerutil.OperationResultNone {
log.Info("Seaweedfs s3 service changed", "operation", op)
}
in.Status.SetCondition(getSeaweedfsS3ServiceReadyCondition(in, metav1.ConditionTrue, "ServiceReady", ""))

return nil
}

Expand Down
18 changes: 1 addition & 17 deletions pkg/registry/registry_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ func TestEnsureResources(t *testing.T) {
},
},
assertIn: func(t *testing.T, in *clusterv1beta1.Installation) {
if !assert.Len(t, in.Status.Conditions, 3) {
if !assert.Len(t, in.Status.Conditions, 2) {
return
}

Expand All @@ -86,12 +86,6 @@ func TestEnsureResources(t *testing.T) {
assert.Equal(t, "SecretReady", in.Status.Conditions[1].Reason)
assert.Equal(t, int64(2), in.Status.Conditions[1].ObservedGeneration)
assert.WithinDuration(t, metav1.Now().Time, in.Status.Conditions[1].LastTransitionTime.Time, time.Minute)

assert.Equal(t, seaweedfsS3ServiceReadyConditionType, in.Status.Conditions[2].Type)
assert.Equal(t, metav1.ConditionTrue, in.Status.Conditions[2].Status)
assert.Equal(t, "ServiceReady", in.Status.Conditions[2].Reason)
assert.Equal(t, int64(2), in.Status.Conditions[2].ObservedGeneration)
assert.WithinDuration(t, metav1.Now().Time, in.Status.Conditions[2].LastTransitionTime.Time, time.Minute)
},
assertRuntime: func(t *testing.T, cli client.Client) {
namespace := &corev1.Namespace{}
Expand Down Expand Up @@ -132,16 +126,6 @@ func TestEnsureResources(t *testing.T) {
if assert.Contains(t, secret.Data, "s3SecretKey") {
assert.Equal(t, "5U1QVkIxBhsQnmxRRHeqR1NqOLe4VEtX53Xc5vQt", string(secret.Data["s3SecretKey"]))
}

service := &corev1.Service{}
err = cli.Get(context.Background(), client.ObjectKey{Namespace: "seaweedfs", Name: "ec-seaweedfs-s3"}, service)
require.NoError(t, err)

if assert.Len(t, service.OwnerReferences, 1) {
assert.Equal(t, service.OwnerReferences[0].Name, "embedded-cluster-kinds")
}

assert.Equal(t, "10.96.0.12", service.Spec.ClusterIP)
},
},
}
Expand Down
80 changes: 0 additions & 80 deletions pkg/registry/seaweedfs.go
Original file line number Diff line number Diff line change
@@ -1,34 +1,15 @@
package registry

import (
"context"
"fmt"

clusterv1beta1 "github.com/replicatedhq/embedded-cluster-kinds/apis/v1beta1"
"github.com/replicatedhq/embedded-cluster-operator/pkg/util"
corev1 "k8s.io/api/core/v1"
k8serrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
)

const (
// seaweedfsNamespace is the namespace where the Seaweedfs chart is installed.
// This namespace is defined in the chart in the release metadata.
seaweedfsNamespace = "seaweedfs"

// seaweedfsS3SVCName is the name of the Seaweedfs S3 service managed by the operator.
// HACK: This service has a hardcoded service IP shared by the cli and operator as it is used
// by the registry to redirect requests for blobs.
seaweedfsS3SVCName = "ec-seaweedfs-s3"

// seaweedfsS3ServiceReadyConditionType represents the condition type that indicates status of
// the Seaweedfs service.
seaweedfsS3ServiceReadyConditionType = "SeaweedfsS3ServiceReady"

// seaweedfsLowerBandIPIndex is the index of the seaweedfs service IP in the service CIDR.
// HACK: this is shared with the cli and operator as it is used by the registry to redirect requests for blobs.
seaweedfsLowerBandIPIndex = 11
Expand All @@ -49,64 +30,3 @@ func getSeaweedfsS3ServiceIP(serviceCIDR string) (string, error) {
}
return ip.String(), nil
}

func ensureSeaweedfsS3Service(ctx context.Context, in *clusterv1beta1.Installation, cli client.Client, clusterIP string) (controllerutil.OperationResult, error) {
op := controllerutil.OperationResultNone

err := ensureSeaweedfsNamespace(ctx, cli)
if err != nil {
return op, fmt.Errorf("ensure seaweedfs namespace: %w", err)
}

obj := &corev1.Service{
ObjectMeta: metav1.ObjectMeta{Name: seaweedfsS3SVCName, Namespace: seaweedfsNamespace},
}

op, err = ctrl.CreateOrUpdate(ctx, cli, obj, func() error {
err := ctrl.SetControllerReference(in, obj, cli.Scheme())
if err != nil {
return fmt.Errorf("set controller reference: %w", err)
}

obj.ObjectMeta.Labels = applySeaweedFSLabels(obj.ObjectMeta.Labels, "s3")

obj.Spec.ClusterIP = clusterIP
obj.Spec.Ports = []corev1.ServicePort{
{
Name: "swfs-s3",
Port: 8333,
Protocol: corev1.ProtocolTCP,
TargetPort: intstr.FromInt(8333),
},
}
obj.Spec.Selector = map[string]string{
"app.kubernetes.io/component": "filer",
"app.kubernetes.io/name": "seaweedfs",
}

return nil
})
if err != nil {
return op, fmt.Errorf("create or update registry s3 service: %w", err)
}

return op, nil
}

func ensureSeaweedfsNamespace(ctx context.Context, cli client.Client) error {
obj := &corev1.Namespace{
ObjectMeta: metav1.ObjectMeta{Name: seaweedfsNamespace},
}

err := cli.Create(ctx, obj)
if err != nil && !k8serrors.IsAlreadyExists(err) {
return fmt.Errorf("create seaweedfs namespace: %w", err)

}

return nil
}

func getSeaweedfsS3ServiceReadyCondition(in *clusterv1beta1.Installation, status metav1.ConditionStatus, reason string, message string) metav1.Condition {
return getCondition(in, seaweedfsS3ServiceReadyConditionType, status, reason, message)
}
156 changes: 0 additions & 156 deletions pkg/registry/seaweedfs_test.go

This file was deleted.

7 changes: 1 addition & 6 deletions pkg/registry/secrets.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,18 +36,13 @@ func ensureSeaweedfsS3Secret(ctx context.Context, in *clusterv1beta1.Installatio

op := controllerutil.OperationResultNone

err := ensureSeaweedfsNamespace(ctx, cli)
if err != nil {
return nil, op, fmt.Errorf("ensure seaweedfs namespace: %w", err)
}

obj := &corev1.Secret{
ObjectMeta: metav1.ObjectMeta{Name: seaweedfsS3SecretName, Namespace: seaweedfsNamespace},
}

var config seaweedfsConfig

op, err = ctrl.CreateOrUpdate(ctx, cli, obj, func() error {
op, err := ctrl.CreateOrUpdate(ctx, cli, obj, func() error {
err := ctrl.SetControllerReference(in, obj, cli.Scheme())
if err != nil {
return fmt.Errorf("set controller reference: %w", err)
Expand Down
6 changes: 1 addition & 5 deletions pkg/registry/secrets_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,8 @@ func Test_ensureSeaweedfsS3Secret(t *testing.T) {
name: "create secret",
wantOp: controllerutil.OperationResultCreated,
assertRuntime: func(t *testing.T, cli client.Client) {
namespace := &corev1.Namespace{}
err := cli.Get(context.Background(), client.ObjectKey{Name: "seaweedfs"}, namespace)
require.NoError(t, err)

secret := &corev1.Secret{}
err = cli.Get(context.Background(), client.ObjectKey{Namespace: "seaweedfs", Name: "secret-seaweedfs-s3"}, secret)
err := cli.Get(context.Background(), client.ObjectKey{Namespace: "seaweedfs", Name: "secret-seaweedfs-s3"}, secret)
require.NoError(t, err)

if assert.Len(t, secret.OwnerReferences, 1) {
Expand Down

0 comments on commit f0411ef

Please sign in to comment.