From d7cde7252574aa50d6bcdafb12b8e67862d11167 Mon Sep 17 00:00:00 2001 From: Victor Vazquez Date: Thu, 13 Nov 2025 23:39:30 +0000 Subject: [PATCH] relax aspire binding validation to support other schemas --- cli/azd/pkg/apphost/aca_ingress.go | 11 ++++------- cli/azd/pkg/apphost/aca_ingress_test.go | 13 ++++++++----- 2 files changed, 12 insertions(+), 12 deletions(-) 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) {