@@ -30,7 +30,8 @@ const (
3030// AegisClusterPolicyReconciler reconciles AegisClusterPolicy objects.
3131type AegisClusterPolicyReconciler struct {
3232 client.Client
33- Scheme * runtime.Scheme
33+ Scheme * runtime.Scheme
34+ Publisher EventPublisher // optional: pushes SSE events to console
3435}
3536
3637// +kubebuilder:rbac:groups=aegisbpf.io,resources=aegisclusterpolicies,verbs=get;list;watch;update;patch
@@ -71,7 +72,7 @@ func (r *AegisClusterPolicyReconciler) Reconcile(ctx context.Context, req ctrl.R
7172 }
7273 }
7374
74- // Translate CRD → INI.
75+ // Translate CRD → INI (mainline daemon) .
7576 result , err := policy .TranslateToINI (acp .Spec )
7677 if err != nil {
7778 logger .Error (err , "Failed to translate cluster policy" )
@@ -80,8 +81,19 @@ func (r *AegisClusterPolicyReconciler) Reconcile(ctx context.Context, req ctrl.R
8081 fmt .Sprintf ("Translation failed: %v" , err ))
8182 return r .updateStatus (ctx , & acp , "Error" , fmt .Sprintf ("Translation failed: %v" , err ), "" )
8283 }
84+
85+ // Translate CRD → aegis-next line-based policy.
86+ nextResult , err := policy .TranslateToAegisNext (acp .Spec )
87+ if err != nil {
88+ logger .Error (err , "Failed to translate aegis-next cluster policy" )
89+ markPolicyInvalid (& acp .Status , acp .Generation ,
90+ v1alpha1 .ReasonTranslationFailed ,
91+ fmt .Sprintf ("aegis-next translation failed: %v" , err ))
92+ return r .updateStatus (ctx , & acp , "Error" , fmt .Sprintf ("aegis-next translation failed: %v" , err ), "" )
93+ }
94+
8395 markPolicyValid (& acp .Status , acp .Generation )
84- markEnforceCapableUnknown ( & acp .Status , acp .Generation )
96+ probeEnforceCapable ( ctx , r . Client , & acp .Status , acp .Generation )
8597 if acp .Spec .Selector != nil {
8698 markLegacySelectorDeprecated (& acp .Status , acp .Generation )
8799 } else {
@@ -91,6 +103,7 @@ func (r *AegisClusterPolicyReconciler) Reconcile(ctx context.Context, req ctrl.R
91103 logger .Info ("Translated cluster policy" ,
92104 "name" , acp .Name ,
93105 "hash" , result .SHA256 [:12 ],
106+ "nextHash" , nextResult .SHA256 [:12 ],
94107 "mode" , acp .Spec .Mode ,
95108 )
96109
@@ -111,9 +124,11 @@ func (r *AegisClusterPolicyReconciler) Reconcile(ctx context.Context, req ctrl.R
111124 },
112125 },
113126 Data : map [string ]string {
114- PolicyDataKey : result .INI ,
115- PolicyHashKey : result .SHA256 ,
116- PolicyModeKey : acp .Spec .Mode ,
127+ PolicyDataKey : result .INI ,
128+ PolicyHashKey : result .SHA256 ,
129+ PolicyModeKey : acp .Spec .Mode ,
130+ NextPolicyDataKey : nextResult .INI ,
131+ NextPolicyHashKey : nextResult .SHA256 ,
117132 },
118133 }
119134
@@ -132,7 +147,7 @@ func (r *AegisClusterPolicyReconciler) Reconcile(ctx context.Context, req ctrl.R
132147 } else if err != nil {
133148 return ctrl.Result {}, err
134149 } else {
135- if existing .Data [PolicyHashKey ] != result .SHA256 {
150+ if existing .Data [PolicyHashKey ] != result .SHA256 || existing . Data [ NextPolicyHashKey ] != nextResult . SHA256 {
136151 existing .Data = cm .Data
137152 existing .Labels = cm .Labels
138153 existing .Annotations = cm .Annotations
@@ -146,6 +161,9 @@ func (r *AegisClusterPolicyReconciler) Reconcile(ctx context.Context, req ctrl.R
146161 }
147162
148163 markReady (& acp .Status , acp .Generation , "Cluster policy translated and ConfigMap written" )
164+ if r .Publisher != nil {
165+ r .Publisher .PublishReconcile ("AegisClusterPolicy" , acp .Name , "Applied" , "Cluster policy applied successfully" )
166+ }
149167 return r .updateStatus (ctx , & acp , "Applied" , "Cluster policy applied successfully" , result .SHA256 )
150168}
151169
0 commit comments