Skip to content

Commit

Permalink
Adding upgrade settings to all node pool blocks
Browse files Browse the repository at this point in the history
  • Loading branch information
jmcshane committed Aug 14, 2020
1 parent 34d27f6 commit 5fcef6a
Show file tree
Hide file tree
Showing 5 changed files with 121 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,8 @@ func dataSourceArmKubernetesCluster() *schema.Resource {
Type: schema.TypeBool,
Computed: true,
},

"upgrade_settings": upgradeSettingsSchema(),
},
},
},
Expand Down Expand Up @@ -924,6 +926,10 @@ func flattenKubernetesClusterDataSourceAgentPoolProfiles(input *[]containerservi
agentPoolProfile["tags"] = tags.Flatten(profile.Tags)
}

if profile.UpgradeSettings != nil {
agentPoolProfile["upgrade_settings"] = flattenUpgradeSettings(profile.UpgradeSettings)
}

agentPoolProfiles = append(agentPoolProfiles, agentPoolProfile)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,8 @@ func dataSourceKubernetesClusterNodePool() *schema.Resource {

"tags": tags.SchemaDataSource(),

"upgrade_settings": upgradeSettingsSchema(),

"vm_size": {
Type: schema.TypeString,
Computed: true,
Expand Down Expand Up @@ -254,8 +256,11 @@ func dataSourceKubernetesClusterNodePoolRead(d *schema.ResourceData, meta interf
}
d.Set("spot_max_price", spotMaxPrice)

d.Set("upgrade_settings", flattenUpgradeSettings(props.UpgradeSettings))

d.Set("vnet_subnet_id", props.VnetSubnetID)
d.Set("vm_size", string(props.VMSize))

}

return tags.FlattenAndSet(d, resp.Tags)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,8 @@ func resourceArmKubernetesClusterNodePool() *schema.Resource {
ForceNew: true,
ValidateFunc: azure.ValidateResourceID,
},

"upgrade_settings": upgradeSettingsSchema(),
},
}
}
Expand Down Expand Up @@ -332,6 +334,11 @@ func resourceArmKubernetesClusterNodePoolCreate(d *schema.ResourceData, meta int
profile.VnetSubnetID = utils.String(vnetSubnetID)
}

upgradeSettingsRaw := d.Get("upgrade_settings").([]interface{})
if len(upgradeSettingsRaw) > 0 {
profile.UpgradeSettings = expandUpgradeSettings(upgradeSettingsRaw)
}

maxCount := d.Get("max_count").(int)
minCount := d.Get("min_count").(int)

Expand Down Expand Up @@ -480,6 +487,11 @@ func resourceArmKubernetesClusterNodePoolUpdate(d *schema.ResourceData, meta int
props.Tags = tags.Expand(t)
}

if d.HasChange("upgrade_settings") {
upgradeSettingsRaw := d.Get("upgrade_settings").([]interface{})
props.UpgradeSettings = expandUpgradeSettings(upgradeSettingsRaw)
}

// validate the auto-scale fields are both set/unset to prevent a continual diff
maxCount := 0
if props.MaxCount != nil {
Expand Down Expand Up @@ -638,6 +650,8 @@ func resourceArmKubernetesClusterNodePoolRead(d *schema.ResourceData, meta inter

d.Set("vnet_subnet_id", props.VnetSubnetID)
d.Set("vm_size", string(props.VMSize))

d.Set("upgrade_settings", flattenUpgradeSettings(props.UpgradeSettings))
}

return tags.FlattenAndSet(d, resp.Tags)
Expand All @@ -664,3 +678,43 @@ func resourceArmKubernetesClusterNodePoolDelete(d *schema.ResourceData, meta int

return nil
}

func upgradeSettingsSchema() *schema.Schema {
return &schema.Schema{
Type: schema.TypeList,
Optional: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"max_surge": {
Type: schema.TypeString,
Optional: true,
},
},
},
}
}

func expandUpgradeSettings(input []interface{}) *containerservice.AgentPoolUpgradeSettings {
if len(input) == 0 {
return nil
}
upgradeSettingInput := input[0].(map[string]interface{})
upgradeSetting := containerservice.AgentPoolUpgradeSettings{}

if maxSurgeRaw := upgradeSettingInput["max_surge"].(string); maxSurgeRaw != "" {
upgradeSetting.MaxSurge = utils.String(maxSurgeRaw)
}
return &upgradeSetting
}

func flattenUpgradeSettings(input *containerservice.AgentPoolUpgradeSettings) []interface{} {
upgradeSettings := make([]interface{}, 0)

if input == nil {
return upgradeSettings
}
nodePoolSetting := make(map[string]interface{})
nodePoolSetting["max_surge"] = *input.MaxSurge
return append(upgradeSettings, nodePoolSetting)
}
9 changes: 9 additions & 0 deletions azurerm/internal/services/containers/kubernetes_nodepool.go
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,8 @@ func SchemaDefaultNodePool() *schema.Schema {
Computed: true,
ValidateFunc: validation.StringIsNotEmpty,
},

"upgrade_settings": upgradeSettingsSchema(),
},
},
}
Expand Down Expand Up @@ -163,6 +165,7 @@ func ConvertDefaultNodePoolToAgentPool(input *[]containerservice.ManagedClusterA
NodeLabels: defaultCluster.NodeLabels,
NodeTaints: defaultCluster.NodeTaints,
Tags: defaultCluster.Tags,
UpgradeSettings: defaultCluster.UpgradeSettings,
},
}
}
Expand Down Expand Up @@ -227,6 +230,9 @@ func ExpandDefaultNodePool(d *schema.ResourceData) (*[]containerservice.ManagedC
profile.OrchestratorVersion = utils.String(orchestratorVersion)
}

upgradeSettingsRaw := raw["upgradeSettings"].([]interface{})
profile.UpgradeSettings = expandUpgradeSettings(upgradeSettingsRaw)

count := raw["node_count"].(int)
maxCount := raw["max_count"].(int)
minCount := raw["min_count"].(int)
Expand Down Expand Up @@ -357,6 +363,8 @@ func FlattenDefaultNodePool(input *[]containerservice.ManagedClusterAgentPoolPro
orchestratorVersion = *agentPool.OrchestratorVersion
}

upgradeSettings := flattenUpgradeSettings(agentPool.UpgradeSettings)

return &[]interface{}{
map[string]interface{}{
"availability_zones": availabilityZones,
Expand All @@ -374,6 +382,7 @@ func FlattenDefaultNodePool(input *[]containerservice.ManagedClusterAgentPoolPro
"type": string(agentPool.Type),
"vm_size": string(agentPool.VMSize),
"orchestrator_version": orchestratorVersion,
"upgrade_settings": upgradeSettings,
"vnet_subnet_id": vnetSubnetId,
},
}, nil
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ var kubernetesNodePoolTests = map[string]func(t *testing.T){
"osDiskSizeGB": testAccAzureRMKubernetesClusterNodePool_osDiskSizeGB,
"modeSystem": testAccAzureRMKubernetesClusterNodePool_modeSystem,
"modeUpdate": testAccAzureRMKubernetesClusterNodePool_modeUpdate,
"upgradeSettings": testAccAzureRMKubernetesClusterNodePool_upgradeSettings,
"virtualNetworkAutomatic": testAccAzureRMKubernetesClusterNodePool_virtualNetworkAutomatic,
"virtualNetworkManual": testAccAzureRMKubernetesClusterNodePool_virtualNetworkManual,
"windows": testAccAzureRMKubernetesClusterNodePool_windows,
Expand Down Expand Up @@ -729,6 +730,31 @@ func testAccAzureRMKubernetesClusterNodePool_windowsAndLinux(t *testing.T) {
})
}

func TestAccAzureRMKubernetesClusterNodePool_upgradeSettings(t *testing.T) {
checkIfShouldRunTestsIndividually(t)
testAccAzureRMKubernetesClusterNodePool_upgradeSettings(t)
}

func testAccAzureRMKubernetesClusterNodePool_upgradeSettings(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_kubernetes_cluster_node_pool", "test")

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { acceptance.PreCheck(t) },
Providers: acceptance.SupportedProviders,
CheckDestroy: testCheckAzureRMKubernetesClusterNodePoolDestroy,
Steps: []resource.TestStep{
{
Config: testAccAzureRMKubernetesClusterNodePool_upgradeSettingsConfig(data),
Check: resource.ComposeTestCheckFunc(
testCheckAzureRMKubernetesNodePoolExists(data.ResourceName),
resource.TestCheckResourceAttr(data.ResourceName, "upgrade_profile.0.max_surge", "2"),
),
},
data.ImportStep(),
},
})
}

func testCheckAzureRMKubernetesClusterNodePoolDestroy(s *terraform.State) error {
client := acceptance.AzureProvider.Meta().(*clients.Client).Containers.AgentPoolsClient
ctx := acceptance.AzureProvider.Meta().(*clients.Client).StopContext
Expand Down Expand Up @@ -1453,6 +1479,27 @@ resource "azurerm_kubernetes_cluster_node_pool" "windows" {
`, template)
}

func testAccAzureRMKubernetesClusterNodePool_upgradeSettingsConfig(data acceptance.TestData) string {
template := testAccAzureRMKubernetesClusterNodePool_templateConfig(data)
return fmt.Sprintf(`
provider "azurerm" {
features {}
}
%s
resource "azurerm_kubernetes_cluster_node_pool" "test" {
name = "internal"
kubernetes_cluster_id = azurerm_kubernetes_cluster.test.id
vm_size = "Standard_DS2_v2"
node_count = 3
upgrade_settings {
max_surge = "2"
}
}
`, template)
}

func testAccAzureRMKubernetesClusterNodePool_templateConfig(data acceptance.TestData) string {
return fmt.Sprintf(`
resource "azurerm_resource_group" "test" {
Expand Down

0 comments on commit 5fcef6a

Please sign in to comment.