Skip to content
Merged
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
49d3dc9
Refactor APIServiceExport and APIServiceExportRequest for v1alpha2
cnvergence May 9, 2025
5c0c874
storage version
cnvergence May 9, 2025
589fcd4
add APIServiceBinding v1alpha2
cnvergence May 16, 2025
9b1757d
update konnector to v1alpha2
cnvergence May 20, 2025
35081cd
update cmd and example-backend to v1alpha2
cnvergence May 21, 2025
0576922
update go.mod
cnvergence May 22, 2025
89d3f3d
refactor konnector serviceexport and servicebinding controllers
cnvergence May 28, 2025
ba782d3
update service binding reconciler
cnvergence May 29, 2025
9fddc70
refactor example backend
cnvergence May 30, 2025
d702fff
refactor example backend
cnvergence May 30, 2025
5d03d58
fix lint
cnvergence May 30, 2025
824ac99
remove validation rules
cnvergence May 30, 2025
4007325
add crds to e2e
cnvergence Jun 5, 2025
200293f
add rbac e2e
cnvergence Jun 5, 2025
a8bfcb8
setup with local kind
cnvergence Jun 9, 2025
8a210e6
fix backend kind cluster
cnvergence Jun 9, 2025
62bd128
make apiresourceschemas cluster scoped
cnvergence Jun 11, 2025
ed00fa1
add version gate
mjudeikis Jun 11, 2025
751577b
nit
mjudeikis Jun 12, 2025
2b61372
Move towards single kind cluster
mjudeikis Jun 13, 2025
048aaf6
Add additional perms to read schemas
mjudeikis Jun 13, 2025
05e03f7
Fix conditions
mjudeikis Jun 13, 2025
c9e73d4
fix race condition
mjudeikis Jun 13, 2025
05cd9f3
fix test
mjudeikis Jun 14, 2025
4bc8f75
update readme
mjudeikis Jun 14, 2025
dfc18e0
Merge pull request #1 from mjudeikis/v1alpha2-apiserviceexport-patch
cnvergence Jun 16, 2025
69f2025
add short names to crds and prealloc hashes
cnvergence Jun 16, 2025
8157fca
update readme, move kcp setup to quickstart page
cnvergence Jun 17, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .golangci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@ linters:
- linters:
- goconst
path: (.+)_test\.go
- linters:
- staticcheck
text: QF1008
paths:
- pkg/client
- third_party$
Expand Down
9 changes: 7 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ SHELL := /usr/bin/env bash -e

GO_INSTALL = ./hack/go-install.sh

ROOT_DIR=$(abspath .)
TOOLS_DIR=hack/tools
TOOLS_GOBIN_DIR := $(abspath $(TOOLS_DIR))
GOBIN_DIR=$(abspath ./bin )
Expand Down Expand Up @@ -151,9 +152,13 @@ $(CODE_GENERATOR):
GOBIN=$(TOOLS_GOBIN_DIR) $(GO_INSTALL) github.com/kcp-dev/code-generator/v2 $(CODE_GENERATOR_BIN) $(CODE_GENERATOR_VER)

lint: $(GOLANGCI_LINT) $(LOGCHECK) ## Run linters
$(GOLANGCI_LINT) run ./...
$(GOLANGCI_LINT) run $(GOLANGCI_LINT_FLAGS) -c $(ROOT_DIR)/.golangci.yaml --timeout 20m
.PHONY: lint

fix-lint: $(GOLANGCI_LINT)
GOLANGCI_LINT_FLAGS="--fix" $(MAKE) lint
.PHONY: fix-lint

vendor: ## Vendor the dependencies
go mod tidy
go mod vendor
Expand Down Expand Up @@ -354,7 +359,7 @@ image-local:
@echo "Successfully built local images with tag $(REV)"

.PHONY: kind-load
kind-load: image-local ## Load locally built images into kind cluster
kind-load:
@echo "Loading images into kind cluster '$(KIND_CLUSTER)'"
kind load docker-image $(KO_DOCKER_REPO)/konnector:$(REV) --name $(KIND_CLUSTER)
kind load docker-image $(KO_DOCKER_REPO)/example-backend:$(REV) --name $(KIND_CLUSTER)
Expand Down
12 changes: 8 additions & 4 deletions cli/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,19 @@ module github.com/kube-bind/kube-bind/cli

go 1.23.4

replace github.com/kube-bind/kube-bind/sdk/apis => ../sdk/apis
replace (
github.com/kube-bind/kube-bind => ../
github.com/kube-bind/kube-bind/sdk/apis => ../sdk/apis
github.com/kube-bind/kube-bind/sdk/client => ../sdk/client
)

require (
github.com/MakeNowJust/heredoc v1.0.0
github.com/blang/semver/v4 v4.0.0
github.com/fatih/color v1.18.0
github.com/kube-bind/kube-bind v0.4.6
github.com/kube-bind/kube-bind/sdk/apis v0.4.6
github.com/kube-bind/kube-bind/sdk/client v0.4.6
github.com/kube-bind/kube-bind v0.0.0-00010101000000-000000000000
github.com/kube-bind/kube-bind/sdk/apis v0.4.8
github.com/kube-bind/kube-bind/sdk/client v0.0.0-20250515145715-d9f20e7c840d
github.com/mdp/qrterminal/v3 v3.2.0
github.com/muesli/reflow v0.3.0
github.com/spf13/cobra v1.8.1
Expand Down
4 changes: 0 additions & 4 deletions cli/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -115,10 +115,6 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kube-bind/kube-bind v0.4.6 h1:XOa1Ac3tn5aJARni/f9+rNcvr4XEzRGXlzWhn0kkbVo=
github.com/kube-bind/kube-bind v0.4.6/go.mod h1:+xqzeod5hyVPEe0GaZXAnhaipmH5pusNfPmyVALkvcA=
github.com/kube-bind/kube-bind/sdk/client v0.4.6 h1:zcBA3qWAnRmbRaZZX62JPdLUA30n0CrE+fxzEowH0Ok=
github.com/kube-bind/kube-bind/sdk/client v0.4.6/go.mod h1:BaLx9LytSHd6s+VRNiNdleqnNzHoV1A5AoUvskyJ9tc=
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0=
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
Expand Down
80 changes: 2 additions & 78 deletions cli/pkg/crd2apiresourceschema/plugin/crd2apiresourceschema.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package plugin

import (
"context"
"encoding/json"
"errors"
"fmt"
"io"
Expand All @@ -41,6 +40,7 @@ import (

"github.com/kube-bind/kube-bind/cli/pkg/kubectl/base"
kubebindv1alpha2 "github.com/kube-bind/kube-bind/sdk/apis/kubebind/v1alpha2"
"github.com/kube-bind/kube-bind/sdk/apis/kubebind/v1alpha2/helpers"
)

type CRD2APIResourceSchemaOptions struct {
Expand Down Expand Up @@ -116,7 +116,7 @@ func (b *CRD2APIResourceSchemaOptions) Run(ctx context.Context) error {
}

prefix := fmt.Sprintf("v%s-%s", time.Now().Format("060102"), string(version.Get().GitCommit))
apiResourceSchema, err := convertCRDToAPIResourceSchema(crdObj, prefix)
apiResourceSchema, err := helpers.CRDToAPIResourceSchema(crdObj, prefix)
if err != nil {
fmt.Fprintf(b.Options.ErrOut, "Failed to convert CRD %s to APIResourceSchema: %v\n", crdObj.Name, err)
continue
Expand Down Expand Up @@ -158,82 +158,6 @@ func generateAPIResourceSchemaInCluster(ctx context.Context, client dynamic.Inte
return nil
}

func convertCRDToAPIResourceSchema(crd *apiextensionsv1.CustomResourceDefinition, prefix string) (*kubebindv1alpha2.APIResourceSchema, error) {
name := prefix + "." + crd.Name
informerScope := kubebindv1alpha2.NamespacedScope
apiResourceSchema := &kubebindv1alpha2.APIResourceSchema{
TypeMeta: metav1.TypeMeta{
APIVersion: kubebindv1alpha2.SchemeGroupVersion.String(),
Kind: "APIResourceSchema",
},
ObjectMeta: metav1.ObjectMeta{
Name: name,
},
Spec: kubebindv1alpha2.APIResourceSchemaSpec{
InformerScope: informerScope,
APIResourceSchemaCRDSpec: kubebindv1alpha2.APIResourceSchemaCRDSpec{
Group: crd.Spec.Group,
Names: crd.Spec.Names,
Scope: crd.Spec.Scope,
},
},
}

if len(crd.Spec.Versions) > 1 && crd.Spec.Conversion == nil {
return nil, fmt.Errorf("multiple versions specified for CRD %q but no conversion strategy", crd.Name)
}

if crd.Spec.Conversion != nil {
crConversion := &kubebindv1alpha2.CustomResourceConversion{
Strategy: kubebindv1alpha2.ConversionStrategyType(crd.Spec.Conversion.Strategy),
}

if crd.Spec.Conversion.Strategy == "Webhook" {
crConversion.Webhook = &kubebindv1alpha2.WebhookConversion{
ConversionReviewVersions: crd.Spec.Conversion.Webhook.ConversionReviewVersions,
}

if crd.Spec.Conversion.Webhook.ClientConfig != nil {
crConversion.Webhook.ClientConfig = &kubebindv1alpha2.WebhookClientConfig{
URL: crd.Spec.Conversion.Webhook.ClientConfig.URL,
CABundle: crd.Spec.Conversion.Webhook.ClientConfig.CABundle,
}
}
}

apiResourceSchema.Spec.Conversion = crConversion
}

for i := range crd.Spec.Versions {
crdVersion := crd.Spec.Versions[i]

apiResourceVersion := kubebindv1alpha2.APIResourceVersion{
Name: crdVersion.Name,
Served: crdVersion.Served,
Storage: crdVersion.Storage,
Deprecated: crdVersion.Deprecated,
DeprecationWarning: crdVersion.DeprecationWarning,
AdditionalPrinterColumns: crdVersion.AdditionalPrinterColumns,
}

if crdVersion.Schema != nil && crdVersion.Schema.OpenAPIV3Schema != nil {
rawSchema, err := json.Marshal(crdVersion.Schema.OpenAPIV3Schema)
if err != nil {
return nil, fmt.Errorf("error converting schema for version %q: %w", crdVersion.Name, err)
}
apiResourceVersion.Schema = runtime.RawExtension{Raw: rawSchema}
}

if crdVersion.Subresources != nil {
apiResourceVersion.Subresources = *crdVersion.Subresources
}

apiResourceSchema.Spec.Versions = append(apiResourceSchema.Spec.Versions, apiResourceVersion)
}

return apiResourceSchema, nil
}

func writeObjectToYAML(outputDir string, apiResourceSchema *kubebindv1alpha2.APIResourceSchema, logger io.Writer) error {
if err := os.MkdirAll(outputDir, 0755); err != nil {
return fmt.Errorf("failed to create output directory %s: %w", outputDir, err)
Expand Down
8 changes: 4 additions & 4 deletions cli/pkg/kubectl/bind-apiservice/plugin/bind.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ import (
"sigs.k8s.io/yaml"

"github.com/kube-bind/kube-bind/cli/pkg/kubectl/base"
kubebindv1alpha1 "github.com/kube-bind/kube-bind/sdk/apis/kubebind/v1alpha1"
kubebindv1alpha2 "github.com/kube-bind/kube-bind/sdk/apis/kubebind/v1alpha2"
)

// BindAPIServiceOptions are the options for the kubectl-bind-apiservice command.
Expand Down Expand Up @@ -257,12 +257,12 @@ func (b *BindAPIServiceOptions) getRequestManifest() ([]byte, error) {
return body, nil
}

func (b *BindAPIServiceOptions) unmarshalManifest(bs []byte) (*kubebindv1alpha1.APIServiceExportRequest, error) {
var request kubebindv1alpha1.APIServiceExportRequest
func (b *BindAPIServiceOptions) unmarshalManifest(bs []byte) (*kubebindv1alpha2.APIServiceExportRequest, error) {
var request kubebindv1alpha2.APIServiceExportRequest
if err := yaml.Unmarshal(bs, &request); err != nil {
return nil, fmt.Errorf("failed to unmarshal manifest: %w", err)
}
if request.APIVersion != kubebindv1alpha1.SchemeGroupVersion.String() {
if request.APIVersion != kubebindv1alpha2.SchemeGroupVersion.String() {
return nil, fmt.Errorf("invalid apiVersion %q", request.APIVersion)
}
if request.Kind != "APIServiceExportRequest" {
Expand Down
2 changes: 1 addition & 1 deletion cli/pkg/kubectl/bind-apiservice/plugin/konnector.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ func (b *BindAPIServiceOptions) deployKonnector(ctx context.Context, config *res
}
first := true
return wait.PollUntilContextCancel(ctx, 1*time.Second, true, func(ctx context.Context) (bool, error) {
_, err := bindClient.KubeBindV1alpha1().APIServiceBindings().List(ctx, metav1.ListOptions{})
_, err := bindClient.KubeBindV1alpha2().APIServiceBindings().List(ctx, metav1.ListOptions{})
if err == nil {
if !first {
fmt.Fprintln(b.Options.IOStreams.ErrOut) //nolint:errcheck
Expand Down
20 changes: 10 additions & 10 deletions cli/pkg/kubectl/bind-apiservice/plugin/servicebindings.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@ import (
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/client-go/rest"

kubebindv1alpha1 "github.com/kube-bind/kube-bind/sdk/apis/kubebind/v1alpha1"
"github.com/kube-bind/kube-bind/sdk/apis/kubebind/v1alpha1/helpers"
kubebindv1alpha2 "github.com/kube-bind/kube-bind/sdk/apis/kubebind/v1alpha2"
"github.com/kube-bind/kube-bind/sdk/apis/kubebind/v1alpha2/helpers"
conditionsapi "github.com/kube-bind/kube-bind/sdk/apis/third_party/conditions/apis/conditions/v1alpha1"
"github.com/kube-bind/kube-bind/sdk/apis/third_party/conditions/util/conditions"
bindclient "github.com/kube-bind/kube-bind/sdk/client/clientset/versioned"
)

func (b *BindAPIServiceOptions) createAPIServiceBindings(ctx context.Context, config *rest.Config, request *kubebindv1alpha1.APIServiceExportRequest, secretName string) ([]*kubebindv1alpha1.APIServiceBinding, error) {
func (b *BindAPIServiceOptions) createAPIServiceBindings(ctx context.Context, config *rest.Config, request *kubebindv1alpha2.APIServiceExportRequest, secretName string) ([]*kubebindv1alpha2.APIServiceBinding, error) {
bindClient, err := bindclient.NewForConfig(config)
if err != nil {
return nil, err
Expand All @@ -44,10 +44,10 @@ func (b *BindAPIServiceOptions) createAPIServiceBindings(ctx context.Context, co
return nil, err
}

var bindings []*kubebindv1alpha1.APIServiceBinding
var bindings []*kubebindv1alpha2.APIServiceBinding
for _, resource := range request.Spec.Resources {
name := resource.Resource + "." + resource.Group
existing, err := bindClient.KubeBindV1alpha1().APIServiceBindings().Get(ctx, name, metav1.GetOptions{})
existing, err := bindClient.KubeBindV1alpha2().APIServiceBindings().Get(ctx, name, metav1.GetOptions{})
if err != nil && !apierrors.IsNotFound(err) {
return nil, err
} else if err == nil {
Expand Down Expand Up @@ -76,14 +76,14 @@ func (b *BindAPIServiceOptions) createAPIServiceBindings(ctx context.Context, co
first = false
fmt.Fprint(b.Options.IOStreams.ErrOut, ".") //nolint:errcheck
}
created, err := bindClient.KubeBindV1alpha1().APIServiceBindings().Create(ctx, &kubebindv1alpha1.APIServiceBinding{
created, err := bindClient.KubeBindV1alpha2().APIServiceBindings().Create(ctx, &kubebindv1alpha2.APIServiceBinding{
ObjectMeta: metav1.ObjectMeta{
Name: resource.Resource + "." + resource.Group,
Namespace: "kube-bind",
},
Spec: kubebindv1alpha1.APIServiceBindingSpec{
KubeconfigSecretRef: kubebindv1alpha1.ClusterSecretKeyRef{
LocalSecretKeyRef: kubebindv1alpha1.LocalSecretKeyRef{
Spec: kubebindv1alpha2.APIServiceBindingSpec{
KubeconfigSecretRef: kubebindv1alpha2.ClusterSecretKeyRef{
LocalSecretKeyRef: kubebindv1alpha2.LocalSecretKeyRef{
Name: secretName,
Key: "kubeconfig",
},
Expand All @@ -102,7 +102,7 @@ func (b *BindAPIServiceOptions) createAPIServiceBindings(ctx context.Context, co
conditionsapi.ConditionSeverityInfo,
"Pending",
)
_, _ = bindClient.KubeBindV1alpha1().APIServiceBindings().UpdateStatus(ctx, created, metav1.UpdateOptions{}) //nolint:errcheck
_, _ = bindClient.KubeBindV1alpha2().APIServiceBindings().UpdateStatus(ctx, created, metav1.UpdateOptions{}) //nolint:errcheck

fmt.Fprintf(b.Options.IOStreams.ErrOut, "✅ Created APIServiceBinding %s.%s\n", resource.Resource, resource.Group) //nolint:errcheck
bindings = append(bindings, created)
Expand Down
24 changes: 12 additions & 12 deletions cli/pkg/kubectl/bind-apiservice/plugin/serviceexportrequest.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,16 @@ import (
"k8s.io/cli-runtime/pkg/printers"
"k8s.io/client-go/rest"

kubebindv1alpha1 "github.com/kube-bind/kube-bind/sdk/apis/kubebind/v1alpha1"
kubebindv1alpha2 "github.com/kube-bind/kube-bind/sdk/apis/kubebind/v1alpha2"
bindclient "github.com/kube-bind/kube-bind/sdk/client/clientset/versioned"
)

func (b *BindAPIServiceOptions) createServiceExportRequest(
ctx context.Context,
remoteConfig *rest.Config,
ns string,
request *kubebindv1alpha1.APIServiceExportRequest,
) (*kubebindv1alpha1.APIServiceExportRequest, error) {
request *kubebindv1alpha2.APIServiceExportRequest,
) (*kubebindv1alpha2.APIServiceExportRequest, error) {
bindRemoteClient, err := bindclient.NewForConfig(remoteConfig)
if err != nil {
return nil, err
Expand All @@ -48,34 +48,34 @@ func (b *BindAPIServiceOptions) createServiceExportRequest(
if request.Name == "" {
request.GenerateName = "export-"
}
created, err := bindRemoteClient.KubeBindV1alpha1().APIServiceExportRequests(ns).Create(ctx, request, metav1.CreateOptions{})
created, err := bindRemoteClient.KubeBindV1alpha2().APIServiceExportRequests(ns).Create(ctx, request, metav1.CreateOptions{})
if err != nil && !apierrors.IsAlreadyExists(err) {
return nil, err
} else if err != nil && request.Name == "" {
return nil, err
} else if err != nil {
request.GenerateName = request.Name + "-"
request.Name = ""
created, err = bindRemoteClient.KubeBindV1alpha1().APIServiceExportRequests(ns).Create(ctx, request, metav1.CreateOptions{})
created, err = bindRemoteClient.KubeBindV1alpha2().APIServiceExportRequests(ns).Create(ctx, request, metav1.CreateOptions{})
if err != nil {
return nil, err
}
}

// wait for the request to be Successful, Failed or deleted
var result *kubebindv1alpha1.APIServiceExportRequest
var result *kubebindv1alpha2.APIServiceExportRequest
if err := wait.PollUntilContextTimeout(ctx, 1*time.Second, 10*time.Minute, true, func(ctx context.Context) (bool, error) {
request, err := bindRemoteClient.KubeBindV1alpha1().APIServiceExportRequests(ns).Get(ctx, created.Name, metav1.GetOptions{})
request, err := bindRemoteClient.KubeBindV1alpha2().APIServiceExportRequests(ns).Get(ctx, created.Name, metav1.GetOptions{})
if err != nil && !apierrors.IsNotFound(err) {
return false, err
} else if apierrors.IsNotFound(err) {
return false, fmt.Errorf("APIServiceExportRequest %s was deleted by the service provider", created.Name)
}
if request.Status.Phase == kubebindv1alpha1.APIServiceExportRequestPhaseSucceeded {
if request.Status.Phase == kubebindv1alpha2.APIServiceExportRequestPhaseSucceeded {
result = request
return true, nil
}
if request.Status.Phase == kubebindv1alpha1.APIServiceExportRequestPhaseFailed {
if request.Status.Phase == kubebindv1alpha2.APIServiceExportRequestPhaseFailed {
return false, fmt.Errorf("binding request failed: %s", request.Status.TerminalMessage)
}
return false, nil
Expand All @@ -86,16 +86,16 @@ func (b *BindAPIServiceOptions) createServiceExportRequest(
return result, nil
}

func (b *BindAPIServiceOptions) printTable(ctx context.Context, config *rest.Config, bindings []*kubebindv1alpha1.APIServiceBinding) error {
func (b *BindAPIServiceOptions) printTable(ctx context.Context, config *rest.Config, bindings []*kubebindv1alpha2.APIServiceBinding) error {
printer := printers.NewTablePrinter(printers.PrintOptions{
WithKind: true,
Kind: kubebindv1alpha1.SchemeGroupVersion.WithKind("APIServiceBinding").GroupKind(),
Kind: kubebindv1alpha2.SchemeGroupVersion.WithKind("APIServiceBinding").GroupKind(),
})

tableConfig := rest.CopyConfig(config)
tableConfig.APIPath = "/apis"
tableConfig.ContentConfig.AcceptContentTypes = fmt.Sprintf("application/json;as=Table;v=%s;g=%s", metav1.SchemeGroupVersion.Version, metav1.GroupName)
tableConfig.GroupVersion = &kubebindv1alpha1.SchemeGroupVersion
tableConfig.GroupVersion = &kubebindv1alpha2.SchemeGroupVersion
scheme := runtime.NewScheme()
if err := metav1.AddMetaToScheme(scheme); err != nil {
return err
Expand Down
4 changes: 2 additions & 2 deletions cli/pkg/kubectl/bind/authenticator/authenticator.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import (
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/klog/v2"

kubebindv1alpha1 "github.com/kube-bind/kube-bind/sdk/apis/kubebind/v1alpha1"
kubebindv1alpha2 "github.com/kube-bind/kube-bind/sdk/apis/kubebind/v1alpha2"
)

var (
Expand All @@ -42,7 +42,7 @@ var (
)

func init() {
utilruntime.Must(kubebindv1alpha1.AddToScheme(kubebindSchema))
utilruntime.Must(kubebindv1alpha2.AddToScheme(kubebindSchema))
}

type LocalhostCallbackAuthenticator struct {
Expand Down
Loading