Skip to content

Commit

Permalink
container apps - support for additional settings in container apps pr…
Browse files Browse the repository at this point in the history
…obes (#27551)

* Support for additional settings in container apps for liveness_probe, startup_probe and readiness_probe #25457

* add flatten / expand logic

* fix field name

* Remove SuccessThreshold from ContainerAppLivenessProbe and ContainerAppStartupProbe

* add documentation
  • Loading branch information
SpartakusMd authored Oct 24, 2024
1 parent 8aba496 commit b0ddd5f
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2199,6 +2199,7 @@ resource "azurerm_container_app" "test" {
transport = "HTTP"
port = 5000
path = "/uptime"
initial_delay = 5
timeout = 2
failure_count_threshold = 1
success_count_threshold = 1
Expand Down Expand Up @@ -2227,6 +2228,7 @@ resource "azurerm_container_app" "test" {
startup_probe {
transport = "TCP"
port = 5000
initial_delay = 5
timeout = 5
failure_count_threshold = 1
}
Expand Down
76 changes: 55 additions & 21 deletions internal/services/containerapps/helpers/container_apps.go
Original file line number Diff line number Diff line change
Expand Up @@ -1734,6 +1734,7 @@ type ContainerAppReadinessProbe struct {
Port int64 `tfschema:"port"`
Path string `tfschema:"path"`
Headers []HttpHeader `tfschema:"header"`
InitialDelay int64 `tfschema:"initial_delay"`
Interval int64 `tfschema:"interval_seconds"`
Timeout int64 `tfschema:"timeout"`
FailureThreshold int64 `tfschema:"failure_count_threshold"`
Expand Down Expand Up @@ -1799,6 +1800,14 @@ func ContainerAppReadinessProbeSchema() *pluginsdk.Schema {
},
},

"initial_delay": {
Type: pluginsdk.TypeInt,
Optional: true,
Default: 0,
ValidateFunc: validation.IntBetween(0, 60),
Description: "The number of seconds elapsed after the container has started before the probe is initiated. Possible values are between `0` and `60`. Defaults to `0` seconds.",
},

"interval_seconds": {
Type: pluginsdk.TypeInt,
Optional: true,
Expand All @@ -1819,8 +1828,8 @@ func ContainerAppReadinessProbeSchema() *pluginsdk.Schema {
Type: pluginsdk.TypeInt,
Optional: true,
Default: 3,
ValidateFunc: validation.IntBetween(1, 10),
Description: "The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`.",
ValidateFunc: validation.IntBetween(1, 30),
Description: "The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `30`. Defaults to `3`.",
},

"success_count_threshold": {
Expand Down Expand Up @@ -1885,6 +1894,12 @@ func ContainerAppReadinessProbeSchemaComputed() *pluginsdk.Schema {
},
},

"initial_delay": {
Type: pluginsdk.TypeInt,
Computed: true,
Description: "The number of seconds elapsed after the container has started before the probe is initiated. Possible values are between `0` and `60`. Defaults to `0` seconds.",
},

"interval_seconds": {
Type: pluginsdk.TypeInt,
Computed: true,
Expand All @@ -1900,7 +1915,7 @@ func ContainerAppReadinessProbeSchemaComputed() *pluginsdk.Schema {
"failure_count_threshold": {
Type: pluginsdk.TypeInt,
Computed: true,
Description: "The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`.",
Description: "The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `30`. Defaults to `3`.",
},

"success_count_threshold": {
Expand All @@ -1916,11 +1931,12 @@ func ContainerAppReadinessProbeSchemaComputed() *pluginsdk.Schema {
func expandContainerAppReadinessProbe(input ContainerAppReadinessProbe) containerapps.ContainerAppProbe {
probeType := containerapps.TypeReadiness
result := containerapps.ContainerAppProbe{
Type: &probeType,
PeriodSeconds: pointer.To(input.Interval),
TimeoutSeconds: pointer.To(input.Timeout),
FailureThreshold: pointer.To(input.FailureThreshold),
SuccessThreshold: pointer.To(input.SuccessThreshold),
Type: &probeType,
InitialDelaySeconds: pointer.To(input.InitialDelay),
PeriodSeconds: pointer.To(input.Interval),
TimeoutSeconds: pointer.To(input.Timeout),
FailureThreshold: pointer.To(input.FailureThreshold),
SuccessThreshold: pointer.To(input.SuccessThreshold),
}

switch p := strings.ToUpper(input.Transport); p {
Expand Down Expand Up @@ -1957,6 +1973,7 @@ func expandContainerAppReadinessProbe(input ContainerAppReadinessProbe) containe
func flattenContainerAppReadinessProbe(input containerapps.ContainerAppProbe) []ContainerAppReadinessProbe {
result := make([]ContainerAppReadinessProbe, 0)
probe := ContainerAppReadinessProbe{
InitialDelay: pointer.From(input.InitialDelaySeconds),
Interval: pointer.From(input.PeriodSeconds),
Timeout: pointer.From(input.TimeoutSeconds),
FailureThreshold: pointer.From(input.FailureThreshold),
Expand Down Expand Up @@ -2070,8 +2087,8 @@ func ContainerAppLivenessProbeSchema() *pluginsdk.Schema {
Type: pluginsdk.TypeInt,
Optional: true,
Default: 1,
ValidateFunc: validation.IntBetween(1, 60),
Description: "The time in seconds to wait after the container has started before the probe is started.",
ValidateFunc: validation.IntBetween(0, 60),
Description: "The number of seconds elapsed after the container has started before the probe is initiated. Possible values are between `0` and `60`. Defaults to `1` seconds.",
},

"interval_seconds": {
Expand All @@ -2094,8 +2111,8 @@ func ContainerAppLivenessProbeSchema() *pluginsdk.Schema {
Type: pluginsdk.TypeInt,
Optional: true,
Default: 3,
ValidateFunc: validation.IntBetween(1, 10),
Description: "The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`.",
ValidateFunc: validation.IntBetween(1, 30),
Description: "The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `30`. Defaults to `3`.",
},

"termination_grace_period_seconds": {
Expand Down Expand Up @@ -2161,7 +2178,7 @@ func ContainerAppLivenessProbeSchemaComputed() *pluginsdk.Schema {
"initial_delay": {
Type: pluginsdk.TypeInt,
Computed: true,
Description: "The time in seconds to wait after the container has started before the probe is started.",
Description: "The number of seconds elapsed after the container has started before the probe is initiated. Possible values are between `0` and `60`. Defaults to `1` seconds.",
},

"interval_seconds": {
Expand All @@ -2179,7 +2196,7 @@ func ContainerAppLivenessProbeSchemaComputed() *pluginsdk.Schema {
"failure_count_threshold": {
Type: pluginsdk.TypeInt,
Computed: true,
Description: "The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`.",
Description: "The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `30`. Defaults to `3`.",
},

"termination_grace_period_seconds": {
Expand Down Expand Up @@ -2279,6 +2296,7 @@ type ContainerAppStartupProbe struct {
Port int64 `tfschema:"port"`
Path string `tfschema:"path"`
Headers []HttpHeader `tfschema:"header"`
InitialDelay int64 `tfschema:"initial_delay"`
Interval int64 `tfschema:"interval_seconds"`
Timeout int64 `tfschema:"timeout"`
FailureThreshold int64 `tfschema:"failure_count_threshold"`
Expand Down Expand Up @@ -2344,6 +2362,14 @@ func ContainerAppStartupProbeSchema() *pluginsdk.Schema {
},
},

"initial_delay": {
Type: pluginsdk.TypeInt,
Optional: true,
Default: 0,
ValidateFunc: validation.IntBetween(0, 60),
Description: "The number of seconds elapsed after the container has started before the probe is initiated. Possible values are between `0` and `60`. Defaults to `0` seconds.",
},

"interval_seconds": {
Type: pluginsdk.TypeInt,
Optional: true,
Expand All @@ -2364,8 +2390,8 @@ func ContainerAppStartupProbeSchema() *pluginsdk.Schema {
Type: pluginsdk.TypeInt,
Optional: true,
Default: 3,
ValidateFunc: validation.IntBetween(1, 10),
Description: "The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`.",
ValidateFunc: validation.IntBetween(1, 30),
Description: "The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `30`. Defaults to `3`.",
},

"termination_grace_period_seconds": {
Expand Down Expand Up @@ -2424,6 +2450,12 @@ func ContainerAppStartupProbeSchemaComputed() *pluginsdk.Schema {
},
},

"initial_delay": {
Type: pluginsdk.TypeInt,
Computed: true,
Description: "The number of seconds elapsed after the container has started before the probe is initiated. Possible values are between `0` and `60`. Defaults to `0` seconds.",
},

"interval_seconds": {
Type: pluginsdk.TypeInt,
Computed: true,
Expand All @@ -2439,7 +2471,7 @@ func ContainerAppStartupProbeSchemaComputed() *pluginsdk.Schema {
"failure_count_threshold": {
Type: pluginsdk.TypeInt,
Computed: true,
Description: "The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`.",
Description: "The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `30`. Defaults to `3`.",
},

"termination_grace_period_seconds": {
Expand All @@ -2455,10 +2487,11 @@ func ContainerAppStartupProbeSchemaComputed() *pluginsdk.Schema {
func expandContainerAppStartupProbe(input ContainerAppStartupProbe) containerapps.ContainerAppProbe {
probeType := containerapps.TypeStartup
result := containerapps.ContainerAppProbe{
Type: &probeType,
PeriodSeconds: pointer.To(input.Interval),
TimeoutSeconds: pointer.To(input.Timeout),
FailureThreshold: pointer.To(input.FailureThreshold),
Type: &probeType,
InitialDelaySeconds: pointer.To(input.InitialDelay),
PeriodSeconds: pointer.To(input.Interval),
TimeoutSeconds: pointer.To(input.Timeout),
FailureThreshold: pointer.To(input.FailureThreshold),
}

switch p := strings.ToUpper(input.Transport); p {
Expand Down Expand Up @@ -2495,6 +2528,7 @@ func expandContainerAppStartupProbe(input ContainerAppStartupProbe) containerapp
func flattenContainerAppStartupProbe(input containerapps.ContainerAppProbe) []ContainerAppStartupProbe {
result := make([]ContainerAppStartupProbe, 0)
probe := ContainerAppStartupProbe{
InitialDelay: pointer.From(input.InitialDelaySeconds),
Interval: pointer.From(input.PeriodSeconds),
Timeout: pointer.From(input.TimeoutSeconds),
FailureThreshold: pointer.From(input.FailureThreshold),
Expand Down
10 changes: 7 additions & 3 deletions website/docs/d/container_app.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ A `liveness_probe` block supports the following:

* `host` - The probe hostname. Defaults to the pod IP address. Setting a value for `Host` in `headers` can be used to override this for `HTTP` and `HTTPS` type probes.

* `initial_delay` - The time in seconds to wait after the container has started before the probe is started.
* `initial_delay` - The number of seconds elapsed after the container has started before the probe is initiated. Possible values are between `0` and `60`. Defaults to `1` seconds.

* `interval_seconds` - How often, in seconds, the probe should run. Possible values are in the range `1` - `240`. Defaults to `10`.

Expand Down Expand Up @@ -187,12 +187,14 @@ An `env` block supports the following:

A `readiness_probe` block supports the following:

* `failure_count_threshold` - The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`.
* `failure_count_threshold` - The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `30`. Defaults to `3`.

* `header` - A `header` block as detailed below.

* `host` - The probe hostname. Defaults to the pod IP address. Setting a value for `Host` in `headers` can be used to override this for `HTTP` and `HTTPS` type probes.

* `initial_delay` - The number of seconds elapsed after the container has started before the probe is initiated. Possible values are between `0` and `60`. Defaults to `0` seconds.

* `interval_seconds` - How often, in seconds, the probe should run. Possible values are between `1` and `240`. Defaults to `10`

* `path` - The URI to use for http type probes. Not valid for `TCP` type probes. Defaults to `/`.
Expand All @@ -217,12 +219,14 @@ A `header` block supports the following:

A `startup_probe` block supports the following:

* `failure_count_threshold` - The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`.
* `failure_count_threshold` - The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `30`. Defaults to `3`.

* `header` - A `header` block as detailed below.

* `host` - The value for the host header which should be sent with this probe. If unspecified, the IP Address of the Pod is used as the host header. Setting a value for `Host` in `headers` can be used to override this for `HTTP` and `HTTPS` type probes.

* `initial_delay` - The number of seconds elapsed after the container has started before the probe is initiated. Possible values are between `0` and `60`. Defaults to `0` seconds.

* `interval_seconds` - How often, in seconds, the probe should run. Possible values are between `1` and `240`. Defaults to `10`

* `path` - The URI to use with the `host` for http type probes. Not valid for `TCP` type probes. Defaults to `/`.
Expand Down
10 changes: 7 additions & 3 deletions website/docs/r/container_app.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ A `liveness_probe` block supports the following:

* `host` - (Optional) The probe hostname. Defaults to the pod IP address. Setting a value for `Host` in `headers` can be used to override this for `HTTP` and `HTTPS` type probes.

* `initial_delay` - (Optional) The time in seconds to wait after the container has started before the probe is started.
* `initial_delay` - (Optional) The number of seconds elapsed after the container has started before the probe is initiated. Possible values are between `0` and `60`. Defaults to `1` seconds.

* `interval_seconds` - (Optional) How often, in seconds, the probe should run. Possible values are in the range `1` - `240`. Defaults to `10`.

Expand Down Expand Up @@ -298,12 +298,14 @@ An `env` block supports the following:

A `readiness_probe` block supports the following:

* `failure_count_threshold` - (Optional) The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`.
* `failure_count_threshold` - (Optional) The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `30`. Defaults to `3`.

* `header` - (Optional) A `header` block as detailed below.

* `host` - (Optional) The probe hostname. Defaults to the pod IP address. Setting a value for `Host` in `headers` can be used to override this for `HTTP` and `HTTPS` type probes.

* `initial_delay` - (Optional) The number of seconds elapsed after the container has started before the probe is initiated. Possible values are between `0` and `60`. Defaults to `0` seconds.

* `interval_seconds` - (Optional) How often, in seconds, the probe should run. Possible values are between `1` and `240`. Defaults to `10`

* `path` - (Optional) The URI to use for http type probes. Not valid for `TCP` type probes. Defaults to `/`.
Expand All @@ -328,12 +330,14 @@ A `header` block supports the following:

A `startup_probe` block supports the following:

* `failure_count_threshold` - (Optional) The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`.
* `failure_count_threshold` - (Optional) The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `30`. Defaults to `3`.

* `header` - (Optional) A `header` block as detailed below.

* `host` - (Optional) The value for the host header which should be sent with this probe. If unspecified, the IP Address of the Pod is used as the host header. Setting a value for `Host` in `headers` can be used to override this for `HTTP` and `HTTPS` type probes.

* `initial_delay` - (Optional) The number of seconds elapsed after the container has started before the probe is initiated. Possible values are between `0` and `60`. Defaults to `0` seconds.

* `interval_seconds` - (Optional) How often, in seconds, the probe should run. Possible values are between `1` and `240`. Defaults to `10`

* `path` - (Optional) The URI to use with the `host` for http type probes. Not valid for `TCP` type probes. Defaults to `/`.
Expand Down

0 comments on commit b0ddd5f

Please sign in to comment.