@@ -2,6 +2,7 @@ package clb
22
33import (
44 "context"
5+ "fmt"
56 "log"
67
78 tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
@@ -58,79 +59,92 @@ func ResourceTencentCloudClbCustomizedConfig() *schema.Resource {
5859
5960func resourceTencentCloudClbCustomizedConfigCreate (d * schema.ResourceData , meta interface {}) error {
6061 defer tccommon .LogElapsed ("resource.tencentcloud_clb_customized_config.create" )()
61- logId := tccommon .GetLogId (tccommon .ContextNil )
62- ctx := context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
62+
63+ var (
64+ logId = tccommon .GetLogId (tccommon .ContextNil )
65+ ctx = context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
66+ request = clb .NewSetCustomizedConfigForLoadBalancerRequest ()
67+ response = clb .NewSetCustomizedConfigForLoadBalancerResponse ()
68+ )
6369
6470 configName := d .Get ("config_name" ).(string )
6571 configContent := d .Get ("config_content" ).(string )
66-
67- request := clb .NewSetCustomizedConfigForLoadBalancerRequest ()
6872 request .OperationType = helper .String ("ADD" )
6973 request .ConfigName = helper .String (configName )
7074 request .ConfigContent = helper .String (configContent )
7175
72- var response * clb.SetCustomizedConfigForLoadBalancerResponse
7376 err := resource .Retry (tccommon .WriteRetryTimeout , func () * resource.RetryError {
7477 result , e := meta .(tccommon.ProviderMeta ).GetAPIV3Conn ().UseClbClient ().SetCustomizedConfigForLoadBalancer (request )
7578 if e != nil {
7679 return tccommon .RetryError (e )
7780 } else {
78- log .Printf ("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n " ,
79- logId , request .GetAction (), request .ToJsonString (), result .ToJsonString ())
81+ log .Printf ("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n " , logId , request .GetAction (), request .ToJsonString (), result .ToJsonString ())
82+ if result == nil || result .Response == nil || result .Response .RequestId == nil {
83+ return resource .NonRetryableError (fmt .Errorf ("Create CLB Customized Config Failed, Response is nil." ))
84+ }
85+
8086 requestId := * result .Response .RequestId
8187 retryErr := waitForTaskFinish (requestId , meta .(tccommon.ProviderMeta ).GetAPIV3Conn ().UseClbClient ())
8288 if retryErr != nil {
8389 return tccommon .RetryError (errors .WithStack (retryErr ))
8490 }
8591 }
92+
8693 response = result
8794 return nil
8895 })
96+
8997 if err != nil {
9098 log .Printf ("[CRITAL]%s Create CLB Customized Config Failed, reason:%+v" , logId , err )
9199 return err
92100 }
101+
102+ if response .Response .ConfigId == nil {
103+ return fmt .Errorf ("ConfigId is nil." )
104+ }
105+
93106 d .SetId (* response .Response .ConfigId )
94107
95108 if v , ok := d .GetOk ("load_balancer_ids" ); ok {
96109 loadBalancerIds := v .(* schema.Set ).List ()
97- clbService := ClbService {
98- client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn (),
99- }
100- err := clbService .BindOrUnBindCustomizedConfigWithLbId (ctx ,
101- "BIND" , * response .Response .ConfigId , loadBalancerIds )
110+ clbService := ClbService {client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn ()}
111+ err := clbService .BindOrUnBindCustomizedConfigWithLbId (ctx , "BIND" , * response .Response .ConfigId , loadBalancerIds )
102112 if err != nil {
103113 log .Printf ("[CRITAL]%s Binding LB Customized Config Failed, reason:%+v" , logId , err )
104114 return err
105115 }
106116 }
117+
107118 return resourceTencentCloudClbCustomizedConfigRead (d , meta )
108119}
109120
110121func resourceTencentCloudClbCustomizedConfigRead (d * schema.ResourceData , meta interface {}) error {
111122 defer tccommon .LogElapsed ("resource.tencentcloud_clb_customized_config.read" )()
112123 defer tccommon .InconsistentCheck (d , meta )()
113124
114- logId := tccommon .GetLogId (tccommon .ContextNil )
115- ctx := context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
125+ var (
126+ logId = tccommon .GetLogId (tccommon .ContextNil )
127+ ctx = context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
128+ clbService = ClbService {client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn ()}
129+ configId = d .Id ()
130+ )
116131
117- configId := d .Id ()
118- clbService := ClbService {
119- client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn (),
120- }
121132 var config * clb.ConfigListItem
122133 err := resource .Retry (tccommon .ReadRetryTimeout , func () * resource.RetryError {
123134 result , e := clbService .DescribeLbCustomizedConfigById (ctx , configId )
124135 if e != nil {
125136 return tccommon .RetryError (e )
126137 }
138+
127139 config = result
128140 return nil
129141 })
142+
130143 if err != nil {
131144 log .Printf ("[CRITAL]%s read CLB customized config failed, reason:%+v" , logId , err )
132145 return err
133146 }
147+
134148 if config == nil {
135149 d .SetId ("" )
136150 return nil
@@ -152,13 +166,16 @@ func resourceTencentCloudClbCustomizedConfigRead(d *schema.ResourceData, meta in
152166 log .Printf ("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n " ,
153167 logId , request .GetAction (), request .ToJsonString (), result .ToJsonString ())
154168 }
169+
155170 response = result
156171 return nil
157172 })
173+
158174 if assErr != nil {
159175 log .Printf ("[CRITAL]%s Describe CLB Customized Config Associate List Failed, reason:%+v" , logId , assErr )
160176 return err
161177 }
178+
162179 _ = d .Set ("load_balancer_ids" , extractBindClbList (response .Response .BindList ))
163180
164181 return nil
@@ -167,93 +184,95 @@ func resourceTencentCloudClbCustomizedConfigRead(d *schema.ResourceData, meta in
167184func resourceTencentCloudClbCustomizedConfigUpdate (d * schema.ResourceData , meta interface {}) error {
168185 defer tccommon .LogElapsed ("resource.tencentcloud_clb_customized_config.update" )()
169186
170- logId := tccommon .GetLogId (tccommon .ContextNil )
187+ var (
188+ logId = tccommon .GetLogId (tccommon .ContextNil )
189+ configId = d .Id ()
190+ )
171191
172192 d .Partial (true )
173193
174- configId := d .Id ()
175- request := clb .NewSetCustomizedConfigForLoadBalancerRequest ()
176- request .UconfigId = & configId
177- request .OperationType = helper .String ("UPDATE" )
178-
179- if d .HasChange ("config_name" ) {
194+ if d .HasChange ("config_name" ) || d .HasChange ("config_content" ) {
195+ request := clb .NewSetCustomizedConfigForLoadBalancerRequest ()
196+ request .UconfigId = & configId
197+ request .OperationType = helper .String ("UPDATE" )
180198 configName := d .Get ("config_name" ).(string )
181- request .ConfigName = & configName
182- }
183-
184- if d .HasChange ("config_content" ) {
185199 configContent := d .Get ("config_content" ).(string )
200+ request .ConfigName = & configName
186201 request .ConfigContent = & configContent
187- }
188202
189- err := resource .Retry (tccommon .WriteRetryTimeout , func () * resource.RetryError {
190- result , e := meta .(tccommon.ProviderMeta ).GetAPIV3Conn ().UseClbClient ().SetCustomizedConfigForLoadBalancer (request )
191- if e != nil {
192- return tccommon .RetryError (e )
193- } else {
194- log .Printf ("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n " ,
195- logId , request .GetAction (), request .ToJsonString (), result .ToJsonString ())
196- requestId := * result .Response .RequestId
197- retryErr := waitForTaskFinish (requestId , meta .(tccommon.ProviderMeta ).GetAPIV3Conn ().UseClbClient ())
198- if retryErr != nil {
199- return tccommon .RetryError (errors .WithStack (retryErr ))
203+ err := resource .Retry (tccommon .WriteRetryTimeout , func () * resource.RetryError {
204+ result , e := meta .(tccommon.ProviderMeta ).GetAPIV3Conn ().UseClbClient ().SetCustomizedConfigForLoadBalancer (request )
205+ if e != nil {
206+ return tccommon .RetryError (e )
207+ } else {
208+ log .Printf ("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n " , logId , request .GetAction (), request .ToJsonString (), result .ToJsonString ())
209+ if result == nil || result .Response == nil || result .Response .RequestId == nil {
210+ return resource .NonRetryableError (fmt .Errorf ("Update CLB Customized Config Failed, Response is nil." ))
211+ }
212+
213+ requestId := * result .Response .RequestId
214+ retryErr := waitForTaskFinish (requestId , meta .(tccommon.ProviderMeta ).GetAPIV3Conn ().UseClbClient ())
215+ if retryErr != nil {
216+ return tccommon .RetryError (errors .WithStack (retryErr ))
217+ }
200218 }
219+
220+ return nil
221+ })
222+
223+ if err != nil {
224+ log .Printf ("[CRITAL]%s Update CLB Customized Config Failed, reason:%+v" , logId , err )
225+ return err
201226 }
202- return nil
203- })
204- if err != nil {
205- log .Printf ("[CRITAL]%s Update CLB Customized Config Failed, reason:%+v" , logId , err )
206- return err
207227 }
208228
209229 if d .HasChange ("load_balancer_ids" ) {
210230 ctx := context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
211- clbService := ClbService {
212- client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn (),
213- }
231+ clbService := ClbService {client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn ()}
214232 old , new := d .GetChange ("load_balancer_ids" )
215233 olds := old .(* schema.Set )
216234 news := new .(* schema.Set )
217235 add := news .Difference (olds ).List ()
218236 remove := olds .Difference (news ).List ()
219237 if len (remove ) > 0 {
220- err := clbService .BindOrUnBindCustomizedConfigWithLbId (ctx ,
221- "UNBIND" , configId , remove )
238+ err := clbService .BindOrUnBindCustomizedConfigWithLbId (ctx , "UNBIND" , configId , remove )
222239 if err != nil {
223240 log .Printf ("[CRITAL]%s UnBinding LB Customized Config Failed, reason:%+v" , logId , err )
224241 return err
225242 }
226243 }
244+
227245 if len (add ) > 0 {
228- err := clbService .BindOrUnBindCustomizedConfigWithLbId (ctx ,
229- "BIND" , configId , add )
246+ err := clbService .BindOrUnBindCustomizedConfigWithLbId (ctx , "BIND" , configId , add )
230247 if err != nil {
231248 log .Printf ("[CRITAL]%s Binding LB Customized Config Failed, reason:%+v" , logId , err )
232249 return err
233250 }
234251 }
235252 }
253+
236254 return nil
237255}
238256
239257func resourceTencentCloudClbCustomizedConfigDelete (d * schema.ResourceData , meta interface {}) error {
240258 defer tccommon .LogElapsed ("resource.tencentcloud_clb_customized_config.delete" )()
241259
242- logId := tccommon .GetLogId (tccommon .ContextNil )
243- ctx := context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
244-
245- configId := d .Id ()
246- clbService := ClbService {
247- client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn (),
248- }
260+ var (
261+ logId = tccommon .GetLogId (tccommon .ContextNil )
262+ ctx = context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
263+ clbService = ClbService {client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn ()}
264+ configId = d .Id ()
265+ )
249266
250267 err := resource .Retry (tccommon .WriteRetryTimeout , func () * resource.RetryError {
251268 e := clbService .DeleteLbCustomizedConfigById (ctx , configId )
252269 if e != nil {
253270 return tccommon .RetryError (e )
254271 }
272+
255273 return nil
256274 })
275+
257276 if err != nil {
258277 log .Printf ("[CRITAL]%s delete CLB customized config failed, reason:%+v" , logId , err )
259278 return err
0 commit comments