@@ -18,14 +18,15 @@ package main
1818
1919import (
2020 "flag"
21+ "fmt"
2122 "os"
22- gwv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
2323 "strings"
2424
2525 "github.com/aws/aws-application-networking-k8s/pkg/webhook"
2626 "github.com/go-logr/zapr"
2727 "go.uber.org/zap/zapcore"
2828 k8swebhook "sigs.k8s.io/controller-runtime/pkg/webhook"
29+ gwv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
2930
3031 "github.com/aws/aws-application-networking-k8s/pkg/aws"
3132 "github.com/aws/aws-application-networking-k8s/pkg/utils/gwlog"
@@ -45,6 +46,7 @@ import (
4546 "k8s.io/apimachinery/pkg/runtime/schema"
4647 "sigs.k8s.io/external-dns/endpoint"
4748 gwv1 "sigs.k8s.io/gateway-api/apis/v1"
49+
4850 //+kubebuilder:scaffold:imports
4951 anv1alpha1 "github.com/aws/aws-application-networking-k8s/pkg/apis/applicationnetworking/v1alpha1"
5052 "github.com/aws/aws-application-networking-k8s/pkg/config"
@@ -92,6 +94,51 @@ func addOptionalCRDs(scheme *runtime.Scheme) {
9294 metav1 .AddToGroupVersion (scheme , groupVersion )
9395}
9496
97+ func checkRequiredCRDs (mgr ctrl.Manager ) error {
98+ // Add or update the required CRDs when new CRDs are added to the project
99+ requiredCRDs := []schema.GroupVersionKind {
100+ {
101+ Group : gwv1 .GroupVersion .Group ,
102+ Version : gwv1 .GroupVersion .Version ,
103+ Kind : "Gateway" ,
104+ },
105+ {
106+ Group : gwv1 .GroupVersion .Group ,
107+ Version : gwv1 .GroupVersion .Version ,
108+ Kind : "GatewayClass" ,
109+ },
110+ {
111+ Group : gwv1 .GroupVersion .Group ,
112+ Version : gwv1 .GroupVersion .Version ,
113+ Kind : "HTTPRoute" ,
114+ },
115+ {
116+ Group : gwv1 .GroupVersion .Group ,
117+ Version : gwv1 .GroupVersion .Version ,
118+ Kind : "GRPCRoute" ,
119+ },
120+ {
121+ Group : gwv1alpha2 .GroupVersion .Group ,
122+ Version : gwv1alpha2 .GroupVersion .Version ,
123+ Kind : "TLSRoute" ,
124+ },
125+ }
126+ missingCRDs := make ([]string , 0 , len (requiredCRDs ))
127+ for _ , crd := range requiredCRDs {
128+ ok , err := k8s .IsGVKSupported (mgr , crd .GroupVersion ().String (), crd .Kind )
129+ if err != nil {
130+ return fmt .Errorf ("error checking required CRD %s: %w" , crd , err )
131+ }
132+ if ! ok {
133+ missingCRDs = append (missingCRDs , crd .String ())
134+ }
135+ }
136+ if len (missingCRDs ) > 0 {
137+ return fmt .Errorf ("missing required CRDs: %s" , strings .Join (missingCRDs , ", " ))
138+ }
139+ return nil
140+ }
141+
95142func main () {
96143 var metricsAddr string
97144 var enableLeaderElection bool
@@ -164,6 +211,10 @@ func main() {
164211 setupLog .Fatal ("manager setup failed:" , err )
165212 }
166213
214+ if err := checkRequiredCRDs (mgr ); err != nil {
215+ setupLog .Fatal ("required CRDs check failed:" , err )
216+ }
217+
167218 if enableWebhook {
168219 logger := log .Named ("pod-readiness-gate-injector" )
169220 readinessGateInjector := webhook .NewPodReadinessGateInjector (
0 commit comments