@@ -51,27 +51,35 @@ type Parser struct {
5151 featureEnabledCombinedServiceRoutes bool
5252
5353 flagEnabledRegexPathPrefix bool
54+ failuresCollector * TranslationFailuresCollector
5455}
5556
5657// NewParser produces a new Parser object provided a logging mechanism
5758// and a Kubernetes object store.
5859func NewParser (
5960 logger logrus.FieldLogger ,
6061 storer store.Storer ,
61- ) * Parser {
62- return & Parser {
63- logger : logger ,
64- storer : storer ,
62+ ) ( * Parser , error ) {
63+ failuresCollector , err := NewTranslationFailuresCollector ( logger )
64+ if err != nil {
65+ return nil , fmt . Errorf ( "failed to create translation errors collector: %w" , err )
6566 }
67+
68+ return & Parser {
69+ logger : logger ,
70+ storer : storer ,
71+ failuresCollector : failuresCollector ,
72+ }, nil
6673}
6774
6875// -----------------------------------------------------------------------------
6976// Parser - Public Methods
7077// -----------------------------------------------------------------------------
7178
7279// Build creates a Kong configuration from Ingress and Custom resources
73- // defined in Kubernetes.
74- func (p * Parser ) Build () * kongstate.KongState {
80+ // defined in Kubernetes. It returns a slice of TranslationFailures which should
81+ // be used to provide users with feedback on Kubernetes objects validity.
82+ func (p * Parser ) Build () (* kongstate.KongState , []TranslationFailure ) {
7583 // parse and merge all rules together from all Kubernetes API sources
7684 ingressRules := mergeIngressRules (
7785 p .ingressRulesFromIngressV1beta1 (),
@@ -120,7 +128,7 @@ func (p *Parser) Build() *kongstate.KongState {
120128 // populate CA certificates in Kong
121129 result .CACertificates = getCACerts (p .logger , p .storer , result .Plugins )
122130
123- return & result
131+ return & result , p . popTranslationFailures ()
124132}
125133
126134// -----------------------------------------------------------------------------
@@ -174,6 +182,10 @@ func (p *Parser) EnableRegexPathPrefix() {
174182 p .flagEnabledRegexPathPrefix = true
175183}
176184
185+ func (p * Parser ) popTranslationFailures () []TranslationFailure {
186+ return p .failuresCollector .PopTranslationFailures ()
187+ }
188+
177189// -----------------------------------------------------------------------------
178190// Parser - Private Methods
179191// -----------------------------------------------------------------------------
0 commit comments