Skip to content

refactor: cleanup apiservice.Binder duplication (#360) - #595

Open
alokkumardalei-wq wants to merge 2 commits into
kbind-dev:mainfrom
alokkumardalei-wq:feature/issue-360
Open

refactor: cleanup apiservice.Binder duplication (#360)#595
alokkumardalei-wq wants to merge 2 commits into
kbind-dev:mainfrom
alokkumardalei-wq:feature/issue-360

Conversation

@alokkumardalei-wq

@alokkumardalei-wqalokkumardalei-wq commented Jul 16, 2026

Copy link
Copy Markdown

(Fixes#360)
This pull request addresses Issue #360 by refactoring and cleaning up the Binder logic in cli/pkg/kubectl/bind-apiservice/plugin/binder.go.

Changes made

Extracted Helper Methods:

  • Created setupEnvironment(ctx context.Context, remoteKubeconfigBytes []byte) (string, string, *rest.Config, error) to encapsulate common environment initialization logic (ensuring the client-side namespace exists, parsing/saving the remote kubeconfig, and fetching the resolved config).
  • Created processRequests(ctx context.Context, apiRequests []*kubebindv1alpha2.APIServiceExportRequest, remoteConfig *rest.Config, remoteNamespaceActual string, remoteKubeconfig string) ([]*kubebindv1alpha2.APIServiceBinding, error) to handle the common request processing loop (deploying konnector, creating service export requests, saving secrets, and creating bindings).

Refactored Entrypoints:

  • BindFromFile: Updated to use setupEnvironment and processRequests, eliminating large blocks of duplicated boilerplate.
  • BindFromResponse: Updated similarly to utilize the new helpers for processing the multiple requests present in the response.

Testing and Validation

  • Verified via local build (make build) that the refactored logic compiles cleanly.
hack/verify-go-versions.sh
Verifying minimum Go version: 1.26.2
Verifying build Go version: 1.26.2
+ cd ./cmd/
+ go build '-ldflags=-X k8s.io/client-go/pkg/version.gitCommit=92a6cb2 -X k8s.io/client-go/pkg/version.gitTreeState=clean -X k8s.io/client-go/pkg/version.gitVersion=v1.36.0+kube-bind-v0.0.0-92a6cb2 -X k8s.io/client-go/pkg/version.gitMajor=1 -X k8s.io/client-go/pkg/version.gitMinor=36 -X k8s.io/client-go/pkg/version.buildDate=2026-07-17T15:38:57Z -X k8s.io/component-base/version.gitCommit=92a6cb2 -X k8s.io/component-base/version.gitTreeState=clean -X k8s.io/component-base/version.gitVersion=v1.36.0+kube-bind-v0.0.0-92a6cb2 -X k8s.io/component-base/version.gitMajor=1 -X k8s.io/component-base/version.gitMinor=36 -X k8s.io/component-base/version.buildDate=2026-07-17T15:38:57Z' -o /Users/alokkumardalei/Desktop/kbind/kbind/bin/ ./...
+ cd ./cli/cmd/
+ go build '-ldflags=-X k8s.io/client-go/pkg/version.gitCommit=92a6cb2 -X k8s.io/client-go/pkg/version.gitTreeState=clean -X k8s.io/client-go/pkg/version.gitVersion=v1.36.0+kube-bind-v0.0.0-92a6cb2 -X k8s.io/client-go/pkg/version.gitMajor=1 -X k8s.io/client-go/pkg/version.gitMinor=36 -X k8s.io/client-go/pkg/version.buildDate=2026-07-17T15:38:57Z -X k8s.io/component-base/version.gitCommit=92a6cb2 -X k8s.io/component-base/version.gitTreeState=clean -X k8s.io/component-base/version.gitVersion=v1.36.0+kube-bind-v0.0.0-92a6cb2 -X k8s.io/component-base/version.gitMajor=1 -X k8s.io/component-base/version.gitMinor=36 -X k8s.io/component-base/version.buildDate=2026-07-17T15:38:57Z' -o /Users/alokkumardalei/Desktop/kbind/kbind/bin/ ./...
+ cd ./contrib/kcp/cmd/kcp-init/
+ go build '-ldflags=-X k8s.io/client-go/pkg/version.gitCommit=92a6cb2 -X k8s.io/client-go/pkg/version.gitTreeState=clean -X k8s.io/client-go/pkg/version.gitVersion=v1.36.0+kube-bind-v0.0.0-92a6cb2 -X k8s.io/client-go/pkg/version.gitMajor=1 -X k8s.io/client-go/pkg/version.gitMinor=36 -X k8s.io/client-go/pkg/version.buildDate=2026-07-17T15:38:57Z -X k8s.io/component-base/version.gitCommit=92a6cb2 -X k8s.io/component-base/version.gitTreeState=clean -X k8s.io/component-base/version.gitVersion=v1.36.0+kube-bind-v0.0.0-92a6cb2 -X k8s.io/component-base/version.gitMajor=1 -X k8s.io/component-base/version.gitMinor=36 -X k8s.io/component-base/version.buildDate=2026-07-17T15:38:57Z' -o /Users/alokkumardalei/Desktop/kbind/kbind/bin/ ./...
  • Ran make test locally to ensure the plugin's behavior remains unchanged.
github.com/kube-bind/kube-bind/backend coverage: 0.0% of statements
github.com/kube-bind/kube-bind/backend/auth coverage: 0.0% of statements
github.com/kube-bind/kube-bind/backend/client coverage: 0.0% of statements
? github.com/kube-bind/kube-bind/backend/controllers [no test files]
github.com/kube-bind/kube-bind/backend/controllers/bindableresourcesrequest coverage: 0.0% of statements
github.com/kube-bind/kube-bind/backend/controllers/cluster coverage: 0.0% of statements
github.com/kube-bind/kube-bind/backend/controllers/clusterbinding coverage: 0.0% of statements
github.com/kube-bind/kube-bind/backend/controllers/serviceexport coverage: 0.0% of statements
ok github.com/kube-bind/kube-bind/backend/controllers/serviceexportrbac 1.695s coverage: 51.2% of statements
github.com/kube-bind/kube-bind/backend/controllers/serviceexportrequest coverage: 0.0% of statements
github.com/kube-bind/kube-bind/backend/controllers/servicenamespace coverage: 0.0% of statements
github.com/kube-bind/kube-bind/backend/deploy coverage: 0.0% of statements
github.com/kube-bind/kube-bind/backend/http coverage: 0.0% of statements
github.com/kube-bind/kube-bind/backend/kubernetes coverage: 0.0% of statements
ok github.com/kube-bind/kube-bind/backend/kubernetes/resources 2.367s coverage: 4.7% of statements
ok github.com/kube-bind/kube-bind/backend/oidc 1.659s coverage: 33.3% of statements
ok github.com/kube-bind/kube-bind/backend/options 1.416s coverage: 9.6% of statements
github.com/kube-bind/kube-bind/backend/options/session/redis coverage: 0.0% of statements
github.com/kube-bind/kube-bind/backend/provider/kcp coverage: 0.0% of statements
github.com/kube-bind/kube-bind/backend/provider/kcp/controllers/apibindingtemplate coverage: 0.0% of statements
github.com/kube-bind/kube-bind/backend/provider/kcp/controllers/apiresourceschema coverage: 0.0% of statements
github.com/kube-bind/kube-bind/backend/provider/kcp/controllers/shared coverage: 0.0% of statements
github.com/kube-bind/kube-bind/backend/provider/kcp/controllers/vwrbac coverage: 0.0% of statements
github.com/kube-bind/kube-bind/backend/provider/kcp/options coverage: 0.0% of statements
github.com/kube-bind/kube-bind/backend/session coverage: 0.0% of statements
github.com/kube-bind/kube-bind/backend/session/memory coverage: 0.0% of statements
ok github.com/kube-bind/kube-bind/backend/session/redis 1.660s coverage: 81.1% of statements
github.com/kube-bind/kube-bind/backend/spaserver coverage: 0.0% of statements
? github.com/kube-bind/kube-bind/backend/template [no test files]
github.com/kube-bind/kube-bind/cmd/backend coverage: 0.0% of statements
github.com/kube-bind/kube-bind/cmd/konnector coverage: 0.0% of statements
github.com/kube-bind/kube-bind/cmd/konnector/cmd coverage: 0.0% of statements
github.com/kube-bind/kube-bind/deploy/crd coverage: 0.0% of statements
github.com/kube-bind/kube-bind/deploy/examples coverage: 0.0% of statements
github.com/kube-bind/kube-bind/pkg/bootstrap coverage: 0.0% of statements
github.com/kube-bind/kube-bind/pkg/committer coverage: 0.0% of statements
github.com/kube-bind/kube-bind/pkg/indexers coverage: 0.0% of statements
github.com/kube-bind/kube-bind/pkg/konnector coverage: 0.0% of statements
github.com/kube-bind/kube-bind/pkg/konnector/controllers/cluster coverage: 0.0% of statements
ok github.com/kube-bind/kube-bind/pkg/konnector/controllers/cluster/claimedresources 1.544s coverage: 5.7% of statements
github.com/kube-bind/kube-bind/pkg/konnector/controllers/cluster/claimedresourcesnamespaces coverage: 0.0% of statements
github.com/kube-bind/kube-bind/pkg/konnector/controllers/cluster/clusterbinding coverage: 0.0% of statements
github.com/kube-bind/kube-bind/pkg/konnector/controllers/cluster/namespacelifecycle coverage: 0.0% of statements
ok github.com/kube-bind/kube-bind/pkg/konnector/controllers/cluster/servicebinding 1.634s coverage: 21.2% of statements
ok github.com/kube-bind/kube-bind/pkg/konnector/controllers/cluster/serviceexport 1.966s coverage: 3.2% of statements
ok github.com/kube-bind/kube-bind/pkg/konnector/controllers/cluster/serviceexport/isolation 2.071scoverage: 5.6% of statements
github.com/kube-bind/kube-bind/pkg/konnector/controllers/cluster/serviceexport/multinsinformer coverage: 0.0% of statements
ok github.com/kube-bind/kube-bind/pkg/konnector/controllers/cluster/serviceexport/spec 2.209s coverage: 4.1% of statements
github.com/kube-bind/kube-bind/pkg/konnector/controllers/cluster/serviceexport/status coverage: 0.0% of statements
github.com/kube-bind/kube-bind/pkg/konnector/controllers/contextstore coverage: 0.0% of statements
github.com/kube-bind/kube-bind/pkg/konnector/controllers/dynamic coverage: 0.0% of statements
github.com/kube-bind/kube-bind/pkg/konnector/controllers/servicebinding coverage: 0.0% of statements
github.com/kube-bind/kube-bind/pkg/konnector/controllers/servicebindingbundle coverage: 0.0% of statements
github.com/kube-bind/kube-bind/pkg/konnector/options coverage: 0.0% of statements
github.com/kube-bind/kube-bind/pkg/konnector/server coverage: 0.0% of statements
github.com/kube-bind/kube-bind/pkg/konnector/types coverage: 0.0% of statements
ok github.com/kube-bind/kube-bind/pkg/resources 1.665s coverage: 57.4% of statements
ok github.com/kube-bind/kube-bind/pkg/version 1.713s coverage: 88.9% of statements

Signed-off-by: alokkumardalei-wq <alokkumardalei2@gmail.com>
@cnvergence

Copy link
Copy Markdown
Member

@alokkumardalei-wq tests failing ptal :)

Signed-off-by: alokkumardalei-wq <alokkumardalei2@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

cleanup: Cleanup apiservice.Binder

2 participants

@alokkumardalei-wq@cnvergence