Skip to content

Commit fd82309

Browse files
committed
Add check required crds
1 parent 4e062e7 commit fd82309

File tree

1 file changed

+52
-1
lines changed
  • cmd/aws-application-networking-k8s

1 file changed

+52
-1
lines changed

cmd/aws-application-networking-k8s/main.go

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@ package main
1818

1919
import (
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+
95142
func 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

Comments
 (0)