Skip to content

Commit

Permalink
Add support for policy_name field in Placement Policy (#8475) (#15367)
Browse files Browse the repository at this point in the history
Signed-off-by: Modular Magician <[email protected]>
  • Loading branch information
modular-magician authored Aug 1, 2023
1 parent b592f18 commit 31fadcf
Show file tree
Hide file tree
Showing 5 changed files with 139 additions and 2 deletions.
3 changes: 3 additions & 0 deletions .changelog/8475.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:enhancement
container: added `placement_policy.policy_name` field to `google_container_node_pool` resource
```
60 changes: 60 additions & 0 deletions google/resource_container_cluster_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6653,3 +6653,63 @@ resource "google_container_cluster" "primary" {
min_master_version = 1.27
}`, name, enabled)
}

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

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

acctest.VcrTest(t, resource.TestCase{
PreCheck: func() { acctest.AccTestPreCheck(t) },
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
CheckDestroy: testAccCheckContainerNodePoolDestroyProducer(t),
Steps: []resource.TestStep{
{
Config: testAccContainerCluster_customPlacementPolicy(cluster, np, policy),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_pool.0.placement_policy.0.type", "COMPACT"),
resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_pool.0.placement_policy.0.policy_name", policy),
resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_pool.0.node_config.0.machine_type", "c2-standard-4"),
),
},
{
ResourceName: "google_container_cluster.cluster",
ImportState: true,
ImportStateVerify: true,
},
},
})
}

func testAccContainerCluster_customPlacementPolicy(cluster, np, policyName string) string {
return fmt.Sprintf(`
resource "google_compute_resource_policy" "policy" {
name = "%s"
region = "us-central1"
group_placement_policy {
collocation = "COLLOCATED"
}
}
resource "google_container_cluster" "cluster" {
name = "%s"
location = "us-central1-a"
node_pool {
name = "%s"
initial_node_count = 2
node_config {
machine_type = "c2-standard-4"
}
placement_policy {
type = "COMPACT"
policy_name = google_compute_resource_policy.policy.name
}
}
}`, policyName, cluster, np)
}
62 changes: 62 additions & 0 deletions google/resource_container_node_pool_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1392,6 +1392,68 @@ resource "google_container_node_pool" "np" {
`, cluster, np, placementType)
}

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

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

acctest.VcrTest(t, resource.TestCase{
PreCheck: func() { acctest.AccTestPreCheck(t) },
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
CheckDestroy: testAccCheckContainerNodePoolDestroyProducer(t),
Steps: []resource.TestStep{
{
Config: testAccContainerNodePool_customPlacementPolicy(cluster, np, policy),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("google_container_node_pool.np", "node_config.0.machine_type", "c2-standard-4"),
resource.TestCheckResourceAttr("google_container_node_pool.np", "placement_policy.0.policy_name", policy),
resource.TestCheckResourceAttr("google_container_node_pool.np", "placement_policy.0.type", "COMPACT"),
),
},
{
ResourceName: "google_container_node_pool.np",
ImportState: true,
ImportStateVerify: true,
},
},
})
}

func testAccContainerNodePool_customPlacementPolicy(cluster, np, policyName string) string {
return fmt.Sprintf(`
resource "google_container_cluster" "cluster" {
name = "%s"
location = "us-central1-a"
initial_node_count = 1
}
resource "google_compute_resource_policy" "policy" {
name = "%s"
region = "us-central1"
group_placement_policy {
collocation = "COLLOCATED"
}
}
resource "google_container_node_pool" "np" {
name = "%s"
location = "us-central1-a"
cluster = google_container_cluster.cluster.name
initial_node_count = 2
node_config {
machine_type = "c2-standard-4"
}
placement_policy {
type = "COMPACT"
policy_name = google_compute_resource_policy.policy.name
}
}
`, cluster, policyName, np)
}

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

Expand Down
12 changes: 10 additions & 2 deletions google/services/container/resource_container_node_pool.go
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,12 @@ var schemaNodePool = map[string]*schema.Schema{
Required: true,
Description: `Type defines the type of placement policy`,
},
"policy_name": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
Description: `If set, refers to the name of a custom resource policy supplied by the user. The resource policy must be in the same project and region as the node pool. If not found, InvalidArgument error is returned.`,
},
},
},
},
Expand Down Expand Up @@ -872,7 +878,8 @@ func expandNodePool(d *schema.ResourceData, prefix string) (*container.NodePool,
if v.([]interface{}) != nil && v.([]interface{})[0] != nil {
placement_policy := v.([]interface{})[0].(map[string]interface{})
np.PlacementPolicy = &container.PlacementPolicy{
Type: placement_policy["type"].(string),
Type: placement_policy["type"].(string),
PolicyName: placement_policy["policy_name"].(string),
}
}
}
Expand Down Expand Up @@ -1063,7 +1070,8 @@ func flattenNodePool(d *schema.ResourceData, config *transport_tpg.Config, np *c
if np.PlacementPolicy != nil {
nodePool["placement_policy"] = []map[string]interface{}{
{
"type": np.PlacementPolicy.Type,
"type": np.PlacementPolicy.Type,
"policy_name": np.PlacementPolicy.PolicyName,
},
}
}
Expand Down
4 changes: 4 additions & 0 deletions website/docs/r/container_node_pool.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,10 @@ cluster.
Specifying COMPACT placement policy type places node pool's nodes in a closer
physical proximity in order to reduce network latency between nodes.

* `policy_name` - (Optional) If set, refers to the name of a custom resource policy supplied by the user.
The resource policy must be in the same project and region as the node pool.
If not found, InvalidArgument error is returned.

* `tpu_topology` - (Optional, Beta) The [TPU placement topology](https://cloud.google.com/tpu/docs/types-topologies#tpu_topologies) for pod slice node pool.

## Attributes Reference
Expand Down

0 comments on commit 31fadcf

Please sign in to comment.