Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

app_service - support preview version 21 for java_version #26304

Merged
merged 6 commits into from
Dec 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
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"),
computerlove marked this conversation as resolved.
Show resolved Hide resolved
),
},
data.ImportStep("site_credential.0.password"),
})
}

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

func TestAccLinuxWebApp_withDocker(t *testing.T) {
Expand Down
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
Loading