@@ -107,12 +107,13 @@ func ResourceLb() *schema.Resource {
107107 Deprecated : "The resource ip will be destroyed by it's own resource. Please set this to `false`" ,
108108 },
109109 "private_network" : {
110- Type : schema .TypeSet ,
111- Optional : true ,
112- Computed : true ,
113- MaxItems : 8 ,
114- Set : lbPrivateNetworkSetHash ,
115- Description : "List of private network to connect with your load balancer" ,
110+ Type : schema .TypeSet ,
111+ Optional : true ,
112+ Computed : true ,
113+ MaxItems : 8 ,
114+ Set : lbPrivateNetworkSetHash ,
115+ ConflictsWith : []string {"external_private_networks" },
116+ Description : "List of private network to connect with your load balancer" ,
116117 DiffSuppressFunc : func (k , oldValue , newValue string , _ * schema.ResourceData ) bool {
117118 // Check if the key is for the 'private_network_id' attribute
118119 if strings .HasSuffix (k , "private_network_id" ) {
@@ -169,6 +170,13 @@ func ResourceLb() *schema.Resource {
169170 },
170171 },
171172 },
173+ "external_private_networks" : {
174+ Type : schema .TypeBool ,
175+ Optional : true ,
176+ Default : false ,
177+ Description : "This boolean determines if private network attachments should be managed externally through the `scaleway_lb_private_network` resource. When set, `private_network` must not be configured in this resource" ,
178+ ConflictsWith : []string {"private_network" },
179+ },
172180 "ssl_compatibility_level" : {
173181 Type : schema .TypeString ,
174182 Optional : true ,
@@ -266,22 +274,24 @@ func resourceLbCreate(ctx context.Context, d *schema.ResourceData, m any) diag.D
266274 return diag .FromErr (err )
267275 }
268276
269- // attach private network
270- pnConfigs , pnExist := d .GetOk ("private_network" )
271- if pnExist {
272- pnConfigs , err := expandPrivateNetworks (pnConfigs )
273- if err != nil {
274- return diag .FromErr (err )
275- }
277+ if ! d .Get ("external_private_networks" ).(bool ) {
278+ // attach private network
279+ pnConfigs , pnExist := d .GetOk ("private_network" )
280+ if pnExist {
281+ pnConfigs , err := expandPrivateNetworks (pnConfigs )
282+ if err != nil {
283+ return diag .FromErr (err )
284+ }
276285
277- _ , err = attachLBPrivateNetworks (ctx , lbAPI , zone , pnConfigs , lb .ID , d .Timeout (schema .TimeoutCreate ))
278- if err != nil {
279- return diag .FromErr (err )
280- }
286+ _ , err = attachLBPrivateNetworks (ctx , lbAPI , zone , pnConfigs , lb .ID , d .Timeout (schema .TimeoutCreate ))
287+ if err != nil {
288+ return diag .FromErr (err )
289+ }
281290
282- _ , err = waitForLB (ctx , lbAPI , zone , lb .ID , d .Timeout (schema .TimeoutCreate ))
283- if err != nil {
284- return diag .FromErr (err )
291+ _ , err = waitForLB (ctx , lbAPI , zone , lb .ID , d .Timeout (schema .TimeoutCreate ))
292+ if err != nil {
293+ return diag .FromErr (err )
294+ }
285295 }
286296 }
287297
@@ -353,7 +363,12 @@ func resourceLbRead(ctx context.Context, d *schema.ResourceData, m any) diag.Dia
353363 return diag .FromErr (err )
354364 }
355365
356- _ = d .Set ("private_network" , flattenPrivateNetworkConfigs (privateNetworks ))
366+ external := d .Get ("external_private_networks" ).(bool )
367+ if ! external {
368+ _ = d .Set ("private_network" , flattenPrivateNetworkConfigs (privateNetworks ))
369+ } else {
370+ _ = d .Set ("private_network" , schema .NewSet (lbPrivateNetworkSetHash , []any {}))
371+ }
357372
358373 privateNetworkIDs := make ([]string , 0 , len (privateNetworks ))
359374 for _ , pn := range privateNetworks {
@@ -521,7 +536,8 @@ func resourceLbUpdate(ctx context.Context, d *schema.ResourceData, m any) diag.D
521536 ////
522537 // Attach / Detach Private Networks
523538 ////
524- if d .HasChange ("private_network" ) {
539+ external := d .Get ("external_private_networks" ).(bool )
540+ if ! external && d .HasChange ("private_network" ) {
525541 // check current lb stability state
526542 _ , err = waitForLB (ctx , lbAPI , zone , ID , d .Timeout (schema .TimeoutUpdate ))
527543 if err != nil {
0 commit comments