Skip to content

Commit

Permalink
feat: add client
Browse files Browse the repository at this point in the history
  • Loading branch information
gfyrag committed Jan 8, 2024
1 parent 94c2d84 commit 08267b6
Show file tree
Hide file tree
Showing 15 changed files with 1,018 additions and 12 deletions.
10 changes: 5 additions & 5 deletions components/operatorv2/api/v1beta1/shared.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// +kubebuilder:object:generate=false
type EventPublisher interface {
isEventPublisher()
}

type DevProperties struct {
// +optional
Debug bool `json:"debug"`
Expand Down Expand Up @@ -129,8 +134,3 @@ type StackDependency struct {
func (d StackDependency) GetStack() string {
return d.Stack
}

// +kubebuilder:object:generate=false
type EventPublisher interface {
isEventPublisher()
}
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,8 @@ func (r *LedgerController) Reconcile(ctx Context, ledger *v1beta1.Ledger) error
return err
}

if err := streams.LoadFromFileSystem(ctx, benthos.Streams, ledger.Spec.Stack, "streams/ledger/v2.0.0"); err != nil {
if err := streams.LoadFromFileSystem(ctx, benthos.Streams, ledger.Spec.Stack, "streams/ledger/v2.0.0",
WithController[*v1beta1.Stream](ctx.GetScheme(), ledger)); err != nil {
return err
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,8 @@ func (r *PaymentsController) createReadDeployment(ctx Context, stack *v1beta1.St
return err
}

if err := streams.LoadFromFileSystem(ctx, benthos.Streams, payments.Spec.Stack, "streams/payments/v0.0.0"); err != nil {
if err := streams.LoadFromFileSystem(ctx, benthos.Streams, payments.Spec.Stack, "streams/payments/v0.0.0",
WithController[*v1beta1.Stream](ctx.GetScheme(), payments)); err != nil {
return err
}

Expand Down
11 changes: 6 additions & 5 deletions components/operatorv2/internal/resources/streams/streams.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (
)

func LoadFromFileSystem(ctx core.Context, fs embed.FS,
stackName string, streamDirectory string) error {
stackName string, streamDirectory string, opts ...core.ObjectMutator[*v1beta1.Stream]) error {
streamFiles, err := fs.ReadDir(streamDirectory)
if err != nil {
return err
Expand All @@ -27,12 +27,13 @@ func LoadFromFileSystem(ctx core.Context, fs embed.FS,

sanitizedName := strings.ReplaceAll(file.Name(), "_", "-")

opts = append(opts, func(stream *v1beta1.Stream) {
stream.Spec.Data = string(streamContent)
stream.Spec.Stack = stackName
})
_, _, err = core.CreateOrUpdate[*v1beta1.Stream](ctx, types.NamespacedName{
Name: fmt.Sprintf("%s-%s", stackName, sanitizedName),
}, func(t *v1beta1.Stream) {
t.Spec.Data = string(streamContent)
t.Spec.Stack = stackName
})
}, opts...)
if err != nil {
return errors.Wrap(err, "creating stream")
}
Expand Down
92 changes: 92 additions & 0 deletions components/operatorv2/pkg/v1beta1/auth.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package v1beta1

import (
"context"
"github.com/formancehq/operator/v2/api/v1beta1"

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/watch"
"k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest"
)

type AuthInterface interface {
List(ctx context.Context, opts metav1.ListOptions) (*v1beta1.AuthList, error)
Get(ctx context.Context, name string, options metav1.GetOptions) (*v1beta1.Auth, error)
Create(ctx context.Context, Auth *v1beta1.Auth) (*v1beta1.Auth, error)
Update(ctx context.Context, Auth *v1beta1.Auth) (*v1beta1.Auth, error)
Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error)
Delete(ctx context.Context, name string) error
}

type AuthClient struct {
restClient rest.Interface
}

func (c *AuthClient) List(ctx context.Context, opts metav1.ListOptions) (*v1beta1.AuthList, error) {
result := v1beta1.AuthList{}
err := c.restClient.
Get().
Resource("Auths").
VersionedParams(&opts, scheme.ParameterCodec).
Do(ctx).
Into(&result)

return &result, err
}

func (c *AuthClient) Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1beta1.Auth, error) {
result := v1beta1.Auth{}
err := c.restClient.
Get().
Resource("Auths").
Name(name).
VersionedParams(&opts, scheme.ParameterCodec).
Do(ctx).
Into(&result)

return &result, err
}

func (c *AuthClient) Create(ctx context.Context, Auth *v1beta1.Auth) (*v1beta1.Auth, error) {
result := v1beta1.Auth{}
err := c.restClient.
Post().
Resource("Auths").
Body(Auth).
Do(ctx).
Into(&result)

return &result, err
}

func (c *AuthClient) Delete(ctx context.Context, name string) error {
return c.restClient.
Delete().
Resource("Auths").
Name(name).
Do(ctx).
Error()
}

func (c *AuthClient) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) {
opts.Watch = true
return c.restClient.
Get().
Resource("Auths").
VersionedParams(&opts, scheme.ParameterCodec).
Watch(ctx)
}

func (c *AuthClient) Update(ctx context.Context, o *v1beta1.Auth) (*v1beta1.Auth, error) {
result := v1beta1.Auth{}
err := c.restClient.
Put().
Resource("Auths").
Name(o.Name).
Body(o).
Do(ctx).
Into(&result)

return &result, err
}
83 changes: 83 additions & 0 deletions components/operatorv2/pkg/v1beta1/client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package v1beta1

import (
"github.com/formancehq/operator/v2/api/v1beta1"
"k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest"
)

func init() {
if err := v1beta1.AddToScheme(scheme.Scheme); err != nil {
panic(err)
}
}

type Client struct {
rest.Interface
}

func NewClient(restClient rest.Interface) *Client {
return &Client{
Interface: restClient,
}
}

func (c *Client) Stacks() StackInterface {
return &stackClient{
restClient: c.Interface,
}
}

func (c *Client) Auths() AuthInterface {
return &AuthClient{
restClient: c.Interface,
}
}

func (c *Client) Gateways() GatewayInterface {
return &gatewayClient{
restClient: c.Interface,
}
}

func (c *Client) Ledgers() LedgerInterface {
return &LedgerClient{
restClient: c.Interface,
}
}

func (c *Client) Orchestrations() OrchestrationInterface {
return &OrchestrationClient{
restClient: c.Interface,
}
}

func (c *Client) Payments() PaymentsInterface {
return &paymentsClient{
restClient: c.Interface,
}
}

func (c *Client) Reconciliations() ReconciliationInterface {
return &reconciliationClient{
restClient: c.Interface,
}
}

func (c *Client) Searches() SearchInterface {
return &SearchClient{
restClient: c.Interface,
}
}

func (c *Client) Wallets() WalletsInterface {
return &walletsClient{
restClient: c.Interface,
}
}

func (c *Client) Webhooks() WebhooksInterface {
return &webhooksClient{
restClient: c.Interface,
}
}
92 changes: 92 additions & 0 deletions components/operatorv2/pkg/v1beta1/gateway.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package v1beta1

import (
"context"
"github.com/formancehq/operator/v2/api/v1beta1"

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/watch"
"k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest"
)

type GatewayInterface interface {
List(ctx context.Context, opts metav1.ListOptions) (*v1beta1.GatewayList, error)
Get(ctx context.Context, name string, options metav1.GetOptions) (*v1beta1.Gateway, error)
Create(ctx context.Context, Gateway *v1beta1.Gateway) (*v1beta1.Gateway, error)
Update(ctx context.Context, Gateway *v1beta1.Gateway) (*v1beta1.Gateway, error)
Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error)
Delete(ctx context.Context, name string) error
}

type gatewayClient struct {
restClient rest.Interface
}

func (c *gatewayClient) List(ctx context.Context, opts metav1.ListOptions) (*v1beta1.GatewayList, error) {
result := v1beta1.GatewayList{}
err := c.restClient.
Get().
Resource("Gateways").
VersionedParams(&opts, scheme.ParameterCodec).
Do(ctx).
Into(&result)

return &result, err
}

func (c *gatewayClient) Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1beta1.Gateway, error) {
result := v1beta1.Gateway{}
err := c.restClient.
Get().
Resource("Gateways").
Name(name).
VersionedParams(&opts, scheme.ParameterCodec).
Do(ctx).
Into(&result)

return &result, err
}

func (c *gatewayClient) Create(ctx context.Context, Gateway *v1beta1.Gateway) (*v1beta1.Gateway, error) {
result := v1beta1.Gateway{}
err := c.restClient.
Post().
Resource("Gateways").
Body(Gateway).
Do(ctx).
Into(&result)

return &result, err
}

func (c *gatewayClient) Delete(ctx context.Context, name string) error {
return c.restClient.
Delete().
Resource("Gateways").
Name(name).
Do(ctx).
Error()
}

func (c *gatewayClient) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) {
opts.Watch = true
return c.restClient.
Get().
Resource("Gateways").
VersionedParams(&opts, scheme.ParameterCodec).
Watch(ctx)
}

func (c *gatewayClient) Update(ctx context.Context, o *v1beta1.Gateway) (*v1beta1.Gateway, error) {
result := v1beta1.Gateway{}
err := c.restClient.
Put().
Resource("Gateways").
Name(o.Name).
Body(o).
Do(ctx).
Into(&result)

return &result, err
}
Loading

0 comments on commit 08267b6

Please sign in to comment.