From 72911aee48e6f3b50338fc7301689cc15f669d71 Mon Sep 17 00:00:00 2001 From: chenliu1993 Date: Wed, 16 Aug 2023 13:53:18 -0400 Subject: [PATCH] Update plugin to fix some probelms amd update image version to latest fix version showing issue, now it uses upstream commit as plugin version update image to 2.0.1 in login part. wait for the deployment to be ready and then getthe QR code Signed-off-by: chenliu1993 --- krew/.gitignore | 2 + krew/Makefile | 26 ++++++++--- krew/README.md | 9 ++-- krew/cmd/kubectl-bilipro.go | 4 +- krew/go.mod | 4 +- krew/pkg/cmd/delete.go | 6 +-- krew/pkg/cmd/get.go | 5 +-- krew/pkg/cmd/init.go | 43 +++++++++++++++---- krew/pkg/cmd/version.go | 4 +- .../base/bilibiliPro/deployment.yaml | 2 +- krew/pkg/utils/client.go | 2 + 11 files changed, 74 insertions(+), 33 deletions(-) create mode 100644 krew/.gitignore diff --git a/krew/.gitignore b/krew/.gitignore new file mode 100644 index 000000000..45f4d8132 --- /dev/null +++ b/krew/.gitignore @@ -0,0 +1,2 @@ +bin +bilipro \ No newline at end of file diff --git a/krew/Makefile b/krew/Makefile index b18791ada..23f9d3c1f 100644 --- a/krew/Makefile +++ b/krew/Makefile @@ -20,18 +20,30 @@ help: #### display help deploy: build install #### build + install +.PHONY: fmt +fmt: #### run go fmt against code + @go fmt ./... + + +.PHONY: vet +vet: #### run go vet against code + @go vet ./... + +.PHONY: update-modules +update-modules: tidy #### update go modules + +.PHONY: tidy +tidy: #### run go mod tidy + @go mod tidy + .PHONY: build build: #### build the plugin - @go vet ./... && \ - go fmt ./... && \ - echo "build on ${GOOS}/${GOARCH}" && \ - cd ${ROOT_DIR}/krew/cmd && \ - GOOS=${GOOS} GOARCH=${GOARCH} CGO_ENABLED=0 go build -ldflags "-X github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/cmd.Version=${GITCOMMIT}" -o $(BIN_NAME) kubectl-bilipro.go - + @echo "build on ${GOOS}/${GOARCH}" && \ + GOOS=${GOOS} GOARCH=${GOARCH} CGO_ENABLED=0 go build -mod readonly -ldflags "-X github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/cmd.version=${GITCOMMIT}" -o bin/$(BIN_NAME) cmd/kubectl-bilipro.go .PHONY: install install: #### install the plugin - @cd ${ROOT_DIR}/krew/cmd && \ + @cd ${ROOT_DIR}/krew/bin && \ sudo install ./$(BIN_NAME) ${KUBECTL_DIR}/$(BIN_NAME) .PHONY: test diff --git a/krew/README.md b/krew/README.md index f56318963..36697df11 100644 --- a/krew/README.md +++ b/krew/README.md @@ -18,15 +18,18 @@ For example: the kubectl is installed under `/usr/bin`, then put the bilibilipro ### Deployment && Update -Command: `kubectl bilipro init --config config.yaml [optional]--login` +Prerequsites: please make sure you have the right permission to at least manage namespaces/deployments + +Command: `kubectl bilipro init --config config.yaml` Creates Deployment with the needed environments. Optional Options: -- `--image=zai7lou/bilibili_tool_pro:1.0.1` +- `--image=zai7lou/bilibili_tool_pro:2.0.1` - `--namespace=bilipro` -- `--image-pull-secret=` +- `--image-pull-secret=` +- `--login` to scan QR code to login Required Options: diff --git a/krew/cmd/kubectl-bilipro.go b/krew/cmd/kubectl-bilipro.go index f9e3ca6ea..55256366e 100644 --- a/krew/cmd/kubectl-bilipro.go +++ b/krew/cmd/kubectl-bilipro.go @@ -1,6 +1,7 @@ package main import ( + "fmt" "os" "github.com/spf13/pflag" @@ -8,7 +9,6 @@ import ( "github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/cmd" helper "github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/utils" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/klog/v2" ) func main() { @@ -17,7 +17,7 @@ func main() { cmd := cmd.NewExecutor(genericclioptions.IOStreams{In: os.Stdin, Out: os.Stdout, ErrOut: os.Stderr}) if err := cmd.Execute(); err != nil { - klog.Error(helper.GenErrorMsg(helper.SERVER_ERROR, err.Error()).Error()) + fmt.Println(helper.GenErrorMsg(helper.SERVER_ERROR, err.Error()).Error()) os.Exit(1) } } diff --git a/krew/go.mod b/krew/go.mod index 37d7d67a8..9f7fd48fa 100644 --- a/krew/go.mod +++ b/krew/go.mod @@ -9,7 +9,6 @@ require ( k8s.io/apimachinery v0.25.4 k8s.io/cli-runtime v0.25.4 k8s.io/client-go v0.25.4 - k8s.io/klog/v2 v2.80.1 sigs.k8s.io/kustomize/api v0.12.1 sigs.k8s.io/kustomize/kyaml v0.13.9 sigs.k8s.io/yaml v1.3.0 @@ -58,10 +57,11 @@ require ( gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/klog/v2 v2.80.1 // indirect k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 // indirect k8s.io/utils v0.0.0-20221107191617-1a15be271d1d // indirect sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect ) -replace github.com/RayWangQvQ/BiliBiliToolPro/krew => ../krew +// replace github.com/RayWangQvQ/BiliBiliToolPro/krew => ../krew diff --git a/krew/pkg/cmd/delete.go b/krew/pkg/cmd/delete.go index 9acbdf5f4..a291d4e27 100644 --- a/krew/pkg/cmd/delete.go +++ b/krew/pkg/cmd/delete.go @@ -1,6 +1,7 @@ package cmd import ( + "fmt" "io" "os/exec" "strings" @@ -9,8 +10,6 @@ import ( "sigs.k8s.io/kustomize/api/types" "sigs.k8s.io/yaml" - "k8s.io/klog/v2" - "github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/options" helper "github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/utils" "github.com/spf13/cobra" @@ -42,9 +41,10 @@ func newDeleteCmd(out io.Writer, errOut io.Writer) *cobra.Command { err := o.run(out) if err != nil { - klog.Error(err) + fmt.Println(err) return err } + fmt.Println("bilibili tool is removed from your cluster") return nil }, } diff --git a/krew/pkg/cmd/get.go b/krew/pkg/cmd/get.go index 162538ec0..15744cb20 100644 --- a/krew/pkg/cmd/get.go +++ b/krew/pkg/cmd/get.go @@ -1,11 +1,10 @@ package cmd import ( + "fmt" "io" "os/exec" - "k8s.io/klog/v2" - "github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/options" helper "github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/utils" "github.com/spf13/cobra" @@ -37,7 +36,7 @@ func newGetCmd(out io.Writer, errOut io.Writer) *cobra.Command { err := o.run(out) if err != nil { - klog.Error(err) + fmt.Println(err) return err } return nil diff --git a/krew/pkg/cmd/init.go b/krew/pkg/cmd/init.go index 21a80cf51..3a1f5ccd4 100644 --- a/krew/pkg/cmd/init.go +++ b/krew/pkg/cmd/init.go @@ -7,7 +7,6 @@ import ( "os" "os/exec" "strings" - "time" corev1 "k8s.io/api/core/v1" @@ -17,8 +16,6 @@ import ( "sigs.k8s.io/kustomize/api/types" - "k8s.io/klog/v2" - "github.com/spf13/cobra" "github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/options" @@ -52,7 +49,7 @@ func newInitCmd(out io.Writer, errOut io.Writer) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { err := o.run(out) if err != nil { - klog.Error(err) + fmt.Println(err) return err } return nil @@ -60,7 +57,7 @@ func newInitCmd(out io.Writer, errOut io.Writer) *cobra.Command { } f := cmd.Flags() - f.StringVarP(&o.deployOpts.Image, "image", "i", "zai7lou/bilibili_tool_pro:1.0.1", "bilibilipro image") + f.StringVarP(&o.deployOpts.Image, "image", "i", "zai7lou/bilibili_tool_pro:2.0.1", "bilibilipro image") f.StringVarP(&o.deployOpts.Namespace, "namespace", "n", "bilipro", "namespace scope for this request") f.StringVar(&o.deployOpts.ImagePullSecret, "image-pull-secret", "", "image pull secret to be used for pulling bilibilipro image") f.StringVarP(&o.deployOpts.ConfigFilePath, "config", "c", "", "the config file contanis the environment variables") @@ -94,6 +91,8 @@ func (o *initCmd) run(writer io.Writer) error { } // TODO: All about paths are a little bit tricky should give it more thoughts + + fmt.Println("Creating the kustomization file") // if the bilibili tool is deployed under system/pre-defined namespace, ignore the namespace file var resources []string // nolint: go-staticcheck if o.deployOpts.Namespace == "default" || o.deployOpts.Namespace == "kube-system" || o.deployOpts.Namespace == "kube-public" { @@ -211,6 +210,7 @@ func (o *initCmd) run(writer io.Writer) error { } } + fmt.Println("Applying the kustomization file") // do kubectl apply // make sure kubectl is under your PATH cmd := exec.Command("kubectl", "apply", "-f", "-") @@ -219,9 +219,9 @@ func (o *initCmd) run(writer io.Writer) error { return err } - // if there is login required + // if there is login required, exectue the login command as the last step if o.login { - + fmt.Println("please login...") client, _, err := helper.GetK8sClient() if err != nil { return err @@ -233,8 +233,33 @@ func (o *initCmd) run(writer io.Writer) error { return err } - // TODO: Stupid way, just sleep to wait container is ready, maybe a watch is a better option - time.Sleep(15 * time.Second) + fmt.Println("wait for the deployment to be ready") + // Wait for the deployment ready + checkCmdArgs := []string{ + "rollout", + "status", + "deployment/bilibilipro", + "-n", + o.deployOpts.Namespace, + } + checkCmd := exec.Command("kubectl", checkCmdArgs...) + + for { + if err := checkCmd.Start(); err != nil { + fmt.Printf("deployment is not ready yet, current status: %v\n", err) + continue + } + + err := checkCmd.Wait() + if err == nil { + fmt.Printf("deployment is ready\n") + break + } + fmt.Printf("deployment is not ready yet, current status: %v\n", err) + } + + fmt.Println("please scan the QR code") + // Exec the login command args := []string{ "exec", podName, diff --git a/krew/pkg/cmd/version.go b/krew/pkg/cmd/version.go index 6a7b43f30..d0c85d860 100644 --- a/krew/pkg/cmd/version.go +++ b/krew/pkg/cmd/version.go @@ -4,8 +4,6 @@ import ( "fmt" "io" - "k8s.io/klog/v2" - "github.com/spf13/cobra" ) @@ -35,7 +33,7 @@ func newVersionCmd(out io.Writer, errOut io.Writer) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { err := o.run() if err != nil { - klog.Error(err) + fmt.Println(err) return err } return nil diff --git a/krew/pkg/resources/base/bilibiliPro/deployment.yaml b/krew/pkg/resources/base/bilibiliPro/deployment.yaml index 7ec6d1343..97b8d89a3 100644 --- a/krew/pkg/resources/base/bilibiliPro/deployment.yaml +++ b/krew/pkg/resources/base/bilibiliPro/deployment.yaml @@ -13,7 +13,7 @@ spec: spec: containers: - name: bilibilipro - image: zai7lou/bilibili_tool_pro:1.0.1 + image: zai7lou/bilibili_tool_pro:2.0.1 imagePullPolicy: IfNotPresent resources: requests: diff --git a/krew/pkg/utils/client.go b/krew/pkg/utils/client.go index 7a220867b..81f058736 100644 --- a/krew/pkg/utils/client.go +++ b/krew/pkg/utils/client.go @@ -33,6 +33,8 @@ func GetK8sClient() (*kubernetes.Clientset, *rest.Config, error) { if err != nil { return nil, nil, GenErrorMsg(SERVER_ERROR, err.Error()) } + config.QPS = float32(10.0) + config.Burst = 20 // create the clientset clientset, err := kubernetes.NewForConfig(config)