@@ -111,55 +111,54 @@ func (c *CompositeManager) GetTranslationHookConfig() *egv1a1.TranslationConfig
111111 return merged
112112}
113113
114+ // hookClientGetter abstracts GetPreXDSHookClient/GetPostXDSHookClient to allow shared collection logic.
115+ type hookClientGetter func (extTypes.Manager , egv1a1.XDSTranslatorHook ) (extTypes.XDSHookClient , error )
116+
114117// GetPreXDSHookClient returns a compositeXDSHookClient that chains all child clients
115118// for the given hook type.
116119func (c * CompositeManager ) GetPreXDSHookClient (xdsHookType egv1a1.XDSTranslatorHook ) (extTypes.XDSHookClient , error ) {
120+ return c .collectHookClients (xdsHookType , func (m extTypes.Manager , h egv1a1.XDSTranslatorHook ) (extTypes.XDSHookClient , error ) {
121+ return m .GetPreXDSHookClient (h )
122+ }, false )
123+ }
124+
125+ // GetPostXDSHookClient returns a compositeXDSHookClient that chains all child clients
126+ // for the given hook type.
127+ func (c * CompositeManager ) GetPostXDSHookClient (xdsHookType egv1a1.XDSTranslatorHook ) (extTypes.XDSHookClient , error ) {
128+ return c .collectHookClients (xdsHookType , func (m extTypes.Manager , h egv1a1.XDSTranslatorHook ) (extTypes.XDSHookClient , error ) {
129+ return m .GetPostXDSHookClient (h )
130+ }, true )
131+ }
132+
133+ // collectHookClients iterates over all child managers, collects hook clients via the given getter,
134+ // and returns a compositeXDSHookClient. If includeTranslationConfig is true, each entry's
135+ // translationConfig is populated from the manager.
136+ func (c * CompositeManager ) collectHookClients (
137+ xdsHookType egv1a1.XDSTranslatorHook ,
138+ getter hookClientGetter ,
139+ includeTranslationConfig bool ,
140+ ) (extTypes.XDSHookClient , error ) {
117141 var entries []hookClientEntry
118142 for _ , nm := range c .managers {
119- client , err := nm .manager . GetPreXDSHookClient ( xdsHookType )
143+ client , err := getter ( nm .manager , xdsHookType )
120144 if err != nil {
121145 if nm .manager .FailOpen () {
122146 continue
123147 }
124148 return nil , err
125149 }
126150 if client != nil {
127- entries = append ( entries , hookClientEntry {
151+ entry := hookClientEntry {
128152 name : nm .name ,
129153 client : client ,
130154 failOpen : nm .manager .FailOpen (),
131155 resourceGVKSet : nm .resourceGVKSet ,
132156 policyGVKSet : nm .policyGVKSet ,
133- })
134- }
135- }
136- if len (entries ) == 0 {
137- return nil , nil
138- }
139- return & compositeXDSHookClient {entries : entries }, nil
140- }
141-
142- // GetPostXDSHookClient returns a compositeXDSHookClient that chains all child clients
143- // for the given hook type.
144- func (c * CompositeManager ) GetPostXDSHookClient (xdsHookType egv1a1.XDSTranslatorHook ) (extTypes.XDSHookClient , error ) {
145- var entries []hookClientEntry
146- for _ , nm := range c .managers {
147- client , err := nm .manager .GetPostXDSHookClient (xdsHookType )
148- if err != nil {
149- if nm .manager .FailOpen () {
150- continue
151157 }
152- return nil , err
153- }
154- if client != nil {
155- entries = append (entries , hookClientEntry {
156- name : nm .name ,
157- client : client ,
158- failOpen : nm .manager .FailOpen (),
159- resourceGVKSet : nm .resourceGVKSet ,
160- policyGVKSet : nm .policyGVKSet ,
161- translationConfig : nm .manager .GetTranslationHookConfig (),
162- })
158+ if includeTranslationConfig {
159+ entry .translationConfig = nm .manager .GetTranslationHookConfig ()
160+ }
161+ entries = append (entries , entry )
163162 }
164163 }
165164 if len (entries ) == 0 {
0 commit comments