@@ -20,16 +20,28 @@ import (
2020 "strconv"
2121 "strings"
2222
23+ "emperror.dev/errors"
2324 "github.com/cisco-open/operator-tools/pkg/secret"
25+ "github.com/siliconbrain/go-seqs/seqs"
26+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
27+ "k8s.io/apimachinery/pkg/types"
28+
2429 "github.com/kube-logging/logging-operator/pkg/sdk/logging/api/v1beta1"
2530 "github.com/kube-logging/logging-operator/pkg/sdk/logging/model/syslogng/config/model"
2631 "github.com/kube-logging/logging-operator/pkg/sdk/logging/model/syslogng/config/render"
2732 filter "github.com/kube-logging/logging-operator/pkg/sdk/logging/model/syslogng/filter"
28- "github.com/siliconbrain/go-seqs/seqs"
29- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3033)
3134
32- func renderClusterFlow (sourceName string , f v1beta1.SyslogNGClusterFlow , secretLoaderFactory SecretLoaderFactory ) render.Renderer {
35+ func validateClusterOutputs (clusterOutputRefs map [string ]types.NamespacedName , flow string , globalOutputRefs []string ) error {
36+ return seqs .Reduce (seqs .FromSlice (globalOutputRefs ), nil , func (err error , ref string ) error {
37+ if _ , ok := clusterOutputRefs [ref ]; ! ok {
38+ return errors .Append (err , errors .Errorf ("cluster output reference %s for flow %s cannot be found" , ref , flow ))
39+ }
40+ return err
41+ })
42+ }
43+
44+ func renderClusterFlow (clusterOutputRefs map [string ]types.NamespacedName , sourceName string , f v1beta1.SyslogNGClusterFlow , secretLoaderFactory SecretLoaderFactory ) render.Renderer {
3345 baseName := fmt .Sprintf ("clusterflow_%s_%s" , f .Namespace , f .Name )
3446 matchName := fmt .Sprintf ("%s_match" , baseName )
3547 filterDefs := seqs .MapWithIndex (seqs .FromSlice (f .Spec .Filters ), func (idx int , flt v1beta1.SyslogNGFilter ) render.Renderer {
@@ -48,12 +60,14 @@ func renderClusterFlow(sourceName string, f v1beta1.SyslogNGClusterFlow, secretL
4860 return parenDefStmt (filterKind (flt ), render .Literal (filterID (flt , idx , baseName )))
4961 }),
5062 )),
51- seqs .ToSlice (seqs .Map (seqs .FromSlice (f .Spec .GlobalOutputRefs ), func (ref string ) string { return clusterOutputDestName (f .Namespace , ref ) })),
63+ seqs .ToSlice (seqs .Map (seqs .FromSlice (f .Spec .GlobalOutputRefs ), func (ref string ) string {
64+ return clusterOutputDestName (clusterOutputRefs [ref ].Namespace , ref )
65+ })),
5266 ),
5367 )
5468}
5569
56- func renderFlow (controlNS string , sourceName string , keyDelim string , f v1beta1.SyslogNGFlow , secretLoaderFactory SecretLoaderFactory ) render.Renderer {
70+ func renderFlow (clusterOutputRefs map [ string ]types. NamespacedName , sourceName string , keyDelim string , f v1beta1.SyslogNGFlow , secretLoaderFactory SecretLoaderFactory ) render.Renderer {
5771 baseName := fmt .Sprintf ("flow_%s_%s" , f .Namespace , f .Name )
5872 matchName := fmt .Sprintf ("%s_match" , baseName )
5973 nsFilterName := fmt .Sprintf ("%s_ns_filter" , baseName )
@@ -80,7 +94,9 @@ func renderFlow(controlNS string, sourceName string, keyDelim string, f v1beta1.
8094 }),
8195 )),
8296 seqs .ToSlice (seqs .Concat (
83- seqs .Map (seqs .FromSlice (f .Spec .GlobalOutputRefs ), func (ref string ) string { return clusterOutputDestName (f .Namespace , ref ) }),
97+ seqs .Map (seqs .FromSlice (f .Spec .GlobalOutputRefs ), func (ref string ) string {
98+ return clusterOutputDestName (clusterOutputRefs [ref ].Namespace , ref )
99+ }),
84100 seqs .Map (seqs .FromSlice (f .Spec .LocalOutputRefs ), func (ref string ) string { return outputDestName (f .Namespace , ref ) }),
85101 )),
86102 ),
0 commit comments