Skip to content

Commit 3c5a701

Browse files
committed
feat: fixes service binding updates overriding intercept status
1 parent b1acd5d commit 3c5a701

File tree

2 files changed

+46
-14
lines changed

2 files changed

+46
-14
lines changed

apps/console/internal/app/graph/schema.resolvers.go

+6-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/console/internal/domain/service-binding.go

+40-11
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package domain
22

33
import (
44
"fmt"
5+
"log/slog"
56

67
"github.com/kloudlite/api/apps/console/internal/entities"
78
fc "github.com/kloudlite/api/apps/console/internal/entities/field-constants"
@@ -16,6 +17,7 @@ import (
1617

1718
// CreateServiceIntercept implements Domain.
1819
func (d *domain) CreateServiceIntercept(ctx ConsoleContext, envName string, serviceName string, interceptTo string, portMappings []*crdsv1.SvcInterceptPortMappings) (*entities.ServiceBinding, error) {
20+
slog.Info("[STARTED] createServiceIntercept()", "envName", envName, "serviceName", serviceName, "interceptTo", interceptTo)
1921
filters := ctx.DBFilters()
2022

2123
env, err := d.environmentRepo.FindOne(ctx, ctx.DBFilters().Add(fc.MetadataName, envName))
@@ -27,11 +29,15 @@ func (d *domain) CreateServiceIntercept(ctx ConsoleContext, envName string, serv
2729
return nil, fmt.Errorf("environment not found")
2830
}
2931

30-
sb, err := d.serviceBindingRepo.FindOne(ctx, filters.Add(fc.ServiceBindingSpecServiceRefName, serviceName).Add(fc.ClusterName, env.ClusterName))
32+
sbFilter := filters.Add(fc.ServiceBindingSpecServiceRefName, serviceName).Add(fc.ServiceBindingSpecServiceRefNamespace, env.Spec.TargetNamespace).Add(fc.ClusterName, env.ClusterName)
33+
34+
sb, err := d.serviceBindingRepo.FindOne(ctx, sbFilter)
3135
if err != nil {
3236
return nil, err
3337
}
3438

39+
slog.Info("[STEP] createServiceIntercept()", "filter", filters, "env.targetNamespace", env.Spec.TargetNamespace)
40+
3541
if sb == nil {
3642
return nil, fmt.Errorf("no service binding found")
3743
}
@@ -71,11 +77,13 @@ func (d *domain) CreateServiceIntercept(ctx ConsoleContext, envName string, serv
7177
return nil, err
7278
}
7379

80+
slog.Info("[COMPLETED] createServiceIntercept()", "envName", envName, "serviceName", serviceName, "interceptTo", interceptTo, "intercept-status", *usb.InterceptStatus)
7481
return usb, nil
7582
}
7683

7784
// DeleteServiceIntercept implements Domain.
7885
func (d *domain) DeleteServiceIntercept(ctx ConsoleContext, envName string, serviceName string) error {
86+
slog.Info("[STARTED] DeleteServiceIntercept()", "envName", envName, "serviceName", serviceName)
7987
filters := ctx.DBFilters()
8088

8189
env, err := d.environmentRepo.FindOne(ctx, ctx.DBFilters().Add(fc.MetadataName, envName))
@@ -87,11 +95,15 @@ func (d *domain) DeleteServiceIntercept(ctx ConsoleContext, envName string, serv
8795
return fmt.Errorf("environment not found")
8896
}
8997

90-
sb, err := d.serviceBindingRepo.FindOne(ctx, filters.Add(fc.ServiceBindingSpecServiceRefName, serviceName).Add(fc.ClusterName, env.ClusterName))
98+
sb, err := d.serviceBindingRepo.FindOne(ctx, filters.Add(fc.ServiceBindingSpecServiceRefName, serviceName).Add(fc.ServiceBindingSpecServiceRefNamespace, env.Spec.TargetNamespace).Add(fc.ClusterName, env.ClusterName))
9199
if err != nil {
92100
return err
93101
}
94102

103+
if sb == nil {
104+
return fmt.Errorf("service binding not found")
105+
}
106+
95107
serviceIntercept := &crdsv1.ServiceIntercept{
96108
ObjectMeta: metav1.ObjectMeta{
97109
Name: serviceName,
@@ -115,6 +127,7 @@ func (d *domain) DeleteServiceIntercept(ctx ConsoleContext, envName string, serv
115127
return err
116128
}
117129

130+
slog.Info("[COMPLETED] DeleteServiceIntercept()", "envName", envName, "serviceName", serviceName)
118131
return nil
119132
}
120133

@@ -153,6 +166,7 @@ func (d *domain) OnServiceBindingDeleteMessage(ctx ConsoleContext, svcb *network
153166

154167
// OnServiceBindingUpdateMessage implements Domain.
155168
func (d *domain) OnServiceBindingUpdateMessage(ctx ConsoleContext, svcb *networkingv1.ServiceBinding, status types.ResourceStatus, opts UpdateAndDeleteOpts) error {
169+
slog.Info("[STARTED] OnServiceBindingUpdateMessage")
156170
if svcb == nil {
157171
return errors.Newf("no service binding found")
158172
}
@@ -184,15 +198,30 @@ func (d *domain) OnServiceBindingUpdateMessage(ctx ConsoleContext, svcb *network
184198
environmentName = env.Name
185199
}
186200

187-
if _, err := d.serviceBindingRepo.Upsert(ctx, filter, &entities.ServiceBinding{
188-
ServiceBinding: *svcb,
189-
AccountName: ctx.AccountName,
190-
ClusterName: opts.ClusterName,
191-
EnvironmentName: environmentName,
192-
}); err != nil {
193-
return errors.NewE(err)
201+
sb, err := d.serviceBindingRepo.FindOne(ctx, filter)
202+
if err != nil {
203+
return err
194204
}
195205

196-
// d.resourceEventPublisher.PublishResourceEvent(ctx, urouter.GetResourceType(), urouter.GetName(), PublishUpdate)
197-
return nil
206+
if sb == nil {
207+
sb2, err := d.serviceBindingRepo.Create(ctx, &entities.ServiceBinding{
208+
ServiceBinding: *svcb,
209+
AccountName: ctx.AccountName,
210+
ClusterName: opts.ClusterName,
211+
EnvironmentName: environmentName,
212+
InterceptStatus: nil,
213+
})
214+
slog.Info("[COMPLETED] OnServiceBindingUpdateMessage", "op", "created new service binding", "service-binding.id", sb2.Id)
215+
return err
216+
}
217+
218+
_, err = d.serviceBindingRepo.PatchById(ctx, sb.Id, repos.Document{
219+
fc.ServiceBindingSpec: svcb.Spec,
220+
fc.AccountName: ctx.AccountName,
221+
fc.ClusterName: opts.ClusterName,
222+
fc.EnvironmentName: environmentName,
223+
})
224+
225+
slog.Info("[COMPLETED] OnServiceBindingUpdateMessage", "op", "patched service binding", "service-binding.id", sb.Id)
226+
return err
198227
}

0 commit comments

Comments
 (0)