@@ -162,10 +162,22 @@ whereas setting “enableDropProtection” to true protects the database from de
162
162
Schema : map [string ]* schema.Schema {
163
163
"kms_key_name" : {
164
164
Type : schema .TypeString ,
165
- Required : true ,
165
+ Optional : true ,
166
166
ForceNew : true ,
167
167
Description : `Fully qualified name of the KMS key to use to encrypt this database. This key must exist
168
168
in the same location as the Spanner Database.` ,
169
+ ExactlyOneOf : []string {"encryption_config.0.kms_key_name" , "encryption_config.0.kms_key_names" },
170
+ },
171
+ "kms_key_names" : {
172
+ Type : schema .TypeList ,
173
+ Optional : true ,
174
+ ForceNew : true ,
175
+ Description : `Fully qualified name of the KMS keys to use to encrypt this database. The keys must exist
176
+ in the same locations as the Spanner Database.` ,
177
+ Elem : & schema.Schema {
178
+ Type : schema .TypeString ,
179
+ },
180
+ ExactlyOneOf : []string {"encryption_config.0.kms_key_name" , "encryption_config.0.kms_key_names" },
169
181
},
170
182
},
171
183
},
@@ -821,12 +833,46 @@ func flattenSpannerDatabaseEncryptionConfig(v interface{}, d *schema.ResourceDat
821
833
transformed := make (map [string ]interface {})
822
834
transformed ["kms_key_name" ] =
823
835
flattenSpannerDatabaseEncryptionConfigKmsKeyName (original ["kmsKeyName" ], d , config )
836
+ transformed ["kms_key_names" ] =
837
+ flattenSpannerDatabaseEncryptionConfigKmsKeyNames (original ["kmsKeyNames" ], d , config )
824
838
return []interface {}{transformed }
825
839
}
826
840
func flattenSpannerDatabaseEncryptionConfigKmsKeyName (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
827
841
return v
828
842
}
829
843
844
+ func flattenSpannerDatabaseEncryptionConfigKmsKeyNames (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
845
+ // Ignore `kms_key_names` if `kms_key_name` is set, because that field takes precedence.
846
+ _ , kmsNameSet := d .GetOk ("encryption_config.0.kms_key_name" )
847
+ if kmsNameSet {
848
+ return nil
849
+ }
850
+
851
+ rawConfigValue := d .Get ("encryption_config.0.kms_key_names" )
852
+
853
+ // Convert config value to []string
854
+ configValue , err := tpgresource .InterfaceSliceToStringSlice (rawConfigValue )
855
+ if err != nil {
856
+ log .Printf ("[ERROR] Failed to convert config value: %s" , err )
857
+ return v
858
+ }
859
+
860
+ // Convert v to []string
861
+ apiStringValue , err := tpgresource .InterfaceSliceToStringSlice (v )
862
+ if err != nil {
863
+ log .Printf ("[ERROR] Failed to convert API value: %s" , err )
864
+ return v
865
+ }
866
+
867
+ sortedStrings , err := tpgresource .SortStringsByConfigOrder (configValue , apiStringValue )
868
+ if err != nil {
869
+ log .Printf ("[ERROR] Could not sort API response value: %s" , err )
870
+ return v
871
+ }
872
+
873
+ return sortedStrings
874
+ }
875
+
830
876
func flattenSpannerDatabaseDatabaseDialect (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
831
877
return v
832
878
}
@@ -870,13 +916,24 @@ func expandSpannerDatabaseEncryptionConfig(v interface{}, d tpgresource.Terrafor
870
916
transformed ["kmsKeyName" ] = transformedKmsKeyName
871
917
}
872
918
919
+ transformedKmsKeyNames , err := expandSpannerDatabaseEncryptionConfigKmsKeyNames (original ["kms_key_names" ], d , config )
920
+ if err != nil {
921
+ return nil , err
922
+ } else if val := reflect .ValueOf (transformedKmsKeyNames ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
923
+ transformed ["kmsKeyNames" ] = transformedKmsKeyNames
924
+ }
925
+
873
926
return transformed , nil
874
927
}
875
928
876
929
func expandSpannerDatabaseEncryptionConfigKmsKeyName (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
877
930
return v , nil
878
931
}
879
932
933
+ func expandSpannerDatabaseEncryptionConfigKmsKeyNames (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
934
+ return v , nil
935
+ }
936
+
880
937
func expandSpannerDatabaseDatabaseDialect (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
881
938
return v , nil
882
939
}
0 commit comments