Skip to content

Commit

Permalink
app_service - support preview version 21 for java_version (#26304)
Browse files Browse the repository at this point in the history
* Allow java_version 21 for app services and functions. fixes #25490, #24754

* Improved Preview for `java_version`

Co-authored-by: jackofallops <11830746+jackofallops@users.noreply.github.com>

* Revert documentation change in legacy function app.

* Added necessary handling of java 21 in fx_strings.go

---------

Co-authored-by: jackofallops <11830746+jackofallops@users.noreply.github.com>
  • Loading branch information
computerlove and jackofallops authored Dec 6, 2024
1 parent 31cf7dc commit aa8b3ee
Show file tree
Hide file tree
Showing 11 changed files with 132 additions and 12 deletions.
1 change: 1 addition & 0 deletions internal/services/appservice/helpers/app_stack.go
Original file line number Diff line number Diff line change
Expand Up @@ -538,6 +538,7 @@ func linuxApplicationStackSchema() *pluginsdk.Schema {
"8",
"11",
"17",
"21",
}, false),
ExactlyOneOf: linuxApplicationStackConstraint,
RequiredWith: []string{
Expand Down
10 changes: 6 additions & 4 deletions internal/services/appservice/helpers/function_app_schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -1034,7 +1034,7 @@ type ApplicationStackLinuxFunctionApp struct {
NodeVersion string `tfschema:"node_version"` // Supported values `12LTS`, `14LTS`, `16LTS`, `18LTS, `20LTS``
PythonVersion string `tfschema:"python_version"` // Supported values `3.12`, `3.11`, `3.10`, `3.9`, `3.8`, `3.7`
PowerShellCoreVersion string `tfschema:"powershell_core_version"` // Supported values are `7.0`, `7.2`
JavaVersion string `tfschema:"java_version"` // Supported values `8`, `11`, `17`
JavaVersion string `tfschema:"java_version"` // Supported values `8`, `11`, `17`, `21`
CustomHandler bool `tfschema:"use_custom_runtime"` // Supported values `true`
Docker []ApplicationStackDocker `tfschema:"docker"` // Needs ElasticPremium or Basic (B1) Standard (S 1-3) or Premium(PxV2 or PxV3) LINUX Service Plan
}
Expand All @@ -1043,7 +1043,7 @@ type ApplicationStackWindowsFunctionApp struct {
DotNetVersion string `tfschema:"dotnet_version"` // Supported values `v3.0`, `v4.0`, `v6.0`, `v7.0`, `v8.0` and `v9.0`
DotNetIsolated bool `tfschema:"use_dotnet_isolated_runtime"` // Supported values `true` for `dotnet-isolated`, `false` otherwise
NodeVersion string `tfschema:"node_version"` // Supported values `12LTS`, `14LTS`, `16LTS`, `18LTS, `20LTS`
JavaVersion string `tfschema:"java_version"` // Supported values `8`, `11`, `17`
JavaVersion string `tfschema:"java_version"` // Supported values `8`, `11`, `17`, `21`
PowerShellCoreVersion string `tfschema:"powershell_core_version"` // Supported values are `7.0`, `7.2`
CustomHandler bool `tfschema:"use_custom_runtime"` // Supported values `true`
}
Expand Down Expand Up @@ -1172,6 +1172,7 @@ func linuxFunctionAppStackSchema() *pluginsdk.Schema {
"8",
"11",
"17",
"21",
}, false),
ExactlyOneOf: []string{
"site_config.0.application_stack.0.dotnet_version",
Expand All @@ -1182,7 +1183,7 @@ func linuxFunctionAppStackSchema() *pluginsdk.Schema {
"site_config.0.application_stack.0.docker",
"site_config.0.application_stack.0.use_custom_runtime",
},
Description: "The version of Java to use. Possible values are `8`, `11`, and `17`",
Description: "The version of Java to use. Possible values are `8`, `11`, `17`, and `21`",
},

"docker": {
Expand Down Expand Up @@ -1405,6 +1406,7 @@ func windowsFunctionAppStackSchema() *pluginsdk.Schema {
"1.8",
"11",
"17",
"21",
}, false),
ExactlyOneOf: []string{
"site_config.0.application_stack.0.dotnet_version",
Expand All @@ -1413,7 +1415,7 @@ func windowsFunctionAppStackSchema() *pluginsdk.Schema {
"site_config.0.application_stack.0.powershell_core_version",
"site_config.0.application_stack.0.use_custom_runtime",
},
Description: "The version of Java to use. Possible values are `1.8`, `11` and `17`",
Description: "The version of Java to use. Possible values are `1.8`, `11`, `17`, and `21`",
},

"powershell_core_version": {
Expand Down
19 changes: 19 additions & 0 deletions internal/services/appservice/helpers/fx_strings.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@ func decodeApplicationStackLinux(fxString string) ApplicationStackLinux {
if strings.HasPrefix(javaParts[0], "17") {
result.JavaVersion = "17"
}
if strings.HasPrefix(javaParts[0], "21") {
result.JavaVersion = "21"
}
result.JavaServerVersion = javaParts[0]

case FxStringPrefixTomcat:
Expand Down Expand Up @@ -278,6 +281,22 @@ func JavaLinuxFxStringBuilder(javaMajorVersion, javaServer, javaServerVersion st
default:
return pointer.To(fmt.Sprintf("%s|%s-java17", javaServer, javaServerVersion)), nil
}
case "21":
switch javaServer {
case LinuxJavaServerJava:
if len(strings.Split(javaServerVersion, ".")) == 3 {
return pointer.To(fmt.Sprintf("%s|%s", LinuxJavaServerJava, javaServerVersion)), nil // "JAVA|21.0.4"
} else {
return pointer.To(fmt.Sprintf("%s|%s-java21", LinuxJavaServerJava, javaServerVersion)), nil // "JAVA|21-21"
}

case LinuxJavaServerTomcat:
return pointer.To(fmt.Sprintf("%s|%s-java21", LinuxJavaServerTomcat, javaServerVersion)), nil // e,g, TOMCAT|10.0-java21 / TOMCAT|10.0.20-java21
case LinuxJavaServerJboss:
return nil, fmt.Errorf("java 21 is not supported on %s", LinuxJavaServerJboss)
default:
return pointer.To(fmt.Sprintf("%s|%s-java21", javaServer, javaServerVersion)), nil
}

default:
return pointer.To(fmt.Sprintf("%s|%s-%s", javaServer, javaServerVersion, javaMajorVersion)), nil
Expand Down
17 changes: 17 additions & 0 deletions internal/services/appservice/linux_function_app_resource_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1249,6 +1249,23 @@ func TestAccLinuxFunctionApp_appStackJava(t *testing.T) {
})
}

func TestAccLinuxFunctionApp_appStackJava21(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_linux_function_app", "test")
r := LinuxFunctionAppResource{}

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.appStackJava(data, SkuBasicPlan, "21"),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
check.That(data.ResourceName).Key("kind").HasValue("functionapp,linux"),
check.That(data.ResourceName).Key("site_config.0.linux_fx_version").HasValue("JAVA|21"),
),
},
data.ImportStep("site_credential.0.password"),
})
}

func TestAccLinuxFunctionApp_appStackJavaUpdate(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_linux_function_app", "test")
r := LinuxFunctionAppResource{}
Expand Down
32 changes: 32 additions & 0 deletions internal/services/appservice/linux_web_app_resource_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1200,6 +1200,38 @@ func TestAccLinuxWebApp_withJava8JBOSSEAP73(t *testing.T) {
})
}

func TestAccLinuxWebApp_withJre17Java(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_linux_web_app", "test")
r := LinuxWebAppResource{}

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.java(data, "17", "JAVA", "17"),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
check.That(data.ResourceName).Key("site_config.0.linux_fx_version").HasValue("JAVA|17-java17"),
),
},
data.ImportStep("site_credential.0.password"),
})
}

func TestAccLinuxWebApp_withJre21Java(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_linux_web_app", "test")
r := LinuxWebAppResource{}

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.java(data, "21", "JAVA", "21"),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
check.That(data.ResourceName).Key("site_config.0.linux_fx_version").HasValue("JAVA|21-java21"),
),
},
data.ImportStep("site_credential.0.password"),
})
}

// TODO - finish known Java matrix combination tests...?

func TestAccLinuxWebApp_withDocker(t *testing.T) {
Expand Down
32 changes: 32 additions & 0 deletions internal/services/appservice/windows_function_app_resource_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1241,6 +1241,38 @@ func TestAccWindowsFunctionApp_appStackJava11(t *testing.T) {
})
}

func TestAccWindowsFunctionApp_appStackJava17(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_windows_function_app", "test")
r := WindowsFunctionAppResource{}

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.appStackJava(data, SkuBasicPlan, "17"),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
check.That(data.ResourceName).Key("kind").HasValue("functionapp"),
),
},
data.ImportStep("site_credential.0.password"),
})
}

func TestAccWindowsFunctionApp_appStackJava21(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_windows_function_app", "test")
r := WindowsFunctionAppResource{}

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.appStackJava(data, SkuBasicPlan, "21"),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
check.That(data.ResourceName).Key("kind").HasValue("functionapp"),
),
},
data.ImportStep("site_credential.0.password"),
})
}

func TestAccWindowsFunctionApp_appStackJavaUpdate(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_windows_function_app", "test")
r := WindowsFunctionAppResource{}
Expand Down
15 changes: 15 additions & 0 deletions internal/services/appservice/windows_web_app_resource_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -976,6 +976,21 @@ func TestAccWindowsWebApp_withJava17Embedded(t *testing.T) {
})
}

func TestAccWindowsWebApp_withJava21Embedded(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_windows_web_app", "test")
r := WindowsWebAppResource{}

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.java(data, "21"),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
),
},
data.ImportStep("site_credential.0.password"),
})
}

func TestAccWindowsWebApp_withJava1702Embedded(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_windows_web_app", "test")
r := WindowsWebAppResource{}
Expand Down
10 changes: 5 additions & 5 deletions website/docs/r/function_app.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ resource "azurerm_function_app" "example" {

The following arguments are supported:

* `name` - (Required) Specifies the name of the Function App. Changing this forces a new resource to be created. Limit the function name to 32 characters to avoid naming collisions. For more information about [Function App naming rule](https://docs.microsoft.com/azure/azure-resource-manager/management/resource-name-rules#microsoftweb).
* `name` - (Required) Specifies the name of the Function App. Changing this forces a new resource to be created. Limit the function name to 32 characters to avoid naming collisions. For more information about [Function App naming rule](https://docs.microsoft.com/azure/azure-resource-manager/management/resource-name-rules#microsoftweb).

* `resource_group_name` - (Required) The name of the resource group in which to create the Function App. Changing this forces a new resource to be created.

Expand Down Expand Up @@ -297,9 +297,9 @@ The `site_config` block supports the following:

~> **NOTE:** This setting is incompatible with the `source_control` block which updates this value based on the setting provided.

* `scm_use_main_ip_restriction` - (Optional) IP security restrictions for scm to use main. Defaults to `false`.
* `scm_use_main_ip_restriction` - (Optional) IP security restrictions for scm to use main. Defaults to `false`.

-> **NOTE** Any `scm_ip_restriction` blocks configured are ignored by the service when `scm_use_main_ip_restriction` is set to `true`. Any scm restrictions will become active if this is subsequently set to `false` or removed.
-> **NOTE** Any `scm_ip_restriction` blocks configured are ignored by the service when `scm_use_main_ip_restriction` is set to `true`. Any scm restrictions will become active if this is subsequently set to `false` or removed.

* `use_32_bit_worker_process` - (Optional) Should the Function App run in 32 bit mode, rather than 64 bit mode? Defaults to `true`.

Expand Down Expand Up @@ -431,7 +431,7 @@ A `ip_restriction` block supports the following:

* `priority` - (Optional) The priority for this IP Restriction. Restrictions are enforced in priority order. By default, the priority is set to 65000 if not specified.

* `action` - (Optional) Does this restriction `Allow` or `Deny` access for this IP range. Defaults to `Allow`.
* `action` - (Optional) Does this restriction `Allow` or `Deny` access for this IP range. Defaults to `Allow`.

* `headers` - (Optional) The `headers` block for this specific `ip_restriction` as defined below.

Expand All @@ -449,7 +449,7 @@ A `scm_ip_restriction` block supports the following:

* `name` - (Optional) The name for this IP Restriction.

* `priority` - (Optional) The priority for this IP Restriction. Restrictions are enforced in priority order. By default, priority is set to 65000 if not specified.
* `priority` - (Optional) The priority for this IP Restriction. Restrictions are enforced in priority order. By default, priority is set to 65000 if not specified.

* `action` - (Optional) Allow or Deny access for this IP range. Defaults to `Allow`.

Expand Down
4 changes: 3 additions & 1 deletion website/docs/r/linux_function_app.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,9 @@ A `application_stack` block supports the following:

* `use_dotnet_isolated_runtime` - (Optional) Should the DotNet process use an isolated runtime. Defaults to `false`.

* `java_version` - (Optional) The Version of Java to use. Supported versions include `8`, `11` & `17`.
* `java_version` - (Optional) The Version of Java to use. Supported versions include `8`, `11`, `17`, `21`.

~> **NOTE:** The value `21` is currently in Preview for `java_version`.

* `node_version` - (Optional) The version of Node to run. Possible values include `12`, `14`, `16`, `18` and `20`.

Expand Down
2 changes: 1 addition & 1 deletion website/docs/r/linux_web_app.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ An `application_stack` block supports the following:

* `java_server_version` - (Optional) The Version of the `java_server` to use.

* `java_version` - (Optional) The Version of Java to use. Possible values include `8`, `11`, and `17`.
* `java_version` - (Optional) The Version of Java to use. Possible values include `8`, `11`, `17`, and `21`.

~> **NOTE:** The valid version combinations for `java_version`, `java_server` and `java_server_version` can be checked from the command line via `az webapp list-runtimes --linux`.

Expand Down
2 changes: 1 addition & 1 deletion website/docs/r/windows_function_app.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ A `application_stack` block supports the following:

* `use_dotnet_isolated_runtime` - (Optional) Should the DotNet process use an isolated runtime. Defaults to `false`.

* `java_version` - (Optional) The Version of Java to use. Supported versions include `1.8`, `11` & `17` (In-Preview).
* `java_version` - (Optional) The Version of Java to use. Supported versions include `1.8`, `11`, `17`, `21` (In-Preview).

* `node_version` - (Optional) The version of Node to run. Possible values include `~12`, `~14`, `~16`, `~18` and `~20`.

Expand Down

0 comments on commit aa8b3ee

Please sign in to comment.