@@ -275,7 +275,12 @@ func updateDnsResolver(d *schema.ResourceData, m interface{}) error {
275275}
276276
277277func 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
281286type 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+
304321func (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
0 commit comments