From 5d08105e1b6ec2065c3e73aabde1d348d8d57056 Mon Sep 17 00:00:00 2001 From: T Date: Fri, 1 Mar 2024 19:38:41 +0000 Subject: [PATCH 1/6] add dapr protocol property to container apps --- src/Farmer/Arm/App.fs | 5 ++- src/Farmer/Builders/Builders.ContainerApps.fs | 43 +++++++++++++++++-- src/Tests/ContainerApps.fs | 6 +++ 3 files changed, 49 insertions(+), 5 deletions(-) diff --git a/src/Farmer/Arm/App.fs b/src/Farmer/Arm/App.fs index 0e1564421..2ac5e2cad 100644 --- a/src/Farmer/Arm/App.fs +++ b/src/Farmer/Arm/App.fs @@ -151,7 +151,9 @@ type ContainerApp = ScaleRules: Map Identity: ManagedIdentity Replicas: {| Min: int; Max: int |} option - DaprConfig: {| AppId: string; Port: uint16 option |} option + DaprConfig: {| AppId: string + Port: uint16 option + Protocol: string |} option Secrets: Map EnvironmentVariables: Map ImageRegistryCredentials: ImageRegistryAuthentication list @@ -313,6 +315,7 @@ type ContainerApp = enabled = true appId = settings.AppId appPort = settings.Port |> Option.toNullable + appProtocol = settings.Protocol |} :> obj | None -> {| enabled = false |} diff --git a/src/Farmer/Builders/Builders.ContainerApps.fs b/src/Farmer/Builders/Builders.ContainerApps.fs index 6eae39e5f..b1559b22e 100644 --- a/src/Farmer/Builders/Builders.ContainerApps.fs +++ b/src/Farmer/Builders/Builders.ContainerApps.fs @@ -39,7 +39,8 @@ type ContainerAppConfig = Identity: ManagedIdentity Replicas: {| Min: int; Max: int |} option DaprConfig: {| AppId: string option - Port: uint16 option |} option + Port: uint16 option + Protocol: string option |} option Secrets: Map EnvironmentVariables: Map Volumes: Map @@ -127,7 +128,12 @@ type ContainerEnvironmentConfig = containerApp.DaprConfig |> Option.map (fun x -> match x.AppId with - | Some appId -> {| AppId = appId; Port = x.Port |} + | Some appId -> + {| + AppId = appId + Port = x.Port + Protocol = Option.defaultValue "http" x.Protocol + |} | None -> raiseFarmer $"The container app '{containerApp.Name.Value}' requires a Dapr App ID when Dapr is enabled.") @@ -441,6 +447,9 @@ type ContainerAppBuilder() = Some(External(existingPort, Some transport)) } + + + /// Configures Dapr App Id in the Azure Container App. [] member _.SetDaprAppId(state: ContainerAppConfig, appId) = @@ -448,7 +457,12 @@ type ContainerAppBuilder() = DaprConfig = state.DaprConfig |> Option.map (fun x -> {| x with AppId = Some appId |}) - |> Option.defaultWith (fun () -> {| AppId = Some appId; Port = None |}) + |> Option.defaultWith (fun () -> + {| + AppId = Some appId + Port = None + Protocol = None + |}) |> Some } @@ -459,7 +473,28 @@ type ContainerAppBuilder() = DaprConfig = state.DaprConfig |> Option.map (fun x -> {| x with Port = Some port |}) - |> Option.defaultWith (fun () -> {| AppId = None; Port = Some port |}) + |> Option.defaultWith (fun () -> + {| + AppId = None + Port = Some port + Protocol = None + |}) + |> Some + } + + /// Configures Dapr protocol in the Azure Container App. + [] + member _.SetDaprProtocol(state: ContainerAppConfig, protocol) = + { state with + DaprConfig = + state.DaprConfig + |> Option.map (fun x -> {| x with Protocol = Some protocol |}) + |> Option.defaultWith (fun () -> + {| + AppId = None + Port = None + Protocol = Some protocol + |}) |> Some } diff --git a/src/Tests/ContainerApps.fs b/src/Tests/ContainerApps.fs index bee322b53..99486f514 100644 --- a/src/Tests/ContainerApps.fs +++ b/src/Tests/ContainerApps.fs @@ -60,6 +60,8 @@ let fullContainerAppDeployment = ingress_target_port 80us ingress_transport Auto dapr_app_id "http" + dapr_app_port 5000us + dapr_app_protocol "grpc" add_http_scale_rule "http-rule" { ConcurrentRequests = 100 } } @@ -414,6 +416,10 @@ let tests = Expect.isNotNull ruleAuth "auth[0] was null" Expect.equal (ruleAuth["secretRef"] |> string) connectionSecretName "Incorrect secretRef" Expect.equal (ruleAuth["triggerParameter"] |> string) "connection" "Incorrect triggerParameter" + + let daprConfig = httpContainerApp.SelectToken("properties.configuration.dapr") + Expect.equal (daprConfig["appPort"] |> uint16) 5000us "Incorrect dapr appPort" + Expect.equal (daprConfig["appProtocol"] |> string) "grpc" "Incorrect dapr appProtocol" } test "Makes container app with MSI" { From 472672a867a2c31dacbbc9e25bb159342d4b0179 Mon Sep 17 00:00:00 2001 From: T Date: Mon, 1 Apr 2024 21:05:28 +0100 Subject: [PATCH 2/6] update documentation --- docs/content/api-overview/resources/container-apps.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/content/api-overview/resources/container-apps.md b/docs/content/api-overview/resources/container-apps.md index 741635151..c5e0ffb2c 100644 --- a/docs/content/api-overview/resources/container-apps.md +++ b/docs/content/api-overview/resources/container-apps.md @@ -46,6 +46,7 @@ The Container Apps builder (`containerApp`) is used to define one or more contai | system_identity | Activates the system identity of the Azure Container App. | | dapr_app_id | Sets the dapr app id for the app. | | dapr_app_port | Sets the dapr app port for the app. | +| dapr_app_protocol | Sets the dapr app protocol for the app. | | replicas | Sets the minimum and maximum replicas to scale the container app. | | active_revision_mode | Indicates whether multiple version of a container app can be active at once.| | add_registry_credentials | Adds container image registry credentials for images in this container app, which are a list of server and usernames. Passwords are supplied as secure parameters. | From 7db1beb1a3cb3134cfe5b33e3661d864c3f977fc Mon Sep 17 00:00:00 2001 From: T Date: Mon, 1 Apr 2024 21:19:18 +0100 Subject: [PATCH 3/6] change dapr protocol config to optional --- src/Farmer/Arm/App.fs | 2 +- src/Farmer/Builders/Builders.ContainerApps.fs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Farmer/Arm/App.fs b/src/Farmer/Arm/App.fs index 2ac5e2cad..5454dbeb5 100644 --- a/src/Farmer/Arm/App.fs +++ b/src/Farmer/Arm/App.fs @@ -153,7 +153,7 @@ type ContainerApp = Replicas: {| Min: int; Max: int |} option DaprConfig: {| AppId: string Port: uint16 option - Protocol: string |} option + Protocol: string option |} option Secrets: Map EnvironmentVariables: Map ImageRegistryCredentials: ImageRegistryAuthentication list diff --git a/src/Farmer/Builders/Builders.ContainerApps.fs b/src/Farmer/Builders/Builders.ContainerApps.fs index b1559b22e..81dc8a3ab 100644 --- a/src/Farmer/Builders/Builders.ContainerApps.fs +++ b/src/Farmer/Builders/Builders.ContainerApps.fs @@ -132,7 +132,7 @@ type ContainerEnvironmentConfig = {| AppId = appId Port = x.Port - Protocol = Option.defaultValue "http" x.Protocol + Protocol = x.Protocol |} | None -> raiseFarmer From 3449dde2d9b832e360ea0d8704aa3b315763e31f Mon Sep 17 00:00:00 2001 From: T Date: Mon, 1 Apr 2024 22:07:21 +0100 Subject: [PATCH 4/6] update release notes --- RELEASE_NOTES.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 6826451d5..2e2a6ceda 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,6 +1,9 @@ Release Notes ============= +## 1.8.10 +* Container Apps: Add support for setting Dapr protocol (#1083). + ## 1.8.9 * Managed Identity: Support for federated identity credentials. From c13aa18381069535ec465b5a03eada2b7e5866c0 Mon Sep 17 00:00:00 2001 From: T Date: Mon, 1 Apr 2024 22:09:52 +0100 Subject: [PATCH 5/6] cleanup --- src/Farmer/Builders/Builders.ContainerApps.fs | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Farmer/Builders/Builders.ContainerApps.fs b/src/Farmer/Builders/Builders.ContainerApps.fs index 81dc8a3ab..dd83d6e14 100644 --- a/src/Farmer/Builders/Builders.ContainerApps.fs +++ b/src/Farmer/Builders/Builders.ContainerApps.fs @@ -447,9 +447,6 @@ type ContainerAppBuilder() = Some(External(existingPort, Some transport)) } - - - /// Configures Dapr App Id in the Azure Container App. [] member _.SetDaprAppId(state: ContainerAppConfig, appId) = From f9ebec220d422d318234c7f0ef7d82ff672eb6d2 Mon Sep 17 00:00:00 2001 From: T Date: Tue, 2 Apr 2024 09:03:29 +0100 Subject: [PATCH 6/6] fix formatting in ContainerApps.fs --- src/Tests/ContainerApps.fs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Tests/ContainerApps.fs b/src/Tests/ContainerApps.fs index 99486f514..9060947b7 100644 --- a/src/Tests/ContainerApps.fs +++ b/src/Tests/ContainerApps.fs @@ -416,8 +416,8 @@ let tests = Expect.isNotNull ruleAuth "auth[0] was null" Expect.equal (ruleAuth["secretRef"] |> string) connectionSecretName "Incorrect secretRef" Expect.equal (ruleAuth["triggerParameter"] |> string) "connection" "Incorrect triggerParameter" - - let daprConfig = httpContainerApp.SelectToken("properties.configuration.dapr") + + let daprConfig = httpContainerApp.SelectToken("properties.configuration.dapr") Expect.equal (daprConfig["appPort"] |> uint16) 5000us "Incorrect dapr appPort" Expect.equal (daprConfig["appProtocol"] |> string) "grpc" "Incorrect dapr appProtocol" }