From bb5b431499d4d1aa8293ebdf7f9de2f6fb380d42 Mon Sep 17 00:00:00 2001 From: Lior Lieberman Date: Wed, 5 Jun 2024 10:24:10 +0000 Subject: [PATCH 1/3] default no providers, mark providers required --- cmd/print.go | 6 +++--- go.mod | 3 ++- go.sum | 16 ++++++++-------- pkg/i2gw/providers/istio/resource_reader.go | 10 ---------- pkg/i2gw/providers/kong/resource_reader.go | 10 ++++------ 5 files changed, 17 insertions(+), 28 deletions(-) diff --git a/cmd/print.go b/cmd/print.go index 77d513f9..63e659c1 100644 --- a/cmd/print.go +++ b/cmd/print.go @@ -18,7 +18,6 @@ package cmd import ( "fmt" - "log" "os" "strings" @@ -253,7 +252,7 @@ func newPrintCommand() *cobra.Command { `If present, list the requested object(s) across all namespaces. Namespace in current context is ignored even if specified with --namespace.`) - cmd.Flags().StringSliceVar(&pr.providers, "providers", i2gw.GetSupportedProviders(), + cmd.Flags().StringSliceVar(&pr.providers, "providers", []string{}, fmt.Sprintf("If present, the tool will try to convert only resources related to the specified providers, supported values are %v.", i2gw.GetSupportedProviders())) pr.providerSpecificFlags = make(map[string]*string) @@ -264,6 +263,7 @@ if specified with --namespace.`) } } + _ = cmd.MarkFlagRequired("providers") cmd.MarkFlagsMutuallyExclusive("namespace", "all-namespaces") return cmd } @@ -285,7 +285,7 @@ func (pr *PrintRunner) getProviderSpecificFlags() map[string]map[string]string { for flagName, value := range pr.providerSpecificFlags { provider, found := lo.Find(pr.providers, func(p string) bool { return strings.HasPrefix(flagName, fmt.Sprintf("%s-", p)) }) if !found { - log.Printf("Warning: Ignoring flag %s as it does not match any of the providers", flagName) + // log.Printf("Warning: Ignoring flag %s as it does not match any of the providers", flagName) continue } flagNameWithoutProvider := strings.TrimPrefix(flagName, fmt.Sprintf("%s-", provider)) diff --git a/go.mod b/go.mod index 04fb14a0..0d261606 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/getkin/kin-openapi v0.124.0 github.com/google/go-cmp v0.6.0 github.com/kong/kubernetes-ingress-controller/v2 v2.12.3 + github.com/samber/lo v1.39.0 github.com/spf13/cobra v1.8.0 github.com/stretchr/testify v1.9.0 istio.io/api v1.20.0 @@ -13,6 +14,7 @@ require ( k8s.io/apimachinery v0.28.4 k8s.io/cli-runtime v0.28.4 k8s.io/client-go v0.28.4 + k8s.io/klog v0.2.0 k8s.io/utils v0.0.0-20231121161247-cf03d44ff3cf sigs.k8s.io/controller-runtime v0.16.3 sigs.k8s.io/gateway-api v1.0.0 @@ -24,7 +26,6 @@ require ( github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/perimeterx/marshmallow v1.1.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/samber/lo v1.39.0 // indirect golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect ) diff --git a/go.sum b/go.sum index c000507f..41f34236 100644 --- a/go.sum +++ b/go.sum @@ -25,19 +25,17 @@ github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ4 github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= -github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= -github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= github.com/go-openapi/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q= github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs= github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= -github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= -github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-openapi/swag v0.22.8 h1:/9RjDSQ0vbFR+NyjGMkFTsA1IA0fmhKSThmfGZjicbw= github.com/go-openapi/swag v0.22.8/go.mod h1:6QT22icPLEqAM/z/TChgb4WAveCHF92+2gF0CNjHpPI= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= +github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= +github.com/go-test/deep v1.0.8/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= @@ -55,9 +53,8 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20211214055906-6f57359322fd h1:1FjCyPC+syAzJ5/2S8fqdZK1R22vvA0J7JZKcuOIQ7Y= +github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= @@ -124,9 +121,8 @@ github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lne github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/samber/lo v1.39.0 h1:4gTz1wUhNYLhFSKl6O+8peW0v2F4BCY034GRpU9WnuA= github.com/samber/lo v1.39.0/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= @@ -148,6 +144,8 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -256,6 +254,8 @@ k8s.io/cli-runtime v0.28.4 h1:IW3aqSNFXiGDllJF4KVYM90YX4cXPGxuCxCVqCD8X+Q= k8s.io/cli-runtime v0.28.4/go.mod h1:MLGRB7LWTIYyYR3d/DOgtUC8ihsAPA3P8K8FDNIqJ0k= k8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY= k8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4= +k8s.io/klog v0.2.0 h1:0ElL0OHzF3N+OhoJTL0uca20SxtYt4X4+bzHeqrB83c= +k8s.io/klog v0.2.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e h1:snPmy96t93RredGRjKfMFt+gvxuVAncqSAyBveJtr4Q= diff --git a/pkg/i2gw/providers/istio/resource_reader.go b/pkg/i2gw/providers/istio/resource_reader.go index 12959ea3..861c284e 100644 --- a/pkg/i2gw/providers/istio/resource_reader.go +++ b/pkg/i2gw/providers/istio/resource_reader.go @@ -29,8 +29,6 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/klog/v2" - "sigs.k8s.io/controller-runtime/pkg/client" ) type reader struct { @@ -128,10 +126,6 @@ func (r *reader) readGatewaysFromCluster(ctx context.Context) (map[types.Namespa err := r.conf.Client.List(ctx, gatewayList) if err != nil { - if client.IgnoreNotFound(err) == nil { - klog.Warningf("couldn't find %s CRD, it is likely not installed in the cluster", fmt.Sprintf("%s.%s", APIVersion, GatewayKind)) - return map[types.NamespacedName]*istiov1beta1.Gateway{}, nil - } return nil, fmt.Errorf("failed to list istio gateways: %w", err) } @@ -158,10 +152,6 @@ func (r *reader) readVirtualServicesFromCluster(ctx context.Context) (map[types. err := r.conf.Client.List(ctx, virtualServicesList) if err != nil { - if client.IgnoreNotFound(err) == nil { - klog.Warningf("couldn't find %s CRD, it is likely not installed in the cluster", fmt.Sprintf("%s.%s", APIVersion, VirtualServiceKind)) - return map[types.NamespacedName]*istiov1beta1.VirtualService{}, nil - } return nil, fmt.Errorf("failed to list istio virtual services: %w", err) } diff --git a/pkg/i2gw/providers/kong/resource_reader.go b/pkg/i2gw/providers/kong/resource_reader.go index a44601af..01ec64f5 100644 --- a/pkg/i2gw/providers/kong/resource_reader.go +++ b/pkg/i2gw/providers/kong/resource_reader.go @@ -25,14 +25,14 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/klog/v2" - "sigs.k8s.io/controller-runtime/pkg/client" kongv1beta1 "github.com/kong/kubernetes-ingress-controller/v2/pkg/apis/configuration/v1beta1" "github.com/kubernetes-sigs/ingress2gateway/pkg/i2gw" "github.com/kubernetes-sigs/ingress2gateway/pkg/i2gw/providers/common" ) +var count int + // converter implements the i2gw.CustomResourceReader interface. type resourceReader struct { conf *i2gw.ProviderConf @@ -90,15 +90,13 @@ func (r *resourceReader) readResourcesFromFile(filename string) (*storage, error // ----------------------------------------------------------------------------- func (r *resourceReader) readTCPIngressesFromCluster(ctx context.Context) ([]kongv1beta1.TCPIngress, error) { + count++ + fmt.Println(count) tcpIngressList := &unstructured.UnstructuredList{} tcpIngressList.SetGroupVersionKind(tcpIngressGVK) err := r.conf.Client.List(ctx, tcpIngressList) if err != nil { - if client.IgnoreNotFound(err) == nil { - klog.Warningf("couldn't find %s CRD, it is likely not installed in the cluster", tcpIngressGVK.GroupKind().String()) - return []kongv1beta1.TCPIngress{}, nil - } return nil, fmt.Errorf("failed to list %s: %w", tcpIngressGVK.GroupKind().String(), err) } From be8c05160064da96b319c6eaf9ec7dffbab41eb9 Mon Sep 17 00:00:00 2001 From: Lior Lieberman Date: Thu, 13 Jun 2024 10:20:44 +0000 Subject: [PATCH 2/3] validate openapi exclusivity --- cmd/print.go | 8 ++++++++ pkg/i2gw/providers/kong/resource_reader.go | 4 ---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/cmd/print.go b/cmd/print.go index 63e659c1..08ce4b9e 100644 --- a/cmd/print.go +++ b/cmd/print.go @@ -19,6 +19,7 @@ package cmd import ( "fmt" "os" + "slices" "strings" "github.com/kubernetes-sigs/ingress2gateway/pkg/i2gw" @@ -237,6 +238,13 @@ func newPrintCommand() *cobra.Command { Use: "print", Short: "Prints Gateway API objects generated from ingress and provider-specific resources.", RunE: pr.PrintGatewayAPIObjects, + PreRunE: func(cmd *cobra.Command, args []string) error { + openAPIExist := slices.Contains(pr.providers, "openapi3") + if openAPIExist && len(pr.providers) != 1 { + return fmt.Errorf("openapi3 must be the only provider when specified") + } + return nil + }, } cmd.Flags().StringVarP(&pr.outputFormat, "output", "o", "yaml", diff --git a/pkg/i2gw/providers/kong/resource_reader.go b/pkg/i2gw/providers/kong/resource_reader.go index 01ec64f5..ae5accd0 100644 --- a/pkg/i2gw/providers/kong/resource_reader.go +++ b/pkg/i2gw/providers/kong/resource_reader.go @@ -31,8 +31,6 @@ import ( "github.com/kubernetes-sigs/ingress2gateway/pkg/i2gw/providers/common" ) -var count int - // converter implements the i2gw.CustomResourceReader interface. type resourceReader struct { conf *i2gw.ProviderConf @@ -90,8 +88,6 @@ func (r *resourceReader) readResourcesFromFile(filename string) (*storage, error // ----------------------------------------------------------------------------- func (r *resourceReader) readTCPIngressesFromCluster(ctx context.Context) ([]kongv1beta1.TCPIngress, error) { - count++ - fmt.Println(count) tcpIngressList := &unstructured.UnstructuredList{} tcpIngressList.SetGroupVersionKind(tcpIngressGVK) From b6fc7b554af11128690e55ae09d10c4510b08908 Mon Sep 17 00:00:00 2001 From: Lior Lieberman Date: Thu, 13 Jun 2024 12:03:44 +0100 Subject: [PATCH 3/3] fix --- cmd/print.go | 1 - 1 file changed, 1 deletion(-) diff --git a/cmd/print.go b/cmd/print.go index 08ce4b9e..58fb1326 100644 --- a/cmd/print.go +++ b/cmd/print.go @@ -293,7 +293,6 @@ func (pr *PrintRunner) getProviderSpecificFlags() map[string]map[string]string { for flagName, value := range pr.providerSpecificFlags { provider, found := lo.Find(pr.providers, func(p string) bool { return strings.HasPrefix(flagName, fmt.Sprintf("%s-", p)) }) if !found { - // log.Printf("Warning: Ignoring flag %s as it does not match any of the providers", flagName) continue } flagNameWithoutProvider := strings.TrimPrefix(flagName, fmt.Sprintf("%s-", provider))