Skip to content

Commit 0e9cf47

Browse files
authored
optional ephemeral os disk placement (#660)
1 parent 32aca96 commit 0e9cf47

File tree

5 files changed

+111
-8
lines changed

5 files changed

+111
-8
lines changed

castai/resource_aks_cluster_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,35 @@ func TestAccAKS_ResourceAKSCluster(t *testing.T) {
462462
resource.TestCheckResourceAttr(nodeConfResourceName, "gke.#", "0"),
463463
),
464464
},
465+
{
466+
Config: testAccAKSNodeConfigurationConfigWithEphemeral(rName, clusterName, resourceGroupName),
467+
Check: resource.ComposeTestCheckFunc(
468+
resource.TestCheckResourceAttr(nodeConfResourceName, "name", rName),
469+
resource.TestCheckResourceAttr(nodeConfResourceName, "disk_cpu_ratio", "35"),
470+
resource.TestCheckResourceAttr(nodeConfResourceName, "min_disk_size", "122"),
471+
resource.TestCheckResourceAttr(nodeConfResourceName, "aks.0.max_pods_per_node", "31"),
472+
resource.TestCheckResourceAttr(nodeConfResourceName, "aks.0.aks_image_family", "ubuntu"),
473+
resource.TestCheckResourceAttr(nodeConfResourceName, "eks.#", "0"),
474+
resource.TestCheckResourceAttr(nodeConfResourceName, "kops.#", "0"),
475+
resource.TestCheckResourceAttr(nodeConfResourceName, "gke.#", "0"),
476+
resource.TestCheckResourceAttr(nodeConfResourceName, "aks.0.ephemeral_os_disk.#", "1"),
477+
),
478+
},
479+
{
480+
Config: testAccAKSNodeConfigurationConfigWithEphemeralNVME(rName, clusterName, resourceGroupName),
481+
Check: resource.ComposeTestCheckFunc(
482+
resource.TestCheckResourceAttr(nodeConfResourceName, "name", rName),
483+
resource.TestCheckResourceAttr(nodeConfResourceName, "disk_cpu_ratio", "35"),
484+
resource.TestCheckResourceAttr(nodeConfResourceName, "min_disk_size", "122"),
485+
resource.TestCheckResourceAttr(nodeConfResourceName, "aks.0.max_pods_per_node", "31"),
486+
resource.TestCheckResourceAttr(nodeConfResourceName, "aks.0.aks_image_family", "ubuntu"),
487+
resource.TestCheckResourceAttr(nodeConfResourceName, "eks.#", "0"),
488+
resource.TestCheckResourceAttr(nodeConfResourceName, "kops.#", "0"),
489+
resource.TestCheckResourceAttr(nodeConfResourceName, "gke.#", "0"),
490+
resource.TestCheckResourceAttr(nodeConfResourceName, "aks.0.ephemeral_os_disk.#", "1"),
491+
resource.TestCheckResourceAttr(nodeConfResourceName, "aks.0.ephemeral_os_disk.0.placement", "nvmeDisk"),
492+
),
493+
},
465494
{
466495
Config: testAccAKSNodeConfigurationUpdated(rName, clusterName, resourceGroupName),
467496
Check: resource.ComposeTestCheckFunc(

castai/resource_node_configuration.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -361,13 +361,14 @@ func resourceNodeConfiguration() *schema.Resource {
361361
Schema: map[string]*schema.Schema{
362362
"placement": {
363363
Type: schema.TypeString,
364-
Required: true,
364+
Optional: true,
365365
Description: "Placement of the ephemeral OS disk. One of: cacheDisk, resourceDisk, nvmeDisk",
366-
ValidateDiagFunc: validation.ToDiagFunc(validation.StringInSlice([]string{aksEphemeralDiskPlacementCacheDisk, aksEphemeralDiskPlacementResourceDisk, aksEphemeralDiskPlacementNVME}, true)),
366+
ValidateDiagFunc: validation.ToDiagFunc(validation.StringInSlice([]string{aksEphemeralDiskPlacementCacheDisk, aksEphemeralDiskPlacementResourceDisk, aksEphemeralDiskPlacementNVME, Unspecified}, true)),
367367
DiffSuppressOnRefresh: true,
368368
DiffSuppressFunc: func(k, oldValue, newValue string, d *schema.ResourceData) bool {
369369
return strings.EqualFold(oldValue, newValue)
370370
},
371+
Default: Unspecified,
371372
},
372373
"cache": {
373374
Type: schema.TypeString,
@@ -1227,7 +1228,9 @@ func toAKSEphemeralOSDisk(obj any) *sdk.NodeconfigV1AKSConfigOsDiskEphemeral {
12271228
return nil
12281229
}
12291230

1230-
osDisk := &sdk.NodeconfigV1AKSConfigOsDiskEphemeral{}
1231+
osDisk := &sdk.NodeconfigV1AKSConfigOsDiskEphemeral{
1232+
Placement: lo.ToPtr(sdk.NodeconfigV1AKSConfigOsDiskEphemeralPlacementPLACEMENTUNSPECIFIED),
1233+
}
12311234

12321235
if v, ok := obj.(map[string]any)["placement"].(string); ok && v != "" {
12331236
switch strings.ToLower(v) {
@@ -1416,7 +1419,9 @@ func fromAKSEphemeralOSDisk(sdkEph *sdk.NodeconfigV1AKSConfigOsDiskEphemeral) []
14161419
return nil
14171420
}
14181421

1419-
m := map[string]interface{}{}
1422+
m := map[string]interface{}{
1423+
"placement": Unspecified,
1424+
}
14201425
if sdkEph.Placement != nil {
14211426
switch *sdkEph.Placement {
14221427
case sdk.NodeconfigV1AKSConfigOsDiskEphemeralPlacementPLACEMENTRESOURCEDISK:

castai/resource_node_configuration_aks_test.go

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,74 @@ resource "castai_node_configuration" "test" {
8383
}
8484
`, rName, resourceGroupName))
8585
}
86+
87+
func testAccAKSNodeConfigurationConfigWithEphemeral(rName, clusterName, resourceGroupName string) string {
88+
return ConfigCompose(testAccAKSWithFederationIDConfig(clusterName), fmt.Sprintf(`
89+
provider "azurerm" {
90+
features {}
91+
}
92+
data "azurerm_subnet" "internal" {
93+
name = "internal"
94+
virtual_network_name = "%[2]s-network"
95+
resource_group_name = %[2]q
96+
}
97+
98+
resource "castai_node_configuration" "test" {
99+
name = %[1]q
100+
cluster_id = castai_aks_cluster.test.id
101+
disk_cpu_ratio = 35
102+
min_disk_size = 122
103+
subnets = [data.azurerm_subnet.internal.id]
104+
tags = {
105+
env = "development"
106+
}
107+
aks {
108+
max_pods_per_node = 31
109+
aks_image_family = "ubuntu"
110+
ephemeral_os_disk {
111+
}
112+
}
113+
}
114+
115+
resource "castai_node_configuration_default" "test" {
116+
cluster_id = castai_aks_cluster.test.id
117+
configuration_id = castai_node_configuration.test.id
118+
}
119+
`, rName, resourceGroupName))
120+
}
121+
122+
func testAccAKSNodeConfigurationConfigWithEphemeralNVME(rName, clusterName, resourceGroupName string) string {
123+
return ConfigCompose(testAccAKSWithFederationIDConfig(clusterName), fmt.Sprintf(`
124+
provider "azurerm" {
125+
features {}
126+
}
127+
data "azurerm_subnet" "internal" {
128+
name = "internal"
129+
virtual_network_name = "%[2]s-network"
130+
resource_group_name = %[2]q
131+
}
132+
133+
resource "castai_node_configuration" "test" {
134+
name = %[1]q
135+
cluster_id = castai_aks_cluster.test.id
136+
disk_cpu_ratio = 35
137+
min_disk_size = 122
138+
subnets = [data.azurerm_subnet.internal.id]
139+
tags = {
140+
env = "development"
141+
}
142+
aks {
143+
max_pods_per_node = 31
144+
aks_image_family = "ubuntu"
145+
ephemeral_os_disk {
146+
placement = "nvmeDisk"
147+
}
148+
}
149+
}
150+
151+
resource "castai_node_configuration_default" "test" {
152+
cluster_id = castai_aks_cluster.test.id
153+
configuration_id = castai_node_configuration.test.id
154+
}
155+
`, rName, resourceGroupName))
156+
}

castai/sdk/api.gen.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/resources/node_configuration.md

Lines changed: 1 addition & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)