@@ -19,26 +19,20 @@ package controller
1919
2020import (
2121 "context"
22- "fmt"
2322 "time"
2423
2524 "github.com/go-logr/logr"
2625 apierrs "k8s.io/apimachinery/pkg/api/errors"
27- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2826 "k8s.io/apimachinery/pkg/runtime"
2927 ktypes "k8s.io/apimachinery/pkg/types"
3028 "sigs.k8s.io/cluster-api/util/patch"
3129 ctrl "sigs.k8s.io/controller-runtime"
3230 "sigs.k8s.io/controller-runtime/pkg/client"
3331
3432 "github.com/validator-labs/validator-plugin-network/api/v1alpha1"
35- "github.com/validator-labs/validator-plugin-network/internal/constants"
36- "github.com/validator-labs/validator-plugin-network/internal/http"
37- "github.com/validator-labs/validator-plugin-network/internal/secrets"
38- "github.com/validator-labs/validator-plugin-network/internal/validators"
33+ "github.com/validator-labs/validator-plugin-network/pkg/secrets"
34+ "github.com/validator-labs/validator-plugin-network/pkg/validate"
3935 vapi "github.com/validator-labs/validator/api/v1alpha1"
40- "github.com/validator-labs/validator/pkg/types"
41- "github.com/validator-labs/validator/pkg/util"
4236 vres "github.com/validator-labs/validator/pkg/validationresult"
4337)
4438
@@ -74,16 +68,16 @@ func (r *NetworkValidatorReconciler) Reconcile(ctx context.Context, req ctrl.Req
7468 return ctrl.Result {}, err
7569 }
7670 nn := ktypes.NamespacedName {
77- Name : validationResultName (validator ),
71+ Name : vres . Name (validator ),
7872 Namespace : req .Namespace ,
7973 }
8074 if err := r .Get (ctx , nn , vr ); err == nil {
81- vres .HandleExistingValidationResult (vr , r .Log )
75+ vres .HandleExisting (vr , r .Log )
8276 } else {
8377 if ! apierrs .IsNotFound (err ) {
8478 l .Error (err , "unexpected error getting ValidationResult" )
8579 }
86- if err := vres .HandleNewValidationResult (ctx , r .Client , p , buildValidationResult (validator ), r .Log ); err != nil {
80+ if err := vres .HandleNew (ctx , r .Client , p , vres . Build (validator ), r .Log ); err != nil {
8781 return ctrl.Result {}, err
8882 }
8983 return ctrl.Result {RequeueAfter : time .Millisecond }, nil
@@ -92,18 +86,9 @@ func (r *NetworkValidatorReconciler) Reconcile(ctx context.Context, req ctrl.Req
9286 // Always update the expected result count in case the validator's rules have changed
9387 vr .Spec .ExpectedResults = validator .Spec .ResultCount ()
9488
95- resp := types.ValidationResponse {
96- ValidationRuleResults : make ([]* types.ValidationRuleResult , 0 , vr .Spec .ExpectedResults ),
97- ValidationRuleErrors : make ([]error , 0 , vr .Spec .ExpectedResults ),
98- }
99-
100- networkService := validators .NewNetworkService (r .Log )
89+ // Fetch additional CAs to augment the system cert pool
90+ caPems := validator .Spec .CACerts .RawCerts ()
10191
102- // If CACert config provided, use the inline certs and secret refs.
103- caPems := make ([][]byte , 0 )
104- for _ , cert := range validator .Spec .CACerts .Certs {
105- caPems = append (caPems , []byte (cert ))
106- }
10792 for _ , secretRef := range validator .Spec .CACerts .SecretRefs {
10893 caPem , err := secrets .ReadKeys (secretRef .Name , req .Namespace , []string {secretRef .Key }, r .Client )
10994 if err != nil {
@@ -113,57 +98,25 @@ func (r *NetworkValidatorReconciler) Reconcile(ctx context.Context, req ctrl.Req
11398 caPems = append (caPems , caPem [0 ])
11499 }
115100
116- // DNS rules
117- for _ , rule := range validator .Spec .DNSRules {
118- vrr := networkService .ReconcileDNSRule (rule )
119- resp .AddResult (vrr , err )
120- }
121-
122- // ICMP rules
123- for _ , rule := range validator .Spec .ICMPRules {
124- vrr := networkService .ReconcileICMPRule (rule )
125- resp .AddResult (vrr , err )
126- }
127-
128- // IP range rules
129- for _ , rule := range validator .Spec .IPRangeRules {
130- vrr := networkService .ReconcileIPRangeRule (rule )
131- resp .AddResult (vrr , err )
132- }
133-
134- // MTU rules
135- for _ , rule := range validator .Spec .MTURules {
136- vrr := networkService .ReconcileMTURule (rule )
137- resp .AddResult (vrr , err )
138- }
139-
140- // TCP connection rules
141- for _ , rule := range validator .Spec .TCPConnRules {
142- tlsConfig := http .TLSConfig (caPems , rule .InsecureSkipTLSVerify , r .Log )
143- ruleSvc := validators .NewNetworkService (r .Log , validators .WithTLSConfig (tlsConfig ))
144- vrr := ruleSvc .ReconcileTCPConnRule (rule )
145- resp .AddResult (vrr , err )
146- }
147-
148- // HTTP file rules
101+ // Fetch HTTP basic auth credentials
102+ auths := make ([][][]byte , len (validator .Spec .HTTPFileRules ))
149103 for _ , rule := range validator .Spec .HTTPFileRules {
150104 var auth [][]byte
151105 if rule .AuthSecretRef != nil {
152106 auth , err = secrets .ReadKeys (rule .AuthSecretRef .Name , req .Namespace , rule .AuthSecretRef .Keys (), r .Client )
153107 if err != nil {
154- vrr := validators .BuildValidationResult (rule , constants .ValidationTypeHTTPFile )
155- resp .AddResult (vrr , fmt .Errorf ("failed to parse HTTP basic auth: %w" , err ))
156- continue
108+ r .Log .Error (err , "failed to parse HTTP basic auth" , "rule" , rule .RuleName )
109+ return ctrl.Result {}, err
157110 }
158111 }
159- transport := http .Transport (caPems , auth , rule .InsecureSkipTLSVerify , r .Log )
160- ruleSvc := validators .NewNetworkService (r .Log , validators .WithTransport (transport ))
161- vrr := ruleSvc .ReconcileHTTPFileRule (rule )
162- resp .AddResult (vrr , err )
112+ auths = append (auths , auth )
163113 }
164114
115+ // Validate the rules
116+ resp := validate .Validate (validator .Spec , caPems , auths , r .Log )
117+
165118 // Patch the ValidationResult with the latest ValidationRuleResults
166- if err := vres .SafeUpdateValidationResult (ctx , p , vr , resp , r .Log ); err != nil {
119+ if err := vres .SafeUpdate (ctx , p , vr , resp , r .Log ); err != nil {
167120 return ctrl.Result {}, err
168121 }
169122
@@ -177,29 +130,3 @@ func (r *NetworkValidatorReconciler) SetupWithManager(mgr ctrl.Manager) error {
177130 For (& v1alpha1.NetworkValidator {}).
178131 Complete (r )
179132}
180-
181- func buildValidationResult (validator * v1alpha1.NetworkValidator ) * vapi.ValidationResult {
182- return & vapi.ValidationResult {
183- ObjectMeta : metav1.ObjectMeta {
184- Name : validationResultName (validator ),
185- Namespace : validator .Namespace ,
186- OwnerReferences : []metav1.OwnerReference {
187- {
188- APIVersion : validator .APIVersion ,
189- Kind : validator .Kind ,
190- Name : validator .Name ,
191- UID : validator .UID ,
192- Controller : util .Ptr (true ),
193- },
194- },
195- },
196- Spec : vapi.ValidationResultSpec {
197- Plugin : constants .PluginCode ,
198- ExpectedResults : validator .Spec .ResultCount (),
199- },
200- }
201- }
202-
203- func validationResultName (validator * v1alpha1.NetworkValidator ) string {
204- return fmt .Sprintf ("validator-plugin-network-%s" , validator .Name )
205- }
0 commit comments