@@ -283,6 +283,17 @@ Ignored for 'public' visibility zones.`,
283283while private zones are visible only to Virtual Private Cloud resources. Default value: "public" Possible values: ["private", "public"]` ,
284284 Default : "public" ,
285285 },
286+ "creation_time" : {
287+ Type : schema .TypeString ,
288+ Computed : true ,
289+ Description : `The time that this resource was created on the server.
290+ This is in RFC3339 text format.` ,
291+ },
292+ "managed_zone_id" : {
293+ Type : schema .TypeInt ,
294+ Computed : true ,
295+ Description : `Unique identifier for the resource; defined by the server.` ,
296+ },
286297 "name_servers" : {
287298 Type : schema .TypeList ,
288299 Computed : true ,
@@ -503,12 +514,18 @@ func resourceDNSManagedZoneRead(d *schema.ResourceData, meta interface{}) error
503514 if err := d .Set ("dnssec_config" , flattenDNSManagedZoneDnssecConfig (res ["dnssecConfig" ], d , config )); err != nil {
504515 return fmt .Errorf ("Error reading ManagedZone: %s" , err )
505516 }
517+ if err := d .Set ("managed_zone_id" , flattenDNSManagedZoneManagedZoneID (res ["id" ], d , config )); err != nil {
518+ return fmt .Errorf ("Error reading ManagedZone: %s" , err )
519+ }
506520 if err := d .Set ("name" , flattenDNSManagedZoneName (res ["name" ], d , config )); err != nil {
507521 return fmt .Errorf ("Error reading ManagedZone: %s" , err )
508522 }
509523 if err := d .Set ("name_servers" , flattenDNSManagedZoneNameServers (res ["nameServers" ], d , config )); err != nil {
510524 return fmt .Errorf ("Error reading ManagedZone: %s" , err )
511525 }
526+ if err := d .Set ("creation_time" , flattenDNSManagedZoneCreationTime (res ["creationTime" ], d , config )); err != nil {
527+ return fmt .Errorf ("Error reading ManagedZone: %s" , err )
528+ }
512529 if err := d .Set ("labels" , flattenDNSManagedZoneLabels (res ["labels" ], d , config )); err != nil {
513530 return fmt .Errorf ("Error reading ManagedZone: %s" , err )
514531 }
@@ -556,18 +573,36 @@ func resourceDNSManagedZoneUpdate(d *schema.ResourceData, meta interface{}) erro
556573 } else if v , ok := d .GetOkExists ("description" ); ! isEmptyValue (reflect .ValueOf (v )) && (ok || ! reflect .DeepEqual (v , descriptionProp )) {
557574 obj ["description" ] = descriptionProp
558575 }
576+ dnsNameProp , err := expandDNSManagedZoneDnsName (d .Get ("dns_name" ), d , config )
577+ if err != nil {
578+ return err
579+ } else if v , ok := d .GetOkExists ("dns_name" ); ! isEmptyValue (reflect .ValueOf (v )) && (ok || ! reflect .DeepEqual (v , dnsNameProp )) {
580+ obj ["dnsName" ] = dnsNameProp
581+ }
559582 dnssecConfigProp , err := expandDNSManagedZoneDnssecConfig (d .Get ("dnssec_config" ), d , config )
560583 if err != nil {
561584 return err
562585 } else if v , ok := d .GetOkExists ("dnssec_config" ); ! isEmptyValue (reflect .ValueOf (v )) && (ok || ! reflect .DeepEqual (v , dnssecConfigProp )) {
563586 obj ["dnssecConfig" ] = dnssecConfigProp
564587 }
588+ nameProp , err := expandDNSManagedZoneName (d .Get ("name" ), d , config )
589+ if err != nil {
590+ return err
591+ } else if v , ok := d .GetOkExists ("name" ); ! isEmptyValue (reflect .ValueOf (v )) && (ok || ! reflect .DeepEqual (v , nameProp )) {
592+ obj ["name" ] = nameProp
593+ }
565594 labelsProp , err := expandDNSManagedZoneLabels (d .Get ("labels" ), d , config )
566595 if err != nil {
567596 return err
568597 } else if v , ok := d .GetOkExists ("labels" ); ! isEmptyValue (reflect .ValueOf (v )) && (ok || ! reflect .DeepEqual (v , labelsProp )) {
569598 obj ["labels" ] = labelsProp
570599 }
600+ visibilityProp , err := expandDNSManagedZoneVisibility (d .Get ("visibility" ), d , config )
601+ if err != nil {
602+ return err
603+ } else if v , ok := d .GetOkExists ("visibility" ); ! isEmptyValue (reflect .ValueOf (v )) && (ok || ! reflect .DeepEqual (v , visibilityProp )) {
604+ obj ["visibility" ] = visibilityProp
605+ }
571606 privateVisibilityConfigProp , err := expandDNSManagedZonePrivateVisibilityConfig (d .Get ("private_visibility_config" ), d , config )
572607 if err != nil {
573608 return err
@@ -586,6 +621,23 @@ func resourceDNSManagedZoneUpdate(d *schema.ResourceData, meta interface{}) erro
586621 } else if v , ok := d .GetOkExists ("peering_config" ); ! isEmptyValue (reflect .ValueOf (v )) && (ok || ! reflect .DeepEqual (v , peeringConfigProp )) {
587622 obj ["peeringConfig" ] = peeringConfigProp
588623 }
624+ reverseLookupConfigProp , err := expandDNSManagedZoneReverseLookup (d .Get ("reverse_lookup" ), d , config )
625+ if err != nil {
626+ return err
627+ } else if v , ok := d .GetOkExists ("reverse_lookup" ); ! isEmptyValue (reflect .ValueOf (v )) && (ok || ! reflect .DeepEqual (v , reverseLookupConfigProp )) {
628+ obj ["reverseLookupConfig" ] = reverseLookupConfigProp
629+ }
630+ serviceDirectoryConfigProp , err := expandDNSManagedZoneServiceDirectoryConfig (d .Get ("service_directory_config" ), d , config )
631+ if err != nil {
632+ return err
633+ } else if v , ok := d .GetOkExists ("service_directory_config" ); ! isEmptyValue (reflect .ValueOf (v )) && (ok || ! reflect .DeepEqual (v , serviceDirectoryConfigProp )) {
634+ obj ["serviceDirectoryConfig" ] = serviceDirectoryConfigProp
635+ }
636+
637+ obj , err = resourceDNSManagedZoneUpdateEncoder (d , meta , obj )
638+ if err != nil {
639+ return err
640+ }
589641
590642 url , err := replaceVars (d , config , "{{DNSBasePath}}projects/{{project}}/managedZones/{{name}}" )
591643 if err != nil {
@@ -599,7 +651,7 @@ func resourceDNSManagedZoneUpdate(d *schema.ResourceData, meta interface{}) erro
599651 billingProject = bp
600652 }
601653
602- res , err := sendRequestWithTimeout (config , "PATCH " , billingProject , url , userAgent , obj , d .Timeout (schema .TimeoutUpdate ))
654+ res , err := sendRequestWithTimeout (config , "PUT " , billingProject , url , userAgent , obj , d .Timeout (schema .TimeoutUpdate ))
603655
604656 if err != nil {
605657 return fmt .Errorf ("Error updating ManagedZone %q: %s" , d .Id (), err )
@@ -831,6 +883,23 @@ func flattenDNSManagedZoneDnssecConfigDefaultKeySpecsKind(v interface{}, d *sche
831883 return v
832884}
833885
886+ func flattenDNSManagedZoneManagedZoneID (v interface {}, d * schema.ResourceData , config * Config ) interface {} {
887+ // Handles the string fixed64 format
888+ if strVal , ok := v .(string ); ok {
889+ if intVal , err := stringToFixed64 (strVal ); err == nil {
890+ return intVal
891+ }
892+ }
893+
894+ // number values are represented as float64
895+ if floatVal , ok := v .(float64 ); ok {
896+ intVal := int (floatVal )
897+ return intVal
898+ }
899+
900+ return v // let terraform core handle it otherwise
901+ }
902+
834903func flattenDNSManagedZoneName (v interface {}, d * schema.ResourceData , config * Config ) interface {} {
835904 return v
836905}
@@ -839,6 +908,10 @@ func flattenDNSManagedZoneNameServers(v interface{}, d *schema.ResourceData, con
839908 return v
840909}
841910
911+ func flattenDNSManagedZoneCreationTime (v interface {}, d * schema.ResourceData , config * Config ) interface {} {
912+ return v
913+ }
914+
842915func flattenDNSManagedZoneLabels (v interface {}, d * schema.ResourceData , config * Config ) interface {} {
843916 return v
844917}
@@ -1379,3 +1452,17 @@ func expandDNSManagedZoneServiceDirectoryConfigNamespaceNamespaceUrl(v interface
13791452 }
13801453 return url , nil
13811454}
1455+
1456+ func resourceDNSManagedZoneUpdateEncoder (d * schema.ResourceData , meta interface {}, obj map [string ]interface {}) (map [string ]interface {}, error ) {
1457+ // The upstream update method (https://cloud.google.com/dns/docs/reference/v1/managedZones/update)
1458+ // requires the full ManagedZones object, therefore, we need to keep some input only values in the struct
1459+ // and then reuse it in the update
1460+ nameServers , ok := d .GetOkExists ("name_servers" )
1461+ if ! ok {
1462+ nameServers = []string {}
1463+ }
1464+ obj ["nameServers" ] = nameServers
1465+ obj ["id" ] = d .Get ("managed_zone_id" )
1466+ obj ["creationTime" ] = d .Get ("creation_time" )
1467+ return obj , nil
1468+ }
0 commit comments