Skip to content
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
14 changes: 12 additions & 2 deletions internal/etos/api/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"context"
"fmt"
"maps"
"time"

etosv1alpha1 "github.com/eiffel-community/etos/api/v1alpha1"
"github.com/go-logr/logr"
Expand Down Expand Up @@ -51,11 +52,12 @@ type ETOSApiDeployment struct {
rabbitmqSecret string
messagebusSecret string
configSecret string
restartRequired bool
}

// NewETOSApiDeployment will create a new ETOS API reconciler.
func NewETOSApiDeployment(spec etosv1alpha1.ETOSAPI, scheme *runtime.Scheme, client client.Client, rabbitmqSecret string, messagebusSecret string, config string) *ETOSApiDeployment {
return &ETOSApiDeployment{spec, client, scheme, rabbitmqSecret, messagebusSecret, config}
return &ETOSApiDeployment{spec, client, scheme, rabbitmqSecret, messagebusSecret, config, false}
}

// Reconcile will reconcile the ETOS API to its expected state.
Expand Down Expand Up @@ -119,12 +121,17 @@ func (r *ETOSApiDeployment) reconcileConfig(ctx context.Context, logger logr.Log
if !apierrors.IsNotFound(err) {
return secret, err
}
r.restartRequired = true
logger.Info("Creating a new config for the ETOS API")
if err := r.Create(ctx, target); err != nil {
return target, err
}
return target, nil
}
if equality.Semantic.DeepDerivative(target.Data, secret.Data) {
return secret, nil
}
r.restartRequired = true
return target, r.Patch(ctx, target, client.StrategicMergeFrom(secret))
}

Expand All @@ -146,8 +153,11 @@ func (r *ETOSApiDeployment) reconcileDeployment(ctx context.Context, logger logr
return target, err
}
return target, nil
} else if r.restartRequired {
logger.Info("Configuration(s) have changed, restarting deployment")
deployment.Spec.Template.Annotations["etos.eiffel-community.github.io/restartedAt"] = time.Now().Format(time.RFC3339)
}
if equality.Semantic.DeepDerivative(target.Spec, deployment.Spec) {
if !r.restartRequired && equality.Semantic.DeepDerivative(target.Spec, deployment.Spec) {
return deployment, nil
}
return target, r.Patch(ctx, target, client.StrategicMergeFrom(deployment))
Expand Down
16 changes: 14 additions & 2 deletions internal/etos/suitestarter/suitestarter.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"context"
"fmt"
"maps"
"time"

etosv1alpha1 "github.com/eiffel-community/etos/api/v1alpha1"
"github.com/go-logr/logr"
Expand All @@ -46,11 +47,12 @@ type ETOSSuiteStarterDeployment struct {
messagebusSecret string
etosConfig *corev1.Secret
encryptionSecret *corev1.Secret
restartRequired bool
}

// NewETOSSuiteStarterDeployment will create a new ETOS SuiteStarter reconciler.
func NewETOSSuiteStarterDeployment(spec etosv1alpha1.ETOSSuiteStarter, scheme *runtime.Scheme, client client.Client, rabbitmqSecret, messagebusSecret string, config *corev1.Secret, encryption *corev1.Secret) *ETOSSuiteStarterDeployment {
return &ETOSSuiteStarterDeployment{spec, client, scheme, rabbitmqSecret, messagebusSecret, config, encryption}
return &ETOSSuiteStarterDeployment{spec, client, scheme, rabbitmqSecret, messagebusSecret, config, encryption, false}
}

// Reconcile will reconcile the ETOS suite starter to its expected state.
Expand Down Expand Up @@ -198,12 +200,17 @@ func (r *ETOSSuiteStarterDeployment) reconcileConfig(ctx context.Context, logger
if !apierrors.IsNotFound(err) {
return secret, err
}
r.restartRequired = true
logger.Info("Creating a new config for the suite starter")
if err := r.Create(ctx, target); err != nil {
return target, err
}
return target, nil
}
if equality.Semantic.DeepDerivative(target.Data, secret.Data) {
return secret, nil
}
r.restartRequired = true
return target, r.Patch(ctx, target, client.StrategicMergeFrom(secret))
}

Expand All @@ -221,6 +228,7 @@ func (r *ETOSSuiteStarterDeployment) reconcileTemplate(ctx context.Context, logg
if !apierrors.IsNotFound(err) {
return secret, err
}
r.restartRequired = true
logger.Info("Creating a new suite runner template for the suite starter")
if err := r.Create(ctx, target); err != nil {
return target, err
Expand All @@ -230,6 +238,7 @@ func (r *ETOSSuiteStarterDeployment) reconcileTemplate(ctx context.Context, logg
if equality.Semantic.DeepDerivative(target.Data, secret.Data) {
return secret, nil
}
r.restartRequired = true
return target, r.Patch(ctx, target, client.StrategicMergeFrom(secret))
}

Expand All @@ -251,8 +260,11 @@ func (r *ETOSSuiteStarterDeployment) reconcileDeployment(ctx context.Context, lo
return target, err
}
return target, nil
} else if r.restartRequired {
logger.Info("Configuration(s) have changed, restarting deployment")
deployment.Spec.Template.Annotations["etos.eiffel-community.github.io/restartedAt"] = time.Now().Format(time.RFC3339)
}
if equality.Semantic.DeepDerivative(target.Spec, deployment.Spec) {
if !r.restartRequired && equality.Semantic.DeepDerivative(target.Spec, deployment.Spec) {
return deployment, nil
}
return target, r.Patch(ctx, target, client.StrategicMergeFrom(deployment))
Expand Down
22 changes: 16 additions & 6 deletions internal/extras/eventrepository.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"fmt"
"maps"
"net/url"
"time"

etosv1alpha1 "github.com/eiffel-community/etos/api/v1alpha1"
"github.com/go-logr/logr"
Expand All @@ -42,15 +43,16 @@ var graphqlPort int32 = 5000
type EventRepositoryDeployment struct {
*etosv1alpha1.EventRepository
client.Client
Scheme *runtime.Scheme
mongoUri url.URL
rabbitmqSecret string
mongodbSecret string
Scheme *runtime.Scheme
mongoUri url.URL
rabbitmqSecret string
mongodbSecret string
restartRequired bool
}

// NewEventRepositoryDeployment will create a new event repository reconciler.
func NewEventRepositoryDeployment(spec *etosv1alpha1.EventRepository, scheme *runtime.Scheme, client client.Client, mongodb *MongoDBDeployment, rabbitmqSecret string) *EventRepositoryDeployment {
return &EventRepositoryDeployment{spec, client, scheme, mongodb.URL, rabbitmqSecret, mongodb.SecretName}
return &EventRepositoryDeployment{spec, client, scheme, mongodb.URL, rabbitmqSecret, mongodb.SecretName, false}
}

// Reconcile will reconcile the event repository to its expected state.
Expand Down Expand Up @@ -117,6 +119,7 @@ func (r *EventRepositoryDeployment) reconcileConfig(ctx context.Context, logger
return secret, err
}
if r.Deploy {
r.restartRequired = true
logger.Info("Creating the configuration for an EventRepository")
if err = r.Create(ctx, target); err != nil {
return target, err
Expand All @@ -127,6 +130,10 @@ func (r *EventRepositoryDeployment) reconcileConfig(ctx context.Context, logger
logger.Info("Removing the configuration for EventRepository")
return nil, r.Delete(ctx, secret)
}
if equality.Semantic.DeepDerivative(target.Data, secret.Data) {
return secret, nil
}
r.restartRequired = true
return target, r.Patch(ctx, target, client.StrategicMergeFrom(secret))
}

Expand All @@ -153,8 +160,11 @@ func (r *EventRepositoryDeployment) reconcileDeployment(ctx context.Context, log
} else if !r.Deploy {
logger.Info("Removing the deployment for EventRepository")
return nil, r.Delete(ctx, deployment)
} else if r.restartRequired {
logger.Info("Configuration(s) have changed, restarting deployment")
deployment.Spec.Template.Annotations["etos.eiffel-community.github.io/restartedAt"] = time.Now().Format(time.RFC3339)
}
if equality.Semantic.DeepDerivative(target.Spec, deployment.Spec) {
if !r.restartRequired && equality.Semantic.DeepDerivative(target.Spec, deployment.Spec) {
return deployment, nil
}
return target, r.Patch(ctx, target, client.StrategicMergeFrom(deployment))
Expand Down
13 changes: 10 additions & 3 deletions internal/extras/messagebus.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package extras
import (
"context"
"fmt"
"time"

etosv1alpha1 "github.com/eiffel-community/etos/api/v1alpha1"
"github.com/go-logr/logr"
Expand All @@ -38,13 +39,14 @@ import (
type MessageBusDeployment struct {
etosv1alpha1.RabbitMQ
client.Client
Scheme *runtime.Scheme
SecretName string
Scheme *runtime.Scheme
SecretName string
restartRequired bool
}

// NewMessageBusDeployment will create a new messagebus reconciler.
func NewMessageBusDeployment(spec etosv1alpha1.RabbitMQ, scheme *runtime.Scheme, client client.Client) *MessageBusDeployment {
return &MessageBusDeployment{spec, client, scheme, ""}
return &MessageBusDeployment{spec, client, scheme, "", false}
}

// Reconcile will reconcile the messagebus to its expected state.
Expand Down Expand Up @@ -94,6 +96,7 @@ func (r *MessageBusDeployment) reconcileSecret(ctx context.Context, logger logr.
if !apierrors.IsNotFound(err) {
return secret, err
}
r.restartRequired = true
logger.Info("Secret not found. Creating")
if err := r.Create(ctx, target); err != nil {
return target, err
Expand All @@ -103,6 +106,7 @@ func (r *MessageBusDeployment) reconcileSecret(ctx context.Context, logger logr.
if equality.Semantic.DeepDerivative(target.Data, secret.Data) {
return secret, nil
}
r.restartRequired = true
return target, r.Patch(ctx, target, client.StrategicMergeFrom(secret))
}

Expand All @@ -128,6 +132,9 @@ func (r *MessageBusDeployment) reconcileStatefulset(ctx context.Context, logger
} else if !r.Deploy {
logger.Info("Removing the statefulset for MessageBus")
return nil, r.Delete(ctx, rabbitmq)
} else if r.restartRequired {
logger.Info("Configuration(s) have changed, restarting statefulset")
rabbitmq.Spec.Template.Annotations["etos.eiffel-community.github.io/restartedAt"] = time.Now().Format(time.RFC3339)
}
return target, r.Patch(ctx, target, client.StrategicMergeFrom(rabbitmq))
}
Expand Down
15 changes: 11 additions & 4 deletions internal/extras/mongodb.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (
"context"
"fmt"
"net/url"
"time"

etosv1alpha1 "github.com/eiffel-community/etos/api/v1alpha1"
"github.com/go-logr/logr"
Expand All @@ -41,14 +42,15 @@ var mongodbPort int32 = 27017
type MongoDBDeployment struct {
etosv1alpha1.MongoDB
client.Client
Scheme *runtime.Scheme
URL url.URL
SecretName string
Scheme *runtime.Scheme
URL url.URL
SecretName string
restartRequired bool
}

// NewMongoDBDeployment will create a new MongoDB reconciler.
func NewMongoDBDeployment(spec etosv1alpha1.MongoDB, scheme *runtime.Scheme, client client.Client) *MongoDBDeployment {
return &MongoDBDeployment{spec, client, scheme, url.URL{}, ""}
return &MongoDBDeployment{spec, client, scheme, url.URL{}, "", false}
}

// Reconcile will reconcile MongoDB to its expected state.
Expand Down Expand Up @@ -112,6 +114,7 @@ func (r *MongoDBDeployment) reconcileSecret(ctx context.Context, logger logr.Log
return secret, err
}
if r.Deploy {
r.restartRequired = true
logger.Info("Secret not found. Creating")
if err := r.Create(ctx, target); err != nil {
return target, err
Expand All @@ -125,6 +128,7 @@ func (r *MongoDBDeployment) reconcileSecret(ctx context.Context, logger logr.Log
if equality.Semantic.DeepDerivative(target.Data, secret.Data) {
return secret, nil
}
r.restartRequired = true
return target, r.Patch(ctx, target, client.StrategicMergeFrom(secret))
}

Expand All @@ -150,6 +154,9 @@ func (r *MongoDBDeployment) reconcileStatefulset(ctx context.Context, logger log
} else if !r.Deploy {
logger.Info("Removing the MongoDB statefulset")
return nil, r.Delete(ctx, mongodb)
} else if r.restartRequired {
logger.Info("Configuration(s) have changed, restarting statefulset")
mongodb.Spec.Template.Annotations["etos.eiffel-community.github.io/restartedAt"] = time.Now().Format(time.RFC3339)
}
return target, r.Patch(ctx, target, client.StrategicMergeFrom(mongodb))
}
Expand Down
13 changes: 10 additions & 3 deletions internal/extras/rabbitmq.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package extras
import (
"context"
"fmt"
"time"

etosv1alpha1 "github.com/eiffel-community/etos/api/v1alpha1"
"github.com/go-logr/logr"
Expand All @@ -40,13 +41,14 @@ var rabbitmqPort int32 = 5672
type RabbitMQDeployment struct {
etosv1alpha1.RabbitMQ
client.Client
Scheme *runtime.Scheme
SecretName string
Scheme *runtime.Scheme
SecretName string
restartRequired bool
}

// NewRabbitMQDeployment will create a new RabbitMQ reconciler.
func NewRabbitMQDeployment(spec etosv1alpha1.RabbitMQ, scheme *runtime.Scheme, client client.Client) *RabbitMQDeployment {
return &RabbitMQDeployment{spec, client, scheme, ""}
return &RabbitMQDeployment{spec, client, scheme, "", false}
}

// Reconcile will reconcile RabbitMQ to its expected state.
Expand Down Expand Up @@ -98,6 +100,7 @@ func (r *RabbitMQDeployment) reconcileSecret(ctx context.Context, logger logr.Lo
logger.Error(err, "failed to get rabbitmq secret")
return secret, err
}
r.restartRequired = true
logger.Info("Secret not found. Creating")
if err := r.Create(ctx, target); err != nil {
return target, err
Expand All @@ -107,6 +110,7 @@ func (r *RabbitMQDeployment) reconcileSecret(ctx context.Context, logger logr.Lo
if equality.Semantic.DeepDerivative(target.Data, secret.Data) {
return secret, nil
}
r.restartRequired = true
return target, r.Patch(ctx, target, client.StrategicMergeFrom(secret))
}

Expand All @@ -132,6 +136,9 @@ func (r *RabbitMQDeployment) reconcileStatefulset(ctx context.Context, logger lo
} else if !r.Deploy {
logger.Info("Removing the statefulset for RabbitMQ")
return nil, r.Delete(ctx, rabbitmq)
} else if r.restartRequired {
logger.Info("Configuration(s) have changed, restarting statefulset")
rabbitmq.Spec.Template.Annotations["etos.eiffel-community.github.io/restartedAt"] = time.Now().Format(time.RFC3339)
}
return target, r.Patch(ctx, target, client.StrategicMergeFrom(rabbitmq))
}
Expand Down