Skip to content

Commit 1d31753

Browse files
committed
pass namespace in ProviderConf and make read from file account for namepsaces
1 parent 654e76f commit 1d31753

File tree

4 files changed

+41
-30
lines changed

4 files changed

+41
-30
lines changed

pkg/i2gw/ingress2gateway.go

+8-6
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ func ToGatewayAPIResources(ctx context.Context, namespace string, inputFile stri
4848
var ingresses networkingv1.IngressList
4949

5050
providerByName, err := constructProviders(&ProviderConf{
51-
Client: cl,
51+
Client: cl,
52+
Namespace: namespace,
5253
}, providers)
5354
if err != nil {
5455
return nil, err
@@ -136,7 +137,8 @@ func constructProviders(conf *ProviderConf, providers []string) (map[ProviderNam
136137
// ExtractObjectsFromReader extracts all objects from a reader,
137138
// which is created from YAML or JSON input files.
138139
// It retrieves all objects, including nested ones if they are contained within a list.
139-
func ExtractObjectsFromReader(reader io.Reader) ([]*unstructured.Unstructured, error) {
140+
// The function takes a namespace parameter to optionally return only namespaced resources.
141+
func ExtractObjectsFromReader(reader io.Reader, namespace string) ([]*unstructured.Unstructured, error) {
140142
d := kubeyaml.NewYAMLOrJSONDecoder(reader, 4096)
141143
var objs []*unstructured.Unstructured
142144
for {
@@ -150,6 +152,9 @@ func ExtractObjectsFromReader(reader io.Reader) ([]*unstructured.Unstructured, e
150152
if u == nil {
151153
continue
152154
}
155+
if namespace != "" && u.GetNamespace() != namespace {
156+
continue
157+
}
153158
objs = append(objs, u)
154159
}
155160

@@ -187,15 +192,12 @@ func ConstructIngressesFromFile(l *networkingv1.IngressList, inputFile string, n
187192
}
188193

189194
reader := bytes.NewReader(stream)
190-
objs, err := ExtractObjectsFromReader(reader)
195+
objs, err := ExtractObjectsFromReader(reader, namespace)
191196
if err != nil {
192197
return err
193198
}
194199

195200
for _, f := range objs {
196-
if namespace != "" && f.GetNamespace() != namespace {
197-
continue
198-
}
199201
if !f.GroupVersionKind().Empty() && f.GroupVersionKind().Kind == "Ingress" {
200202
var i networkingv1.Ingress
201203
err = runtime.DefaultUnstructuredConverter.

pkg/i2gw/provider.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ type ProviderConstructor func(conf *ProviderConf) Provider
4242
// ProviderConf contains all the configuration required for every concrete
4343
// Provider implementation.
4444
type ProviderConf struct {
45-
Client client.Client
45+
Client client.Client
46+
Namespace string
4647
}
4748

4849
// The Provider interface specifies the required functionality which needs to be

pkg/i2gw/providers/istio/istio.go

+4-17
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,8 @@ limitations under the License.
1717
package istio
1818

1919
import (
20-
"bytes"
2120
"context"
2221
"fmt"
23-
"os"
2422

2523
"github.com/kubernetes-sigs/ingress2gateway/pkg/i2gw"
2624
"k8s.io/apimachinery/pkg/util/validation/field"
@@ -43,7 +41,7 @@ type Provider struct {
4341
func NewProvider(conf *i2gw.ProviderConf) i2gw.Provider {
4442
return &Provider{
4543
storage: newResourcesStorage(),
46-
reader: newResourceReader(conf.Client),
44+
reader: newResourceReader(conf),
4745
converter: newConverter(),
4846
}
4947
}
@@ -66,22 +64,11 @@ func (p *Provider) ReadResourcesFromCluster(ctx context.Context) error {
6664
return nil
6765
}
6866

69-
func (p *Provider) ReadResourcesFromFile(_ context.Context, filename string) error {
70-
stream, err := os.ReadFile(filename)
67+
func (p *Provider) ReadResourcesFromFile(ctx context.Context, filename string) error {
68+
storage, err := p.reader.readResourcesFromFile(ctx, filename)
7169
if err != nil {
72-
return fmt.Errorf("failed to read file %v: %w", filename, err)
70+
return fmt.Errorf("failed to read resources from file: %w", err)
7371
}
74-
75-
unstructuredObjects, err := i2gw.ExtractObjectsFromReader(bytes.NewReader(stream))
76-
if err != nil {
77-
return fmt.Errorf("failed to extract objects: %w", err)
78-
}
79-
80-
storage, err := p.reader.readUnstructuredObjects(unstructuredObjects)
81-
if err != nil {
82-
return fmt.Errorf("failed to read unstructured objects: %w", err)
83-
}
84-
8572
p.storage = *storage
8673
return nil
8774
}

pkg/i2gw/providers/istio/resource_reader.go

+27-6
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,26 @@ limitations under the License.
1717
package istio
1818

1919
import (
20+
"bytes"
2021
"context"
2122
"fmt"
2223
"log"
24+
"os"
2325

26+
"github.com/kubernetes-sigs/ingress2gateway/pkg/i2gw"
2427
istiov1beta1 "istio.io/client-go/pkg/apis/networking/v1beta1"
2528
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
2629
"k8s.io/apimachinery/pkg/runtime"
2730
"k8s.io/apimachinery/pkg/types"
28-
"sigs.k8s.io/controller-runtime/pkg/client"
2931
)
3032

3133
type reader struct {
32-
k8sClient client.Client
34+
conf *i2gw.ProviderConf
3335
}
3436

35-
func newResourceReader(k8sClient client.Client) reader {
37+
func newResourceReader(conf *i2gw.ProviderConf) reader {
3638
return reader{
37-
k8sClient: k8sClient,
39+
conf: conf,
3840
}
3941
}
4042

@@ -58,6 +60,25 @@ func (r *reader) readResourcesFromCluster(ctx context.Context) (*storage, error)
5860
return &res, nil
5961
}
6062

63+
func (r *reader) readResourcesFromFile(_ context.Context, filename string) (*storage, error) {
64+
stream, err := os.ReadFile(filename)
65+
if err != nil {
66+
return nil, fmt.Errorf("failed to read file %v: %w", filename, err)
67+
}
68+
69+
unstructuredObjects, err := i2gw.ExtractObjectsFromReader(bytes.NewReader(stream), r.conf.Namespace)
70+
if err != nil {
71+
return nil, fmt.Errorf("failed to extract objects: %w", err)
72+
}
73+
74+
storage, err := r.readUnstructuredObjects(unstructuredObjects)
75+
if err != nil {
76+
return nil, fmt.Errorf("failed to read unstructured objects: %w", err)
77+
}
78+
79+
return storage, nil
80+
}
81+
6182
func (r *reader) readUnstructuredObjects(objects []*unstructured.Unstructured) (*storage, error) {
6283
res := newResourcesStorage()
6384

@@ -102,7 +123,7 @@ func (r *reader) readGatewaysFromCluster(ctx context.Context) (map[types.Namespa
102123
gatewayList.SetAPIVersion(APIVersion)
103124
gatewayList.SetKind(GatewayKind)
104125

105-
err := r.k8sClient.List(ctx, gatewayList)
126+
err := r.conf.Client.List(ctx, gatewayList)
106127
if err != nil {
107128
return nil, fmt.Errorf("failed to list istio gateways: %w", err)
108129
}
@@ -128,7 +149,7 @@ func (r *reader) readVirtualServicesFromCluster(ctx context.Context) (map[types.
128149
virtualServicesList.SetAPIVersion(APIVersion)
129150
virtualServicesList.SetKind(VirtualServiceKind)
130151

131-
err := r.k8sClient.List(ctx, virtualServicesList)
152+
err := r.conf.Client.List(ctx, virtualServicesList)
132153
if err != nil {
133154
return nil, fmt.Errorf("failed to list istio virtual services: %w", err)
134155
}

0 commit comments

Comments
 (0)