@@ -10,6 +10,7 @@ import (
10
10
"github.com/pkg/errors"
11
11
"k8s.io/apimachinery/pkg/util/sets"
12
12
"sigs.k8s.io/aws-load-balancer-controller/pkg/aws/services"
13
+ "sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/tracking"
13
14
elbv2equality "sigs.k8s.io/aws-load-balancer-controller/pkg/equality/elbv2"
14
15
elbv2model "sigs.k8s.io/aws-load-balancer-controller/pkg/model/elbv2"
15
16
"sigs.k8s.io/aws-load-balancer-controller/pkg/runtime"
@@ -20,14 +21,17 @@ import (
20
21
type ListenerManager interface {
21
22
Create (ctx context.Context , resLS * elbv2model.Listener ) (elbv2model.ListenerStatus , error )
22
23
23
- Update (ctx context.Context , resLS * elbv2model.Listener , sdkLS * elbv2sdk. Listener ) (elbv2model.ListenerStatus , error )
24
+ Update (ctx context.Context , resLS * elbv2model.Listener , sdkLS ListenerWithTags ) (elbv2model.ListenerStatus , error )
24
25
25
- Delete (ctx context.Context , sdkLS * elbv2sdk. Listener ) error
26
+ Delete (ctx context.Context , sdkLS ListenerWithTags ) error
26
27
}
27
28
28
- func NewDefaultListenerManager (elbv2Client services.ELBV2 , logger logr.Logger ) * defaultListenerManager {
29
+ func NewDefaultListenerManager (elbv2Client services.ELBV2 , trackingProvider tracking.Provider ,
30
+ taggingManager TaggingManager , logger logr.Logger ) * defaultListenerManager {
29
31
return & defaultListenerManager {
30
32
elbv2Client : elbv2Client ,
33
+ trackingProvider : trackingProvider ,
34
+ taggingManager : taggingManager ,
31
35
logger : logger ,
32
36
waitLSExistencePollInterval : defaultWaitLSExistencePollInterval ,
33
37
waitLSExistenceTimeout : defaultWaitLSExistenceTimeout ,
@@ -38,8 +42,10 @@ var _ ListenerManager = &defaultListenerManager{}
38
42
39
43
// default implementation for ListenerManager
40
44
type defaultListenerManager struct {
41
- elbv2Client services.ELBV2
42
- logger logr.Logger
45
+ elbv2Client services.ELBV2
46
+ trackingProvider tracking.Provider
47
+ taggingManager TaggingManager
48
+ logger logr.Logger
43
49
44
50
waitLSExistencePollInterval time.Duration
45
51
waitLSExistenceTimeout time.Duration
@@ -50,6 +56,8 @@ func (m *defaultListenerManager) Create(ctx context.Context, resLS *elbv2model.L
50
56
if err != nil {
51
57
return elbv2model.ListenerStatus {}, err
52
58
}
59
+ lsTags := m .trackingProvider .ResourceTags (resLS .Stack (), resLS , resLS .Spec .Tags )
60
+ req .Tags = convertTagsToSDKTags (lsTags )
53
61
54
62
m .logger .Info ("creating listener" ,
55
63
"stackID" , resLS .Stack ().StackID (),
@@ -58,11 +66,14 @@ func (m *defaultListenerManager) Create(ctx context.Context, resLS *elbv2model.L
58
66
if err != nil {
59
67
return elbv2model.ListenerStatus {}, err
60
68
}
61
- sdkLS := resp .Listeners [0 ]
69
+ sdkLS := ListenerWithTags {
70
+ Listener : resp .Listeners [0 ],
71
+ Tags : lsTags ,
72
+ }
62
73
m .logger .Info ("created listener" ,
63
74
"stackID" , resLS .Stack ().StackID (),
64
75
"resourceID" , resLS .ID (),
65
- "arn" , awssdk .StringValue (sdkLS .ListenerArn ))
76
+ "arn" , awssdk .StringValue (sdkLS .Listener . ListenerArn ))
66
77
67
78
if err := runtime .RetryImmediateOnError (m .waitLSExistencePollInterval , m .waitLSExistenceTimeout , isListenerNotFoundError , func () error {
68
79
return m .updateSDKListenerWithExtraCertificates (ctx , resLS , sdkLS , true )
@@ -72,7 +83,10 @@ func (m *defaultListenerManager) Create(ctx context.Context, resLS *elbv2model.L
72
83
return buildResListenerStatus (sdkLS ), nil
73
84
}
74
85
75
- func (m * defaultListenerManager ) Update (ctx context.Context , resLS * elbv2model.Listener , sdkLS * elbv2sdk.Listener ) (elbv2model.ListenerStatus , error ) {
86
+ func (m * defaultListenerManager ) Update (ctx context.Context , resLS * elbv2model.Listener , sdkLS ListenerWithTags ) (elbv2model.ListenerStatus , error ) {
87
+ if err := m .updateSDKListenerWithTags (ctx , resLS , sdkLS ); err != nil {
88
+ return elbv2model.ListenerStatus {}, err
89
+ }
76
90
if err := m .updateSDKListenerWithSettings (ctx , resLS , sdkLS ); err != nil {
77
91
return elbv2model.ListenerStatus {}, err
78
92
}
@@ -82,9 +96,9 @@ func (m *defaultListenerManager) Update(ctx context.Context, resLS *elbv2model.L
82
96
return buildResListenerStatus (sdkLS ), nil
83
97
}
84
98
85
- func (m * defaultListenerManager ) Delete (ctx context.Context , sdkLS * elbv2sdk. Listener ) error {
99
+ func (m * defaultListenerManager ) Delete (ctx context.Context , sdkLS ListenerWithTags ) error {
86
100
req := & elbv2sdk.DeleteListenerInput {
87
- ListenerArn : sdkLS .ListenerArn ,
101
+ ListenerArn : sdkLS .Listener . ListenerArn ,
88
102
}
89
103
m .logger .Info ("deleting listener" ,
90
104
"arn" , awssdk .StringValue (req .ListenerArn ))
@@ -96,7 +110,13 @@ func (m *defaultListenerManager) Delete(ctx context.Context, sdkLS *elbv2sdk.Lis
96
110
return nil
97
111
}
98
112
99
- func (m * defaultListenerManager ) updateSDKListenerWithSettings (ctx context.Context , resLS * elbv2model.Listener , sdkLS * elbv2sdk.Listener ) error {
113
+ func (m * defaultListenerManager ) updateSDKListenerWithTags (ctx context.Context , resLS * elbv2model.Listener , sdkLS ListenerWithTags ) error {
114
+ desiredLSTags := m .trackingProvider .ResourceTags (resLS .Stack (), resLS , resLS .Spec .Tags )
115
+ return m .taggingManager .ReconcileTags (ctx , awssdk .StringValue (sdkLS .Listener .ListenerArn ), desiredLSTags ,
116
+ WithCurrentTags (sdkLS .Tags ))
117
+ }
118
+
119
+ func (m * defaultListenerManager ) updateSDKListenerWithSettings (ctx context.Context , resLS * elbv2model.Listener , sdkLS ListenerWithTags ) error {
100
120
desiredDefaultActions , err := buildSDKActions (resLS .Spec .DefaultActions )
101
121
if err != nil {
102
122
return err
@@ -106,25 +126,25 @@ func (m *defaultListenerManager) updateSDKListenerWithSettings(ctx context.Conte
106
126
return nil
107
127
}
108
128
req := buildSDKModifyListenerInput (resLS .Spec , desiredDefaultActions , desiredDefaultCerts )
109
- req .ListenerArn = sdkLS .ListenerArn
129
+ req .ListenerArn = sdkLS .Listener . ListenerArn
110
130
m .logger .Info ("modifying listener" ,
111
131
"stackID" , resLS .Stack ().StackID (),
112
132
"resourceID" , resLS .ID (),
113
- "arn" , awssdk .StringValue (sdkLS .ListenerArn ))
133
+ "arn" , awssdk .StringValue (sdkLS .Listener . ListenerArn ))
114
134
if _ , err := m .elbv2Client .ModifyListenerWithContext (ctx , req ); err != nil {
115
135
return err
116
136
}
117
137
m .logger .Info ("modified listener" ,
118
138
"stackID" , resLS .Stack ().StackID (),
119
139
"resourceID" , resLS .ID (),
120
- "arn" , awssdk .StringValue (sdkLS .ListenerArn ))
140
+ "arn" , awssdk .StringValue (sdkLS .Listener . ListenerArn ))
121
141
return nil
122
142
}
123
143
124
144
// updateSDKListenerWithExtraCertificates will update the extra certificates on listener.
125
145
// currentExtraCertificates is the current extra certificates, if it's nil, the current extra certificates will be fetched from AWS.
126
146
func (m * defaultListenerManager ) updateSDKListenerWithExtraCertificates (ctx context.Context , resLS * elbv2model.Listener ,
127
- sdkLS * elbv2sdk. Listener , isNewSDKListener bool ) error {
147
+ sdkLS ListenerWithTags , isNewSDKListener bool ) error {
128
148
desiredExtraCertARNs := sets .NewString ()
129
149
_ , desiredExtraCerts := buildSDKCertificates (resLS .Spec .Certificates )
130
150
for _ , cert := range desiredExtraCerts {
@@ -141,7 +161,7 @@ func (m *defaultListenerManager) updateSDKListenerWithExtraCertificates(ctx cont
141
161
142
162
for _ , certARN := range desiredExtraCertARNs .Difference (currentExtraCertARNs ).List () {
143
163
req := & elbv2sdk.AddListenerCertificatesInput {
144
- ListenerArn : sdkLS .ListenerArn ,
164
+ ListenerArn : sdkLS .Listener . ListenerArn ,
145
165
Certificates : []* elbv2sdk.Certificate {
146
166
{
147
167
CertificateArn : awssdk .String (certARN ),
@@ -151,21 +171,21 @@ func (m *defaultListenerManager) updateSDKListenerWithExtraCertificates(ctx cont
151
171
m .logger .Info ("adding certificate to listener" ,
152
172
"stackID" , resLS .Stack ().StackID (),
153
173
"resourceID" , resLS .ID (),
154
- "arn" , awssdk .StringValue (sdkLS .ListenerArn ),
174
+ "arn" , awssdk .StringValue (sdkLS .Listener . ListenerArn ),
155
175
"certificateARN" , certARN )
156
176
if _ , err := m .elbv2Client .AddListenerCertificatesWithContext (ctx , req ); err != nil {
157
177
return err
158
178
}
159
179
m .logger .Info ("added certificate to listener" ,
160
180
"stackID" , resLS .Stack ().StackID (),
161
181
"resourceID" , resLS .ID (),
162
- "arn" , awssdk .StringValue (sdkLS .ListenerArn ),
182
+ "arn" , awssdk .StringValue (sdkLS .Listener . ListenerArn ),
163
183
"certificateARN" , certARN )
164
184
}
165
185
166
186
for _ , certARN := range currentExtraCertARNs .Difference (desiredExtraCertARNs ).List () {
167
187
req := & elbv2sdk.RemoveListenerCertificatesInput {
168
- ListenerArn : sdkLS .ListenerArn ,
188
+ ListenerArn : sdkLS .Listener . ListenerArn ,
169
189
Certificates : []* elbv2sdk.Certificate {
170
190
{
171
191
CertificateArn : awssdk .String (certARN ),
@@ -175,24 +195,24 @@ func (m *defaultListenerManager) updateSDKListenerWithExtraCertificates(ctx cont
175
195
m .logger .Info ("removing certificate from listener" ,
176
196
"stackID" , resLS .Stack ().StackID (),
177
197
"resourceID" , resLS .ID (),
178
- "arn" , awssdk .StringValue (sdkLS .ListenerArn ),
198
+ "arn" , awssdk .StringValue (sdkLS .Listener . ListenerArn ),
179
199
"certificateARN" , certARN )
180
200
if _ , err := m .elbv2Client .RemoveListenerCertificatesWithContext (ctx , req ); err != nil {
181
201
return err
182
202
}
183
203
m .logger .Info ("removed certificate from listener" ,
184
204
"stackID" , resLS .Stack ().StackID (),
185
205
"resourceID" , resLS .ID (),
186
- "arn" , awssdk .StringValue (sdkLS .ListenerArn ),
206
+ "arn" , awssdk .StringValue (sdkLS .Listener . ListenerArn ),
187
207
"certificateARN" , certARN )
188
208
}
189
209
190
210
return nil
191
211
}
192
212
193
- func (m * defaultListenerManager ) fetchSDKListenerExtraCertificateARNs (ctx context.Context , sdkLS * elbv2sdk. Listener ) ([]string , error ) {
213
+ func (m * defaultListenerManager ) fetchSDKListenerExtraCertificateARNs (ctx context.Context , sdkLS ListenerWithTags ) ([]string , error ) {
194
214
req := & elbv2sdk.DescribeListenerCertificatesInput {
195
- ListenerArn : sdkLS .ListenerArn ,
215
+ ListenerArn : sdkLS .Listener . ListenerArn ,
196
216
}
197
217
sdkCerts , err := m .elbv2Client .DescribeListenerCertificatesAsList (ctx , req )
198
218
if err != nil {
@@ -207,24 +227,24 @@ func (m *defaultListenerManager) fetchSDKListenerExtraCertificateARNs(ctx contex
207
227
return extraCertARNs , nil
208
228
}
209
229
210
- func isSDKListenerSettingsDrifted (lsSpec elbv2model.ListenerSpec , sdkLS * elbv2sdk. Listener ,
230
+ func isSDKListenerSettingsDrifted (lsSpec elbv2model.ListenerSpec , sdkLS ListenerWithTags ,
211
231
desiredDefaultActions []* elbv2sdk.Action , desiredDefaultCerts []* elbv2sdk.Certificate ) bool {
212
- if lsSpec .Port != awssdk .Int64Value (sdkLS .Port ) {
232
+ if lsSpec .Port != awssdk .Int64Value (sdkLS .Listener . Port ) {
213
233
return true
214
234
}
215
- if string (lsSpec .Protocol ) != awssdk .StringValue (sdkLS .Protocol ) {
235
+ if string (lsSpec .Protocol ) != awssdk .StringValue (sdkLS .Listener . Protocol ) {
216
236
return true
217
237
}
218
- if ! cmp .Equal (desiredDefaultActions , sdkLS .DefaultActions , elbv2equality .CompareOptionForActions ()) {
238
+ if ! cmp .Equal (desiredDefaultActions , sdkLS .Listener . DefaultActions , elbv2equality .CompareOptionForActions ()) {
219
239
return true
220
240
}
221
- if ! cmp .Equal (desiredDefaultCerts , sdkLS .Certificates , elbv2equality .CompareOptionForCertificates ()) {
241
+ if ! cmp .Equal (desiredDefaultCerts , sdkLS .Listener . Certificates , elbv2equality .CompareOptionForCertificates ()) {
222
242
return true
223
243
}
224
- if lsSpec .SSLPolicy != nil && awssdk .StringValue (lsSpec .SSLPolicy ) != awssdk .StringValue (sdkLS .SslPolicy ) {
244
+ if lsSpec .SSLPolicy != nil && awssdk .StringValue (lsSpec .SSLPolicy ) != awssdk .StringValue (sdkLS .Listener . SslPolicy ) {
225
245
return true
226
246
}
227
- if len (lsSpec .ALPNPolicy ) != 0 && ! cmp .Equal (lsSpec .ALPNPolicy , awssdk .StringValueSlice (sdkLS .AlpnPolicy ), cmpopts .EquateEmpty ()) {
247
+ if len (lsSpec .ALPNPolicy ) != 0 && ! cmp .Equal (lsSpec .ALPNPolicy , awssdk .StringValueSlice (sdkLS .Listener . AlpnPolicy ), cmpopts .EquateEmpty ()) {
228
248
return true
229
249
}
230
250
@@ -289,8 +309,8 @@ func buildSDKCertificate(modelCert elbv2model.Certificate) *elbv2sdk.Certificate
289
309
}
290
310
}
291
311
292
- func buildResListenerStatus (sdkLS * elbv2sdk. Listener ) elbv2model.ListenerStatus {
312
+ func buildResListenerStatus (sdkLS ListenerWithTags ) elbv2model.ListenerStatus {
293
313
return elbv2model.ListenerStatus {
294
- ListenerARN : awssdk .StringValue (sdkLS .ListenerArn ),
314
+ ListenerARN : awssdk .StringValue (sdkLS .Listener . ListenerArn ),
295
315
}
296
316
}
0 commit comments