@@ -21,6 +21,7 @@ import (
2121
2222 "emperror.dev/errors"
2323 "github.com/cisco-open/operator-tools/pkg/secret"
24+ "github.com/go-logr/logr"
2425 "github.com/siliconbrain/go-seqs/seqs"
2526 "k8s.io/apimachinery/pkg/types"
2627 "sigs.k8s.io/controller-runtime/pkg/client"
@@ -45,15 +46,17 @@ func RenderConfigInto(in Input, out io.Writer) error {
4546}
4647
4748type Input struct {
48- Name string
49- Namespace string
50- SyslogNGSpec * v1beta1.SyslogNGSpec
51- ClusterOutputs []v1beta1.SyslogNGClusterOutput
52- Outputs []v1beta1.SyslogNGOutput
53- ClusterFlows []v1beta1.SyslogNGClusterFlow
54- Flows []v1beta1.SyslogNGFlow
55- SecretLoaderFactory SecretLoaderFactory
56- SourcePort int
49+ Name string
50+ Namespace string
51+ SyslogNGSpec * v1beta1.SyslogNGSpec
52+ ClusterOutputs []v1beta1.SyslogNGClusterOutput
53+ Outputs []v1beta1.SyslogNGOutput
54+ ClusterFlows []v1beta1.SyslogNGClusterFlow
55+ Flows []v1beta1.SyslogNGFlow
56+ SecretLoaderFactory SecretLoaderFactory
57+ SourcePort int
58+ SkipInvalidResources bool
59+ Logger logr.Logger
5760}
5861
5962type outputInfo struct {
@@ -114,16 +117,30 @@ func configRenderer(in Input) (render.Renderer, error) {
114117 logDefs := make ([]render.Renderer , 0 , len (in .ClusterFlows )+ len (in .Flows ))
115118 for _ , cf := range in .ClusterFlows {
116119 if err := validateClusterOutputs (clusterOutputRefs , client .ObjectKeyFromObject (& cf ).String (), cf .Spec .GlobalOutputRefs , cf .Kind ); err != nil {
120+ if in .SkipInvalidResources {
121+ // Skip this cluster flow and continue with the next one
122+ in .Logger .Error (err , "skipping invalid SyslogNGClusterFlow" , "name" , cf .Name , "namespace" , cf .Namespace )
123+ continue
124+ }
117125 errs = errors .Append (errs , err )
118126 }
119127 logDefs = append (logDefs , renderClusterFlow (in .Name , clusterOutputRefs , sourceName , cf , in .SecretLoaderFactory ))
120128 }
121129 for _ , f := range in .Flows {
130+ var flowErrs error
122131 if err := validateClusterOutputs (clusterOutputRefs , client .ObjectKeyFromObject (& f ).String (), f .Spec .GlobalOutputRefs , f .Kind ); err != nil {
123- errs = errors .Append (errs , err )
132+ flowErrs = errors .Append (flowErrs , err )
124133 }
125134 if err := validateOutputs (outputRefs , client .ObjectKeyFromObject (& f ).String (), f .Spec .LocalOutputRefs ); err != nil {
126- errs = errors .Append (errs , err )
135+ flowErrs = errors .Append (flowErrs , err )
136+ }
137+ if flowErrs != nil {
138+ if in .SkipInvalidResources {
139+ // Skip this flow and continue with the next one
140+ in .Logger .Error (flowErrs , "skipping invalid SyslogNGFlow" , "name" , f .Name , "namespace" , f .Namespace )
141+ continue
142+ }
143+ errs = errors .Append (errs , flowErrs )
127144 }
128145 logDefs = append (logDefs , renderFlow (in .Name , clusterOutputRefs , sourceName , keyDelim (in .SyslogNGSpec .JSONKeyDelimiter ), f , in .SecretLoaderFactory ))
129146 }
0 commit comments