@@ -39,6 +39,8 @@ import (
3939 "sigs.k8s.io/controller-runtime/pkg/manager"
4040)
4141
42+ const wpSyncInProgressMsg = "waiting for WorkloadPolicy synchronization to complete"
43+
4244type Config struct {
4345 learningNamespaceSelector string
4446 nriSocketPath string
@@ -95,25 +97,30 @@ func setupWorkloadPolicyHandler(
9597 ctrlMgr manager.Manager ,
9698 logger * slog.Logger ,
9799 resolver * resolver.Resolver ,
98- ) error {
100+ ) ( * workloadpolicyhandler. WorkloadPolicyHandler , error ) {
99101 wpHandler := workloadpolicyhandler .NewWorkloadPolicyHandler (ctrlMgr .GetClient (), logger , resolver )
100102 err := wpHandler .SetupWithManager (ctrlMgr )
101103 if err != nil {
102- return fmt .Errorf ("unable to set up WorkloadPolicy handler: %w" , err )
104+ return nil , fmt .Errorf ("unable to set up WorkloadPolicy handler: %w" , err )
103105 }
104106 // controller-runtime doesn't support a separate startup probe, so we use the readiness probe instead.
105107 // See https://github.com/kubernetes-sigs/controller-runtime/issues/2644 for more details.
106108 if err = ctrlMgr .AddReadyzCheck ("policy readyz" , func (req * http.Request ) error {
107109 if syncErr := wpHandler .HasSynced (req .Context ()); syncErr != nil {
108- logger .ErrorContext (req .Context (), "WorkloadPolicy handler is not synced" , "error" , syncErr )
109- return fmt .Errorf ("WorkloadPolicy handler is not synced: %w" , syncErr )
110+ logger .InfoContext (
111+ req .Context (),
112+ wpSyncInProgressMsg ,
113+ "error" ,
114+ syncErr ,
115+ )
116+ return fmt .Errorf ("%s: %w" , wpSyncInProgressMsg , syncErr )
110117 }
111118 return nil
112119 }); err != nil {
113- return fmt .Errorf ("failed to add policy readiness probe: %w" , err )
120+ return nil , fmt .Errorf ("failed to add policy readiness probe: %w" , err )
114121 }
115122
116- return nil
123+ return wpHandler , nil
117124}
118125
119126func waitForMutatingAdmissionWebhook (ctx context.Context ) error {
@@ -239,7 +246,8 @@ func startAgent(ctx context.Context, logger *slog.Logger, config Config) error {
239246 return fmt .Errorf ("failed to create resolver: %w" , err )
240247 }
241248
242- if err = setupWorkloadPolicyHandler (ctrlMgr , logger , resolver ); err != nil {
249+ wpHandler , err := setupWorkloadPolicyHandler (ctrlMgr , logger , resolver )
250+ if err != nil {
243251 return err
244252 }
245253
@@ -298,6 +306,12 @@ func startAgent(ctx context.Context, logger *slog.Logger, config Config) error {
298306
299307 logger .InfoContext (ctx , "starting manager" )
300308 if err = ctrlMgr .Start (ctx ); err != nil {
309+ if ! resolver .IsNRISynchronized () || ! wpHandler .IsSynchronized () {
310+ logger .ErrorContext (ctx , "agent terminated before startup synchronization completed" ,
311+ "nriSynchronized" , resolver .IsNRISynchronized (),
312+ "workloadPoliciesSynchronized" , wpHandler .IsSynchronized (),
313+ )
314+ }
301315 return fmt .Errorf ("failed to start manager: %w" , err )
302316 }
303317
0 commit comments