Skip to content

Commit 56ee5ba

Browse files
Harshita Bajpairashik-bhasin
authored andcommitted
Bug Fix - Resolve terraform not dropping resolver rules and view and async polling
1 parent 4fba76a commit 56ee5ba

File tree

4 files changed

+132
-1
lines changed

4 files changed

+132
-1
lines changed

internal/service/dns/dns_resolver_endpoint_resource.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,18 @@ func (s *DnsResolverEndpointResourceCrud) CreatedTarget() []string {
176176
}
177177
}
178178

179+
func (s *DnsResolverEndpointResourceCrud) UpdatedPending() []string {
180+
return []string{
181+
string(oci_dns.ResolverEndpointLifecycleStateUpdating),
182+
}
183+
}
184+
185+
func (s *DnsResolverEndpointResourceCrud) UpdatedTarget() []string {
186+
return []string{
187+
string(oci_dns.ResolverEndpointLifecycleStateActive),
188+
}
189+
}
190+
179191
func (s *DnsResolverEndpointResourceCrud) DeletedPending() []string {
180192
return []string{
181193
string(oci_dns.ResolverEndpointLifecycleStateDeleting),

internal/service/dns/dns_resolver_resource.go

Lines changed: 96 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,12 @@ func updateDnsResolver(d *schema.ResourceData, m interface{}) error {
275275
}
276276

277277
func deleteDnsResolver(d *schema.ResourceData, m interface{}) error {
278-
return nil
278+
sync := &DnsResolverResourceCrud{}
279+
sync.D = d
280+
sync.Client = m.(*client.OracleClients).DnsClient()
281+
// This will call the Delete function which internally calls the updateResolver dns API operation in order to clear properties of the resolver.
282+
// DeleteResolver is not a public facing dns operation. Resolvers are deleted when their corresponding VCN is deleted.
283+
return sync.Delete()
279284
}
280285

281286
type DnsResolverResourceCrud struct {
@@ -301,6 +306,18 @@ func (s *DnsResolverResourceCrud) CreatedTarget() []string {
301306
}
302307
}
303308

309+
func (s *DnsResolverResourceCrud) UpdatedPending() []string {
310+
return []string{
311+
string(oci_dns.ResolverLifecycleStateUpdating),
312+
}
313+
}
314+
315+
func (s *DnsResolverResourceCrud) UpdatedTarget() []string {
316+
return []string{
317+
string(oci_dns.ResolverLifecycleStateActive),
318+
}
319+
}
320+
304321
func (s *DnsResolverResourceCrud) DeletedPending() []string {
305322
return []string{
306323
string(oci_dns.ResolverLifecycleStateDeleting),
@@ -384,6 +401,12 @@ func (s *DnsResolverResourceCrud) Create() error {
384401
}
385402

386403
s.Res = &response.Resolver
404+
s.D.SetId(s.ID())
405+
406+
if waitErr := tfresource.WaitForUpdatedState(s.D, s); waitErr != nil {
407+
return waitErr
408+
}
409+
387410
return nil
388411
}
389412

@@ -497,6 +520,78 @@ func (s *DnsResolverResourceCrud) Update() error {
497520
}
498521

499522
s.Res = &response.Resolver
523+
524+
return nil
525+
}
526+
527+
// The Delete function below checks if existing resolver has attachedViews, rules, defined tags and/or freeform tags. If any of these property is present then
528+
// the function calls dns updateResolver API and drops the AttachedViews and Rules and clears defined tags and freeform tags.
529+
func (s *DnsResolverResourceCrud) Delete() error {
530+
var hasAttachedViews, hasRules, hasDefinedtags, hasFreeformTags bool
531+
532+
// ...check if the existing resolver has attachedViews
533+
if attachedViews, ok := s.D.GetOkExists("attached_views"); ok {
534+
interfaces := attachedViews.([]interface{})
535+
if len(interfaces) != 0 {
536+
hasAttachedViews = true
537+
}
538+
}
539+
540+
// ...check if the existing resolver has rules
541+
if rules, ok := s.D.GetOkExists("rules"); ok {
542+
interfaces := rules.([]interface{})
543+
if len(interfaces) != 0 {
544+
hasRules = true
545+
}
546+
}
547+
548+
// ...check if the existing resolver has defined tags
549+
if definedTags, ok := s.D.GetOkExists("defined_tags"); ok {
550+
if len(definedTags.(map[string]interface{})) != 0 {
551+
hasDefinedtags = true
552+
}
553+
}
554+
555+
// ...check if the existing resolver has freeform tags
556+
if freeformTags, ok := s.D.GetOkExists("freeform_tags"); ok {
557+
if len(freeformTags.(map[string]interface{})) != 0 {
558+
hasFreeformTags = true
559+
}
560+
}
561+
562+
// ...if any of the above property is present then make a call to updateResolver dns API
563+
if hasAttachedViews || hasRules || hasDefinedtags || hasFreeformTags {
564+
request := oci_dns.UpdateResolverRequest{}
565+
566+
// Setting AttachedViews to an empty list
567+
tmpViewList := make([]oci_dns.AttachedViewDetails, 0)
568+
request.AttachedViews = tmpViewList
569+
570+
// Setting Rules to an empty list
571+
tmpRulesList := make([]oci_dns.ResolverRuleDetails, 0)
572+
request.Rules = tmpRulesList
573+
574+
// Setting defined tags as empty
575+
definedTags := make(map[string]map[string]interface{})
576+
request.DefinedTags = definedTags
577+
578+
// Setting defined tags as empty
579+
freeformTags := map[string]string{}
580+
request.FreeformTags = freeformTags
581+
582+
tmp := s.D.Id()
583+
request.ResolverId = &tmp
584+
585+
request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "dns")
586+
587+
response, err := s.Client.UpdateResolver(context.Background(), request)
588+
if err != nil {
589+
return err
590+
}
591+
592+
s.Res = &response.Resolver
593+
return nil
594+
}
500595
return nil
501596
}
502597

internal/service/dns/dns_tsig_key_resource.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,18 @@ func (s *DnsTsigKeyResourceCrud) CreatedTarget() []string {
139139
}
140140
}
141141

142+
func (s *DnsTsigKeyResourceCrud) UpdatedPending() []string {
143+
return []string{
144+
string(oci_dns.TsigKeyLifecycleStateUpdating),
145+
}
146+
}
147+
148+
func (s *DnsTsigKeyResourceCrud) UpdatedTarget() []string {
149+
return []string{
150+
string(oci_dns.TsigKeyLifecycleStateActive),
151+
}
152+
}
153+
142154
func (s *DnsTsigKeyResourceCrud) DeletedPending() []string {
143155
return []string{
144156
string(oci_dns.TsigKeyLifecycleStateDeleting),

internal/service/dns/dns_view_resource.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,18 @@ func (s *DnsViewResourceCrud) CreatedTarget() []string {
140140
}
141141
}
142142

143+
func (s *DnsViewResourceCrud) UpdatedPending() []string {
144+
return []string{
145+
string(oci_dns.ViewLifecycleStateUpdating),
146+
}
147+
}
148+
149+
func (s *DnsViewResourceCrud) UpdatedTarget() []string {
150+
return []string{
151+
string(oci_dns.ViewLifecycleStateActive),
152+
}
153+
}
154+
143155
func (s *DnsViewResourceCrud) DeletedPending() []string {
144156
return []string{
145157
string(oci_dns.ViewLifecycleStateDeleting),

0 commit comments

Comments
 (0)