Skip to content

Commit 3c6f1f8

Browse files
committed
container - add hugepages config
1 parent c6f4084 commit 3c6f1f8

File tree

3 files changed

+144
-2
lines changed

3 files changed

+144
-2
lines changed

mmv1/third_party/terraform/services/container/node_config.go.erb

+64-2
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,26 @@ func schemaNodeConfig() *schema.Schema {
638638
Description: `cgroupMode specifies the cgroup mode to be used on the node.`,
639639
DiffSuppressFunc: tpgresource.EmptyOrDefaultStringSuppress("CGROUP_MODE_UNSPECIFIED"),
640640
},
641+
"hugepages_config": {
642+
Type: schema.TypeList,
643+
Optional: true,
644+
MaxItems: 1,
645+
Description: `Amounts for 2M and 1G hugepages.`,
646+
Elem: &schema.Resource{
647+
Schema: map[string]*schema.Schema{
648+
"hugepage_size_2m": {
649+
Type: schema.TypeInt,
650+
Optional: true,
651+
Description: `Amount of 2M hugepages.`,
652+
},
653+
"hugepage_size_1g": {
654+
Type: schema.TypeInt,
655+
Optional: true,
656+
Description: `Amount of 1G hugepages.`,
657+
},
658+
},
659+
},
660+
},
641661
},
642662
},
643663
},
@@ -1227,6 +1247,10 @@ func expandLinuxNodeConfig(v interface{}) *container.LinuxNodeConfig {
12271247
linuxNodeConfig.CgroupMode = cgroupMode
12281248
}
12291249

1250+
if v, ok := cfg["hugepages_config"]; ok {
1251+
linuxNodeConfig.Hugepages = expandHugepagesConfig(v)
1252+
}
1253+
12301254
return linuxNodeConfig
12311255
}
12321256

@@ -1251,6 +1275,32 @@ func expandCgroupMode(cfg map[string]interface{}) string {
12511275
return cgroupMode.(string)
12521276
}
12531277

1278+
func expandHugepagesConfig(v interface{}) *container.HugepagesConfig {
1279+
if v == nil {
1280+
return nil
1281+
}
1282+
ls := v.([]interface{})
1283+
if len(ls) == 0 {
1284+
return nil
1285+
}
1286+
if ls[0] == nil {
1287+
return &container.HugepagesConfig{}
1288+
}
1289+
cfg := ls[0].(map[string]interface{})
1290+
1291+
hugepagesConfig := &container.HugepagesConfig{}
1292+
1293+
if v, ok := cfg["hugepage_size_2m"]; ok {
1294+
hugepagesConfig.HugepageSize2m = int64(v.(int))
1295+
}
1296+
1297+
if v, ok := cfg["hugepage_size_1g"]; ok {
1298+
hugepagesConfig.HugepageSize1g = int64(v.(int))
1299+
}
1300+
1301+
return hugepagesConfig
1302+
}
1303+
12541304
func expandContainerdConfig(v interface{}) *container.ContainerdConfig {
12551305
if v == nil {
12561306
return nil
@@ -1780,8 +1830,20 @@ func flattenLinuxNodeConfig(c *container.LinuxNodeConfig) []map[string]interface
17801830
result := []map[string]interface{}{}
17811831
if c != nil {
17821832
result = append(result, map[string]interface{}{
1783-
"sysctls": c.Sysctls,
1784-
"cgroup_mode": c.CgroupMode,
1833+
"sysctls": c.Sysctls,
1834+
"cgroup_mode": c.CgroupMode,
1835+
"hugepages_config": flattenHugepagesConfig(c.Hugepages),
1836+
})
1837+
}
1838+
return result
1839+
}
1840+
1841+
func flattenHugepagesConfig(c *container.HugepagesConfig) []map[string]interface{} {
1842+
result := []map[string]interface{}{}
1843+
if c != nil {
1844+
result = append(result, map[string]interface{}{
1845+
"hugepage_size_2m": c.HugepageSize2m,
1846+
"hugepage_size_1g": c.HugepageSize1g,
17851847
})
17861848
}
17871849
return result

mmv1/third_party/terraform/services/container/resource_container_node_pool_test.go.erb

+72
Original file line numberDiff line numberDiff line change
@@ -671,6 +671,40 @@ func TestAccContainerNodePool_withCgroupMode(t *testing.T) {
671671
})
672672
}
673673

674+
func TestAccContainerNodePool_withHugepageConfig(t *testing.T) {
675+
t.Parallel()
676+
677+
cluster := fmt.Sprintf("tf-test-cluster-%s", acctest.RandString(t, 10))
678+
np := fmt.Sprintf("tf-test-np-%s", acctest.RandString(t, 10))
679+
networkName := acctest.BootstrapSharedTestNetwork(t, "gke-cluster")
680+
subnetworkName := acctest.BootstrapSubnet(t, "gke-cluster", networkName)
681+
682+
acctest.VcrTest(t, resource.TestCase{
683+
PreCheck: func() { acctest.AccTestPreCheck(t) },
684+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
685+
CheckDestroy: testAccCheckContainerClusterDestroyProducer(t),
686+
Steps: []resource.TestStep{
687+
{
688+
Config: testAccContainerNodePool_withHugepageConfig(cluster, np, networkName, subnetworkName, 1),
689+
},
690+
{
691+
ResourceName: "google_container_node_pool.np",
692+
ImportState: true,
693+
ImportStateVerify: true,
694+
},
695+
// Perform an update.
696+
{
697+
Config: testAccContainerNodePool_withHugepageConfig(cluster, np, networkName, subnetworkName, 1),
698+
},
699+
{
700+
ResourceName: "google_container_node_pool.np",
701+
ImportState: true,
702+
ImportStateVerify: true,
703+
},
704+
},
705+
})
706+
}
707+
674708
func TestAccContainerNodePool_withNetworkConfig(t *testing.T) {
675709
t.Parallel()
676710

@@ -3387,6 +3421,44 @@ resource "google_container_node_pool" "with_tier1_net" {
33873421
`, network, cluster, np, np, np, np, netTier)
33883422
}
33893423

3424+
3425+
func testAccContainerNodePool_withHugepageConfig(cluster, np, networkName, subnetworkName string, hugepage int) string {
3426+
return fmt.Sprintf(`
3427+
data "google_container_engine_versions" "central1a" {
3428+
location = "us-central1-a"
3429+
}
3430+
3431+
resource "google_container_cluster" "cluster" {
3432+
name = "%s"
3433+
location = "us-central1-a"
3434+
initial_node_count = 1
3435+
min_master_version = data.google_container_engine_versions.central1a.latest_master_version
3436+
deletion_protection = false
3437+
network = "%s"
3438+
subnetwork = "%s"
3439+
}
3440+
3441+
resource "google_container_node_pool" "np" {
3442+
name = "%s"
3443+
location = "us-central1-a"
3444+
cluster = google_container_cluster.cluster.name
3445+
initial_node_count = 1
3446+
node_config {
3447+
image_type = "COS_CONTAINERD"
3448+
linux_node_config {
3449+
hugepages_config {
3450+
hugepage_size_2m = %d
3451+
}
3452+
}
3453+
oauth_scopes = [
3454+
"https://www.googleapis.com/auth/logging.write",
3455+
"https://www.googleapis.com/auth/monitoring",
3456+
]
3457+
}
3458+
}
3459+
`, cluster, networkName, subnetworkName, np, hugepage)
3460+
}
3461+
33903462
func testAccContainerNodePool_withMultiNicNetworkConfig(cluster, np, network string) string {
33913463
return fmt.Sprintf(`
33923464
resource "google_compute_network" "container_network" {

mmv1/third_party/terraform/website/docs/r/container_cluster.html.markdown

+8
Original file line numberDiff line numberDiff line change
@@ -1331,6 +1331,14 @@ linux_node_config {
13311331
* `CGROUP_MODE_V1`: CGROUP_MODE_V1 specifies to use cgroupv1 for the cgroup configuration on the node image.
13321332
* `CGROUP_MODE_V2`: CGROUP_MODE_V2 specifies to use cgroupv2 for the cgroup configuration on the node image.
13331333

1334+
* `hugepages_config` - (Optional) Amounts for 2M and 1G hugepages. Structure is [documented below](#nested_hugepages_config).
1335+
1336+
<a name="nested_hugepages_config"></a>The `hugepages_config` block supports:
1337+
1338+
* `hugepage_size_2m` - (Optional) Amount of 2M hugepages.
1339+
1340+
* `hugepage_size_1g` - (Optional) Amount of 1G hugepages.
1341+
13341342
<a name="nested_containerd_config"></a>The `containerd_config` block supports:
13351343

13361344
* `private_registry_access_config` (Optional) - Configuration for private container registries. There are two fields in this config:

0 commit comments

Comments
 (0)