From 32b7e7315d254b4324c040e61153a9529c32d9fd Mon Sep 17 00:00:00 2001 From: Yeray Borges Date: Wed, 22 Nov 2023 12:26:33 +0000 Subject: [PATCH] [285] Fix image stream processing Fixes #285 --- controllers/wildflyserver_controller.go | 13 +++++++------ pkg/resources/actions.go | 2 +- pkg/resources/constants.go | 4 ++-- pkg/resources/statefulsets/statefulset.go | 18 +++++++++++------- 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/controllers/wildflyserver_controller.go b/controllers/wildflyserver_controller.go index fd1db0859..59d575276 100644 --- a/controllers/wildflyserver_controller.go +++ b/controllers/wildflyserver_controller.go @@ -33,11 +33,12 @@ import ( corev1 "k8s.io/api/core/v1" apiErrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime/schema" - "reflect" - "k8s.io/client-go/tools/record" "os" + "reflect" + "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/reconcile" + "sigs.k8s.io/controller-runtime/pkg/source" "strconv" "strings" @@ -105,7 +106,7 @@ func (r *WildFlyServerReconciler) Reconcile(ctx context.Context, request ctrl.Re // Check if the statefulSet already exists, if not create a new one statefulSet, err := statefulsets.GetOrCreateNewStatefulSet(wildflyServer, r.Client, r.Scheme, - LabelsForWildFly(wildflyServer), desiredReplicaSizeForNewStatefulSet) + LabelsForWildFly(wildflyServer), desiredReplicaSizeForNewStatefulSet, r.IsOpenShift) if err != nil { return reconcile.Result{}, err } else if statefulSet == nil { @@ -284,8 +285,7 @@ func (r *WildFlyServerReconciler) SetupWithManager(mgr ctrl.Manager) error { builder := ctrl.NewControllerManagedBy(mgr). For(&wildflyv1alpha1.WildFlyServer{}) - builder.Owns(&appsv1.StatefulSet{}). - Owns(&corev1.Service{}) + builder.Owns(&corev1.Service{}) if hasServiceMonitor() { builder.Owns(&monitoringv1.ServiceMonitor{}) @@ -296,6 +296,7 @@ func (r *WildFlyServerReconciler) SetupWithManager(mgr ctrl.Manager) error { builder.Owns(&routev1.Route{}) } + builder.Watches(&source.Kind{Type: &appsv1.StatefulSet{}}, &handler.EnqueueRequestForOwner{OwnerType: &wildflyv1alpha1.WildFlyServer{}, IsController: false}) return builder.Complete(r) } @@ -364,7 +365,7 @@ func (r *WildFlyServerReconciler) checkStatefulSet(wildflyServer *wildflyv1alpha } if !resources.IsCurrentGeneration(wildflyServer, foundStatefulSet) { - statefulSet := statefulsets.NewStatefulSet(wildflyServer, LabelsForWildFly(wildflyServer), desiredStatefulSetReplicaSize) + statefulSet := statefulsets.NewStatefulSet(wildflyServer, LabelsForWildFly(wildflyServer), desiredStatefulSetReplicaSize, r.IsOpenShift) delete := false // changes to VolumeClaimTemplates can not be updated and requires a delete/create of the statefulset if len(statefulSet.Spec.VolumeClaimTemplates) > 0 { diff --git a/pkg/resources/actions.go b/pkg/resources/actions.go index 8727500f6..a363f13ec 100644 --- a/pkg/resources/actions.go +++ b/pkg/resources/actions.go @@ -30,7 +30,7 @@ func Create(w *wildflyv1alpha1.WildFlyServer, client client.Client, scheme *runt // mark the object with the current server generation MarkServerGeneration(w, meta) - if err := controllerutil.SetControllerReference(w, meta, scheme); err != nil { + if err := controllerutil.SetOwnerReference(w, meta, scheme); err != nil { logger.Error(err, "Failed to set controller reference for new resource") return err } diff --git a/pkg/resources/constants.go b/pkg/resources/constants.go index 4a79991ac..53162253d 100644 --- a/pkg/resources/constants.go +++ b/pkg/resources/constants.go @@ -21,9 +21,9 @@ const ( ImageTypeGeneric = "generic" // ImageTypeGeneric is one of the possible values for MarkerImageType annotation denoting a bootable JAR type image ImageTypeBootable = "bootable-jar" - // SecretsDir is the the directory to mount volumes from Secrets + // SecretsDir is the directory to mount volumes from Secrets SecretsDir = "/etc/secrets/" - // ConfigMapsDir is the the directory to mount volumes from ConfigMaps + // ConfigMapsDir is the directory to mount volumes from ConfigMaps ConfigMapsDir = "/etc/configmaps/" // StatefuleSetTemplateLabelsEnvVarName is the name of the envvar containg label/value map for pods created from the statefulset's template StatefuleSetTemplateLabelsEnvVarName string = "STATEFULSET_TEMPLATE_LABELS" diff --git a/pkg/resources/statefulsets/statefulset.go b/pkg/resources/statefulsets/statefulset.go index 3c49b13ce..c4ed9c7eb 100644 --- a/pkg/resources/statefulsets/statefulset.go +++ b/pkg/resources/statefulsets/statefulset.go @@ -28,11 +28,11 @@ import ( var log = logf.Log.WithName("wildflyserver_statefulsets") // GetOrCreateNewStatefulSet either returns the statefulset or create it -func GetOrCreateNewStatefulSet(w *wildflyv1alpha1.WildFlyServer, client client.Client, scheme *runtime.Scheme, labels map[string]string, desiredReplicaSize int32) (*appsv1.StatefulSet, error) { +func GetOrCreateNewStatefulSet(w *wildflyv1alpha1.WildFlyServer, client client.Client, scheme *runtime.Scheme, labels map[string]string, desiredReplicaSize int32, isOpenShift bool) (*appsv1.StatefulSet, error) { statefulSet := &appsv1.StatefulSet{} if err := resources.Get(w, types.NamespacedName{Name: w.Name, Namespace: w.Namespace}, client, statefulSet); err != nil { if errors.IsNotFound(err) { - if err := resources.Create(w, client, scheme, NewStatefulSet(w, labels, desiredReplicaSize)); err != nil { + if err := resources.Create(w, client, scheme, NewStatefulSet(w, labels, desiredReplicaSize, isOpenShift)); err != nil { return nil, err } return nil, nil @@ -42,7 +42,7 @@ func GetOrCreateNewStatefulSet(w *wildflyv1alpha1.WildFlyServer, client client.C } // NewStatefulSet returns a new statefulset -func NewStatefulSet(w *wildflyv1alpha1.WildFlyServer, labels map[string]string, desiredReplicaSize int32) *appsv1.StatefulSet { +func NewStatefulSet(w *wildflyv1alpha1.WildFlyServer, labels map[string]string, desiredReplicaSize int32, isOpenShift bool) *appsv1.StatefulSet { replicas := desiredReplicaSize applicationImage := w.Spec.ApplicationImage @@ -56,6 +56,12 @@ func NewStatefulSet(w *wildflyv1alpha1.WildFlyServer, labels map[string]string, wildflyImageTypeAnnotation = resources.ImageTypeBootable } + podAnnotations := make(map[string]string) + podAnnotations[resources.MarkerImageType] = wildflyImageTypeAnnotation + if isOpenShift { + podAnnotations["alpha.image.policy.openshift.io/resolve-names"] = "*" + } + statefulSet := &appsv1.StatefulSet{ TypeMeta: metav1.TypeMeta{ APIVersion: "apps/v1", @@ -78,10 +84,8 @@ func NewStatefulSet(w *wildflyv1alpha1.WildFlyServer, labels map[string]string, }, Template: corev1.PodTemplateSpec{ ObjectMeta: metav1.ObjectMeta{ - Labels: labelsForActiveWildflyPod, - Annotations: map[string]string{ - resources.MarkerImageType: wildflyImageTypeAnnotation, - }, + Labels: labelsForActiveWildflyPod, + Annotations: podAnnotations, }, Spec: corev1.PodSpec{ SecurityContext: &corev1.PodSecurityContext{