Skip to content

Commit

Permalink
statefulset: updating controller to read from a statefulset
Browse files Browse the repository at this point in the history
  • Loading branch information
Shubhra Deshpande committed Oct 16, 2024
1 parent fd8ddb6 commit 39f7ddc
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 16 deletions.
70 changes: 55 additions & 15 deletions controllers/quay/features.go
Original file line number Diff line number Diff line change
Expand Up @@ -410,8 +410,8 @@ func (r *QuayRegistryReconciler) checkNeedsPostgresUpgradeForComponent(
ctx context.Context, qctx *quaycontext.QuayRegistryContext, quay *v1.QuayRegistry, component v1.ComponentKind,
) error {
componentInfo := map[v1.ComponentKind]struct {
deploymentSuffix string
upgradeField *bool
resourceSuffix string
upgradeField *bool
}{
v1.ComponentClairPostgres: {"clair-postgres", &qctx.NeedsClairPgUpgrade},
v1.ComponentPostgres: {"quay-database", &qctx.NeedsPgUpgrade},
Expand All @@ -422,23 +422,63 @@ func (r *QuayRegistryReconciler) checkNeedsPostgresUpgradeForComponent(
return fmt.Errorf("invalid component kind: %s", component)
}

deploymentName := fmt.Sprintf("%s-%s", quay.GetName(), info.deploymentSuffix)
resourceName := fmt.Sprintf("%s-%s", quay.GetName(), info.resourceSuffix)
r.Log.Info(fmt.Sprintf("getting %s version", component))

postgresDeployment := &appsv1.Deployment{}
if err := r.Client.Get(
ctx,
types.NamespacedName{
Name: deploymentName,
Namespace: quay.GetNamespace(),
},
postgresDeployment,
); err != nil {
r.Log.Info(fmt.Sprintf("%s deployment not found, skipping", component))
return nil
var deployedImageName string

if component == v1.ComponentClairPostgres {
statefulSet := &appsv1.StatefulSet{}
err := r.Client.Get(
ctx,
types.NamespacedName{
Name: resourceName,
Namespace: quay.GetNamespace(),
},
statefulSet,
)
if err != nil {
if !errors.IsNotFound(err) {
return err
}
// NOTE: Check for Deployment to support migration from Deployment to StatefulSet.
// This ensures compatibility with both old and new setups during the upgrade process.
deployment := &appsv1.Deployment{}
err = r.Client.Get(
ctx,
types.NamespacedName{
Name: resourceName,
Namespace: quay.GetNamespace(),
},
deployment,
)
if err != nil {
if errors.IsNotFound(err) {
r.Log.Info(fmt.Sprintf("%s statefulset and deployment not found, skipping", component))
return nil
}
return err
}
deployedImageName = deployment.Spec.Template.Spec.Containers[0].Image
} else {
deployedImageName = statefulSet.Spec.Template.Spec.Containers[0].Image
}
} else {
deployment := &appsv1.Deployment{}
if err := r.Client.Get(
ctx,
types.NamespacedName{
Name: resourceName,
Namespace: quay.GetNamespace(),
},
deployment,
); err != nil {
r.Log.Info(fmt.Sprintf("%s deployment not found, skipping", component))
return nil
}
deployedImageName = deployment.Spec.Template.Spec.Containers[0].Image
}

deployedImageName := postgresDeployment.Spec.Template.Spec.Containers[0].Image
r.Log.Info(fmt.Sprintf("%s deployment found", component), "image", deployedImageName)

expectedImage, err := kustomize.ComponentImageFor(component)
Expand Down
2 changes: 1 addition & 1 deletion controllers/quay/quayregistry_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -548,7 +548,7 @@ func (r *QuayRegistryReconciler) Reconcile(ctx context.Context, req ctrl.Request
v1.ConditionTypeRolloutBlocked,
metav1.ConditionTrue,
v1.ConditionReasonPostgresUpgradeFailed,
fmt.Sprintf("error checking for pg upgrade: %s", err),
fmt.Sprintf("error checking for clair pg upgrade: %s", err),
)
}
}
Expand Down

0 comments on commit 39f7ddc

Please sign in to comment.