From 7dd11506a5da75b544870ca65dde963fe17b7f11 Mon Sep 17 00:00:00 2001 From: dpasiukevich Date: Fri, 1 Dec 2023 11:44:59 +0100 Subject: [PATCH] return readers back --- PROVIDER.md | 22 +++++++++---------- pkg/i2gw/ingress2gateway.go | 12 +++++----- pkg/i2gw/provider.go | 12 +++++----- .../providers/ingressnginx/ingressnginx.go | 8 +++---- .../ingressnginx/resource_fetcher.go | 14 ++++++------ pkg/i2gw/providers/istio/istio.go | 13 +++++------ pkg/i2gw/providers/istio/resource_fetcher.go | 14 ++++++------ pkg/i2gw/providers/kong/kong.go | 8 +++---- pkg/i2gw/providers/kong/resource_fetcher.go | 14 ++++++------ 9 files changed, 58 insertions(+), 59 deletions(-) diff --git a/PROVIDER.md b/PROVIDER.md index fbd78fcf..ae3b3d81 100644 --- a/PROVIDER.md +++ b/PROVIDER.md @@ -26,7 +26,7 @@ In this section, we will walk through a demo of how to add support for the `exam ├── examplegateway └── ingressnginx ``` -2. Create a struct named `resourceFetcher` which implements the `CustomResourceFetcher` interface in a file named +2. Create a struct named `resourceReader` which implements the `CustomResourceReader` interface in a file named `resource_converter.go`. ```go package examplegateway @@ -37,30 +37,30 @@ import ( "github.com/kubernetes-sigs/ingress2gateway/pkg/i2gw" ) -// converter implements the i2gw.CustomResourceFetcher interface. -type resourceFetcher struct { +// converter implements the i2gw.CustomResourceReader interface. +type resourceReader struct { conf *i2gw.ProviderConf } -// newResourceFetcher returns a resourceFetcherinstance. -func newResourceFetcher(conf *i2gw.ProviderConf) *resourceFetcher { - return &resourceFetcher{ +// newResourceReader returns a resourceReader instance. +func newResourceReader(conf *i2gw.ProviderConf) *resourceReader { + return &resourceReader{ conf: conf, } } -func (r *resourceFetcher) FetchResourcesFromCluster(ctx context.Context) error { +func (r *resourceReader) ReadResourcesFromCluster(ctx context.Context) error { // read example-gateway related resources from the cluster. return nil } -func (r *resourceFetcher) FetchResourcesFromFiles(ctx context.Context, filename string) error { +func (r *resourceReader) ReadResourcesFromFiles(ctx context.Context, filename string) error { // read example-gateway related resources from the file. return nil } ``` -These methods are used by providers to fetch and store additional resources they may need during conversion. +These methods are used by providers to read and store additional resources they may need during conversion. 3. Create a struct named `converter` which implements the `ResourceConverter` interface in a file named `converter.go`. The implemented `ToGatewayAPI` function should simply call every registered `featureParser` function, one by one. @@ -109,7 +109,7 @@ import ( type Provider struct { conf *i2gw.ProviderConf - *resourceFetcher + *resourceRead *converter } @@ -117,7 +117,7 @@ type Provider struct { func NewProvider(conf *i2gw.ProviderConf) i2gw.Provider { return &Provider{ conf: conf, - resourceFetcher: newResourceFetcher(conf), + resourceReader: newResourceReader(conf), converter: newConverter(conf), } } diff --git a/pkg/i2gw/ingress2gateway.go b/pkg/i2gw/ingress2gateway.go index d7d7619f..65d7d2da 100644 --- a/pkg/i2gw/ingress2gateway.go +++ b/pkg/i2gw/ingress2gateway.go @@ -64,7 +64,7 @@ func ToGatewayAPIResources(ctx context.Context, namespace string, inputFile stri return nil, nil, fmt.Errorf("failed to read ingresses from file: %w", err) } resources.Ingresses = ingresses.Items - if err = fetchProviderResourcesFromFile(ctx, providerByName, inputFile); err != nil { + if err = readProviderResourcesFromFile(ctx, providerByName, inputFile); err != nil { return nil, nil, err } } else { @@ -72,7 +72,7 @@ func ToGatewayAPIResources(ctx context.Context, namespace string, inputFile stri return nil, nil, fmt.Errorf("failed to read ingresses from cluster: %w", err) } resources.Ingresses = ingresses.Items - if err = fetchProviderResourcesFromCluster(ctx, providerByName); err != nil { + if err = readProviderResourcesFromCluster(ctx, providerByName); err != nil { return nil, nil, err } } @@ -95,18 +95,18 @@ func ToGatewayAPIResources(ctx context.Context, namespace string, inputFile stri return httpRoutes, gateways, nil } -func fetchProviderResourcesFromFile(ctx context.Context, providerByName map[ProviderName]Provider, inputFile string) error { +func readProviderResourcesFromFile(ctx context.Context, providerByName map[ProviderName]Provider, inputFile string) error { for name, provider := range providerByName { - if err := provider.FetchResourcesFromFile(ctx, inputFile); err != nil { + if err := provider.ReadResourcesFromFile(ctx, inputFile); err != nil { return fmt.Errorf("failed to read %s resources from file: %w", name, err) } } return nil } -func fetchProviderResourcesFromCluster(ctx context.Context, providerByName map[ProviderName]Provider) error { +func readProviderResourcesFromCluster(ctx context.Context, providerByName map[ProviderName]Provider) error { for name, provider := range providerByName { - if err := provider.FetchResourcesFromCluster(ctx); err != nil { + if err := provider.ReadResourcesFromCluster(ctx); err != nil { return fmt.Errorf("failed to read %s resources from the cluster: %w", name, err) } } diff --git a/pkg/i2gw/provider.go b/pkg/i2gw/provider.go index 9bb4c998..395a934f 100644 --- a/pkg/i2gw/provider.go +++ b/pkg/i2gw/provider.go @@ -49,19 +49,19 @@ type ProviderConf struct { // implemented by every concrete Ingress/Gateway-API provider, in order for it to // be used. type Provider interface { - CustomResourceFetcher + CustomResourceReader ResourceConverter } -type CustomResourceFetcher interface { +type CustomResourceReader interface { - // FetchResourcesFromCluster fetches custom resources associated with + // ReadResourcesFromCluster reads custom resources associated with // the underlying Provider implementation from the kubernetes cluster. - FetchResourcesFromCluster(ctx context.Context) error + ReadResourcesFromCluster(ctx context.Context) error - // FetchResourcesFromFile reads custom resources associated with + // ReadResourcesFromFile reads custom resources associated with // the underlying Provider implementation from the file. - FetchResourcesFromFile(ctx context.Context, filename string) error + ReadResourcesFromFile(ctx context.Context, filename string) error } // The ResourceConverter interface specifies all the implemented Gateway API resource diff --git a/pkg/i2gw/providers/ingressnginx/ingressnginx.go b/pkg/i2gw/providers/ingressnginx/ingressnginx.go index 2cc1585c..56acaf19 100644 --- a/pkg/i2gw/providers/ingressnginx/ingressnginx.go +++ b/pkg/i2gw/providers/ingressnginx/ingressnginx.go @@ -31,15 +31,15 @@ func init() { type Provider struct { conf *i2gw.ProviderConf - *resourceFetcher + *resourceReader *converter } // NewProvider constructs and returns the ingress-nginx implementation of i2gw.Provider. func NewProvider(conf *i2gw.ProviderConf) i2gw.Provider { return &Provider{ - conf: conf, - resourceFetcher: newResourceFetcher(conf), - converter: newConverter(conf), + conf: conf, + resourceReader: newResourceReader(conf), + converter: newConverter(conf), } } diff --git a/pkg/i2gw/providers/ingressnginx/resource_fetcher.go b/pkg/i2gw/providers/ingressnginx/resource_fetcher.go index 702fa636..307ae724 100644 --- a/pkg/i2gw/providers/ingressnginx/resource_fetcher.go +++ b/pkg/i2gw/providers/ingressnginx/resource_fetcher.go @@ -22,24 +22,24 @@ import ( "github.com/kubernetes-sigs/ingress2gateway/pkg/i2gw" ) -// converter implements the i2gw.CustomResourceFetcher interface. -type resourceFetcher struct { +// converter implements the i2gw.CustomResourceReader interface. +type resourceReader struct { conf *i2gw.ProviderConf } -// newResourceFetcher returns a resourceFetcher instance. -func newResourceFetcher(conf *i2gw.ProviderConf) *resourceFetcher { - return &resourceFetcher{ +// newResourceReader returns a resourceReader instance. +func newResourceReader(conf *i2gw.ProviderConf) *resourceReader { + return &resourceReader{ conf: conf, } } -func (r *resourceFetcher) FetchResourcesFromCluster(_ context.Context) error { +func (r *resourceReader) ReadResourcesFromCluster(_ context.Context) error { // ingress-nginx does not have any CRDs. return nil } -func (r *resourceFetcher) FetchResourcesFromFile(_ context.Context, _ string) error { +func (r *resourceReader) ReadResourcesFromFile(_ context.Context, _ string) error { // ingress-nginx does not have any CRDs. return nil } diff --git a/pkg/i2gw/providers/istio/istio.go b/pkg/i2gw/providers/istio/istio.go index b69fd161..37e9a194 100644 --- a/pkg/i2gw/providers/istio/istio.go +++ b/pkg/i2gw/providers/istio/istio.go @@ -35,7 +35,7 @@ func init() { type Provider struct { storage storage - reader fetcher + reader reader converter converter } @@ -43,7 +43,7 @@ type Provider struct { func NewProvider(conf *i2gw.ProviderConf) i2gw.Provider { return &Provider{ storage: newResourcesStorage(), - reader: newResourceFetcher(conf.Client), + reader: newResourceReader(conf.Client), converter: newConverter(), } } @@ -56,8 +56,8 @@ func (p *Provider) ToGatewayAPI(_ i2gw.InputResources) (i2gw.GatewayResources, f return i2gw.GatewayResources{}, field.ErrorList{field.Forbidden(field.NewPath(""), "conversion is WIP")} } -func (p *Provider) FetchResourcesFromCluster(ctx context.Context) error { - storage, err := p.reader.fetchResourcesFromCluster(ctx) +func (p *Provider) ReadResourcesFromCluster(ctx context.Context) error { + storage, err := p.reader.readResourcesFromCluster(ctx) if err != nil { return fmt.Errorf("failed to read resources from cluster: %w", err) } @@ -66,14 +66,13 @@ func (p *Provider) FetchResourcesFromCluster(ctx context.Context) error { return nil } -func (p *Provider) FetchResourcesFromFile(_ context.Context, filename string) error { +func (p *Provider) ReadResourcesFromFile(_ context.Context, filename string) error { stream, err := os.ReadFile(filename) if err != nil { return fmt.Errorf("failed to read file %v: %w", filename, err) } - reader := bytes.NewReader(stream) - unstructuredObjects, err := i2gw.ExtractObjectsFromReader(reader) + unstructuredObjects, err := i2gw.ExtractObjectsFromReader(bytes.NewReader(stream)) if err != nil { return fmt.Errorf("failed to extract objects: %w", err) } diff --git a/pkg/i2gw/providers/istio/resource_fetcher.go b/pkg/i2gw/providers/istio/resource_fetcher.go index 2b6332dd..8bba74b5 100644 --- a/pkg/i2gw/providers/istio/resource_fetcher.go +++ b/pkg/i2gw/providers/istio/resource_fetcher.go @@ -28,17 +28,17 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" ) -type fetcher struct { +type reader struct { k8sClient client.Client } -func newResourceFetcher(k8sClient client.Client) fetcher { - return fetcher{ +func newResourceReader(k8sClient client.Client) reader { + return reader{ k8sClient: k8sClient, } } -func (r *fetcher) fetchResourcesFromCluster(ctx context.Context) (*storage, error) { +func (r *reader) readResourcesFromCluster(ctx context.Context) (*storage, error) { res := newResourcesStorage() gateways, err := r.readGatewaysFromCluster(ctx) @@ -58,7 +58,7 @@ func (r *fetcher) fetchResourcesFromCluster(ctx context.Context) (*storage, erro return &res, nil } -func (r *fetcher) readUnstructuredObjects(objects []*unstructured.Unstructured) (*storage, error) { +func (r *reader) readUnstructuredObjects(objects []*unstructured.Unstructured) (*storage, error) { res := newResourcesStorage() for _, obj := range objects { @@ -97,7 +97,7 @@ func (r *fetcher) readUnstructuredObjects(objects []*unstructured.Unstructured) return &res, nil } -func (r *fetcher) readGatewaysFromCluster(ctx context.Context) (map[types.NamespacedName]*istiov1beta1.Gateway, error) { +func (r *reader) readGatewaysFromCluster(ctx context.Context) (map[types.NamespacedName]*istiov1beta1.Gateway, error) { gatewayList := &unstructured.UnstructuredList{} gatewayList.SetAPIVersion(APIVersion) gatewayList.SetKind(GatewayKind) @@ -123,7 +123,7 @@ func (r *fetcher) readGatewaysFromCluster(ctx context.Context) (map[types.Namesp return res, nil } -func (r *fetcher) readVirtualServicesFromCluster(ctx context.Context) (map[types.NamespacedName]*istiov1beta1.VirtualService, error) { +func (r *reader) readVirtualServicesFromCluster(ctx context.Context) (map[types.NamespacedName]*istiov1beta1.VirtualService, error) { virtualServicesList := &unstructured.UnstructuredList{} virtualServicesList.SetAPIVersion(APIVersion) virtualServicesList.SetKind(VirtualServiceKind) diff --git a/pkg/i2gw/providers/kong/kong.go b/pkg/i2gw/providers/kong/kong.go index 9541caa9..584936b0 100644 --- a/pkg/i2gw/providers/kong/kong.go +++ b/pkg/i2gw/providers/kong/kong.go @@ -31,15 +31,15 @@ func init() { type Provider struct { conf *i2gw.ProviderConf - *resourceFetcher + *resourceReader *converter } // NewProvider constructs and returns the kong implementation of i2gw.Provider. func NewProvider(conf *i2gw.ProviderConf) i2gw.Provider { return &Provider{ - conf: conf, - resourceFetcher: newResourceFetcher(conf), - converter: newConverter(conf), + conf: conf, + resourceReader: newResourceReader(conf), + converter: newConverter(conf), } } diff --git a/pkg/i2gw/providers/kong/resource_fetcher.go b/pkg/i2gw/providers/kong/resource_fetcher.go index 89c969ae..b8acbb69 100644 --- a/pkg/i2gw/providers/kong/resource_fetcher.go +++ b/pkg/i2gw/providers/kong/resource_fetcher.go @@ -22,22 +22,22 @@ import ( "github.com/kubernetes-sigs/ingress2gateway/pkg/i2gw" ) -// converter implements the i2gw.CustomResourceFetcher interface. -type resourceFetcher struct { +// converter implements the i2gw.CustomResourceReader interface. +type resourceReader struct { conf *i2gw.ProviderConf } -// newResourceFetcher returns a resourceFetcher instance. -func newResourceFetcher(conf *i2gw.ProviderConf) *resourceFetcher { - return &resourceFetcher{ +// newResourceReader returns a resourceReader instance. +func newResourceReader(conf *i2gw.ProviderConf) *resourceReader { + return &resourceReader{ conf: conf, } } -func (r *resourceFetcher) FetchResourcesFromCluster(_ context.Context) error { +func (r *resourceReader) ReadResourcesFromCluster(_ context.Context) error { return nil } -func (r *resourceFetcher) FetchResourcesFromFile(_ context.Context, _ string) error { +func (r *resourceReader) ReadResourcesFromFile(_ context.Context, _ string) error { return nil }