Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added boot_disk_kms_key to node_config #1736

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .changelog/3044.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:enhancement
container: added `boot_disk_kms_key` to `node_config` block.
```
1 change: 0 additions & 1 deletion google-beta/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ import (
"google.golang.org/api/serviceusage/v1"
"google.golang.org/api/sourcerepo/v1"
"google.golang.org/api/spanner/v1"
sqladmin "google.golang.org/api/sqladmin/v1beta4"
"google.golang.org/api/storage/v1"
"google.golang.org/api/storagetransfer/v1"
)
Expand Down
12 changes: 12 additions & 0 deletions google-beta/node_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,13 @@ var schemaNodeConfig = &schema.Schema{
},
},
},
"boot_disk_kms_key": {
Removed: "This field is in beta. Use it in the the google-beta provider instead. See https://terraform.io/docs/providers/google/guides/provider_versions.html for more details.",
Computed: true,
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
},
},
}
Expand Down Expand Up @@ -369,6 +376,10 @@ func expandNodeConfig(v interface{}) *containerBeta.NodeConfig {
}
}

if v, ok := nodeConfig["boot_disk_kms_key"]; ok {
nc.BootDiskKmsKey = v.(string)
}

return nc
}

Expand Down Expand Up @@ -396,6 +407,7 @@ func flattenNodeConfig(c *containerBeta.NodeConfig) []map[string]interface{} {
"taint": flattenTaints(c.Taints),
"workload_metadata_config": flattenWorkloadMetadataConfig(c.WorkloadMetadataConfig),
"sandbox_config": flattenSandboxConfig(c.SandboxConfig),
"boot_disk_kms_key": c.BootDiskKmsKey,
})

if len(c.OauthScopes) > 0 {
Expand Down
70 changes: 70 additions & 0 deletions google-beta/resource_container_cluster_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -826,6 +826,29 @@ func TestAccContainerCluster_withSandboxConfig(t *testing.T) {
})
}

func TestAccContainerCluster_withBootDiskKmsKey(t *testing.T) {
t.Parallel()

clusterName := fmt.Sprintf("tf-test-cluster-%s", acctest.RandString(10))

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckContainerClusterDestroy,
Steps: []resource.TestStep{
{
Config: testAccContainerCluster_withBootDiskKmsKey(getTestProjectFromEnv(), clusterName),
},
{
ResourceName: "google_container_cluster.with_boot_disk_kms_key",
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"min_master_version"},
},
},
})
}

func TestAccContainerCluster_network(t *testing.T) {
t.Parallel()

Expand Down Expand Up @@ -2556,6 +2579,53 @@ resource "google_container_cluster" "with_sandbox_config" {
`, clusterName)
}

func testAccContainerCluster_withBootDiskKmsKey(project, clusterName string) string {
return fmt.Sprintf(`
data "google_container_engine_versions" "central1a" {
location = "us-central1-a"
}

data "google_project" "project" {
project_id = "%s"
}

resource "google_project_iam_member" "kms-project-binding" {
project = data.google_project.project.project_id
role = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
member = "serviceAccount:service-${data.google_project.project.number}@compute-system.iam.gserviceaccount.com"
}

resource "google_kms_key_ring" "keyring" {
name = "%s-kms-key-ring"
location = "us-central1"
}

resource "google_kms_crypto_key" "example-key" {
name = "%s-kms-key"
key_ring = google_kms_key_ring.keyring.self_link
rotation_period = "100000s"
}

resource "google_container_cluster" "with_boot_disk_kms_key" {
name = "%s"
location = "us-central1-a"
initial_node_count = 1
min_master_version = data.google_container_engine_versions.central1a.latest_master_version

node_config {
oauth_scopes = [
"https://www.googleapis.com/auth/logging.write",
"https://www.googleapis.com/auth/monitoring",
]

image_type = "COS_CONTAINERD"

boot_disk_kms_key = google_kms_crypto_key.example-key.self_link
}
}
`, project, clusterName, clusterName, clusterName)
}

func testAccContainerCluster_networkRef(cluster, network string) string {
return fmt.Sprintf(`
resource "google_compute_network" "container_network" {
Expand Down
75 changes: 75 additions & 0 deletions google-beta/resource_container_node_pool_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,29 @@ func TestAccContainerNodePool_withSandboxConfig(t *testing.T) {
})
}

func TestAccContainerNodePool_withBootDiskKmsKey(t *testing.T) {
t.Parallel()

cluster := fmt.Sprintf("tf-test-cluster-%s", acctest.RandString(10))
np := fmt.Sprintf("tf-test-np-%s", acctest.RandString(10))

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckContainerClusterDestroy,
Steps: []resource.TestStep{
{
Config: testAccContainerNodePool_withBootDiskKmsKey(getTestProjectFromEnv(), cluster, np),
},
{
ResourceName: "google_container_node_pool.with_boot_disk_kms_key",
ImportState: true,
ImportStateVerify: true,
},
},
})
}

func TestAccContainerNodePool_withUpgradeSettings(t *testing.T) {
t.Parallel()

Expand Down Expand Up @@ -1246,6 +1269,58 @@ resource "google_container_node_pool" "with_sandbox_config" {
`, cluster, np)
}

func testAccContainerNodePool_withBootDiskKmsKey(project, cluster, np string) string {
return fmt.Sprintf(`
data "google_container_engine_versions" "central1a" {
location = "us-central1-a"
}

data "google_project" "project" {
project_id = "%s"
}

resource "google_project_iam_member" "kms-project-binding" {
project = data.google_project.project.project_id
role = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
member = "serviceAccount:service-${data.google_project.project.number}@compute-system.iam.gserviceaccount.com"
}

resource "google_kms_key_ring" "keyring" {
name = "%s-kms-key-ring"
location = "us-central1"
}

resource "google_kms_crypto_key" "example-key" {
name = "%s-kms-key"
key_ring = google_kms_key_ring.keyring.self_link
rotation_period = "100000s"
}

resource "google_container_cluster" "cluster" {
name = "%s"
location = "us-central1-a"
initial_node_count = 1
min_master_version = data.google_container_engine_versions.central1a.latest_master_version
}

resource "google_container_node_pool" "with_boot_disk_kms_key" {
name = "%s"
location = "us-central1-a"
cluster = google_container_cluster.cluster.name
initial_node_count = 1

node_config {
image_type = "COS_CONTAINERD"
boot_disk_kms_key = google_kms_crypto_key.example-key.self_link
oauth_scopes = [
"https://www.googleapis.com/auth/logging.write",
"https://www.googleapis.com/auth/monitoring",
]
}
}
`, project, cluster, cluster, cluster, np)
}

func testAccContainerNodePool_withUpgradeSettings(clusterName string, nodePoolName string, maxSurge int, maxUnavailable int) string {
return fmt.Sprintf(`
data "google_container_engine_versions" "central1" {
Expand Down
9 changes: 3 additions & 6 deletions google-beta/resource_sql_database_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/helper/validation"

"google.golang.org/api/googleapi"
sqladmin "google.golang.org/api/sqladmin/v1beta4"
)

Expand Down Expand Up @@ -635,7 +634,7 @@ func resourceSqlDatabaseInstanceCreate(d *schema.ResourceData, meta interface{})
for _, u := range users.Items {
if u.Name == "root" && u.Host == "%" {
err = retry(func() error {
op, err = config.clientSqlAdmin.Users.Delete(project, instance.Name, u.Host, u.Name).Do()
op, err = config.clientSqlAdmin.Users.Delete(project, instance.Name).Do()
if err == nil {
err = sqlAdminOperationWaitTime(config, op, project, "Delete default root User", int(d.Timeout(schema.TimeoutCreate).Minutes()))
}
Expand Down Expand Up @@ -681,7 +680,7 @@ func expandSqlDatabaseInstanceSettings(configured []interface{}, secondGen bool)
// 1st Generation instances don't support the disk_autoresize parameter
// and it defaults to true - so we shouldn't set it if this is first gen
if secondGen {
settings.StorageAutoResize = googleapi.Bool(_settings["disk_autoresize"].(bool))
settings.StorageAutoResize = _settings["disk_autoresize"].(bool)
}

return settings
Expand Down Expand Up @@ -995,9 +994,7 @@ func flattenSettings(settings *sqladmin.Settings) []map[string]interface{} {
data["maintenance_window"] = flattenMaintenanceWindow(settings.MaintenanceWindow)
}

if settings.StorageAutoResize != nil {
data["disk_autoresize"] = *settings.StorageAutoResize
}
data["disk_autoresize"] = settings.StorageAutoResize

if settings.UserLabels != nil {
data["user_labels"] = settings.UserLabels
Expand Down
5 changes: 2 additions & 3 deletions google-beta/resource_sql_user.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ func resourceSqlUserUpdate(d *schema.ResourceData, meta interface{}) error {
defer mutexKV.Unlock(instanceMutexKey(project, instance))
var op *sqladmin.Operation
updateFunc := func() error {
op, err = config.clientSqlAdmin.Users.Update(project, instance, name,
op, err = config.clientSqlAdmin.Users.Update(project, instance,
user).Host(host).Do()
return err
}
Expand Down Expand Up @@ -213,14 +213,13 @@ func resourceSqlUserDelete(d *schema.ResourceData, meta interface{}) error {

name := d.Get("name").(string)
instance := d.Get("instance").(string)
host := d.Get("host").(string)

mutexKV.Lock(instanceMutexKey(project, instance))
defer mutexKV.Unlock(instanceMutexKey(project, instance))

var op *sqladmin.Operation
err = retryTimeDuration(func() error {
op, err = config.clientSqlAdmin.Users.Delete(project, instance, host, name).Do()
op, err = config.clientSqlAdmin.Users.Delete(project, instance).Do()
return err
}, d.Timeout(schema.TimeoutDelete))

Expand Down
2 changes: 2 additions & 0 deletions website/docs/r/container_cluster.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -553,6 +553,8 @@ The `node_config` block supports:
* `sandbox_config` - (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it.
Structure is documented below.

* `boot_disk_kms_key` - (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption

* `service_account` - (Optional) The service account to be used by the Node VMs.
If not specified, the "default" service account is used.
In order to use the configured `oauth_scopes` for logging and monitoring, the service account being used needs the
Expand Down