@@ -24,6 +24,8 @@ import (
2424 svcapitypes "github.com/aws-controllers-k8s/lambda-controller/apis/v1alpha1"
2525)
2626
27+ // syncEventInvokeConfig calls `PutFunctionEventInvokeConfig` to update the fields
28+ // or `DeleteFunctionEventInvokeConfig` if users removes the fields
2729func (rm * resourceManager ) syncEventInvokeConfig (
2830 ctx context.Context ,
2931 r * resource ,
@@ -32,42 +34,55 @@ func (rm *resourceManager) syncEventInvokeConfig(
3234 exit := rlog .Trace ("rm.syncEventInvokeConfig" )
3335 defer exit (err )
3436
37+ // Check if the user deleted the 'FunctionEventInvokeConfig' configuration
38+ // If yes, delete FunctionEventInvokeConfig
39+ if r .ko .Spec .FunctionEventInvokeConfig == nil {
40+ input_delete := & svcsdk.DeleteFunctionEventInvokeConfigInput {
41+ FunctionName : aws .String (* r .ko .Spec .FunctionName ),
42+ Qualifier : aws .String (* r .ko .Spec .Name ),
43+ }
44+ _ , err = rm .sdkapi .DeleteFunctionEventInvokeConfigWithContext (ctx , input_delete )
45+ rm .metrics .RecordAPICall ("DELETE" , "DeleteFunctionEventInvokeConfig" , err )
46+ if err != nil {
47+ return nil , err
48+ }
49+ return r , nil
50+ }
51+
3552 dspec := r .ko .Spec
3653 input := & svcsdk.PutFunctionEventInvokeConfigInput {
3754 FunctionName : aws .String (* dspec .FunctionName ),
3855 Qualifier : aws .String (* dspec .Name ),
3956 }
4057
41- if r .ko .Spec .FunctionEventInvokeConfig != nil {
42- if r .ko .Spec .FunctionEventInvokeConfig .DestinationConfig != nil {
43- destinations := & svcsdk.DestinationConfig {}
44- if r .ko .Spec .FunctionEventInvokeConfig .DestinationConfig .OnFailure != nil {
45- destinations .OnFailure = & svcsdk.OnFailure {}
46- if r .ko .Spec .FunctionEventInvokeConfig .DestinationConfig .OnFailure .Destination != nil {
47- destinations .OnFailure .Destination = aws .String (* r .ko .Spec .FunctionEventInvokeConfig .DestinationConfig .OnFailure .Destination )
48- }
49- }
50- if r .ko .Spec .FunctionEventInvokeConfig .DestinationConfig .OnSuccess != nil {
51- destinations .OnSuccess = & svcsdk.OnSuccess {}
52- if r .ko .Spec .FunctionEventInvokeConfig .DestinationConfig .OnSuccess .Destination != nil {
53- destinations .OnSuccess .Destination = aws .String (* r .ko .Spec .FunctionEventInvokeConfig .DestinationConfig .OnSuccess .Destination )
54- }
58+ if dspec .FunctionEventInvokeConfig .DestinationConfig != nil {
59+ destinations := & svcsdk.DestinationConfig {}
60+ if dspec .FunctionEventInvokeConfig .DestinationConfig .OnFailure != nil {
61+ destinations .OnFailure = & svcsdk.OnFailure {}
62+ if dspec .FunctionEventInvokeConfig .DestinationConfig .OnFailure .Destination != nil {
63+ destinations .OnFailure .Destination = aws .String (* dspec .FunctionEventInvokeConfig .DestinationConfig .OnFailure .Destination )
5564 }
56- input .DestinationConfig = destinations
5765 }
58- if r . ko . Spec . FunctionEventInvokeConfig .MaximumEventAgeInSeconds != nil {
59- input . MaximumEventAgeInSeconds = aws . Int64 ( * r . ko . Spec . FunctionEventInvokeConfig . MaximumEventAgeInSeconds )
60- }
61- if r . ko . Spec . FunctionEventInvokeConfig . MaximumRetryAttempts != nil {
62- input . MaximumRetryAttempts = aws . Int64 ( * r . ko . Spec . FunctionEventInvokeConfig . MaximumRetryAttempts )
66+ if dspec . FunctionEventInvokeConfig .DestinationConfig . OnSuccess != nil {
67+ destinations . OnSuccess = & svcsdk. OnSuccess {}
68+ if dspec . FunctionEventInvokeConfig . DestinationConfig . OnSuccess . Destination != nil {
69+ destinations . OnSuccess . Destination = aws . String ( * dspec . FunctionEventInvokeConfig . DestinationConfig . OnSuccess . Destination )
70+ }
6371 }
72+ input .DestinationConfig = destinations
6473 }
74+ if dspec .FunctionEventInvokeConfig .MaximumEventAgeInSeconds != nil {
75+ input .MaximumEventAgeInSeconds = aws .Int64 (* dspec .FunctionEventInvokeConfig .MaximumEventAgeInSeconds )
76+ }
77+ if dspec .FunctionEventInvokeConfig .MaximumRetryAttempts != nil {
78+ input .MaximumRetryAttempts = aws .Int64 (* dspec .FunctionEventInvokeConfig .MaximumRetryAttempts )
79+ }
80+
6581 _ , err = rm .sdkapi .PutFunctionEventInvokeConfigWithContext (ctx , input )
6682 rm .metrics .RecordAPICall ("UPDATE" , "SyncEventInvokeConfig" , err )
6783 if err != nil {
6884 return nil , err
6985 }
70-
7186 return r , nil
7287}
7388
@@ -148,12 +163,33 @@ func (rm *resourceManager) setProvisionedConcurrencyConfig(
148163 return nil
149164}
150165
151- // getFunctionEventInvokeConfig will describe the fields that are
152- // custom to the Alias resource
153- func (rm * resourceManager ) getFunctionEventInvokeConfig (
166+ func (rm * resourceManager ) setFunctionEventInvokeConfigFromResponse (
167+ ko * svcapitypes.Alias ,
168+ getFunctionEventInvokeConfigOutput * svcsdk.GetFunctionEventInvokeConfigOutput ,
169+ ) {
170+ // creating FunctionEventInvokeConfig object to store the values returned from `Get` call
171+ cloudFunctionEventInvokeConfig := & svcapitypes.PutFunctionEventInvokeConfigInput {}
172+ cloudFunctionEventInvokeConfig .DestinationConfig = & svcapitypes.DestinationConfig {}
173+ cloudFunctionEventInvokeConfig .DestinationConfig .OnFailure = & svcapitypes.OnFailure {}
174+ cloudFunctionEventInvokeConfig .DestinationConfig .OnSuccess = & svcapitypes.OnSuccess {}
175+ cloudFunctionEventInvokeConfig .DestinationConfig .OnFailure .Destination = getFunctionEventInvokeConfigOutput .DestinationConfig .OnFailure .Destination
176+ cloudFunctionEventInvokeConfig .DestinationConfig .OnSuccess .Destination = getFunctionEventInvokeConfigOutput .DestinationConfig .OnSuccess .Destination
177+ cloudFunctionEventInvokeConfig .MaximumEventAgeInSeconds = getFunctionEventInvokeConfigOutput .MaximumEventAgeInSeconds
178+ cloudFunctionEventInvokeConfig .MaximumRetryAttempts = getFunctionEventInvokeConfigOutput .MaximumRetryAttempts
179+ ko .Spec .FunctionEventInvokeConfig = cloudFunctionEventInvokeConfig
180+
181+ }
182+
183+ // setFunctionEventInvokeConfig sets the fields to set asynchronous invocation
184+ // for Function's Alias
185+ func (rm * resourceManager ) setFunctionEventInvokeConfig (
154186 ctx context.Context ,
155187 ko * svcapitypes.Alias ,
156188) (err error ) {
189+ rlog := ackrtlog .FromContext (ctx )
190+ exit := rlog .Trace ("rm.setFunctionEventInvokeConfig" )
191+ defer exit (err )
192+
157193 var getFunctionEventInvokeConfigOutput * svcsdk.GetFunctionEventInvokeConfigOutput
158194 getFunctionEventInvokeConfigOutput , err = rm .sdkapi .GetFunctionEventInvokeConfigWithContext (
159195 ctx ,
@@ -162,7 +198,6 @@ func (rm *resourceManager) getFunctionEventInvokeConfig(
162198 Qualifier : ko .Spec .Name ,
163199 },
164200 )
165-
166201 rm .metrics .RecordAPICall ("GET" , "GetFunctionEventInvokeConfig" , err )
167202
168203 if err != nil {
@@ -172,30 +207,7 @@ func (rm *resourceManager) getFunctionEventInvokeConfig(
172207 return err
173208 }
174209 } else {
175- if getFunctionEventInvokeConfigOutput .DestinationConfig != nil {
176- if getFunctionEventInvokeConfigOutput .DestinationConfig .OnFailure != nil {
177- if getFunctionEventInvokeConfigOutput .DestinationConfig .OnFailure .Destination != nil {
178- ko .Spec .FunctionEventInvokeConfig .DestinationConfig .OnFailure .Destination = getFunctionEventInvokeConfigOutput .DestinationConfig .OnFailure .Destination
179- }
180- }
181- if getFunctionEventInvokeConfigOutput .DestinationConfig .OnSuccess != nil {
182- if getFunctionEventInvokeConfigOutput .DestinationConfig .OnSuccess .Destination != nil {
183- ko .Spec .FunctionEventInvokeConfig .DestinationConfig .OnSuccess .Destination = getFunctionEventInvokeConfigOutput .DestinationConfig .OnSuccess .Destination
184- }
185- }
186- } else {
187- ko .Spec .FunctionEventInvokeConfig .DestinationConfig = nil
188- }
189- if getFunctionEventInvokeConfigOutput .MaximumEventAgeInSeconds != nil {
190- ko .Spec .FunctionEventInvokeConfig .MaximumEventAgeInSeconds = getFunctionEventInvokeConfigOutput .MaximumEventAgeInSeconds
191- } else {
192- ko .Spec .FunctionEventInvokeConfig .MaximumEventAgeInSeconds = nil
193- }
194- if getFunctionEventInvokeConfigOutput .DestinationConfig != nil {
195- ko .Spec .FunctionEventInvokeConfig .MaximumRetryAttempts = getFunctionEventInvokeConfigOutput .MaximumRetryAttempts
196- } else {
197- ko .Spec .FunctionEventInvokeConfig .MaximumRetryAttempts = nil
198- }
210+ rm .setFunctionEventInvokeConfigFromResponse (ko , getFunctionEventInvokeConfigOutput )
199211 }
200212
201213 return nil
@@ -212,9 +224,9 @@ func (rm *resourceManager) setResourceAdditionalFields(
212224 defer exit (err )
213225
214226 // To set Asynchronous Invocations for the function's alias
215- eic_err : = rm .getFunctionEventInvokeConfig (ctx , ko )
216- if eic_err != nil {
217- return eic_err
227+ err = rm .setFunctionEventInvokeConfig (ctx , ko )
228+ if err != nil {
229+ return err
218230 }
219231
220232 // To set Provisioned Concurrency for the function's alias
0 commit comments