88 "github.com/go-logr/logr"
99 repomanagerpulpprojectorgv1beta2 "github.com/pulp/pulp-operator/apis/repo-manager.pulpproject.org/v1beta2"
1010 "github.com/pulp/pulp-operator/controllers"
11+ "golang.org/x/text/cases"
12+ "golang.org/x/text/language"
1113 appsv1 "k8s.io/api/apps/v1"
1214 corev1 "k8s.io/api/core/v1"
1315 "k8s.io/apimachinery/pkg/api/equality"
@@ -21,6 +23,10 @@ import (
2123
2224func (r * RepoManagerReconciler ) pulpCacheController (ctx context.Context , pulp * repomanagerpulpprojectorgv1beta2.Pulp , log logr.Logger ) (ctrl.Result , error ) {
2325
26+ // conditionType is used to update .status.conditions with the current resource state
27+ conditionType := cases .Title (language .English , cases .Compact ).String (pulp .Spec .DeploymentType ) + "-API-Ready"
28+ funcResources := controllers.FunctionResources {Context : ctx , Client : r .Client , Pulp : pulp , Scheme : r .Scheme , Logger : log }
29+
2430 // pulp-redis-data PVC
2531 // the PVC will be created only if a StorageClassName is provided
2632 if _ , storageType := controllers .MultiStorageConfigured (pulp , "Cache" ); storageType [0 ] == controllers .SCNameType {
@@ -99,9 +105,8 @@ func (r *RepoManagerReconciler) pulpCacheController(ctx context.Context, pulp *r
99105 // redis Deployment
100106 deploymentFound := & appsv1.Deployment {}
101107 err = r .Get (ctx , types.NamespacedName {Name : pulp .Name + "-redis" , Namespace : pulp .Namespace }, deploymentFound )
102- dep := redisDeployment (pulp )
108+ dep := redisDeployment (pulp , funcResources )
103109 if err != nil && errors .IsNotFound (err ) {
104- ctrl .SetControllerReference (pulp , dep , r .Scheme )
105110 log .Info ("Creating a new Pulp Redis Deployment" , "Deployment.Namespace" , dep .Namespace , "Deployment.Name" , dep .Name )
106111 err = r .Create (ctx , dep )
107112 if err != nil {
@@ -117,19 +122,9 @@ func (r *RepoManagerReconciler) pulpCacheController(ctx context.Context, pulp *r
117122 return ctrl.Result {}, err
118123 }
119124
120- // Reconcile Deployment
121- if controllers .CheckDeploymentSpec (dep .Spec , deploymentFound .Spec ) {
122- log .Info ("The Redis Deployment has been modified! Reconciling ..." )
123- ctrl .SetControllerReference (pulp , dep , r .Scheme )
124- r .recorder .Event (pulp , corev1 .EventTypeNormal , "Updating" , "Reconciling Redis Deployment" )
125- err = r .Update (ctx , dep )
126- if err != nil {
127- log .Error (err , "Error trying to update the Redis Deployment object ... " )
128- r .recorder .Event (pulp , corev1 .EventTypeWarning , "Failed" , "Failed to reconcile Redis Deployment" )
129- return ctrl.Result {}, err
130- }
131- r .recorder .Event (pulp , corev1 .EventTypeNormal , "Updated" , "Redis Deployment reconciled" )
132- return ctrl.Result {Requeue : true , RequeueAfter : time .Second }, nil
125+ // Ensure the deployment spec is as expected
126+ if requeue , err := controllers .ReconcileObject (funcResources , dep , deploymentFound , conditionType , controllers.PulpDeployment {}); err != nil || requeue {
127+ return ctrl.Result {Requeue : requeue }, err
133128 }
134129
135130 r .recorder .Event (pulp , corev1 .EventTypeNormal , "RedisReady" , "All Redis tasks ran successfully" )
@@ -220,7 +215,7 @@ func redisSvc(m *repomanagerpulpprojectorgv1beta2.Pulp) *corev1.Service {
220215}
221216
222217// redisDeployment returns a Redis Deployment object
223- func redisDeployment (m * repomanagerpulpprojectorgv1beta2.Pulp ) * appsv1.Deployment {
218+ func redisDeployment (m * repomanagerpulpprojectorgv1beta2.Pulp , funcResources controllers. FunctionResources ) * appsv1.Deployment {
224219
225220 replicas := int32 (1 )
226221
@@ -359,7 +354,7 @@ func redisDeployment(m *repomanagerpulpprojectorgv1beta2.Pulp) *appsv1.Deploymen
359354 removeStorageDefinition (& resources )
360355
361356 // deployment definition
362- return & appsv1.Deployment {
357+ dep := & appsv1.Deployment {
363358 ObjectMeta : metav1.ObjectMeta {
364359 Name : m .Name + "-redis" ,
365360 Namespace : m .Namespace ,
@@ -422,6 +417,10 @@ func redisDeployment(m *repomanagerpulpprojectorgv1beta2.Pulp) *appsv1.Deploymen
422417 },
423418 },
424419 }
420+
421+ controllers .AddHashLabel (funcResources , dep )
422+ ctrl .SetControllerReference (m , dep , funcResources .Scheme )
423+ return dep
425424}
426425
427426// removeStorageDefinition ensures that no storage definition is present in resourceRequirements
0 commit comments