mirror of
https://github.com/RayWangQvQ/BiliBiliToolPro.git
synced 2026-10-17 05:07:15 +08:00
Update krew with login option (#491)
Signed-off-by: chenliu1993 <cl2037829916@gmail.com>
This commit is contained in:
@@ -364,6 +364,7 @@ krew/bilipro
|
||||
krew/cmd/kubectl-bilipro
|
||||
krew/kustomization.yaml
|
||||
bilipro
|
||||
krew/pkg/utils/fixtures
|
||||
kustomization.yaml
|
||||
|
||||
# cookie config
|
||||
|
||||
+10
-1
@@ -24,6 +24,7 @@ deploy: build install #### build + install
|
||||
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
|
||||
|
||||
@@ -31,4 +32,12 @@ build: #### build the plugin
|
||||
.PHONY: install
|
||||
install: #### install the plugin
|
||||
@cd ${ROOT_DIR}/krew/cmd && \
|
||||
sudo install ./$(BIN_NAME) ${KUBECTL_DIR}/$(BIN_NAME)
|
||||
sudo install ./$(BIN_NAME) ${KUBECTL_DIR}/$(BIN_NAME)
|
||||
|
||||
.PHONY: test
|
||||
test: #### run tests
|
||||
@cd ${ROOT_DIR}/krew/pkg/utils && \
|
||||
rm -rf fixtures && \
|
||||
mkdir fixtures && \
|
||||
go test ./... -cover && \
|
||||
rm -rf fixtures
|
||||
+7
-7
@@ -10,7 +10,7 @@
|
||||
## Install Plugin
|
||||
|
||||
Command: `cd ./krew && make deploy`
|
||||
The binary will be generated in cmd/ install it alonside the kubectl binary.
|
||||
The binary will be generated in cmd/ install it alonside the kubectl binary.
|
||||
|
||||
For example: the kubectl is installed under `/usr/bin`, then put the bilibilipro plugin under `/usr/bin` too.
|
||||
|
||||
@@ -18,14 +18,13 @@ For example: the kubectl is installed under `/usr/bin`, then put the bilibilipro
|
||||
|
||||
### Deployment && Update
|
||||
|
||||
Command: `kubectl bilipro init --config config.yaml`
|
||||
|
||||
Creates Deployment with the needed environments.
|
||||
Command: `kubectl bilipro init --config config.yaml [optional]--login`
|
||||
|
||||
Creates Deployment with the needed environments.
|
||||
|
||||
Optional Options:
|
||||
|
||||
- `--image=zai7lou/bilibili_tool_pro:0.2.1`
|
||||
- `--image=zai7lou/bilibili_tool_pro:1.0.1`
|
||||
- `--namespace=bilipro`
|
||||
- `--image-pull-secret=`
|
||||
|
||||
@@ -36,6 +35,7 @@ Required Options:
|
||||
The content of <config.yaml> is a yaml array, please refer to the example config yaml under the krew directory.
|
||||
|
||||
For example
|
||||
|
||||
````yaml
|
||||
- name: Ray_BiliBiliCookies__2
|
||||
value: "cookie"
|
||||
@@ -44,10 +44,8 @@ For example
|
||||
value: "11 11 * * *"
|
||||
````
|
||||
|
||||
|
||||
Suggestions: Deploy this workload in namespace other than default or kube-* namespace, because the delete logic should be improved
|
||||
|
||||
|
||||
### Deletion
|
||||
|
||||
Command: `kubectl bilipro delete [options]`
|
||||
@@ -65,4 +63,6 @@ Command: `kubectl bilipro version`
|
||||
|
||||
Output the plugin version.
|
||||
|
||||
## Package
|
||||
|
||||
Pls refer to [installation](https://krew.sigs.k8s.io/docs), you can package your own krew plugin
|
||||
|
||||
@@ -6,7 +6,9 @@ import (
|
||||
"github.com/spf13/pflag"
|
||||
|
||||
"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() {
|
||||
@@ -15,6 +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())
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
- name: Ray_BiliBiliCookies__2
|
||||
- name: Ray_BiliBiliCookies__1
|
||||
value: "cookie"
|
||||
# DailyTrigger - required
|
||||
- name: Ray_DailyTaskConfig__Cron
|
||||
|
||||
+16
-17
@@ -1,33 +1,34 @@
|
||||
module github.com/RayWangQvQ/BiliBiliToolPro/krew
|
||||
|
||||
go 1.18
|
||||
go 1.20
|
||||
|
||||
require (
|
||||
github.com/spf13/cobra v1.4.0
|
||||
github.com/spf13/pflag v1.0.5
|
||||
k8s.io/api v0.25.4
|
||||
k8s.io/apimachinery v0.25.4
|
||||
k8s.io/cli-runtime v0.25.4
|
||||
k8s.io/klog/v2 v2.70.1
|
||||
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.2.0
|
||||
sigs.k8s.io/yaml v1.3.0
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/PuerkitoBio/purell v1.1.1 // indirect
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/emicklei/go-restful/v3 v3.8.0 // indirect
|
||||
github.com/emicklei/go-restful/v3 v3.9.0 // indirect
|
||||
github.com/evanphx/json-patch v4.12.0+incompatible // indirect
|
||||
github.com/go-errors/errors v1.0.1 // indirect
|
||||
github.com/go-logr/logr v1.2.3 // indirect
|
||||
github.com/go-openapi/jsonpointer v0.19.5 // indirect
|
||||
github.com/go-openapi/jsonreference v0.19.5 // indirect
|
||||
github.com/go-openapi/jsonreference v0.20.0 // indirect
|
||||
github.com/go-openapi/swag v0.19.14 // indirect
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/golang/protobuf v1.5.2 // indirect
|
||||
github.com/google/btree v1.0.1 // indirect
|
||||
github.com/google/gnostic v0.5.7-v3refs // indirect
|
||||
github.com/google/go-cmp v0.5.9 // indirect
|
||||
github.com/google/gofuzz v1.1.0 // indirect
|
||||
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
|
||||
github.com/google/uuid v1.1.2 // indirect
|
||||
@@ -46,21 +47,19 @@ require (
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
github.com/xlab/treeprint v1.1.0 // indirect
|
||||
go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect
|
||||
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
|
||||
golang.org/x/text v0.3.7 // indirect
|
||||
golang.org/x/net v0.7.0 // indirect
|
||||
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect
|
||||
golang.org/x/sys v0.5.0 // indirect
|
||||
golang.org/x/term v0.5.0 // indirect
|
||||
golang.org/x/text v0.7.0 // indirect
|
||||
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
|
||||
google.golang.org/appengine v1.6.7 // indirect
|
||||
google.golang.org/protobuf v1.28.0 // indirect
|
||||
google.golang.org/protobuf v1.28.1 // indirect
|
||||
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/apimachinery v0.25.4 // indirect
|
||||
k8s.io/client-go v0.25.4 // indirect
|
||||
k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect
|
||||
k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed // 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
|
||||
)
|
||||
|
||||
+31
-31
@@ -33,10 +33,6 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9
|
||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
||||
github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
|
||||
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
||||
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
|
||||
@@ -49,8 +45,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
|
||||
github.com/emicklei/go-restful/v3 v3.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw=
|
||||
github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
|
||||
github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE=
|
||||
github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
|
||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||
@@ -62,15 +58,14 @@ github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm
|
||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
|
||||
github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
|
||||
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
|
||||
github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY=
|
||||
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
|
||||
github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM=
|
||||
github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg=
|
||||
github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA=
|
||||
github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo=
|
||||
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
|
||||
github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng=
|
||||
github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
|
||||
@@ -117,7 +112,8 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
|
||||
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
|
||||
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
|
||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
|
||||
github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
@@ -177,6 +173,8 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||
github.com/onsi/ginkgo/v2 v2.1.6 h1:Fx2POJZfKRQcM1pH49qSZiYeu319wji004qX+GDovrU=
|
||||
github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q=
|
||||
github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
|
||||
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
@@ -187,7 +185,6 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:
|
||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
|
||||
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
|
||||
github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q=
|
||||
github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g=
|
||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||
@@ -261,7 +258,6 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
@@ -277,15 +273,16 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R
|
||||
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0=
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g=
|
||||
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg=
|
||||
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b h1:clP8eMhB30EHdc0bd2Twtq6kgU7yl5ub2cQLSdrv1Dg=
|
||||
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
@@ -322,17 +319,21 @@ golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s=
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
|
||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY=
|
||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
|
||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
|
||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
@@ -462,8 +463,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj
|
||||
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
|
||||
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
|
||||
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
@@ -495,13 +496,12 @@ k8s.io/cli-runtime v0.25.4 h1:GTSBN7aKBrc2LqpdO30CmHQqJtRmotxV7XsMSP+QZIk=
|
||||
k8s.io/cli-runtime v0.25.4/go.mod h1:JGOw1CR8v4Mcz6cEKA7bFQe0bPrNn1l5sGAX1/Ke4Eg=
|
||||
k8s.io/client-go v0.25.4 h1:3RNRDffAkNU56M/a7gUfXaEzdhZlYhoW8dgViGy5fn8=
|
||||
k8s.io/client-go v0.25.4/go.mod h1:8trHCAC83XKY0wsBIpbirZU4NTUpbuhc2JnI7OruGZw=
|
||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||
k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ=
|
||||
k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
||||
k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA=
|
||||
k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU=
|
||||
k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed h1:jAne/RjBTyawwAy0utX5eqigAwz/lQhTmy+Hr/Cpue4=
|
||||
k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4=
|
||||
k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
||||
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+OGxg8HsuBr/5f6tVAjDu6E=
|
||||
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4=
|
||||
k8s.io/utils v0.0.0-20221107191617-1a15be271d1d h1:0Smp/HP1OH4Rvhe+4B8nWGERtlqAGSftbSbbmm45oFs=
|
||||
k8s.io/utils v0.0.0-20221107191617-1a15be271d1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||
@@ -513,5 +513,5 @@ sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2
|
||||
sigs.k8s.io/kustomize/kyaml v0.13.9/go.mod h1:QsRbD0/KcU+wdk0/L0fIp2KLnohkVzs6fQ85/nOXac4=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E=
|
||||
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
|
||||
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
|
||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
|
||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
|
||||
|
||||
+18
-53
@@ -1,10 +1,7 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
|
||||
@@ -15,7 +12,7 @@ import (
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/options"
|
||||
"github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/utils"
|
||||
helper "github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/utils"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
@@ -45,7 +42,7 @@ func newDeleteCmd(out io.Writer, errOut io.Writer) *cobra.Command {
|
||||
|
||||
err := o.run(out)
|
||||
if err != nil {
|
||||
klog.Warning(err)
|
||||
klog.Error(err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
@@ -59,19 +56,13 @@ func newDeleteCmd(out io.Writer, errOut io.Writer) *cobra.Command {
|
||||
}
|
||||
|
||||
func (o *deleteCmd) run(writer io.Writer) error {
|
||||
inDiskSys, err := utils.GetResourceFileSys()
|
||||
inDiskSys, err := helper.GetResourceFileSys()
|
||||
if err != nil {
|
||||
klog.Error(err)
|
||||
return err
|
||||
}
|
||||
|
||||
// if the bilibili tool is deployed under system/pre-defined namespace, ignore the namespace file
|
||||
resources := []string{}
|
||||
if o.deployOpts.Namespace == "default" || o.deployOpts.Namespace == "kube-system" || o.deployOpts.Namespace == "kube-public" {
|
||||
resources = []string{"bilipro/bilibiliPro"}
|
||||
} else {
|
||||
resources = []string{"bilipro/bilibiliPro", "bilipro/ns"}
|
||||
}
|
||||
// remove namespace files lastly
|
||||
resources := []string{"base/bilibiliPro/deployment.yaml"}
|
||||
|
||||
// write the kustomization file
|
||||
|
||||
@@ -90,20 +81,17 @@ func (o *deleteCmd) run(writer io.Writer) error {
|
||||
// Compile the kustomization to a file and create on the in memory filesystem
|
||||
kustYaml, err := yaml.Marshal(kustomizationYaml)
|
||||
if err != nil {
|
||||
klog.Error(err)
|
||||
return err
|
||||
return helper.GenErrorMsg(helper.TEMPLATE_ERROR, err.Error())
|
||||
}
|
||||
|
||||
kustFile, err := inDiskSys.Create("kustomization.yaml")
|
||||
kustFile, err := inDiskSys.Create("./bilipro/kustomization.yaml")
|
||||
if err != nil {
|
||||
klog.Error(err)
|
||||
return err
|
||||
return helper.GenErrorMsg(helper.TEMPLATE_ERROR, err.Error())
|
||||
}
|
||||
|
||||
_, err = kustFile.Write(kustYaml)
|
||||
if err != nil {
|
||||
klog.Error(err)
|
||||
return err
|
||||
return helper.GenErrorMsg(helper.TEMPLATE_ERROR, err.Error())
|
||||
}
|
||||
|
||||
// kustomize build the target location
|
||||
@@ -113,53 +101,30 @@ func (o *deleteCmd) run(writer io.Writer) error {
|
||||
|
||||
m, err := k.Run(inDiskSys, "./bilipro")
|
||||
if err != nil {
|
||||
klog.Error(err)
|
||||
return err
|
||||
return helper.GenErrorMsg(helper.TEMPLATE_ERROR, err.Error())
|
||||
}
|
||||
|
||||
yml, err := m.AsYaml()
|
||||
if err != nil {
|
||||
klog.Error(err)
|
||||
return err
|
||||
return helper.GenErrorMsg(helper.TEMPLATE_ERROR, err.Error())
|
||||
}
|
||||
|
||||
if o.output {
|
||||
_, err = writer.Write(yml)
|
||||
klog.Error(err)
|
||||
return err
|
||||
return helper.GenErrorMsg(helper.TEMPLATE_ERROR, err.Error())
|
||||
}
|
||||
|
||||
// do kubectl delete
|
||||
cmd := exec.Command("kubectl", "delete", "-f", "-")
|
||||
|
||||
cmd.Stdin = strings.NewReader(string(yml))
|
||||
|
||||
stdoutReader, _ := cmd.StdoutPipe()
|
||||
stdoutScanner := bufio.NewScanner(stdoutReader)
|
||||
go func() {
|
||||
for stdoutScanner.Scan() {
|
||||
fmt.Println(stdoutScanner.Text())
|
||||
}
|
||||
}()
|
||||
stderrReader, _ := cmd.StderrPipe()
|
||||
stderrScanner := bufio.NewScanner(stderrReader)
|
||||
go func() {
|
||||
for stderrScanner.Scan() {
|
||||
fmt.Println(stderrScanner.Text())
|
||||
}
|
||||
}()
|
||||
err = cmd.Start()
|
||||
if err != nil {
|
||||
fmt.Printf("Error : %v \n", err)
|
||||
os.Exit(1)
|
||||
if err := helper.Run(cmd, strings.NewReader(string(yml))); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// stuck here to wait for the completion
|
||||
err = cmd.Wait()
|
||||
if err != nil {
|
||||
fmt.Printf("Error: %v \n", err)
|
||||
os.Exit(1)
|
||||
// delete the namespace
|
||||
cmd = exec.Command("kubectl", "delete", "ns", o.deployOpts.Namespace)
|
||||
if err := helper.Run(cmd, nil); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
+4
-30
@@ -1,15 +1,13 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"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"
|
||||
)
|
||||
|
||||
@@ -39,7 +37,7 @@ func newGetCmd(out io.Writer, errOut io.Writer) *cobra.Command {
|
||||
|
||||
err := o.run(out)
|
||||
if err != nil {
|
||||
klog.Warning(err)
|
||||
klog.Error(err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
@@ -56,32 +54,8 @@ func (o *getCmd) run(writer io.Writer) error {
|
||||
// do kubectl get
|
||||
cmd := exec.Command("kubectl", "get", "deploy", o.deployOpts.Name, "-n", o.deployOpts.Namespace)
|
||||
|
||||
stdoutReader, _ := cmd.StdoutPipe()
|
||||
stdoutScanner := bufio.NewScanner(stdoutReader)
|
||||
go func() {
|
||||
for stdoutScanner.Scan() {
|
||||
fmt.Println(stdoutScanner.Text())
|
||||
}
|
||||
}()
|
||||
stderrReader, _ := cmd.StderrPipe()
|
||||
stderrScanner := bufio.NewScanner(stderrReader)
|
||||
go func() {
|
||||
for stderrScanner.Scan() {
|
||||
fmt.Println(stderrScanner.Text())
|
||||
}
|
||||
}()
|
||||
|
||||
err := cmd.Start()
|
||||
if err != nil {
|
||||
fmt.Printf("Error : %v \n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// stuck here to wait for the completion
|
||||
err = cmd.Wait()
|
||||
if err != nil {
|
||||
fmt.Printf("Error: %v \n", err)
|
||||
os.Exit(1)
|
||||
if err := helper.Run(cmd, nil); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
+58
-52
@@ -1,14 +1,13 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
|
||||
@@ -23,7 +22,7 @@ import (
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/options"
|
||||
"github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/utils"
|
||||
helper "github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/utils"
|
||||
"sigs.k8s.io/kustomize/api/krusty"
|
||||
)
|
||||
|
||||
@@ -37,6 +36,7 @@ type initCmd struct {
|
||||
out io.Writer
|
||||
errOut io.Writer
|
||||
output bool
|
||||
login bool
|
||||
deployOpts options.DeployOptions
|
||||
}
|
||||
|
||||
@@ -52,7 +52,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.Warning(err)
|
||||
klog.Error(err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
@@ -60,11 +60,12 @@ func newInitCmd(out io.Writer, errOut io.Writer) *cobra.Command {
|
||||
}
|
||||
|
||||
f := cmd.Flags()
|
||||
f.StringVarP(&o.deployOpts.Image, "image", "i", "zai7lou/bilibili_tool_pro:0.2.1", "bilibilipro image")
|
||||
f.StringVarP(&o.deployOpts.Image, "image", "i", "zai7lou/bilibili_tool_pro:1.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")
|
||||
f.BoolVarP(&o.output, "output", "o", false, "dry run this command and generate requisite yaml")
|
||||
f.BoolVarP(&o.login, "login", "l", false, "scan QR login code")
|
||||
return cmd
|
||||
}
|
||||
|
||||
@@ -87,17 +88,18 @@ type normalEnvVars struct {
|
||||
|
||||
// run initializes local config and installs BiliBiliPro tool to Kubernetes Cluster.
|
||||
func (o *initCmd) run(writer io.Writer) error {
|
||||
inDiskSys, err := utils.GetResourceFileSys()
|
||||
inDiskSys, err := helper.GetResourceFileSys()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// TODO: All about paths are a little bit tricky should give it more thoughts
|
||||
// if the bilibili tool is deployed under system/pre-defined namespace, ignore the namespace file
|
||||
resources := []string{}
|
||||
var resources []string // nolint: go-staticcheck
|
||||
if o.deployOpts.Namespace == "default" || o.deployOpts.Namespace == "kube-system" || o.deployOpts.Namespace == "kube-public" {
|
||||
resources = []string{"bilipro/bilibiliPro"}
|
||||
resources = []string{"base/bilibiliPro/deployment.yaml"}
|
||||
} else {
|
||||
resources = []string{"bilipro/ns", "bilipro/bilibiliPro"}
|
||||
resources = []string{"base/ns/namespace.yaml", "base/bilibiliPro/deployment.yaml"}
|
||||
}
|
||||
|
||||
// write the kustomization file
|
||||
@@ -120,17 +122,15 @@ func (o *initCmd) run(writer io.Writer) error {
|
||||
})
|
||||
}
|
||||
// create patches for the env
|
||||
content, err := ioutil.ReadFile(o.deployOpts.ConfigFilePath)
|
||||
content, err := os.ReadFile(o.deployOpts.ConfigFilePath)
|
||||
if err != nil {
|
||||
klog.Error(err)
|
||||
return err
|
||||
return helper.GenErrorMsg(helper.FILE_ERROR, err.Error())
|
||||
}
|
||||
|
||||
envs := []normalEnvVars{}
|
||||
err = yaml.Unmarshal(content, &envs)
|
||||
if err != nil {
|
||||
klog.Error(err)
|
||||
return err
|
||||
return helper.GenErrorMsg(helper.TEMPLATE_ERROR, err.Error())
|
||||
}
|
||||
|
||||
deployDepPatches = append(deployDepPatches, opInterface{
|
||||
@@ -158,7 +158,8 @@ func (o *initCmd) run(writer io.Writer) error {
|
||||
Version: "v1",
|
||||
Kind: "Deployment",
|
||||
},
|
||||
Name: "bilibilipro",
|
||||
Name: "bilibilipro",
|
||||
Namespace: o.deployOpts.Namespace,
|
||||
},
|
||||
},
|
||||
})
|
||||
@@ -175,20 +176,17 @@ func (o *initCmd) run(writer io.Writer) error {
|
||||
// Compile the kustomization to a file and create on the in memory filesystem
|
||||
kustYaml, err := yaml.Marshal(kustomizationYaml)
|
||||
if err != nil {
|
||||
klog.Error(err)
|
||||
return err
|
||||
}
|
||||
|
||||
kustFile, err := inDiskSys.Create("kustomization.yaml")
|
||||
kustFile, err := inDiskSys.Create("./bilipro/kustomization.yaml")
|
||||
if err != nil {
|
||||
klog.Error(err)
|
||||
return err
|
||||
return helper.GenErrorMsg(helper.TEMPLATE_ERROR, err.Error())
|
||||
}
|
||||
|
||||
_, err = kustFile.Write(kustYaml)
|
||||
if err != nil {
|
||||
klog.Error(err)
|
||||
return err
|
||||
return helper.GenErrorMsg(helper.TEMPLATE_ERROR, err.Error())
|
||||
}
|
||||
|
||||
// kustomize build the target location
|
||||
@@ -198,52 +196,60 @@ func (o *initCmd) run(writer io.Writer) error {
|
||||
|
||||
m, err := k.Run(inDiskSys, "./bilipro")
|
||||
if err != nil {
|
||||
klog.Error(err)
|
||||
return err
|
||||
return helper.GenErrorMsg(helper.TEMPLATE_ERROR, err.Error())
|
||||
}
|
||||
|
||||
yml, err := m.AsYaml()
|
||||
if err != nil {
|
||||
klog.Error(err)
|
||||
return err
|
||||
return helper.GenErrorMsg(helper.TEMPLATE_ERROR, err.Error())
|
||||
}
|
||||
|
||||
if o.output {
|
||||
_, err = writer.Write(yml)
|
||||
klog.Error(err)
|
||||
return err
|
||||
if err != nil {
|
||||
return helper.GenErrorMsg(helper.TEMPLATE_ERROR, err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
// do kubectl apply
|
||||
// make sure kubectl is under your PATH
|
||||
cmd := exec.Command("kubectl", "apply", "-f", "-")
|
||||
|
||||
cmd.Stdin = strings.NewReader(string(yml))
|
||||
|
||||
stdoutReader, _ := cmd.StdoutPipe()
|
||||
stdoutScanner := bufio.NewScanner(stdoutReader)
|
||||
go func() {
|
||||
for stdoutScanner.Scan() {
|
||||
fmt.Println(stdoutScanner.Text())
|
||||
}
|
||||
}()
|
||||
stderrReader, _ := cmd.StderrPipe()
|
||||
stderrScanner := bufio.NewScanner(stderrReader)
|
||||
go func() {
|
||||
for stderrScanner.Scan() {
|
||||
fmt.Println(stderrScanner.Text())
|
||||
}
|
||||
}()
|
||||
err = cmd.Start()
|
||||
if err != nil {
|
||||
fmt.Printf("Error : %v \n", err)
|
||||
os.Exit(1)
|
||||
if err := helper.Run(cmd, strings.NewReader(string(yml))); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Stuck here until there are out and err
|
||||
err = cmd.Wait()
|
||||
if err != nil {
|
||||
fmt.Printf("Error: %v \n", err)
|
||||
os.Exit(1)
|
||||
// if there is login required
|
||||
if o.login {
|
||||
|
||||
client, _, err := helper.GetK8sClient()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// get the pod name
|
||||
podName, err := helper.GetBiliName(client, o.deployOpts.Namespace, "bilibilipro")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// TODO: Stupid way, just sleep to wait container is ready, maybe a watch is a better option
|
||||
time.Sleep(15 * time.Second)
|
||||
args := []string{
|
||||
"exec",
|
||||
podName,
|
||||
"-n",
|
||||
o.deployOpts.Namespace,
|
||||
"--",
|
||||
"dotnet",
|
||||
"Ray.BiliBiliTool.Console.dll",
|
||||
"--runTasks=Login",
|
||||
}
|
||||
cmd := exec.Command("kubectl", args...)
|
||||
|
||||
if err := helper.Run(cmd, nil); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
@@ -35,7 +35,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.Warning(err)
|
||||
klog.Error(err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
||||
@@ -13,6 +13,14 @@ spec:
|
||||
spec:
|
||||
containers:
|
||||
- name: bilibilipro
|
||||
image: zai7lou/bilibili_tool_pro:0.2.1
|
||||
image: zai7lou/bilibili_tool_pro:1.0.1
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 80m
|
||||
memory: 100M
|
||||
limits:
|
||||
cpu: 100m
|
||||
memory: 120M
|
||||
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
"k8s.io/client-go/rest"
|
||||
"k8s.io/client-go/tools/clientcmd"
|
||||
)
|
||||
|
||||
func GetK8sClient() (*kubernetes.Clientset, *rest.Config, error) {
|
||||
var kubeconfig string
|
||||
|
||||
envKubeConfig := os.Getenv("KUBECONFIG")
|
||||
if envKubeConfig == "" {
|
||||
home, err := os.UserHomeDir()
|
||||
if err != nil {
|
||||
return nil, nil, GenErrorMsg(SERVER_ERROR, err.Error())
|
||||
}
|
||||
kubeconfig = filepath.Join(home, ".kube", "config")
|
||||
} else {
|
||||
kubeconfig = envKubeConfig
|
||||
}
|
||||
|
||||
// use the current context in kubeconfig
|
||||
config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
|
||||
if err != nil {
|
||||
return nil, nil, GenErrorMsg(SERVER_ERROR, err.Error())
|
||||
}
|
||||
|
||||
// create the clientset
|
||||
clientset, err := kubernetes.NewForConfig(config)
|
||||
if err != nil {
|
||||
return nil, config, GenErrorMsg(SERVER_ERROR, err.Error())
|
||||
}
|
||||
return clientset, config, nil
|
||||
}
|
||||
|
||||
func GetBiliName(client *kubernetes.Clientset, namespace, deploymentName string) (string, error) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Minute)
|
||||
defer cancel()
|
||||
deployment, err := client.AppsV1().Deployments(namespace).Get(ctx, deploymentName, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
return "", GenErrorMsg(SERVER_ERROR, err.Error())
|
||||
}
|
||||
|
||||
// we dont do much checks here
|
||||
selector := deployment.Spec.Selector.MatchLabels
|
||||
if len(selector) == 0 {
|
||||
return "", GenErrorMsg(SERVER_ERROR, "deployment doesn't have any selectors, please check the deploy template")
|
||||
}
|
||||
listOptions := metav1.ListOptions{
|
||||
LabelSelector: labels.Set(selector).String(),
|
||||
}
|
||||
pods, err := client.CoreV1().Pods(namespace).List(ctx, listOptions)
|
||||
if err != nil {
|
||||
return "", GenErrorMsg(SERVER_ERROR, "cannot list the pods with deploy selectors")
|
||||
}
|
||||
if len(pods.Items) != 1 {
|
||||
return "", GenErrorMsg(SERVER_ERROR, fmt.Sprintf("pod number is expected to be 1, currently %d", len(pods.Items)))
|
||||
}
|
||||
|
||||
// only one pod is supposed to be existing, soft constraint
|
||||
return pods.Items[0].ObjectMeta.GetName(), nil
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestGetK8sClient(t *testing.T) {
|
||||
client, _, err := GetK8sClient()
|
||||
if err != nil {
|
||||
t.Logf("test failed due to %s", err.Error())
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
if client == nil {
|
||||
t.Logf("test failed for returned client is empty, this should not happen")
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"io"
|
||||
"os/exec"
|
||||
)
|
||||
|
||||
func Run(cmd *exec.Cmd, in io.Reader) error {
|
||||
cmd.Stdin = in
|
||||
|
||||
stdoutReader, _ := cmd.StdoutPipe()
|
||||
stdoutScanner := bufio.NewScanner(stdoutReader)
|
||||
go func() {
|
||||
for stdoutScanner.Scan() {
|
||||
fmt.Println(stdoutScanner.Text())
|
||||
}
|
||||
}()
|
||||
stderrReader, _ := cmd.StderrPipe()
|
||||
stderrScanner := bufio.NewScanner(stderrReader)
|
||||
go func() {
|
||||
for stderrScanner.Scan() {
|
||||
fmt.Println(stderrScanner.Text())
|
||||
}
|
||||
}()
|
||||
err := cmd.Start()
|
||||
if err != nil {
|
||||
return GenErrorMsg(EXEC_ERROR, err.Error())
|
||||
}
|
||||
|
||||
// Stuck here until there are out and err
|
||||
err = cmd.Wait()
|
||||
if err != nil {
|
||||
return GenErrorMsg(EXEC_ERROR, err.Error())
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"os/exec"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestRun(t *testing.T) {
|
||||
|
||||
// Just make sure there is no error...
|
||||
testCmd := exec.Command("ls")
|
||||
err := Run(testCmd, nil)
|
||||
if err != nil {
|
||||
t.Logf("test failed due to %s", err.Error())
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
const (
|
||||
// For errors about kustomize
|
||||
TEMPLATE_ERROR = "template error"
|
||||
// For errors about file system
|
||||
FILE_ERROR = "file system error"
|
||||
// For errors about create/delete/... resources in cluster
|
||||
SERVER_ERROR = "cluster operation error"
|
||||
// For exec errors
|
||||
EXEC_ERROR = "exec error"
|
||||
)
|
||||
|
||||
func GenErrorMsg(errType, customMsg string) error {
|
||||
errorMsg := fmt.Sprintf("[ERROR] %s: %s", errType, customMsg)
|
||||
return errors.New(errorMsg)
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestServerGenErrorMsg(t *testing.T) {
|
||||
expectedErr := GenErrorMsg(SERVER_ERROR, "test for server")
|
||||
if !strings.Contains(expectedErr.Error(), SERVER_ERROR) {
|
||||
t.Logf("server error generate failed")
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
|
||||
func TestTemplateGenErrorMsg(t *testing.T) {
|
||||
expectedErr := GenErrorMsg(TEMPLATE_ERROR, "test for template")
|
||||
if !strings.Contains(expectedErr.Error(), TEMPLATE_ERROR) {
|
||||
t.Logf("template error generate failed")
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
|
||||
func TestExecGenErrorMsg(t *testing.T) {
|
||||
expectedErr := GenErrorMsg(EXEC_ERROR, "test for exec")
|
||||
if !strings.Contains(expectedErr.Error(), EXEC_ERROR) {
|
||||
t.Logf("error error generate failed")
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
|
||||
func TestFileGenErrorMsg(t *testing.T) {
|
||||
expectedErr := GenErrorMsg(FILE_ERROR, "test for file")
|
||||
if !strings.Contains(expectedErr.Error(), FILE_ERROR) {
|
||||
t.Logf("file error generate failed")
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,6 @@ package utils
|
||||
import (
|
||||
"io"
|
||||
"io/fs"
|
||||
"log"
|
||||
"path"
|
||||
"strings"
|
||||
|
||||
@@ -18,8 +17,7 @@ func GetResourceFileSys() (filesys.FileSystem, error) {
|
||||
inDiskSys := filesys.MakeFsOnDisk()
|
||||
// copy from the resources into the target folder on the in memory FS
|
||||
if err := copyDirtoDiskFS(".", "bilipro", inDiskSys); err != nil {
|
||||
log.Println(err)
|
||||
return nil, err
|
||||
return nil, GenErrorMsg(FILE_ERROR, err.Error())
|
||||
}
|
||||
return inDiskSys, nil
|
||||
}
|
||||
@@ -34,23 +32,26 @@ func copyFileToDiskFS(src, dst string, diskFS filesys.FileSystem) error {
|
||||
var dstFileDesc filesys.File
|
||||
|
||||
if srcFileDesc, err = assetFS.Open(src); err != nil {
|
||||
return err
|
||||
return GenErrorMsg(FILE_ERROR, err.Error())
|
||||
}
|
||||
defer srcFileDesc.Close()
|
||||
|
||||
if dstFileDesc, err = diskFS.Create(dst); err != nil {
|
||||
return err
|
||||
return GenErrorMsg(FILE_ERROR, err.Error())
|
||||
}
|
||||
defer dstFileDesc.Close()
|
||||
|
||||
// Note: I had to read the whole string, for some reason io.Copy was not copying the whole content
|
||||
input, err := io.ReadAll(srcFileDesc)
|
||||
if err != nil {
|
||||
return err
|
||||
return GenErrorMsg(FILE_ERROR, err.Error())
|
||||
}
|
||||
|
||||
_, err = dstFileDesc.Write(input)
|
||||
return err
|
||||
if err != nil {
|
||||
return GenErrorMsg(FILE_ERROR, err.Error())
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func copyDirtoDiskFS(src string, dst string, diskFS filesys.FileSystem) error {
|
||||
@@ -58,11 +59,11 @@ func copyDirtoDiskFS(src string, dst string, diskFS filesys.FileSystem) error {
|
||||
var fds []fs.DirEntry
|
||||
|
||||
if err = diskFS.MkdirAll(dst); err != nil {
|
||||
return err
|
||||
return GenErrorMsg(FILE_ERROR, err.Error())
|
||||
}
|
||||
|
||||
if fds, err = assetFS.ReadDir(src); err != nil {
|
||||
return err
|
||||
return GenErrorMsg(FILE_ERROR, err.Error())
|
||||
}
|
||||
for _, fd := range fds {
|
||||
srcfp := path.Join(src, fd.Name())
|
||||
@@ -70,11 +71,11 @@ func copyDirtoDiskFS(src string, dst string, diskFS filesys.FileSystem) error {
|
||||
|
||||
if fd.IsDir() {
|
||||
if err = copyDirtoDiskFS(srcfp, dstfp, diskFS); err != nil {
|
||||
return err
|
||||
return GenErrorMsg(FILE_ERROR, err.Error())
|
||||
}
|
||||
} else {
|
||||
if err = copyFileToDiskFS(srcfp, dstfp, diskFS); err != nil {
|
||||
return err
|
||||
return GenErrorMsg(FILE_ERROR, err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"sigs.k8s.io/kustomize/kyaml/filesys"
|
||||
)
|
||||
|
||||
func TestCopyFiletoDiskFS(t *testing.T) {
|
||||
expectedFile, err := assetFS.Open("base/ns/namespace.yaml")
|
||||
if err != nil {
|
||||
t.Logf("test failed due to %s", err.Error())
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
expectedOutput, err := io.ReadAll(expectedFile)
|
||||
if err != nil {
|
||||
t.Logf("test failed due to %s", err.Error())
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
dir, err := os.Getwd()
|
||||
if err != nil {
|
||||
t.Logf("test failed due to %s", err.Error())
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
inDiskSys := filesys.MakeFsOnDisk()
|
||||
|
||||
err = copyFileToDiskFS("base/ns/namespace.yaml", filepath.Join(dir, "fixtures/testNamespace.yaml"), inDiskSys)
|
||||
if err != nil {
|
||||
t.Logf("test failed due to %s", err.Error())
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
actualOutput, err := os.ReadFile(filepath.Join(dir, "fixtures/testNamespace.yaml"))
|
||||
if err != nil {
|
||||
t.Logf("test failed due to %s", err.Error())
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
if string(expectedOutput) != string(actualOutput) {
|
||||
t.Logf("test failed due to copy file failed")
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
|
||||
func TestCopyDirtoDiskFS(t *testing.T) {
|
||||
expectedFile, err := assetFS.Open("base/bilibiliPro/deployment.yaml")
|
||||
if err != nil {
|
||||
t.Logf("test failed due to %s", err.Error())
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
expectedOutput, err := io.ReadAll(expectedFile)
|
||||
if err != nil {
|
||||
t.Logf("test failed due to %s", err.Error())
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
dir, err := os.Getwd()
|
||||
if err != nil {
|
||||
t.Logf("test failed due to %s", err.Error())
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
inDiskSys := filesys.MakeFsOnDisk()
|
||||
|
||||
err = copyDirtoDiskFS("base/bilibiliPro", filepath.Join(dir, "fixtures"), inDiskSys)
|
||||
if err != nil {
|
||||
t.Logf("test failed due to %s", err.Error())
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
actualOutput, err := os.ReadFile(filepath.Join(dir, "fixtures/deployment.yaml"))
|
||||
if err != nil {
|
||||
t.Logf("test failed due to %s", err.Error())
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
if string(expectedOutput) != string(actualOutput) {
|
||||
t.Logf("test failed due to copy file failed")
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user