diff --git a/cli/azd/pkg/apphost/aca_ingress.go b/cli/azd/pkg/apphost/aca_ingress.go index d18d7b77f9e..66388dfe0c0 100644 --- a/cli/azd/pkg/apphost/aca_ingress.go +++ b/cli/azd/pkg/apphost/aca_ingress.go @@ -53,7 +53,6 @@ const ( acaIngressSchemaHttp string = "http" acaIngressSchemaHttps string = "https" acaIngressTransportHttp2 string = "http2" - acaIngressTransportHttp string = "http" acaDefaultHttpPort string = "80" acaDefaultHttpsPort string = "443" // a target port that is resolved at deployment time @@ -70,15 +69,13 @@ func validateBindings(bindings custommaps.WithOrder[Binding]) error { return fmt.Errorf("binding %q is empty", name) } - switch binding.Scheme { - case acaIngressSchemaTcp: + // TCP scheme requires a target port to be specified + // Note: We check for TCP specifically since other schemes (http, https, redis, postgres, etc.) + // can work without explicit target ports in some scenarios + if binding.Scheme == acaIngressSchemaTcp { if binding.TargetPort == nil { return fmt.Errorf("binding %q has scheme %q but no container port", name, binding.Scheme) } - case acaIngressSchemaHttp: - case acaIngressSchemaHttps: - default: - return fmt.Errorf("binding %q has invalid scheme %q", name, binding.Scheme) } } diff --git a/cli/azd/pkg/apphost/aca_ingress_test.go b/cli/azd/pkg/apphost/aca_ingress_test.go index 8433e0282f0..198e302e2c9 100644 --- a/cli/azd/pkg/apphost/aca_ingress_test.go +++ b/cli/azd/pkg/apphost/aca_ingress_test.go @@ -134,7 +134,7 @@ func TestBuildAcaIngress(t *testing.T) { assert.Equal(t, []string{"http"}, ingressBinding) }) - t.Run("invalid schema", func(t *testing.T) { + t.Run("invalid_schema", func(t *testing.T) { bindingsManifest := `{ "http": { "scheme": "invalid", @@ -145,11 +145,14 @@ func TestBuildAcaIngress(t *testing.T) { err := json.Unmarshal([]byte(bindingsManifest), &bindings) assert.NoError(t, err) + // Custom schemes are now allowed (e.g., redis, postgres, etc.) + // The scheme should be treated as non-HTTP and use TCP transport ingress, ingressBinding, err := buildAcaIngress(bindings, 8080) - assert.Error(t, err) - assert.EqualError(t, err, `binding "http" has invalid scheme "invalid"`) - assert.Nil(t, ingress) - assert.Equal(t, []string(nil), ingressBinding) + assert.NoError(t, err) + assert.NotNil(t, ingress) + assert.Equal(t, "tcp", ingress.Transport) + assert.Equal(t, 33, ingress.TargetPort) + assert.Equal(t, []string{"http"}, ingressBinding) }) t.Run("additional ports", func(t *testing.T) {