@@ -28,34 +28,33 @@ const (
28
28
controllerName = "service"
29
29
)
30
30
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 {
32
32
return & ServiceReconciler {
33
33
k8sClient : k8sClient ,
34
- elbv2Client : elbv2Client ,
35
- vpcID : vpcId ,
36
- clusterName : clusterName ,
37
- log : log ,
34
+ logger : logger ,
38
35
annotationParser : annotations .NewSuffixAnnotationParser (ServiceAnnotationPrefix ),
39
- finalizerManager : k8s .NewDefaultFinalizerManager (k8sClient , log ),
36
+ finalizerManager : k8s .NewDefaultFinalizerManager (k8sClient , logger ),
40
37
subnetsResolver : resolver ,
38
+ stackMarshaller : deploy .NewDefaultStackMarshaller (),
39
+ stackDeployer : deploy .NewDefaultStackDeployer (k8sClient , elbv2Client , vpcID , clusterName , DefaultTagPrefix , logger ),
41
40
}
42
41
}
43
42
44
43
type ServiceReconciler struct {
45
44
k8sClient client.Client
46
- elbv2Client services.ELBV2
47
- vpcID string
48
- clusterName string
49
- log logr.Logger
45
+ logger logr.Logger
50
46
annotationParser annotations.Parser
51
47
finalizerManager k8s.FinalizerManager
52
48
subnetsResolver networking.SubnetsResolver
49
+
50
+ stackMarshaller deploy.StackMarshaller
51
+ stackDeployer deploy.StackDeployer
53
52
}
54
53
55
54
// +kubebuilder:rbac:groups="",resources=services,verbs=get;list;watch;create;update;patch;delete
56
55
// +kubebuilder:rbac:groups="",resources=services/status,verbs=get;update;patch
57
56
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 )
59
58
}
60
59
61
60
func (r * ServiceReconciler ) reconcile (req ctrl.Request ) error {
@@ -70,55 +69,46 @@ func (r *ServiceReconciler) reconcile(req ctrl.Request) error {
70
69
return r .reconcileLoadBalancerResources (ctx , svc )
71
70
}
72
71
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 )
76
75
if err != nil {
77
- return nil , err
76
+ return nil , nil , err
78
77
}
79
78
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 )
83
81
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 )
86
83
if err != nil {
87
- return nil , err
84
+ return nil , nil , err
88
85
}
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
91
88
}
92
89
93
90
func (r * ServiceReconciler ) reconcileLoadBalancerResources (ctx context.Context , svc * corev1.Service ) error {
94
91
if err := r .finalizerManager .AddFinalizers (ctx , svc , LoadBalancerFinalizer ); err != nil {
95
92
return err
96
93
}
97
- stack , err := r .buildAndDeployModel (ctx , svc )
94
+ stack , lb , err := r .buildAndDeployModel (ctx , svc )
98
95
if err != nil {
99
96
return err
100
97
}
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
115
102
}
103
+ var resTGs []* elbv2model.TargetGroup
104
+ stack .ListResources (& resTGs )
105
+ r .logger .Info ("Deployed LoadBalancer" , "dnsname" , dnsName , "#target groups" , len (resTGs ))
116
106
return nil
117
107
}
118
108
119
109
func (r * ServiceReconciler ) cleanupLoadBalancerResources (ctx context.Context , svc * corev1.Service ) error {
120
110
if k8s .HasFinalizer (svc , LoadBalancerFinalizer ) {
121
- _ , err := r .buildAndDeployModel (ctx , svc )
111
+ _ , _ , err := r .buildAndDeployModel (ctx , svc )
122
112
if err != nil {
123
113
return err
124
114
}
0 commit comments