@@ -2,10 +2,11 @@ package duplocloud
22
33import (
44 "context"
5- "github.com/duplocloud/terraform-provider-duplocloud/duplosdk"
65 "log"
76 "time"
87
8+ "github.com/duplocloud/terraform-provider-duplocloud/duplosdk"
9+
910 "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1011 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1112)
@@ -103,23 +104,39 @@ func resourcePlanSettingsRead(ctx context.Context, d *schema.ResourceData, m int
103104
104105 // Get "special" plan settings.
105106 settings , err := c .PlanGetSettings (planID )
106- if err != nil {
107+ if err != nil && err . Status () != 404 {
107108 return diag .Errorf ("failed to retrieve plan settings for '%s': %s" , planID , err )
108109 }
109-
110+ if (err != nil && err .Status () == 404 ) || settings == nil {
111+ d .SetId ("" )
112+ log .Printf ("plan settings not found for plan %s" , planID )
113+ return nil
114+ }
110115 // Get plan DNS config. If the config is "global", that means there is no plan DNS config.
111116 dns , err := c .PlanGetDnsConfig (planID )
112- if err != nil {
117+ if err != nil && err . Status () != 404 {
113118 return diag .Errorf ("failed to retrieve plan DNS config for '%s': %s" , planID , err )
114119 }
120+
121+ if (err != nil && err .Status () == 404 ) || settings == nil {
122+ d .SetId ("" )
123+ log .Printf ("plan settings DNS config not found for plan %s" , planID )
124+ return nil
125+ }
126+
115127 if dns != nil && dns .IsGlobalDNS {
116128 dns = nil
117129 }
118130
119131 // Get plan metadata.
120132 allMetadata , err := c .PlanMetadataGetList (planID )
121- if err != nil {
122- return diag .Errorf ("failed to retrieve plan metadata for '%s': %s" , planID , err )
133+ if err != nil && err .Status () != 404 {
134+ return diag .Errorf ("failed to retrieve plan settings for '%s': %s" , planID , err )
135+ }
136+ if (err != nil && err .Status () == 404 ) || settings == nil {
137+ d .SetId ("" )
138+ log .Printf ("plan settings not found for plan %s" , planID )
139+ return nil
123140 }
124141
125142 // Set the simple fields first.
@@ -198,33 +215,49 @@ func resourcePlanSettingsDelete(ctx context.Context, d *schema.ResourceData, m i
198215 }
199216
200217 // Skip if plan does not exist.
201- if settings == nil {
218+ if (err != nil && err .Status () == 404 ) || settings == nil {
219+ log .Printf ("plan settings not found for plan %s" , planID )
202220 return nil
203221 }
204222
205223 // Undo the plan settings we can control here.
206224 if _ , ok := d .GetOk ("unrestricted_ext_lb" ); ok {
207225 settings .UnrestrictedExtLB = false
208226 _ , err := c .PlanUpdateSettings (planID , settings )
209- if err != nil {
210- return diag .Errorf ("failed to remove plan settings for '%s': %s" , planID , err )
227+ if err != nil && err .Status () != 404 {
228+ return diag .Errorf ("failed to update plan settings for '%s': %s" , planID , err )
229+ }
230+ if (err != nil && err .Status () == 404 ) || settings == nil {
231+ log .Printf ("plan settings not found for plan %s" , planID )
232+ return nil
211233 }
234+
212235 }
213236
214237 // Undo the plan DNS.
215238 if _ , ok := d .GetOk ("dns_setting" ); ok {
216239 err := c .PlanDeleteDnsConfig (planID )
217- if err != nil {
240+ if err != nil && err . Status () != 404 {
218241 return diag .Errorf ("failed to remove plan DNS config for '%s': %s" , planID , err )
219242 }
243+ if (err != nil && err .Status () == 404 ) || settings == nil {
244+ log .Printf ("plan settings dns config not found for plan %s" , planID )
245+ return nil
246+ }
247+
220248 }
221249
222250 // Undo the plan metadata
223251 if _ , ok := d .GetOk ("metadata" ); ok {
224252 allMetadata , err := c .PlanMetadataGetList (planID )
225- if err != nil {
253+
254+ if err != nil && err .Status () != 404 {
226255 return diag .Errorf ("failed to retrieve plan metadata for '%s': %s" , planID , err )
227256 }
257+ if (err != nil && err .Status () == 404 ) || settings == nil {
258+ log .Printf ("plan settings metadata not found for plan %s" , planID )
259+ return nil
260+ }
228261
229262 // Get the previous and desired plan configs
230263 previous , _ := getPlanMetadataChange (allMetadata , d )
@@ -235,6 +268,13 @@ func resourcePlanSettingsDelete(ctx context.Context, d *schema.ResourceData, m i
235268 if err != nil {
236269 return diag .Errorf ("failed to remove plan metadata for '%s': %s" , planID , err )
237270 }
271+ if err != nil && err .Status () != 404 {
272+ return diag .Errorf ("failed to remove plan metadata for '%s': %s" , planID , err )
273+ }
274+ if (err != nil && err .Status () == 404 ) || settings == nil {
275+ log .Printf ("plan settings metadata not found for plan %s" , planID )
276+ return nil
277+ }
238278 }
239279
240280 log .Printf ("[TRACE] resourcePlanSettingsDelete(%s): end" , planID )
0 commit comments