Skip to content

Commit

Permalink
Add code blocks for example
Browse files Browse the repository at this point in the history
  • Loading branch information
levikobi committed Sep 4, 2023
1 parent 7be7e6e commit 7cc50bf
Show file tree
Hide file tree
Showing 2 changed files with 114 additions and 2 deletions.
2 changes: 1 addition & 1 deletion pkg/i2gw/providers/ingressnginx/converter.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import (
"k8s.io/apimachinery/pkg/util/validation/field"
)

// converter implements the ConvertHTTPRoutes function of i2gw.ResourceConverter interface.
// converter implements the ToGatewayAPI function of i2gw.ResourceConverter interface.
type converter struct {
conf *i2gw.ProviderConf

Expand Down
114 changes: 113 additions & 1 deletion provider.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,128 @@ A provider must be able to read its custom resources, and convert them.
* A setup Go development environment.

## Step-by-Step Implementation
1. Add a new package under the `providers` package.
1. Add a new package under the `providers` package. Say we want to add a new gateway provider example.
```
.
├── ingress2gateway.go
├── ingress2gateway_test.go
├── provider.go
└── providers
├── common
├── examplegateway
└── ingressnginx
```
2. Create a struct named `resourceReader` which implements the `CustomResourceReader` interface in a file named
`resource_converter.go`.
```go
package examplegateway

import (
"context"

"github.com/kubernetes-sigs/ingress2gateway/pkg/i2gw"
)

// converter implements the i2gw.CustomResourceReader interface.
type resourceReader struct {
conf *i2gw.ProviderConf
}

// newResourceReader returns a resourceReader instance.
func newResourceReader(conf *i2gw.ProviderConf) *resourceReader {
return &resourceReader{
conf: conf,
}
}

func (r *resourceReader) ReadResourcesFromCluster(ctx context.Context, customResources interface{}) error {
// read example-gateway related resources from the cluster.
return nil
}

func (r *resourceReader) ReadResourcesFromFiles(ctx context.Context, customResources interface{}, filename string) error {
// read example-gateway related resources from the file.
return nil
}
```
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.
Take a look at `ingressnginx/converter.go` for example.
```go
package examplegateway

import (
"github.com/kubernetes-sigs/ingress2gateway/pkg/i2gw"
)

// converter implements the ToGatewayAPI function of i2gw.ResourceConverter interface.
type converter struct {
conf *i2gw.ProviderConf

featureParsers []i2gw.FeatureParser
}

// newConverter returns an ingress-nginx converter instance.
func newConverter(conf *i2gw.ProviderConf) *converter {
return &converter{
conf: conf,
featureParsers: []i2gw.FeatureParser{
// The list of feature parsers comes here.
},
}
}
```
4. Create a new struct named after the provider you are implementing. This struct should embed the previous 2 structs
you created.
```go
package examplegateway

import (
"github.com/kubernetes-sigs/ingress2gateway/pkg/i2gw"
)

// Provider implements the i2gw.Provider interface.
type Provider struct {
conf *i2gw.ProviderConf

*resourceReader
*converter
}

// NewProvider constructs and returns the example-gateway implementation of i2gw.Provider.
func NewProvider(conf *i2gw.ProviderConf) i2gw.Provider {
return &Provider{
conf: conf,
resourceReader: newResourceReader(conf),
converter: newConverter(conf),
}
}
```
5. Add the new provider to `i2gw.ProviderConstructorByName`.
```go
package examplegateway

import (
"github.com/kubernetes-sigs/ingress2gateway/pkg/i2gw"
)

// The Name of the provider.
const Name = "example-gateway-provider"

func init() {
i2gw.ProviderConstructorByName[Name] = NewProvider
}
```
6. Import the new package at `cmd/print`.
```go
package cmd

import (
// Call init function for the providers
_ "github.com/kubernetes-sigs/ingress2gateway/pkg/i2gw/providers/ingressnginx"
_ "github.com/kubernetes-sigs/ingress2gateway/pkg/i2gw/providers/examplegateway"
)
```

## Creating a feature parser
In case you want to add support for the conversion of a specific feature within a provider (see for example the canary
Expand Down

0 comments on commit 7cc50bf

Please sign in to comment.