@@ -23,6 +23,7 @@ import (
2323 "time"
2424
2525 "github.com/kelseyhightower/envconfig"
26+ nats "github.com/nats-io/nats.go"
2627 "go.uber.org/zap"
2728 corev1 "k8s.io/api/core/v1"
2829 apierrs "k8s.io/apimachinery/pkg/api/errors"
@@ -36,7 +37,9 @@ import (
3637
3738 configmapinformer "knative.dev/pkg/client/injection/kube/informers/core/v1/configmap"
3839
40+ "knative.dev/eventing-natss/pkg/broker/constants"
3941 "knative.dev/eventing-natss/pkg/broker/contract"
42+ "knative.dev/eventing-natss/pkg/common/configloader/fsloader"
4043 commonnats "knative.dev/eventing-natss/pkg/common/nats"
4144)
4245
@@ -49,29 +52,23 @@ const (
4952)
5053
5154type envConfig struct {
52- NatsURL string `envconfig:"NATS_URL" required:"true"`
53- Port int `envconfig:"PORT" default:"8080"`
55+ Port int `envconfig:"PORT" default:"8080"`
5456}
5557
5658// NewController creates a new shared ingress controller
5759func NewController (ctx context.Context , _ configmap.Watcher ) * controller.Impl {
5860 logger := logging .FromContext (ctx )
5961
60- // Load environment configuration
61- env := & envConfig {}
62- if err := envconfig .Process ("" , env ); err != nil {
62+ env , err := loadEnvConfig ()
63+ if err != nil {
6364 logger .Fatalw ("Failed to process environment variables" , zap .Error (err ))
6465 }
6566
66- logger .Infow ("Starting shared broker ingress" ,
67- zap .String ("nats_url" , env .NatsURL ),
68- zap .Int ("port" , env .Port ),
69- )
67+ logger .Infow ("Starting shared broker ingress" , zap .Int ("port" , env .Port ))
7068
71- // Create NATS connection using URL from environment variable
72- natsConn , err := commonnats .NewNatsConnFromURL (ctx , env .NatsURL )
69+ natsConn , err := buildNatsConn (ctx )
7370 if err != nil {
74- logger .Fatalw ("Failed to create NATS connection" , zap .Error (err ))
71+ logger .Fatalw ("Failed to initialize NATS connection" , zap .Error (err ))
7572 }
7673
7774 // Create JetStream context
@@ -154,6 +151,29 @@ func NewController(ctx context.Context, _ configmap.Watcher) *controller.Impl {
154151 return impl
155152}
156153
154+ // loadEnvConfig reads environment variables into envConfig.
155+ func loadEnvConfig () (* envConfig , error ) {
156+ env := & envConfig {}
157+ return env , envconfig .Process ("" , env )
158+ }
159+
160+ // buildNatsConn loads NATS configuration from the mounted ConfigMap and creates a connection.
161+ func buildNatsConn (ctx context.Context ) (* nats.Conn , error ) {
162+ fsLoader , err := fsloader .Get (ctx )
163+ if err != nil {
164+ return nil , fmt .Errorf ("failed to get ConfigMap loader from context: %w" , err )
165+ }
166+ cmData , err := fsLoader (constants .SettingsConfigMapMountPath )
167+ if err != nil {
168+ return nil , fmt .Errorf ("failed to load NATS ConfigMap: %w" , err )
169+ }
170+ natsConfig , err := commonnats .LoadEventingNatsConfig (cmData )
171+ if err != nil {
172+ return nil , fmt .Errorf ("failed to parse NATS configuration: %w" , err )
173+ }
174+ return commonnats .NewNatsConn (ctx , natsConfig )
175+ }
176+
157177// filterContractConfigMap returns true if the object is the contract ConfigMap
158178func filterContractConfigMap (obj interface {}) bool {
159179 if obj == nil {
0 commit comments