diff --git a/go.mod b/go.mod index 1ac58fcb..d003ca1a 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( github.com/onsi/ginkgo/v2 v2.22.2 github.com/onsi/gomega v1.36.2 github.com/prometheus/client_golang v1.20.5 - github.com/uselagoon/machinery v0.0.31 + github.com/uselagoon/machinery v0.0.35-0.20250907230447-55e831cff5b2 github.com/vshn/k8up v1.99.99 github.com/xhit/go-str2duration/v2 v2.1.0 golang.org/x/text v0.21.0 diff --git a/go.sum b/go.sum index f337f065..0b6400c9 100644 --- a/go.sum +++ b/go.sum @@ -1214,6 +1214,10 @@ github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtX github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/uselagoon/machinery v0.0.31 h1:SkJ+muPBb9Q5vNI0bgXxZai6jN103iSj3e3d3DcZlc4= github.com/uselagoon/machinery v0.0.31/go.mod h1:RsHzIMOam3hiA4CKR12yANgzdTGy6tz4D19umjMzZyw= +github.com/uselagoon/machinery v0.0.35-0.20250905054447-dcba134effae h1:Rrrun4qliZunUVJxG0TWtygvvLcMbqiNM1Y+5ar8TmE= +github.com/uselagoon/machinery v0.0.35-0.20250905054447-dcba134effae/go.mod h1:G0ujppuNR0BrtAnlmH8xDb9TDfayb4A36aeo0DYg7fQ= +github.com/uselagoon/machinery v0.0.35-0.20250907230447-55e831cff5b2 h1:2tYU+GPIwBo1iyYCcXHgasDPZ1cmQyk2EoIOPdAeyDc= +github.com/uselagoon/machinery v0.0.35-0.20250907230447-55e831cff5b2/go.mod h1:G0ujppuNR0BrtAnlmH8xDb9TDfayb4A36aeo0DYg7fQ= github.com/uudashr/gocognit v0.0.0-20190926065955-1655d0de0517/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= diff --git a/internal/controllers/v1beta2/buildpodmonitor_handlers.go b/internal/controllers/v1beta2/buildpodmonitor_handlers.go index 0854b0ea..9f4d8f45 100644 --- a/internal/controllers/v1beta2/buildpodmonitor_handlers.go +++ b/internal/controllers/v1beta2/buildpodmonitor_handlers.go @@ -16,17 +16,19 @@ import ( lagooncrd "github.com/uselagoon/remote-controller/api/lagoon/v1beta2" "github.com/uselagoon/remote-controller/internal/helpers" "github.com/uselagoon/remote-controller/internal/metrics" - appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" meta "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/selection" "k8s.io/apimachinery/pkg/types" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" ) +type LagoonServices struct { + Services []schema.EnvironmentService `json:"services"` + Volumes []schema.EnvironmentVolume `json:"volumes"` +} + func (r *BuildMonitorReconciler) handleBuildMonitor(ctx context.Context, opLog logr.Logger, req ctrl.Request, @@ -272,40 +274,20 @@ func (r *BuildMonitorReconciler) updateDeploymentAndEnvironmentTask( Cluster: r.LagoonTargetName, }, } - labelRequirements1, _ := labels.NewRequirement("lagoon.sh/service", selection.NotIn, []string{"faketest"}) - listOption := (&client.ListOptions{}).ApplyOptions([]client.ListOption{ - client.InNamespace(jobPod.Namespace), - client.MatchingLabelsSelector{ - Selector: labels.NewSelector().Add(*labelRequirements1), - }, - }) - depList := &appsv1.DeploymentList{} - serviceNames := []string{} - services := []schema.EnvironmentService{} - if err := r.APIReader.List(context.TODO(), depList, listOption); err == nil { - // generate the list of services to add or update to the environment - for _, deployment := range depList.Items { - var serviceName, serviceType string - containers := []schema.ServiceContainer{} - if name, ok := deployment.Labels["lagoon.sh/service"]; ok { - serviceName = name - serviceNames = append(serviceNames, serviceName) - for _, container := range deployment.Spec.Template.Spec.Containers { - containers = append(containers, schema.ServiceContainer{Name: container.Name}) - } - } - if sType, ok := deployment.Labels["lagoon.sh/service-type"]; ok { - serviceType = sType - } - // probably need to collect dbaas consumers too at some stage - services = append(services, schema.EnvironmentService{ - Name: serviceName, - Type: serviceType, - Containers: containers, - }) + lagoonServices := &corev1.ConfigMap{} + if err := r.APIReader.Get(ctx, types.NamespacedName{Namespace: jobPod.Namespace, Name: "lagoon-services"}, lagoonServices); err != nil { + if helpers.IgnoreNotFound(err) != nil { + return err + } + } + if val, ok := lagoonServices.Data["post-deploy"]; ok { + serviceConfig := LagoonServices{} + err := json.Unmarshal([]byte(val), &serviceConfig) + if err == nil { + fmt.Println(serviceConfig.Services) + fmt.Println(serviceConfig.Volumes) + msg.Meta.EnvironmentServices = serviceConfig.Services } - msg.Meta.Services = serviceNames - msg.Meta.EnvironmentServices = services } route, routes, err := helpers.GetLagoonEnvRoutes(ctx, opLog, r.Client, namespace.Name) // if we aren't being provided the lagoon config, we can skip adding the routes etc diff --git a/internal/messenger/build_messenger.go b/internal/messenger/build_messenger.go index 5a5ee090..fcceae41 100644 --- a/internal/messenger/build_messenger.go +++ b/internal/messenger/build_messenger.go @@ -12,12 +12,14 @@ import ( lagooncrd "github.com/uselagoon/remote-controller/api/lagoon/v1beta2" "github.com/uselagoon/remote-controller/internal/helpers" corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/selection" "k8s.io/apimachinery/pkg/types" - "sigs.k8s.io/controller-runtime/pkg/client" ) +type LagoonServices struct { + Services []schema.EnvironmentService `json:"services"` + Volumes []schema.EnvironmentVolume `json:"volumes"` +} + // buildStatusLogsToLagoonLogs sends the logs to lagoon-logs message queue, used for general messaging func (m *Messenger) BuildStatusLogsToLagoonLogs( ctx context.Context, @@ -117,40 +119,21 @@ func (m *Messenger) UpdateDeploymentAndEnvironmentTask( Cluster: targetName, }, } - labelRequirements1, _ := labels.NewRequirement("lagoon.sh/service", selection.NotIn, []string{"faketest"}) - listOption := (&client.ListOptions{}).ApplyOptions([]client.ListOption{ - client.InNamespace(lagoonBuild.Namespace), - client.MatchingLabelsSelector{ - Selector: labels.NewSelector().Add(*labelRequirements1), - }, - }) - podList := &corev1.PodList{} - serviceNames := []string{} - services := []schema.EnvironmentService{} - if err := m.Client.List(context.TODO(), podList, listOption); err == nil { - // generate the list of services to add to the environment - for _, pod := range podList.Items { - var serviceName, serviceType string - containers := []schema.ServiceContainer{} - if name, ok := pod.Labels["lagoon.sh/service"]; ok { - serviceName = name - serviceNames = append(serviceNames, serviceName) - for _, container := range pod.Spec.Containers { - containers = append(containers, schema.ServiceContainer{Name: container.Name}) - } - } - if sType, ok := pod.Labels["lagoon.sh/service-type"]; ok { - serviceType = sType - } - // probably need to collect dbaas consumers too at some stage - services = append(services, schema.EnvironmentService{ - Name: serviceName, - Type: serviceType, - Containers: containers, - }) + lagoonServices := &corev1.ConfigMap{} + if err := m.APIReader.Get(ctx, types.NamespacedName{Namespace: lagoonBuild.Namespace, Name: "lagoon-services"}, lagoonServices); err != nil { + if helpers.IgnoreNotFound(err) != nil { + opLog.Error(err, "configmap %s not found", "lagoon-services") + return + } + } + if val, ok := lagoonServices.Data["post-deploy"]; ok { + serviceConfig := LagoonServices{} + err := json.Unmarshal([]byte(val), &serviceConfig) + if err == nil { + fmt.Println(serviceConfig.Services) + fmt.Println(serviceConfig.Volumes) + msg.Meta.EnvironmentServices = serviceConfig.Services } - msg.Meta.Services = serviceNames - msg.Meta.EnvironmentServices = services } if checkLagoonEnv { route, routes, err := helpers.GetLagoonEnvRoutes(ctx, opLog, m.Client, lagoonBuild.Namespace)