Skip to content

Commit a60ff03

Browse files
Add missing fields to compute resources [KMS and disks] (#12672) (#21416)
[upstream:d7f8e8a5a42907f8a0e072fb585c92ef9b32335a] Signed-off-by: Modular Magician <[email protected]>
1 parent e207aad commit a60ff03

20 files changed

+2227
-58
lines changed

.changelog/12672.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
```release-note:enhancement
2+
compute: added several `boot_disk`, `attached_disk`, and `instance_encryption_key` fields for improved encryption key support in `google_compute_instance` and template resources
3+
```
4+
```release-note:enhancement
5+
compute: added support for `image_encryption_key.raw_key` and ` image_encryption_key.rsa_encrypted_key` to `google_compute_image` resource
6+
```
7+
```release-note:enhancement
8+
compute: added support for `snapshot_encryption_key.rsa_encrypted_key` to `google_compute_snapshot` resource
9+
```

google/services/compute/compute_instance_helpers.go

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -822,3 +822,89 @@ func flattenNetworkPerformanceConfig(c *compute.NetworkPerformanceConfig) []map[
822822
},
823823
}
824824
}
825+
826+
func flattenComputeInstanceGuestOsFeatures(v interface{}) []interface{} {
827+
if v == nil {
828+
return nil
829+
}
830+
features, ok := v.([]*compute.GuestOsFeature)
831+
if !ok {
832+
return nil
833+
}
834+
var result []interface{}
835+
for _, feature := range features {
836+
if feature != nil && feature.Type != "" {
837+
result = append(result, feature.Type)
838+
}
839+
}
840+
return result
841+
}
842+
843+
func expandComputeInstanceGuestOsFeatures(v interface{}) []*compute.GuestOsFeature {
844+
if v == nil {
845+
return nil
846+
}
847+
var result []*compute.GuestOsFeature
848+
for _, feature := range v.([]interface{}) {
849+
result = append(result, &compute.GuestOsFeature{Type: feature.(string)})
850+
}
851+
return result
852+
}
853+
854+
func expandComputeInstanceEncryptionKey(d tpgresource.TerraformResourceData) *compute.CustomerEncryptionKey {
855+
iek, ok := d.GetOk("instance_encryption_key")
856+
if !ok {
857+
return nil
858+
}
859+
860+
iekRes := iek.([]interface{})[0].(map[string]interface{})
861+
return &compute.CustomerEncryptionKey{
862+
KmsKeyName: iekRes["kms_key_self_link"].(string),
863+
Sha256: iekRes["sha256"].(string),
864+
KmsKeyServiceAccount: iekRes["kms_key_service_account"].(string),
865+
}
866+
}
867+
868+
func flattenComputeInstanceEncryptionKey(v *compute.CustomerEncryptionKey) []map[string]interface{} {
869+
if v == nil {
870+
return nil
871+
}
872+
return []map[string]interface{}{
873+
{
874+
"kms_key_self_link": v.KmsKeyName,
875+
"sha256": v.Sha256,
876+
"kms_key_service_account": v.KmsKeyServiceAccount,
877+
},
878+
}
879+
}
880+
881+
func expandComputeInstanceSourceEncryptionKey(d tpgresource.TerraformResourceData, field string) *compute.CustomerEncryptionKey {
882+
cek, ok := d.GetOk(field)
883+
if !ok {
884+
return nil
885+
}
886+
887+
cekRes := cek.([]interface{})[0].(map[string]interface{})
888+
return &compute.CustomerEncryptionKey{
889+
RsaEncryptedKey: cekRes["rsa_encrypted_key"].(string),
890+
RawKey: cekRes["raw_key"].(string),
891+
KmsKeyName: cekRes["kms_key_self_link"].(string),
892+
Sha256: cekRes["sha256"].(string),
893+
KmsKeyServiceAccount: cekRes["kms_key_service_account"].(string),
894+
}
895+
}
896+
897+
func flattenComputeInstanceSourceEncryptionKey(v *compute.CustomerEncryptionKey) []map[string]interface{} {
898+
if v == nil {
899+
return nil
900+
}
901+
return []map[string]interface{}{
902+
{
903+
"rsa_encrypted_key": v.RsaEncryptedKey,
904+
"raw_key": v.RawKey,
905+
"kms_key_self_link": v.KmsKeyName,
906+
"sha256": v.Sha256,
907+
"kms_key_service_account": v.KmsKeyServiceAccount,
908+
},
909+
}
910+
}

google/services/compute/resource_compute_image.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,22 @@ KMS.`,
130130
given KMS key. If absent, the Compute Engine default service
131131
account is used.`,
132132
},
133+
"raw_key": {
134+
Type: schema.TypeString,
135+
Optional: true,
136+
ForceNew: true,
137+
Description: `Specifies a 256-bit customer-supplied encryption key, encoded in
138+
RFC 4648 base64 to either encrypt or decrypt this resource.`,
139+
Sensitive: true,
140+
},
141+
"rsa_encrypted_key": {
142+
Type: schema.TypeString,
143+
Optional: true,
144+
ForceNew: true,
145+
Description: `Specifies a 256-bit customer-supplied encryption key, encoded in
146+
RFC 4648 base64 to either encrypt or decrypt this resource.`,
147+
Sensitive: true,
148+
},
133149
},
134150
},
135151
},
@@ -782,6 +798,10 @@ func flattenComputeImageImageEncryptionKey(v interface{}, d *schema.ResourceData
782798
flattenComputeImageImageEncryptionKeyKmsKeySelfLink(original["kmsKeyName"], d, config)
783799
transformed["kms_key_service_account"] =
784800
flattenComputeImageImageEncryptionKeyKmsKeyServiceAccount(original["kmsKeyServiceAccount"], d, config)
801+
transformed["raw_key"] =
802+
flattenComputeImageImageEncryptionKeyRawKey(original["rawKey"], d, config)
803+
transformed["rsa_encrypted_key"] =
804+
flattenComputeImageImageEncryptionKeyRsaEncryptedKey(original["rsaEncryptedKey"], d, config)
785805
return []interface{}{transformed}
786806
}
787807
func flattenComputeImageImageEncryptionKeyKmsKeySelfLink(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
@@ -796,6 +816,14 @@ func flattenComputeImageImageEncryptionKeyKmsKeyServiceAccount(v interface{}, d
796816
return v
797817
}
798818

819+
func flattenComputeImageImageEncryptionKeyRawKey(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
820+
return d.Get("image_encryption_key.0.raw_key")
821+
}
822+
823+
func flattenComputeImageImageEncryptionKeyRsaEncryptedKey(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
824+
return d.Get("image_encryption_key.0.rsa_encrypted_key")
825+
}
826+
799827
func flattenComputeImageLabels(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
800828
if v == nil {
801829
return v
@@ -932,6 +960,20 @@ func expandComputeImageImageEncryptionKey(v interface{}, d tpgresource.Terraform
932960
transformed["kmsKeyServiceAccount"] = transformedKmsKeyServiceAccount
933961
}
934962

963+
transformedRawKey, err := expandComputeImageImageEncryptionKeyRawKey(original["raw_key"], d, config)
964+
if err != nil {
965+
return nil, err
966+
} else if val := reflect.ValueOf(transformedRawKey); val.IsValid() && !tpgresource.IsEmptyValue(val) {
967+
transformed["rawKey"] = transformedRawKey
968+
}
969+
970+
transformedRsaEncryptedKey, err := expandComputeImageImageEncryptionKeyRsaEncryptedKey(original["rsa_encrypted_key"], d, config)
971+
if err != nil {
972+
return nil, err
973+
} else if val := reflect.ValueOf(transformedRsaEncryptedKey); val.IsValid() && !tpgresource.IsEmptyValue(val) {
974+
transformed["rsaEncryptedKey"] = transformedRsaEncryptedKey
975+
}
976+
935977
return transformed, nil
936978
}
937979

@@ -943,6 +985,14 @@ func expandComputeImageImageEncryptionKeyKmsKeyServiceAccount(v interface{}, d t
943985
return v, nil
944986
}
945987

988+
func expandComputeImageImageEncryptionKeyRawKey(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
989+
return v, nil
990+
}
991+
992+
func expandComputeImageImageEncryptionKeyRsaEncryptedKey(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
993+
return v, nil
994+
}
995+
946996
func expandComputeImageLabelFingerprint(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
947997
return v, nil
948998
}

google/services/compute/resource_compute_image_generated_meta.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ fields:
1616
- field: 'image_encryption_key.kms_key_self_link'
1717
api_field: 'image_encryption_key.kms_key_name'
1818
- field: 'image_encryption_key.kms_key_service_account'
19+
- field: 'image_encryption_key.raw_key'
20+
- field: 'image_encryption_key.rsa_encrypted_key'
1921
- field: 'label_fingerprint'
2022
- field: 'labels'
2123
- field: 'licenses'

google/services/compute/resource_compute_image_generated_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func TestAccComputeImage_imageBasicExample(t *testing.T) {
4949
ResourceName: "google_compute_image.example",
5050
ImportState: true,
5151
ImportStateVerify: true,
52-
ImportStateVerifyIgnore: []string{"labels", "raw_disk", "source_disk", "source_image", "source_snapshot", "terraform_labels"},
52+
ImportStateVerifyIgnore: []string{"image_encryption_key.0.raw_key", "image_encryption_key.0.rsa_encrypted_key", "labels", "raw_disk", "source_disk", "source_image", "source_snapshot", "terraform_labels"},
5353
},
5454
},
5555
})
@@ -97,7 +97,7 @@ func TestAccComputeImage_imageGuestOsExample(t *testing.T) {
9797
ResourceName: "google_compute_image.example",
9898
ImportState: true,
9999
ImportStateVerify: true,
100-
ImportStateVerifyIgnore: []string{"labels", "raw_disk", "source_disk", "source_image", "source_snapshot", "terraform_labels"},
100+
ImportStateVerifyIgnore: []string{"image_encryption_key.0.raw_key", "image_encryption_key.0.rsa_encrypted_key", "labels", "raw_disk", "source_disk", "source_image", "source_snapshot", "terraform_labels"},
101101
},
102102
},
103103
})
@@ -165,7 +165,7 @@ func TestAccComputeImage_imageBasicStorageLocationExample(t *testing.T) {
165165
ResourceName: "google_compute_image.example",
166166
ImportState: true,
167167
ImportStateVerify: true,
168-
ImportStateVerifyIgnore: []string{"labels", "raw_disk", "source_disk", "source_image", "source_snapshot", "terraform_labels"},
168+
ImportStateVerifyIgnore: []string{"image_encryption_key.0.raw_key", "image_encryption_key.0.rsa_encrypted_key", "labels", "raw_disk", "source_disk", "source_image", "source_snapshot", "terraform_labels"},
169169
},
170170
},
171171
})

0 commit comments

Comments
 (0)