@@ -102,6 +102,24 @@ error in any statement, the database is not created.`,
102102 Type : schema .TypeString ,
103103 },
104104 },
105+ "encryption_config" : {
106+ Type : schema .TypeList ,
107+ Optional : true ,
108+ ForceNew : true ,
109+ Description : `Encryption configuration for the database` ,
110+ MaxItems : 1 ,
111+ Elem : & schema.Resource {
112+ Schema : map [string ]* schema.Schema {
113+ "kms_key_name" : {
114+ Type : schema .TypeString ,
115+ Required : true ,
116+ ForceNew : true ,
117+ Description : `Fully qualified name of the KMS key to use to encrypt this database. This key must exist
118+ in the same location as the Spanner Database.` ,
119+ },
120+ },
121+ },
122+ },
105123 "state" : {
106124 Type : schema .TypeString ,
107125 Computed : true ,
@@ -143,6 +161,12 @@ func resourceSpannerDatabaseCreate(d *schema.ResourceData, meta interface{}) err
143161 } else if v , ok := d .GetOkExists ("ddl" ); ! isEmptyValue (reflect .ValueOf (extraStatementsProp )) && (ok || ! reflect .DeepEqual (v , extraStatementsProp )) {
144162 obj ["extraStatements" ] = extraStatementsProp
145163 }
164+ encryptionConfigProp , err := expandSpannerDatabaseEncryptionConfig (d .Get ("encryption_config" ), d , config )
165+ if err != nil {
166+ return err
167+ } else if v , ok := d .GetOkExists ("encryption_config" ); ! isEmptyValue (reflect .ValueOf (encryptionConfigProp )) && (ok || ! reflect .DeepEqual (v , encryptionConfigProp )) {
168+ obj ["encryptionConfig" ] = encryptionConfigProp
169+ }
146170 instanceProp , err := expandSpannerDatabaseInstance (d .Get ("instance" ), d , config )
147171 if err != nil {
148172 return err
@@ -280,6 +304,9 @@ func resourceSpannerDatabaseRead(d *schema.ResourceData, meta interface{}) error
280304 if err := d .Set ("state" , flattenSpannerDatabaseState (res ["state" ], d , config )); err != nil {
281305 return fmt .Errorf ("Error reading Database: %s" , err )
282306 }
307+ if err := d .Set ("encryption_config" , flattenSpannerDatabaseEncryptionConfig (res ["encryptionConfig" ], d , config )); err != nil {
308+ return fmt .Errorf ("Error reading Database: %s" , err )
309+ }
283310 if err := d .Set ("instance" , flattenSpannerDatabaseInstance (res ["instance" ], d , config )); err != nil {
284311 return fmt .Errorf ("Error reading Database: %s" , err )
285312 }
@@ -434,6 +461,23 @@ func flattenSpannerDatabaseState(v interface{}, d *schema.ResourceData, config *
434461 return v
435462}
436463
464+ func flattenSpannerDatabaseEncryptionConfig (v interface {}, d * schema.ResourceData , config * Config ) interface {} {
465+ if v == nil {
466+ return nil
467+ }
468+ original := v .(map [string ]interface {})
469+ if len (original ) == 0 {
470+ return nil
471+ }
472+ transformed := make (map [string ]interface {})
473+ transformed ["kms_key_name" ] =
474+ flattenSpannerDatabaseEncryptionConfigKmsKeyName (original ["kmsKeyName" ], d , config )
475+ return []interface {}{transformed }
476+ }
477+ func flattenSpannerDatabaseEncryptionConfigKmsKeyName (v interface {}, d * schema.ResourceData , config * Config ) interface {} {
478+ return v
479+ }
480+
437481func flattenSpannerDatabaseInstance (v interface {}, d * schema.ResourceData , config * Config ) interface {} {
438482 if v == nil {
439483 return v
@@ -449,6 +493,29 @@ func expandSpannerDatabaseDdl(v interface{}, d TerraformResourceData, config *Co
449493 return v , nil
450494}
451495
496+ func expandSpannerDatabaseEncryptionConfig (v interface {}, d TerraformResourceData , config * Config ) (interface {}, error ) {
497+ l := v .([]interface {})
498+ if len (l ) == 0 || l [0 ] == nil {
499+ return nil , nil
500+ }
501+ raw := l [0 ]
502+ original := raw .(map [string ]interface {})
503+ transformed := make (map [string ]interface {})
504+
505+ transformedKmsKeyName , err := expandSpannerDatabaseEncryptionConfigKmsKeyName (original ["kms_key_name" ], d , config )
506+ if err != nil {
507+ return nil , err
508+ } else if val := reflect .ValueOf (transformedKmsKeyName ); val .IsValid () && ! isEmptyValue (val ) {
509+ transformed ["kmsKeyName" ] = transformedKmsKeyName
510+ }
511+
512+ return transformed , nil
513+ }
514+
515+ func expandSpannerDatabaseEncryptionConfigKmsKeyName (v interface {}, d TerraformResourceData , config * Config ) (interface {}, error ) {
516+ return v , nil
517+ }
518+
452519func expandSpannerDatabaseInstance (v interface {}, d TerraformResourceData , config * Config ) (interface {}, error ) {
453520 f , err := parseGlobalFieldValue ("instances" , v .(string ), "project" , d , config , true )
454521 if err != nil {
0 commit comments