Skip to content

Commit 0288b8e

Browse files
authored
Use service port for targetgroup binding svc reference (#1420)
* use service port for target group binding reference * refactor nlb model builder and reconciler
1 parent 82a4760 commit 0288b8e

File tree

3 files changed

+132
-121
lines changed

3 files changed

+132
-121
lines changed

controllers/service/service_controller.go

Lines changed: 29 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -28,34 +28,33 @@ const (
2828
controllerName = "service"
2929
)
3030

31-
func NewServiceReconciler(k8sClient client.Client, elbv2Client services.ELBV2, vpcId string, clusterName string, resolver networking.SubnetsResolver, log logr.Logger) *ServiceReconciler {
31+
func NewServiceReconciler(k8sClient client.Client, elbv2Client services.ELBV2, vpcID string, clusterName string, resolver networking.SubnetsResolver, logger logr.Logger) *ServiceReconciler {
3232
return &ServiceReconciler{
3333
k8sClient: k8sClient,
34-
elbv2Client: elbv2Client,
35-
vpcID: vpcId,
36-
clusterName: clusterName,
37-
log: log,
34+
logger: logger,
3835
annotationParser: annotations.NewSuffixAnnotationParser(ServiceAnnotationPrefix),
39-
finalizerManager: k8s.NewDefaultFinalizerManager(k8sClient, log),
36+
finalizerManager: k8s.NewDefaultFinalizerManager(k8sClient, logger),
4037
subnetsResolver: resolver,
38+
stackMarshaller: deploy.NewDefaultStackMarshaller(),
39+
stackDeployer: deploy.NewDefaultStackDeployer(k8sClient, elbv2Client, vpcID, clusterName, DefaultTagPrefix, logger),
4140
}
4241
}
4342

4443
type ServiceReconciler struct {
4544
k8sClient client.Client
46-
elbv2Client services.ELBV2
47-
vpcID string
48-
clusterName string
49-
log logr.Logger
45+
logger logr.Logger
5046
annotationParser annotations.Parser
5147
finalizerManager k8s.FinalizerManager
5248
subnetsResolver networking.SubnetsResolver
49+
50+
stackMarshaller deploy.StackMarshaller
51+
stackDeployer deploy.StackDeployer
5352
}
5453

5554
// +kubebuilder:rbac:groups="",resources=services,verbs=get;list;watch;create;update;patch;delete
5655
// +kubebuilder:rbac:groups="",resources=services/status,verbs=get;update;patch
5756
func (r *ServiceReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
58-
return runtime.HandleReconcileError(r.reconcile(req), r.log)
57+
return runtime.HandleReconcileError(r.reconcile(req), r.logger)
5958
}
6059

6160
func (r *ServiceReconciler) reconcile(req ctrl.Request) error {
@@ -70,55 +69,46 @@ func (r *ServiceReconciler) reconcile(req ctrl.Request) error {
7069
return r.reconcileLoadBalancerResources(ctx, svc)
7170
}
7271

73-
func (r *ServiceReconciler) buildAndDeployModel(ctx context.Context, svc *corev1.Service) (core.Stack, error) {
74-
nlbBuilder := nlb.NewServiceBuilder(svc, r.subnetsResolver, k8s.NamespacedName(svc), r.annotationParser)
75-
stack, err := nlbBuilder.Build(ctx)
72+
func (r *ServiceReconciler) buildAndDeployModel(ctx context.Context, svc *corev1.Service) (core.Stack, *elbv2model.LoadBalancer, error) {
73+
nlbBuilder := nlb.NewServiceBuilder(svc, r.subnetsResolver, r.annotationParser)
74+
stack, lb, err := nlbBuilder.Build(ctx)
7675
if err != nil {
77-
return nil, err
76+
return nil, nil, err
7877
}
7978

80-
d := deploy.NewDefaultStackMarshaller()
81-
jsonString, err := d.Marshal(stack)
82-
r.log.Info("Built service model", "stack", jsonString)
79+
jsonString, err := r.stackMarshaller.Marshal(stack)
80+
r.logger.Info("Built service model", "stack", jsonString)
8381

84-
deployer := deploy.NewDefaultStackDeployer(r.k8sClient, r.elbv2Client, r.vpcID, r.clusterName, DefaultTagPrefix, r.log)
85-
err = deployer.Deploy(ctx, stack)
82+
err = r.stackDeployer.Deploy(ctx, stack)
8683
if err != nil {
87-
return nil, err
84+
return nil, nil, err
8885
}
89-
r.log.Info("Successfully deployed service resources")
90-
return stack, nil
86+
r.logger.Info("Successfully deployed service resources")
87+
return stack, lb, nil
9188
}
9289

9390
func (r *ServiceReconciler) reconcileLoadBalancerResources(ctx context.Context, svc *corev1.Service) error {
9491
if err := r.finalizerManager.AddFinalizers(ctx, svc, LoadBalancerFinalizer); err != nil {
9592
return err
9693
}
97-
stack, err := r.buildAndDeployModel(ctx, svc)
94+
stack, lb, err := r.buildAndDeployModel(ctx, svc)
9895
if err != nil {
9996
return err
10097
}
101-
var resLBs []*elbv2model.LoadBalancer
102-
stack.ListResources(&resLBs)
103-
if len(resLBs) == 0 {
104-
r.log.Info("Unable to list LoadBalancer resource")
105-
} else {
106-
var resTGs []*elbv2model.TargetGroup
107-
resLB := resLBs[0]
108-
dnsName, _ := resLB.DNSName().Resolve(ctx)
109-
stack.ListResources(&resTGs)
110-
r.log.Info("Deployed LoadBalancer", "dnsname", dnsName, "#target groups", len(resTGs))
111-
err = r.updateServiceStatus(ctx, svc, dnsName)
112-
if err != nil {
113-
return err
114-
}
98+
dnsName, _ := lb.DNSName().Resolve(ctx)
99+
err = r.updateServiceStatus(ctx, svc, dnsName)
100+
if err != nil {
101+
return err
115102
}
103+
var resTGs []*elbv2model.TargetGroup
104+
stack.ListResources(&resTGs)
105+
r.logger.Info("Deployed LoadBalancer", "dnsname", dnsName, "#target groups", len(resTGs))
116106
return nil
117107
}
118108

119109
func (r *ServiceReconciler) cleanupLoadBalancerResources(ctx context.Context, svc *corev1.Service) error {
120110
if k8s.HasFinalizer(svc, LoadBalancerFinalizer) {
121-
_, err := r.buildAndDeployModel(ctx, svc)
111+
_, _, err := r.buildAndDeployModel(ctx, svc)
122112
if err != nil {
123113
return err
124114
}

0 commit comments

Comments
 (0)