Skip to content

fix: restore bind as the root cmd in cli#238

Merged
cnvergence merged 8 commits into
kbind-dev:mainfrom
cnvergence:fix-cmd-bind
Feb 5, 2025
Merged

fix: restore bind as the root cmd in cli#238
cnvergence merged 8 commits into
kbind-dev:mainfrom
cnvergence:fix-cmd-bind

Conversation

@cnvergence

@cnvergence cnvergence commented Jan 24, 2025

Copy link
Copy Markdown
Member

Summary:

This aims to fix the order of commands in kubectl plugin, that is currently displayed like this:

 ./bin/kubectl-bind  
kube-bind is a project that aims to provide better support for service providers and consumers that reside in distinct Kubernetes clusters.

For more information, see: https://kube-bind.io

Usage:
  bind [command]

Available Commands:
  bind        Bind different remote types into the current cluster.
  completion  Generate the autocompletion script for the specified shell
  help        Help about any command

The current order shows bind bind subcommand.

./bin/kubectl-bind bind 
DISCLAIMER: This is a prototype. It will change in incompatible ways at any time.

Bind different remote types into the current cluster.

Usage:
bind bind [flags]
bind bind [command]

This PR will restore it and plugin help will be shown as:

kubectl bind
DISCLAIMER: This is a prototype. It will change in incompatible ways at any time.

kube-bind is a project that aims to provide better support for service providers and consumers that reside in distinct Kubernetes clusters.

For more information, see: https://kube-bind.io

To bind a remote service, use the 'kubectl bind' command. Please check the examples below for more information.

Usage:
  kubectl-bind [flags]
  kubectl-bind [command]

Examples:

        # select a kube-bind.io compatible service from the given URL, e.g. an API service.
        kubectl bind https://mangodb.com/exports

        # authenticate and configure the services to bind, but don't actually bind them.
        kubectl bind https://mangodb.com/exports --dry-run -o yaml > apiservice-export-requests.yaml

        # bind to a remote API service as configured above and actually bind to it, e.g. in GitOps automation.
        kubectl bind apiservice --remote-kubeconfig name -f apiservice-binding-requests.yaml

        # bind to a remote API service via a request manifest from a https URL.
        kubectl bind apiservice --remote-kubeconfig name https://some-url.com/apiservice-export-requests.yaml


Available Commands:
  apiservice  Bind to a remote API service
  completion  Generate the autocompletion script for the specified shell
  help        Help about any command

Signed-off-by: Karol Szwaj <karol.szwaj@gmail.com>

On-behalf-of: @SAP karol.szwaj@sap.com
@cnvergence
cnvergence marked this pull request as ready for review January 24, 2025 13:14
@cnvergence
cnvergence requested a review from a team as a code owner January 24, 2025 13:14
Signed-off-by: Karol Szwaj <karol.szwaj@gmail.com>

On-behalf-of: @SAP karol.szwaj@sap.com
@sttts

sttts commented Jan 29, 2025

Copy link
Copy Markdown
Contributor

Have you tested what happens when called from kubectl?

$ kubectl bind

It should print kubectl bind instead of kubectl-bind bind.

Comment thread cli/cmd/kubectl-bind/cmd/kubectlBind_test.go
Co-authored-by: Dr. Stefan Schimanski <stefan.schimanski@gmail.com>
@cnvergence

Copy link
Copy Markdown
Member Author

hey @sttts, if you type $ kubectl bind built from this PR it will show:

$ kubectl bind 
DISCLAIMER: This is a prototype. It will change in incompatible ways at any time.

kube-bind is a project that aims to provide better support for service providers and consumers that reside in distinct Kubernetes clusters.

For more information, see: https://kube-bind.io

To bind a remote service, use the 'kubectl bind' command. Please check the examples below for more information.

Usage:
  kubectl-bind [flags]
  kubectl-bind [command]

Examples:

        # select a kube-bind.io compatible service from the given URL, e.g. an API service.
        kubectl bind https://mangodb.com/exports

Signed-off-by: Karol Szwaj <karol.szwaj@gmail.com>

On-behalf-of: @SAP karol.szwaj@sap.com
@cnvergence
cnvergence requested a review from sttts January 29, 2025 13:27
@sttts

sttts commented Jan 29, 2025

Copy link
Copy Markdown
Contributor

if you type $ kubectl bind built from this PR it will show

That doesn't look correct. It should show apiservice as subcommands and the help of bind. In other words, it looks like calling the plugin through kubectl seems to swallow the bind. Maybe that was the reason it was as it was before?

@cnvergence

cnvergence commented Jan 29, 2025

Copy link
Copy Markdown
Member Author

I'm sorry, I did not link the whole output before, it shows now correctly the apiservice subcommand

 kubectl bind 
DISCLAIMER: This is a prototype. It will change in incompatible ways at any time.

kube-bind is a project that aims to provide better support for service providers and consumers that reside in distinct Kubernetes clusters.

For more information, see: https://kube-bind.io

To bind a remote service, use the 'kubectl bind' command. Please check the examples below for more information.

Usage:
  kubectl-bind [flags]
  kubectl-bind [command]

Examples:

        # select a kube-bind.io compatible service from the given URL, e.g. an API service.
        kubectl bind https://mangodb.com/exports

        # authenticate and configure the services to bind, but don't actually bind them.
        kubectl bind https://mangodb.com/exports --dry-run -o yaml > apiservice-export-requests.yaml

        # bind to a remote API service as configured above and actually bind to it, e.g. in GitOps automation.
        kubectl bind apiservice --remote-kubeconfig name -f apiservice-binding-requests.yaml

        # bind to a remote API service via a request manifest from a https URL.
        kubectl bind apiservice --remote-kubeconfig name https://some-url.com/apiservice-export-requests.yaml


Available Commands:
  apiservice  Bind to a remote API service
  completion  Generate the autocompletion script for the specified shell
  help        Help about any command

Signed-off-by: Karol Szwaj <karol.szwaj@gmail.com>

On-behalf-of: @SAP karol.szwaj@sap.com
@sttts

sttts commented Jan 29, 2025

Copy link
Copy Markdown
Contributor

Oh, ic. Indeed, that's better. Wondering, can we replace kubectl-bind with kubectl bind?

Signed-off-by: Karol Szwaj <karol.szwaj@gmail.com>

On-behalf-of: @SAP karol.szwaj@sap.com
Signed-off-by: Karol Szwaj <karol.szwaj@gmail.com>
@cnvergence

cnvergence commented Jan 30, 2025

Copy link
Copy Markdown
Member Author

Hmm, good point, let's just keep bind in the usage.

$ kubectl bind
DISCLAIMER: This is a prototype. It will change in incompatible ways at any time.

kube-bind is a project that aims to provide better support for service providers and consumers that reside in distinct Kubernetes clusters.

For more information, see: https://kube-bind.io

To bind a remote service, use the 'kubectl bind' command. Please check the examples below for more information.

Usage:
  bind [flags]
  bind [command]

Examples:

        # select a kube-bind.io compatible service from the given URL, e.g. an API service.
        kubectl bind https://mangodb.com/exports

        # authenticate and configure the services to bind, but don't actually bind them.
        kubectl bind https://mangodb.com/exports --dry-run -o yaml > apiservice-export-requests.yaml

        # bind to a remote API service as configured above and actually bind to it, e.g. in GitOps automation.
        kubectl bind apiservice --remote-kubeconfig name -f apiservice-binding-requests.yaml

        # bind to a remote API service via a request manifest from a https URL.
        kubectl bind apiservice --remote-kubeconfig name https://some-url.com/apiservice-export-requests.yaml


Available Commands:
  apiservice  Bind to a remote API service
  completion  Generate the autocompletion script for the specified shell
  help        Help about any command

Flags:
      --add_dir_header                       If true, adds the file directory to the header of the log messages
      --allow-missing-template-keys          If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. (default true)
      --alsologtostderr                      log to standard error as well as files (no effect when -logtostderr=true)
      --as-uid string                        UID to impersonate for the operation
      --certificate-authority string         Path to a cert file for the certificate authority
      --context string                       The name of the kubeconfig context to use
      --disable-compression                  If true, opt-out of response compression for all requests to the server
  -d, --dry-run                              If true, only print the requests that would be sent to the service provider after authentication, without actually binding.
  -h, --help                                 help for bind
      --insecure-skip-tls-verify             Skip the verification of the server's certificate chain and host name.
      --konnector-image string               The konnector image to use
      --kubeconfig string                    path to the kubeconfig file
      --log-flush-frequency duration         Maximum number of seconds between log flushes (default 5s)
      --log-text-info-buffer-size quantity   [Alpha] In text format with split output streams, the info messages can be buffered for a while to increase performance. The default value of zero bytes disables buffering. The size can be specified as number of bytes (512), multiples of 1000 (1K), multiples of 1024 (2Ki), or powers of those (3M, 4G, 5Mi, 6Gi). Enable the LoggingAlphaOptions feature gate to use this.
      --log-text-split-stream                [Alpha] In text format, write error messages to stderr and info messages to stdout. The default is to write a single stream to stdout. Enable the LoggingAlphaOptions feature gate to use this.
      --log_backtrace_at traceLocation       when logging hits line file:N, emit a stack trace (default :0)
      --log_dir string                       If non-empty, write log files in this directory (no effect when -logtostderr=true)
      --log_file string                      If non-empty, use this log file (no effect when -logtostderr=true)
      --log_file_max_size uint               Defines the maximum size a log file can grow to (no effect when -logtostderr=true). Unit is megabytes. If the value is 0, the maximum file size is unlimited. (default 1800)
      --logging-format string                Sets the log format. Permitted formats: "text". (default "text")
      --logtostderr                          log to standard error instead of files (default true)
  -n, --namespace string                     If present, the namespace scope for this CLI request
      --one_output                           If true, only write logs to their native severity level (vs also writing to each lower severity level; no effect when -logtostderr=true)
  -o, --output string                        Output format. One of: (json, yaml, name, go-template, go-template-file, template, templatefile, jsonpath, jsonpath-as-json, jsonpath-file). (default "yaml")
      --password string                      Password for basic authentication to the API server
      --proxy-url string                     If provided, this URL will be used to connect via proxy
      --server string                        The address and port of the Kubernetes API server
      --show-managed-fields                  If true, keep the managedFields when printing objects in JSON or YAML format.
      --skip-konnector                       Skip the deployment of the konnector
      --skip_headers                         If true, avoid header prefixes in the log messages
      --skip_log_headers                     If true, avoid headers when opening log files (no effect when -logtostderr=true)
      --stderrthreshold severity             logs at or above this threshold go to stderr when writing to files and stderr (no effect when -logtostderr=true or -alsologtostderr=true) (default 2)
      --template string                      Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
      --tls-server-name string               If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used.
      --token string                         Bearer token for authentication to the API server
      --user string                          The name of the kubeconfig user to use
      --username string                      Username for basic authentication to the API server
  -v, --v Level                              number for the log level verbosity
      --version                              version for bind
      --vmodule pattern=N,...                comma-separated list of pattern=N settings for file-filtered logging (only works for text log format)

Use "bind [command] --help" for more information about a command.

@sttts

sttts commented Jan 31, 2025

Copy link
Copy Markdown
Contributor

Looks good. Can you check the verify job?

@sttts

sttts commented Feb 1, 2025

Copy link
Copy Markdown
Contributor

@cnvergence added you to the collaborators. So you can run the CI jobs yourself.

Signed-off-by: Karol Szwaj <karol.szwaj@gmail.com>
@cnvergence

Copy link
Copy Markdown
Member Author

thanks @sttts, it is ready now

@cnvergence
cnvergence merged commit bfe5bc7 into kbind-dev:main Feb 5, 2025
Sign up for free to 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.

2 participants