Skip to content

Commit a568517

Browse files
Add beta support for confidentialInstanceType (#9847) (#6934)
[upstream:93c04702df55bbf553790ee2720d46166f6501ae] Signed-off-by: Modular Magician <[email protected]>
1 parent 8f093d3 commit a568517

11 files changed

+422
-37
lines changed

.changelog/9847.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
compute: added `confidential_instance_config.confidential_instance_type` field to `google_compute_instance`, `google_compute_instance_template`, and `google_compute_region_instance_template` resources (beta)
3+
```

google-beta/services/compute/compute_instance_helpers.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -544,16 +544,20 @@ func expandConfidentialInstanceConfig(d tpgresource.TerraformResourceData) *comp
544544
prefix := "confidential_instance_config.0"
545545
return &compute.ConfidentialInstanceConfig{
546546
EnableConfidentialCompute: d.Get(prefix + ".enable_confidential_compute").(bool),
547+
548+
ConfidentialInstanceType: d.Get(prefix + ".confidential_instance_type").(string),
547549
}
548550
}
549551

550-
func flattenConfidentialInstanceConfig(ConfidentialInstanceConfig *compute.ConfidentialInstanceConfig) []map[string]bool {
552+
func flattenConfidentialInstanceConfig(ConfidentialInstanceConfig *compute.ConfidentialInstanceConfig) []map[string]interface{} {
551553
if ConfidentialInstanceConfig == nil {
552554
return nil
553555
}
554556

555-
return []map[string]bool{{
557+
return []map[string]interface{}{{
556558
"enable_confidential_compute": ConfidentialInstanceConfig.EnableConfidentialCompute,
559+
560+
"confidential_instance_type": ConfidentialInstanceConfig.ConfidentialInstanceType,
557561
}}
558562
}
559563

google-beta/services/compute/resource_compute_instance.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -981,10 +981,21 @@ be from 0 to 999,999,999 inclusive.`,
981981
Description: `The Confidential VM config being used by the instance. on_host_maintenance has to be set to TERMINATE or this will fail to create.`,
982982
Elem: &schema.Resource{
983983
Schema: map[string]*schema.Schema{
984+
984985
"enable_confidential_compute": {
985-
Type: schema.TypeBool,
986-
Required: true,
987-
Description: `Defines whether the instance should have confidential compute enabled.`,
986+
Type: schema.TypeBool,
987+
Optional: true,
988+
Description: `Defines whether the instance should have confidential compute enabled. Field will be deprecated in a future release`,
989+
AtLeastOneOf: []string{"confidential_instance_config.0.enable_confidential_compute", "confidential_instance_config.0.confidential_instance_type"},
990+
},
991+
"confidential_instance_type": {
992+
Type: schema.TypeString,
993+
Optional: true,
994+
Description: `
995+
Specifies which confidential computing technology to use.
996+
This could be one of the following values: SEV, SEV_SNP.
997+
If SEV_SNP, min_cpu_platform = "AMD Milan" is currently required.`,
998+
AtLeastOneOf: []string{"confidential_instance_config.0.enable_confidential_compute", "confidential_instance_config.0.confidential_instance_type"},
988999
},
9891000
},
9901001
},

google-beta/services/compute/resource_compute_instance_template.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -858,11 +858,23 @@ be from 0 to 999,999,999 inclusive.`,
858858
Description: `The Confidential VM config being used by the instance. on_host_maintenance has to be set to TERMINATE or this will fail to create.`,
859859
Elem: &schema.Resource{
860860
Schema: map[string]*schema.Schema{
861+
861862
"enable_confidential_compute": {
862-
Type: schema.TypeBool,
863-
Required: true,
864-
ForceNew: true,
865-
Description: `Defines whether the instance should have confidential compute enabled.`,
863+
Type: schema.TypeBool,
864+
Optional: true,
865+
ForceNew: true,
866+
Description: `Defines whether the instance should have confidential compute enabled. Field will be deprecated in a future release.`,
867+
AtLeastOneOf: []string{"confidential_instance_config.0.enable_confidential_compute", "confidential_instance_config.0.confidential_instance_type"},
868+
},
869+
"confidential_instance_type": {
870+
Type: schema.TypeString,
871+
Optional: true,
872+
ForceNew: true,
873+
Description: `
874+
Specifies which confidential computing technology to use.
875+
This could be one of the following values: SEV, SEV_SNP.
876+
If SEV_SNP, min_cpu_platform = "AMD Milan" is currently required.`,
877+
AtLeastOneOf: []string{"confidential_instance_config.0.enable_confidential_compute", "confidential_instance_config.0.confidential_instance_type"},
866878
},
867879
},
868880
},

google-beta/services/compute/resource_compute_instance_template_test.go

Lines changed: 118 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -767,16 +767,31 @@ func TestAccComputeInstanceTemplate_ConfidentialInstanceConfigMain(t *testing.T)
767767

768768
var instanceTemplate compute.InstanceTemplate
769769

770+
var instanceTemplate2 compute.InstanceTemplate
771+
770772
acctest.VcrTest(t, resource.TestCase{
771773
PreCheck: func() { acctest.AccTestPreCheck(t) },
772774
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
773775
CheckDestroy: testAccCheckComputeInstanceTemplateDestroyProducer(t),
774776
Steps: []resource.TestStep{
775777
{
776-
Config: testAccComputeInstanceTemplateConfidentialInstanceConfig(acctest.RandString(t, 10), true),
778+
Config: testAccComputeInstanceTemplateConfidentialInstanceConfigEnable(acctest.RandString(t, 10), "SEV"),
777779
Check: resource.ComposeTestCheckFunc(
778780
testAccCheckComputeInstanceTemplateExists(t, "google_compute_instance_template.foobar", &instanceTemplate),
779-
testAccCheckComputeInstanceTemplateHasConfidentialInstanceConfig(&instanceTemplate, true),
781+
testAccCheckComputeInstanceTemplateHasConfidentialInstanceConfig(&instanceTemplate, true, "SEV"),
782+
783+
testAccCheckComputeInstanceTemplateExists(t, "google_compute_instance_template.foobar2", &instanceTemplate2),
784+
testAccCheckComputeInstanceTemplateHasConfidentialInstanceConfig(&instanceTemplate2, true, ""),
785+
),
786+
},
787+
788+
{
789+
Config: testAccComputeInstanceTemplateConfidentialInstanceConfigNoEnable(acctest.RandString(t, 10), "AMD Milan", "SEV_SNP"),
790+
Check: resource.ComposeTestCheckFunc(
791+
testAccCheckComputeInstanceTemplateExists(t, "google_compute_instance_template.foobar3", &instanceTemplate),
792+
testAccCheckComputeInstanceTemplateHasConfidentialInstanceConfig(&instanceTemplate, false, "SEV_SNP"),
793+
testAccCheckComputeInstanceTemplateExists(t, "google_compute_instance_template.foobar4", &instanceTemplate2),
794+
testAccCheckComputeInstanceTemplateHasConfidentialInstanceConfig(&instanceTemplate2, false, "SEV_SNP"),
780795
),
781796
},
782797
},
@@ -1754,13 +1769,17 @@ func testAccCheckComputeInstanceTemplateHasShieldedVmConfig(instanceTemplate *co
17541769
}
17551770
}
17561771

1757-
func testAccCheckComputeInstanceTemplateHasConfidentialInstanceConfig(instanceTemplate *compute.InstanceTemplate, EnableConfidentialCompute bool) resource.TestCheckFunc {
1772+
func testAccCheckComputeInstanceTemplateHasConfidentialInstanceConfig(instanceTemplate *compute.InstanceTemplate, EnableConfidentialCompute bool, ConfidentialInstanceType string) resource.TestCheckFunc {
17581773

17591774
return func(s *terraform.State) error {
17601775
if instanceTemplate.Properties.ConfidentialInstanceConfig.EnableConfidentialCompute != EnableConfidentialCompute {
17611776
return fmt.Errorf("Wrong ConfidentialInstanceConfig EnableConfidentialCompute: expected %t, got, %t", EnableConfidentialCompute, instanceTemplate.Properties.ConfidentialInstanceConfig.EnableConfidentialCompute)
17621777
}
17631778

1779+
if instanceTemplate.Properties.ConfidentialInstanceConfig.ConfidentialInstanceType != ConfidentialInstanceType {
1780+
return fmt.Errorf("Wrong ConfidentialInstanceConfig ConfidentialInstanceType: expected %s, got, %s", ConfidentialInstanceType, instanceTemplate.Properties.ConfidentialInstanceConfig.ConfidentialInstanceType)
1781+
}
1782+
17641783
return nil
17651784
}
17661785
}
@@ -3055,7 +3074,7 @@ resource "google_compute_instance_template" "foobar" {
30553074
`, suffix, enableSecureBoot, enableVtpm, enableIntegrityMonitoring)
30563075
}
30573076

3058-
func testAccComputeInstanceTemplateConfidentialInstanceConfig(suffix string, enableConfidentialCompute bool) string {
3077+
func testAccComputeInstanceTemplateConfidentialInstanceConfigEnable(suffix string, confidentialInstanceType string) string {
30593078
return fmt.Sprintf(`
30603079
data "google_compute_image" "my_image" {
30613080
family = "ubuntu-2004-lts"
@@ -3068,7 +3087,7 @@ resource "google_compute_instance_template" "foobar" {
30683087
30693088
disk {
30703089
source_image = data.google_compute_image.my_image.self_link
3071-
auto_delete = true
3090+
auto_delete = true
30723091
boot = true
30733092
}
30743093
@@ -3077,15 +3096,106 @@ resource "google_compute_instance_template" "foobar" {
30773096
}
30783097
30793098
confidential_instance_config {
3080-
enable_confidential_compute = %t
3099+
enable_confidential_compute = true
3100+
3101+
confidential_instance_type = %q
3102+
30813103
}
30823104
30833105
scheduling {
3084-
on_host_maintenance = "TERMINATE"
3106+
on_host_maintenance = "TERMINATE"
3107+
}
3108+
3109+
}
3110+
3111+
resource "google_compute_instance_template" "foobar2" {
3112+
name = "tf-test-instance2-template-%s"
3113+
machine_type = "n2d-standard-2"
3114+
3115+
disk {
3116+
source_image = data.google_compute_image.my_image.self_link
3117+
auto_delete = true
3118+
boot = true
3119+
}
3120+
3121+
network_interface {
3122+
network = "default"
3123+
}
3124+
3125+
confidential_instance_config {
3126+
enable_confidential_compute = true
3127+
}
3128+
3129+
scheduling {
3130+
on_host_maintenance = "TERMINATE"
3131+
}
3132+
3133+
}
3134+
3135+
3136+
`, suffix, confidentialInstanceType, suffix)
3137+
3138+
}
3139+
3140+
func testAccComputeInstanceTemplateConfidentialInstanceConfigNoEnable(suffix string, minCpuPlatform, confidentialInstanceType string) string {
3141+
return fmt.Sprintf(`
3142+
data "google_compute_image" "my_image2" {
3143+
family = "ubuntu-2004-lts"
3144+
project = "ubuntu-os-cloud"
3145+
}
3146+
3147+
resource "google_compute_instance_template" "foobar3" {
3148+
name = "tf-test-instance3-template-%s"
3149+
machine_type = "n2d-standard-2"
3150+
3151+
disk {
3152+
source_image = data.google_compute_image.my_image2.self_link
3153+
auto_delete = true
3154+
boot = true
3155+
}
3156+
3157+
network_interface {
3158+
network = "default"
3159+
}
3160+
3161+
min_cpu_platform = %q
3162+
3163+
confidential_instance_config {
3164+
enable_confidential_compute = false
3165+
confidential_instance_type = %q
3166+
}
3167+
3168+
scheduling {
3169+
on_host_maintenance = "TERMINATE"
3170+
}
3171+
3172+
}
3173+
resource "google_compute_instance_template" "foobar4" {
3174+
name = "tf-test-instance4-template-%s"
3175+
machine_type = "n2d-standard-2"
3176+
3177+
disk {
3178+
source_image = data.google_compute_image.my_image2.self_link
3179+
auto_delete = true
3180+
boot = true
3181+
}
3182+
3183+
network_interface {
3184+
network = "default"
3185+
}
3186+
3187+
min_cpu_platform = %q
3188+
3189+
confidential_instance_config {
3190+
confidential_instance_type = %q
3191+
}
3192+
3193+
scheduling {
3194+
on_host_maintenance = "TERMINATE"
30853195
}
30863196
30873197
}
3088-
`, suffix, enableConfidentialCompute)
3198+
`, suffix, minCpuPlatform, confidentialInstanceType, suffix, minCpuPlatform, confidentialInstanceType)
30893199
}
30903200

30913201
func testAccComputeInstanceTemplateAdvancedMachineFeatures(suffix string) string {

0 commit comments

Comments
 (0)