@@ -921,34 +921,44 @@ func ProcessGatewayProxy(r client.Client, tctx *provider.TranslateContext, gatew
921921 tctx .ResourceParentRefs [rk ] = append (tctx .ResourceParentRefs [rk ], gatewayKind )
922922
923923 // Process provider secrets if provider exists
924- if gatewayProxy .Spec .Provider != nil && gatewayProxy . Spec . Provider .Type == v1alpha1 .ProviderTypeControlPlane {
925- if gatewayProxy . Spec . Provider . ControlPlane != nil &&
926- gatewayProxy . Spec . Provider . ControlPlane .Auth .Type == v1alpha1 .AuthTypeAdminKey &&
927- gatewayProxy . Spec . Provider . ControlPlane .Auth .AdminKey != nil &&
928- gatewayProxy . Spec . Provider . ControlPlane .Auth .AdminKey .ValueFrom != nil &&
929- gatewayProxy . Spec . Provider . ControlPlane .Auth .AdminKey .ValueFrom .SecretKeyRef != nil {
930-
931- secretRef := gatewayProxy . Spec . Provider . ControlPlane .Auth .AdminKey .ValueFrom .SecretKeyRef
932- secret := & corev1.Secret {}
933- if err := r .Get (context .Background (), client.ObjectKey {
934- Namespace : ns ,
935- Name : secretRef .Name ,
936- }, secret ); err != nil {
937- log .Error (err , "failed to get secret for GatewayProxy provider" ,
938- "namespace" , ns ,
939- "name" , secretRef .Name )
940- return err
941- }
924+ if prov := gatewayProxy .Spec .Provider ; prov != nil && prov .Type == v1alpha1 .ProviderTypeControlPlane {
925+ if cp := prov . ControlPlane ; cp != nil {
926+ if cp .Auth .Type == v1alpha1 .AuthTypeAdminKey &&
927+ cp .Auth .AdminKey != nil &&
928+ cp .Auth .AdminKey .ValueFrom != nil &&
929+ cp .Auth .AdminKey .ValueFrom .SecretKeyRef != nil {
930+
931+ secretRef := cp .Auth .AdminKey .ValueFrom .SecretKeyRef
932+ secret := & corev1.Secret {}
933+ if err := r .Get (context .Background (), client.ObjectKey {
934+ Namespace : ns ,
935+ Name : secretRef .Name ,
936+ }, secret ); err != nil {
937+ log .Error (err , "failed to get secret for GatewayProxy provider" ,
938+ "namespace" , ns ,
939+ "name" , secretRef .Name )
940+ return err
941+ }
942942
943- log .Info ("found secret for GatewayProxy provider" ,
944- "gateway" , gateway .Name ,
945- "gatewayproxy" , gatewayProxy .Name ,
946- "secret" , secretRef .Name )
943+ log .Info ("found secret for GatewayProxy provider" ,
944+ "gateway" , gateway .Name ,
945+ "gatewayproxy" , gatewayProxy .Name ,
946+ "secret" , secretRef .Name )
947947
948- tctx .Secrets [k8stypes.NamespacedName {
949- Namespace : ns ,
950- Name : secretRef .Name ,
951- }] = secret
948+ tctx .Secrets [k8stypes.NamespacedName {
949+ Namespace : ns ,
950+ Name : secretRef .Name ,
951+ }] = secret
952+ }
953+
954+ if cp .Service != nil {
955+ if err := addProviderEndpointsToTranslateContext (tctx , r , k8stypes.NamespacedName {
956+ Namespace : gatewayProxy .GetNamespace (),
957+ Name : cp .Service .Name ,
958+ }); err != nil {
959+ return err
960+ }
961+ }
952962 }
953963 }
954964 }
@@ -1340,40 +1350,76 @@ func ProcessIngressClassParameters(tctx *provider.TranslateContext, c client.Cli
13401350
13411351 // check if the provider field references a secret
13421352 if gatewayProxy .Spec .Provider != nil && gatewayProxy .Spec .Provider .Type == v1alpha1 .ProviderTypeControlPlane {
1343- if gatewayProxy .Spec .Provider .ControlPlane != nil &&
1344- gatewayProxy .Spec .Provider .ControlPlane .Auth .Type == v1alpha1 .AuthTypeAdminKey &&
1345- gatewayProxy .Spec .Provider .ControlPlane .Auth .AdminKey != nil &&
1346- gatewayProxy .Spec .Provider .ControlPlane .Auth .AdminKey .ValueFrom != nil &&
1347- gatewayProxy .Spec .Provider .ControlPlane .Auth .AdminKey .ValueFrom .SecretKeyRef != nil {
1348-
1349- secretRef := gatewayProxy .Spec .Provider .ControlPlane .Auth .AdminKey .ValueFrom .SecretKeyRef
1350- secret := & corev1.Secret {}
1351- if err := c .Get (tctx , client.ObjectKey {
1352- Namespace : ns ,
1353- Name : secretRef .Name ,
1354- }, secret ); err != nil {
1355- log .Error (err , "failed to get secret for GatewayProxy provider" ,
1356- "namespace" , ns ,
1357- "name" , secretRef .Name )
1358- return err
1359- }
1353+ if cp := gatewayProxy .Spec .Provider .ControlPlane ; cp != nil {
1354+ // process control plane provider auth
1355+ if cp .Auth .Type == v1alpha1 .AuthTypeAdminKey &&
1356+ cp .Auth .AdminKey != nil &&
1357+ cp .Auth .AdminKey .ValueFrom != nil &&
1358+ cp .Auth .AdminKey .ValueFrom .SecretKeyRef != nil {
1359+
1360+ secretRef := cp .Auth .AdminKey .ValueFrom .SecretKeyRef
1361+ secret := & corev1.Secret {}
1362+ if err := c .Get (tctx , client.ObjectKey {
1363+ Namespace : ns ,
1364+ Name : secretRef .Name ,
1365+ }, secret ); err != nil {
1366+ log .Error (err , "failed to get secret for GatewayProxy provider" ,
1367+ "namespace" , ns ,
1368+ "name" , secretRef .Name )
1369+ return err
1370+ }
13601371
1361- log .Info ("found secret for GatewayProxy provider" ,
1362- "ingressClass" , ingressClass .Name ,
1363- "gatewayproxy" , gatewayProxy .Name ,
1364- "secret" , secretRef .Name )
1372+ log .Info ("found secret for GatewayProxy provider" ,
1373+ "ingressClass" , ingressClass .Name ,
1374+ "gatewayproxy" , gatewayProxy .Name ,
1375+ "secret" , secretRef .Name )
1376+
1377+ tctx .Secrets [k8stypes.NamespacedName {
1378+ Namespace : ns ,
1379+ Name : secretRef .Name ,
1380+ }] = secret
1381+ }
13651382
1366- tctx .Secrets [k8stypes.NamespacedName {
1367- Namespace : ns ,
1368- Name : secretRef .Name ,
1369- }] = secret
1383+ // process control plane provider service
1384+ if cp .Service != nil {
1385+ if err := addProviderEndpointsToTranslateContext (tctx , c , client.ObjectKey {
1386+ Namespace : gatewayProxy .GetNamespace (),
1387+ Name : cp .Service .Name ,
1388+ }); err != nil {
1389+ return err
1390+ }
1391+ }
13701392 }
13711393 }
13721394 }
13731395
13741396 return nil
13751397}
13761398
1399+ func addProviderEndpointsToTranslateContext (tctx * provider.TranslateContext , c client.Client , serviceNN k8stypes.NamespacedName ) error {
1400+ log .Debugf ("to process provider endpints by provider.service: %s" , serviceNN )
1401+ var (
1402+ service corev1.Service
1403+ )
1404+ if err := c .Get (tctx , serviceNN , & service ); err != nil {
1405+ log .Error (err , "failed to get service from GatewayProxy provider" , "key" , serviceNN )
1406+ return err
1407+ }
1408+ tctx .Services [serviceNN ] = & service
1409+
1410+ // get endpoints
1411+ var (
1412+ endpoints corev1.Endpoints
1413+ )
1414+ if err := c .Get (tctx , serviceNN , & endpoints ); err != nil {
1415+ log .Error (err , "failed to get endpoints for GatewayProxy provider" , "endpoints" , serviceNN )
1416+ return err
1417+ }
1418+ tctx .EndpointSubset [serviceNN ] = endpoints .Subsets
1419+
1420+ return nil
1421+ }
1422+
13771423func GetIngressClass (ctx context.Context , c client.Client , log logr.Logger , ingressClassName string ) (* networkingv1.IngressClass , error ) {
13781424 if ingressClassName == "" {
13791425 // Check for default ingress class
0 commit comments