Skip to content

Commit

Permalink
Merge branch 'add-node-soak-param'
Browse files Browse the repository at this point in the history
  • Loading branch information
itay-grudev committed May 19, 2024
2 parents bab8734 + 52a139a commit a7ba631
Show file tree
Hide file tree
Showing 222 changed files with 1,150 additions and 457 deletions.
11 changes: 8 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
## 3.105.0 (Unreleased)

ENHANCEMENTS:

* `azurerm_kubernetes_cluster` `azurerm_kubernetes_cluster_node_pool` - adding `node_soak_duration_in_minutes` and `drain_timeout_in_minutes` to the node pool `upgrade_settings` block
* update `github.com/hashicorp/go-azure-sdk/resource-manager/containerservice` to version `2023-09-02-preview`

BUG FIXES:

* `azurerm_linux_function_app_slot` - fixed panic when planning from a version older than 3.88.0 [GH-25838]
Expand Down Expand Up @@ -182,7 +187,7 @@ DEPRECATIONS:

## 3.99.0 (April 11, 2024)

BREAKING CHANGE:
BREAKING CHANGE:

* `azurerm_linux_web_app` - `site_config.0.application_stack.0.java_version` must be specified with `java_server` and `java_server_version` ([#25553](https://github.com/hashicorp/terraform-provider-azurerm/issues/25553))

Expand Down Expand Up @@ -608,7 +613,7 @@ BUG FIXES:
UPGRADE NOTES:

* provider - The provider will now automatically register the `AppConfiguration`, `DataFactory`, and `SignalRService` Resource Providers. When running Terraform with limited permissions, note that you [must disable automatic Resource Provider Registration and ensure that any Resource Providers Terraform requires are registered]([XXX](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs#skip_provider_registration)). ([#24645](https://github.com/hashicorp/terraform-provider-azurerm/issues/24645))

FEATURES:

* **New Data Source**: `azurerm_nginx_configuration` ([#24642](https://github.com/hashicorp/terraform-provider-azurerm/issues/24642))
Expand Down Expand Up @@ -1084,7 +1089,7 @@ ENHANCEMENTS:

* dependencies: updating to `v0.20231025.1113325` of `github.com/hashicorp/go-azure-sdk` ([#23684](https://github.com/hashicorp/terraform-provider-azurerm/issues/23684))
* dependencies: updating to `v1.58.3` of `google.golang.org/grpc` ([#23691](https://github.com/hashicorp/terraform-provider-azurerm/issues/23691))
* dependencies: updating search service from `2022-09-01` to `2023-11-01` ([#23698](https://github.com/hashicorp/terraform-provider-azurerm/issues/23698))
* dependencies: updating search service from `2022-09-01` to `2023-11-01` ([#23698](https://github.com/hashicorp/terraform-provider-azurerm/issues/23698))
* Data Source: `azurerm_monitor_workspace` - export `query_endpoint` ([#23629](https://github.com/hashicorp/terraform-provider-azurerm/issues/23629))
* `azurerm_express_route_port` - support for `macsec_sci_enabled` ([#23625](https://github.com/hashicorp/terraform-provider-azurerm/issues/23625))
* `azurerm_eventhub_namespace_customer_managed_key` - support for the `user_assigned_identity_id` property ([#23635](https://github.com/hashicorp/terraform-provider-azurerm/issues/23635))
Expand Down
4 changes: 2 additions & 2 deletions internal/services/containers/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ import (
containerregistry_v2019_06_01_preview "github.com/hashicorp/go-azure-sdk/resource-manager/containerregistry/2019-06-01-preview"
containerregistry_v2021_08_01_preview "github.com/hashicorp/go-azure-sdk/resource-manager/containerregistry/2021-08-01-preview"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2019-08-01/containerservices"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-06-02-preview/agentpools"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-06-02-preview/maintenanceconfigurations"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-06-02-preview/managedclusters"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-06-02-preview/snapshots"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-09-02-preview/agentpools"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-09-02-preview/managedclusters"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-10-15/fleetupdatestrategies"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-10-15/updateruns"
"github.com/hashicorp/go-azure-sdk/resource-manager/kubernetesconfiguration/2022-11-01/extensions"
Expand Down
2 changes: 1 addition & 1 deletion internal/services/containers/kubernetes_addons.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (

"github.com/hashicorp/go-azure-helpers/lang/pointer"
"github.com/hashicorp/go-azure-helpers/resourcemanager/commonids"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-06-02-preview/managedclusters"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-09-02-preview/managedclusters"
"github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2020-08-01/workspaces"
"github.com/hashicorp/go-azure-sdk/sdk/environments"
commonValidate "github.com/hashicorp/terraform-provider-azurerm/helpers/validate"
Expand Down
19 changes: 10 additions & 9 deletions internal/services/containers/kubernetes_cluster_data_source.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import (
"github.com/hashicorp/go-azure-helpers/resourcemanager/location"
"github.com/hashicorp/go-azure-helpers/resourcemanager/tags"
"github.com/hashicorp/go-azure-helpers/resourcemanager/zones"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-06-02-preview/managedclusters"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-09-02-preview/managedclusters"
"github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2020-08-01/workspaces"
"github.com/hashicorp/terraform-provider-azurerm/internal/clients"
"github.com/hashicorp/terraform-provider-azurerm/internal/services/containers/kubernetes"
Expand Down Expand Up @@ -1465,20 +1465,21 @@ func flattenKubernetesClusterDataSourceMicrosoftDefender(input *managedclusters.
}

func flattenKubernetesClusterDataSourceUpgradeSettings(input *managedclusters.AgentPoolUpgradeSettings) []interface{} {
maxSurge := ""
values := make(map[string]interface{})

if input != nil && input.MaxSurge != nil {
maxSurge = *input.MaxSurge
values["max_surge"] = *input.MaxSurge
}

if maxSurge == "" {
return []interface{}{}
if input != nil && input.DrainTimeoutInMinutes != nil {
values["drain_timeout_in_minutes"] = *input.DrainTimeoutInMinutes
}

return []interface{}{
map[string]interface{}{
"max_surge": maxSurge,
},
if input != nil && input.DrainTimeoutInMinutes != nil {
values["node_soak_duration_in_minutes"] = *input.NodeSoakDurationInMinutes
}

return []interface{}{values}
}

func flattenCustomCaTrustCerts(input *managedclusters.ManagedClusterSecurityProfile) []interface{} {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (
"github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema"
"github.com/hashicorp/go-azure-helpers/resourcemanager/tags"
"github.com/hashicorp/go-azure-helpers/resourcemanager/zones"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-06-02-preview/agentpools"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-09-02-preview/agentpools"
"github.com/hashicorp/terraform-provider-azurerm/internal/clients"
"github.com/hashicorp/terraform-provider-azurerm/internal/features"
"github.com/hashicorp/terraform-provider-azurerm/internal/services/containers/validate"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ import (
"github.com/hashicorp/go-azure-helpers/resourcemanager/zones"
"github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-01/capacityreservationgroups"
"github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-01/proximityplacementgroups"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-06-02-preview/agentpools"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-06-02-preview/managedclusters"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-06-02-preview/snapshots"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-09-02-preview/agentpools"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-09-02-preview/managedclusters"
"github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-09-01/subnets"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-provider-azurerm/helpers/tf"
Expand Down Expand Up @@ -1137,6 +1137,14 @@ func upgradeSettingsSchema() *pluginsdk.Schema {
Type: pluginsdk.TypeString,
Required: true,
},
"drain_timeout_in_minutes": {
Type: pluginsdk.TypeInt,
Optional: true,
},
"node_soak_duration_in_minutes": {
Type: pluginsdk.TypeInt,
Optional: true,
},
},
},
}
Expand All @@ -1152,6 +1160,14 @@ func upgradeSettingsSchema() *pluginsdk.Schema {
Optional: true,
Default: "10%",
},
"drain_timeout_in_minutes": {
Type: pluginsdk.TypeInt,
Optional: true,
},
"node_soak_duration_in_minutes": {
Type: pluginsdk.TypeInt,
Optional: true,
},
},
},
}
Expand All @@ -1167,6 +1183,14 @@ func upgradeSettingsForDataSourceSchema() *pluginsdk.Schema {
Type: pluginsdk.TypeString,
Computed: true,
},
"drain_timeout_in_minutes": {
Type: pluginsdk.TypeString,
Computed: true,
},
"node_soak_duration_in_minutes": {
Type: pluginsdk.TypeString,
Computed: true,
},
},
},
}
Expand Down Expand Up @@ -1223,24 +1247,31 @@ func expandAgentPoolUpgradeSettings(input []interface{}) *agentpools.AgentPoolUp
if maxSurgeRaw := v["max_surge"].(string); maxSurgeRaw != "" {
setting.MaxSurge = utils.String(maxSurgeRaw)
}
if drainTimeoutInMinutesRaw, ok := v["drain_timeout_in_minutes"].(int); ok {
setting.DrainTimeoutInMinutes = utils.Int64(int64(drainTimeoutInMinutesRaw))
}
if nodeSoakDurationInMinutesRaw, ok := v["node_soak_duration_in_minutes"].(int); ok {
setting.NodeSoakDurationInMinutes = utils.Int64(int64(nodeSoakDurationInMinutesRaw))
}
return setting
}

func flattenAgentPoolUpgradeSettings(input *agentpools.AgentPoolUpgradeSettings) []interface{} {
maxSurge := ""
if input != nil && input.MaxSurge != nil {
maxSurge = *input.MaxSurge
values := make(map[string]interface{})

if input != nil && input.MaxSurge != nil && *input.MaxSurge != "" {
values["max_surge"] = *input.MaxSurge
}

if maxSurge == "" {
return []interface{}{}
if input != nil && input.DrainTimeoutInMinutes != nil {
values["drain_timeout_in_minutes"] = *input.DrainTimeoutInMinutes
}

return []interface{}{
map[string]interface{}{
"max_surge": maxSurge,
},
if input != nil && input.NodeSoakDurationInMinutes != nil {
values["node_soak_duration_in_minutes"] = *input.NodeSoakDurationInMinutes
}

return []interface{}{values}
}

func expandNodeLabels(input map[string]interface{}) *map[string]string {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ import (

"github.com/hashicorp/go-azure-helpers/lang/response"
"github.com/hashicorp/go-azure-helpers/resourcemanager/commonids"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-06-02-preview/agentpools"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-06-02-preview/snapshots"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-09-02-preview/agentpools"
"github.com/hashicorp/terraform-plugin-testing/terraform"
"github.com/hashicorp/terraform-provider-azurerm/internal/acceptance"
"github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check"
Expand Down Expand Up @@ -565,29 +565,96 @@ func TestAccKubernetesClusterNodePool_upgradeSettings(t *testing.T) {

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.upgradeSettingsConfig(data, "2"),
Config: r.upgradeSettingsConfig(data, map[string]interface{}{
"max_surge": "2",
"drain_timeout_in_minutes": 35,
}),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
check.That(data.ResourceName).Key("upgrade_settings.#").HasValue("1"),
check.That(data.ResourceName).Key("upgrade_settings.0.max_surge").HasValue("2"),
check.That(data.ResourceName).Key("upgrade_settings.0.drain_timeout_in_minutes").HasValue("35"),
check.That(data.ResourceName).Key("upgrade_settings.0.node_soak_duration_in_minutes").DoesNotExist(),
),
},
data.ImportStep(),
{
Config: r.upgradeSettingsConfig(data, "4"),
Config: r.upgradeSettingsConfig(data, map[string]interface{}{
"max_surge": "4",
"drain_timeout_in_minutes": 40,
}),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
check.That(data.ResourceName).Key("upgrade_settings.#").HasValue("1"),
check.That(data.ResourceName).Key("upgrade_settings.0.max_surge").HasValue("4"),
check.That(data.ResourceName).Key("upgrade_settings.0.drain_timeout_in_minutes").HasValue("40"),
check.That(data.ResourceName).Key("upgrade_settings.0.node_soak_duration_in_minutes").DoesNotExist(),
),
},
data.ImportStep(),
{
Config: r.upgradeSettingsConfig(data, "10%"),
Config: r.upgradeSettingsConfig(data, map[string]interface{}{
"max_surge": "10%",
"drain_timeout_in_minutes": 35,
}),

Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
check.That(data.ResourceName).Key("upgrade_settings.#").HasValue("1"),
check.That(data.ResourceName).Key("upgrade_settings.0.max_surge").HasValue("10%"),
check.That(data.ResourceName).Key("upgrade_settings.0.drain_timeout_in_minutes").HasValue("35"),
check.That(data.ResourceName).Key("upgrade_settings.0.node_soak_duration_in_minutes").DoesNotExist(),
),
},
data.ImportStep(),
{
Config: r.upgradeSettingsConfig(data, map[string]interface{}{
"drain_timeout_in_minutes": 0,
}),

Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
check.That(data.ResourceName).Key("upgrade_settings.#").HasValue("1"),
check.That(data.ResourceName).Key("upgrade_settings.0.max_surge").DoesNotExist(),
check.That(data.ResourceName).Key("upgrade_settings.0.drain_timeout_in_minutes").HasValue("0"),
check.That(data.ResourceName).Key("upgrade_settings.0.node_soak_duration_in_minutes").DoesNotExist(),
),
},
data.ImportStep(),
{
Config: r.upgradeSettingsConfig(data, map[string]interface{}{
"node_soak_duration_in_minutes": 18,
}),

Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
check.That(data.ResourceName).Key("upgrade_settings.#").HasValue("1"),
check.That(data.ResourceName).Key("upgrade_settings.0.max_surge").DoesNotExist(),
check.That(data.ResourceName).Key("upgrade_settings.0.drain_timeout_in_minutes").DoesNotExist(),
check.That(data.ResourceName).Key("upgrade_settings.0.node_soak_duration_in_minutes").HasValue("18"),
),
},
data.ImportStep(),
{
Config: r.upgradeSettingsConfig(data, map[string]interface{}{
"node_soak_duration_in_minutes": 0,
}),

Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
check.That(data.ResourceName).Key("upgrade_settings.#").HasValue("1"),
check.That(data.ResourceName).Key("upgrade_settings.0.max_surge").DoesNotExist(),
check.That(data.ResourceName).Key("upgrade_settings.0.drain_timeout_in_minutes").DoesNotExist(),
check.That(data.ResourceName).Key("upgrade_settings.0.node_soak_duration_in_minutes").HasValue("0"),
),
},
data.ImportStep(),
{
Config: r.upgradeSettingsConfig(data, map[string]interface{}{}),

Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
check.That(data.ResourceName).Key("upgrade_settings.#").DoesNotExist(),
),
},
data.ImportStep(),
Expand Down Expand Up @@ -2022,12 +2089,27 @@ resource "azurerm_kubernetes_cluster_node_pool" "test" {
`, r.templateConfig(data))
}

func (r KubernetesClusterNodePoolResource) upgradeSettingsConfig(data acceptance.TestData, maxSurge string) string {
func (r KubernetesClusterNodePoolResource) upgradeSettingsConfig(data acceptance.TestData, nodePoolConfig map[string]interface{}) string {
template := r.templateConfig(data)
if maxSurge != "" {
maxSurge = fmt.Sprintf(`upgrade_settings {
max_surge = %q
}`, maxSurge)

var upgradeSettingsTemplate string
keys := []string{"max_surge", "drain_timeout_in_minutes", "node_soak_duration_in_minutes"}

for _, key := range keys {
if value, ok := nodePoolConfig[key]; ok {
switch v := value.(type) {
case string:
if v != "" {
upgradeSettingsTemplate += fmt.Sprintf("\n %s = %q", key, v)
}
case int:
upgradeSettingsTemplate += fmt.Sprintf("\n %s = %d", key, v)
}
}
}

if upgradeSettingsTemplate != "" {
upgradeSettingsTemplate = fmt.Sprintf(`upgrade_settings {%s\n }`, upgradeSettingsTemplate)
}

return fmt.Sprintf(`
Expand All @@ -2044,7 +2126,7 @@ resource "azurerm_kubernetes_cluster_node_pool" "test" {
node_count = 3
%s
}
`, template, maxSurge)
`, template, upgradeSettingsTemplate)
}

func (r KubernetesClusterNodePoolResource) virtualNetworkAutomaticConfig(data acceptance.TestData) string {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ import (
"time"

"github.com/hashicorp/go-azure-helpers/resourcemanager/commonids"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-06-02-preview/agentpools"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-06-02-preview/snapshots"
"github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-09-02-preview/agentpools"
"github.com/hashicorp/terraform-plugin-testing/terraform"
"github.com/hashicorp/terraform-provider-azurerm/internal/acceptance"
"github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check"
Expand Down
Loading

0 comments on commit a7ba631

Please sign in to comment.