From de7019c786646da3b4f2dfbb52ff94cd3f21da94 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=80=86=E6=B5=81=E8=80=8C=E4=B8=8A?= <1666888816@qq.com>
Date: Thu, 6 Jun 2024 10:07:13 +0800
Subject: [PATCH 1/3] =?UTF-8?q?perf:=20remove=20webcli=20Signed-off-by:=20?=
=?UTF-8?q?=E9=80=86=E6=B5=81=E8=80=8C=E4=B8=8A=20<1666888816@qq.com>?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
api/api_routers/websocket/websocket.go | 1 -
api/controller/websocket.go | 13 -------------
cmd/api/option/option.go | 2 --
3 files changed, 16 deletions(-)
diff --git a/api/api_routers/websocket/websocket.go b/api/api_routers/websocket/websocket.go
index 34bfffd475..41259af035 100644
--- a/api/api_routers/websocket/websocket.go
+++ b/api/api_routers/websocket/websocket.go
@@ -27,7 +27,6 @@ import (
// Routes routes
func Routes() chi.Router {
r := chi.NewRouter()
- r.Get("/docker_console", controller.GetDockerConsole().Get)
r.Get("/docker_log", controller.GetDockerLog().Get)
r.Get("/monitor_message", controller.GetMonitorMessage().Get)
r.Get("/new_monitor_message", controller.GetMonitorMessage().Get)
diff --git a/api/controller/websocket.go b/api/controller/websocket.go
index 1b2f4e2b3b..695532de11 100644
--- a/api/controller/websocket.go
+++ b/api/controller/websocket.go
@@ -38,19 +38,6 @@ type DockerConsole struct {
socketproxy proxy.Proxy
}
-var dockerConsole *DockerConsole
-
-// GetDockerConsole get Docker console
-func GetDockerConsole() *DockerConsole {
- if dockerConsole != nil {
- return dockerConsole
- }
- dockerConsole = &DockerConsole{
- socketproxy: proxy.CreateProxy("dockerconsole", "websocket", configs.Default().APIConfig.DockerConsoleServers),
- }
- return dockerConsole
-}
-
// Get get
func (d DockerConsole) Get(w http.ResponseWriter, r *http.Request) {
d.socketproxy.Proxy(w, r)
diff --git a/cmd/api/option/option.go b/cmd/api/option/option.go
index 56618e0633..71f935a534 100644
--- a/cmd/api/option/option.go
+++ b/cmd/api/option/option.go
@@ -35,7 +35,6 @@ type Config struct {
APIAddrSSL string
DBConnectionInfo string
EventLogServers []string
- DockerConsoleServers []string
EventLogEndpoints []string
NodeAPI []string
BuilderAPI []string
@@ -114,7 +113,6 @@ func (a *APIServer) AddFlags(fs *pflag.FlagSet) {
fs.BoolVar(&a.ShowSQL, "show-sql", false, "The trigger for showing sql.")
fs.StringVar(&a.GrctlImage, "shell-image", "registry.cn-hangzhou.aliyuncs.com/goodrain/rbd-shell:v5.13.0-release", "use shell image")
- fs.StringSliceVar(&a.DockerConsoleServers, "docker-console", []string{"rbd-webcli:7171"}, "docker console address")
fs.StringVar(&a.PrometheusEndpoint, "prom-api", "rbd-monitor:9999", "The service DNS name of Prometheus api. Default to rbd-monitor:9999")
fs.StringVar(&a.RbdHub, "hub-api", "http://rbd-hub:5000", "the rbd-hub server api")
fs.StringSliceVar(&a.NodeAPI, "node-api", []string{"rbd-node:6100"}, "the rbd-node server api")
From 2b89762c52f344b93c0f02cda6f0753839b74fa6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=80=86=E6=B5=81=E8=80=8C=E4=B8=8A?= <1666888816@qq.com>
Date: Thu, 6 Jun 2024 11:04:14 +0800
Subject: [PATCH 2/3] =?UTF-8?q?perf:=20remove=20webcli=20Signed-off-by:=20?=
=?UTF-8?q?=E9=80=86=E6=B5=81=E8=80=8C=E4=B8=8A=20<1666888816@qq.com>?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
api/api_routers/websocket/websocket.go | 1 +
api/controller/websocket.go | 23 +++++
api/webcli/app/app.go | 114 ++----------------------
cmd/webcli/option/option.go | 73 ---------------
cmd/webcli/server/server.go | 60 -------------
cmd/webcli/webcli.go | 44 ---------
pkg/component/core.go | 6 --
pkg/component/webcli/webcliComponent.go | 55 ------------
8 files changed, 33 insertions(+), 343 deletions(-)
delete mode 100644 cmd/webcli/option/option.go
delete mode 100644 cmd/webcli/server/server.go
delete mode 100644 cmd/webcli/webcli.go
delete mode 100644 pkg/component/webcli/webcliComponent.go
diff --git a/api/api_routers/websocket/websocket.go b/api/api_routers/websocket/websocket.go
index 41259af035..15efcf928e 100644
--- a/api/api_routers/websocket/websocket.go
+++ b/api/api_routers/websocket/websocket.go
@@ -27,6 +27,7 @@ import (
// Routes routes
func Routes() chi.Router {
r := chi.NewRouter()
+ r.Get("/docker_console", controller.GetWebCli().HandleWS)
r.Get("/docker_log", controller.GetDockerLog().Get)
r.Get("/monitor_message", controller.GetMonitorMessage().Get)
r.Get("/new_monitor_message", controller.GetMonitorMessage().Get)
diff --git a/api/controller/websocket.go b/api/controller/websocket.go
index 695532de11..1b3d3d0d54 100644
--- a/api/controller/websocket.go
+++ b/api/controller/websocket.go
@@ -20,7 +20,9 @@ package controller
import (
"context"
+ webcli "github.com/goodrain/rainbond/api/webcli/app"
"github.com/goodrain/rainbond/config/configs"
+ "github.com/gorilla/websocket"
"net/http"
"os"
"path"
@@ -33,6 +35,27 @@ import (
"github.com/sirupsen/logrus"
)
+var app *webcli.App
+
+func GetWebCli() *webcli.App {
+ if app == nil {
+ app = &webcli.App{}
+ app.SetUpgrader(&websocket.Upgrader{
+ ReadBufferSize: 1024,
+ WriteBufferSize: 1024,
+ Subprotocols: []string{"webtty"},
+ CheckOrigin: func(r *http.Request) bool {
+ return true
+ },
+ })
+ //create kube client and config
+ if err := app.CreateKubeClient(); err != nil {
+ logrus.Errorf("create kube client error: %v", err)
+ }
+ }
+ return app
+}
+
// DockerConsole docker console
type DockerConsole struct {
socketproxy proxy.Proxy
diff --git a/api/webcli/app/app.go b/api/webcli/app/app.go
index 7ad8422fb5..022d080507 100644
--- a/api/webcli/app/app.go
+++ b/api/webcli/app/app.go
@@ -23,25 +23,18 @@ import (
"crypto/md5"
"encoding/hex"
"encoding/json"
- "errors"
"fmt"
- "net"
- "net/http"
- "strings"
- "text/template"
-
"github.com/sirupsen/logrus"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
+ "net/http"
+ "strings"
"github.com/barnettZQG/gotty/server"
"github.com/barnettZQG/gotty/webtty"
httputil "github.com/goodrain/rainbond/util/http"
k8sutil "github.com/goodrain/rainbond/util/k8s"
"github.com/gorilla/websocket"
- "github.com/prometheus/client_golang/prometheus"
- "github.com/prometheus/client_golang/prometheus/promhttp"
- "github.com/yudai/umutex"
api "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/serializer"
@@ -58,13 +51,7 @@ var ExecuteCommandFailed float64
// App -
type App struct {
- options *Options
-
- upgrader *websocket.Upgrader
-
- titleTemplate *template.Template
-
- onceMutex *umutex.UnblockingMutex
+ upgrader *websocket.Upgrader
restClient *restclient.RESTClient
coreClient *kubernetes.Clientset
config *restclient.Config
@@ -87,9 +74,6 @@ type Options struct {
K8SConfPath string
}
-// Version -
-var Version = "0.0.2"
-
// DefaultOptions -
var DefaultOptions = Options{
Address: "",
@@ -113,68 +97,9 @@ type InitMessage struct {
Namespace string `json:"namespace"`
}
-func checkSameOrigin(r *http.Request) bool {
- return true
-}
-
-// New -
-func New(options *Options) (*App, error) {
- titleTemplate, _ := template.New("title").Parse(options.TitleFormat)
- app := &App{
- options: options,
- upgrader: &websocket.Upgrader{
- ReadBufferSize: 1024,
- WriteBufferSize: 1024,
- Subprotocols: []string{"webtty"},
- CheckOrigin: checkSameOrigin,
- },
- titleTemplate: titleTemplate,
- onceMutex: umutex.New(),
- }
- //create kube client and config
- if err := app.createKubeClient(); err != nil {
- return nil, err
- }
- return app, nil
-}
-
-// Run Run
-func (app *App) Run() error {
-
- endpoint := net.JoinHostPort(app.options.Address, app.options.Port)
-
- wsHandler := http.HandlerFunc(app.handleWS)
- health := http.HandlerFunc(app.healthCheck)
-
- var siteMux = http.NewServeMux()
-
- siteHandler := http.Handler(siteMux)
-
- siteHandler = wrapHeaders(siteHandler)
-
- exporter := NewExporter()
- prometheus.MustRegister(exporter)
-
- wsMux := http.NewServeMux()
- wsMux.Handle("/", siteHandler)
- wsMux.Handle("/docker_console", wsHandler)
- wsMux.Handle("/health", health)
- wsMux.Handle("/metrics", promhttp.Handler())
-
- siteHandler = http.Handler(wsMux)
-
- siteHandler = wrapLogger(siteHandler)
-
- server, err := app.makeServer(endpoint, &siteHandler)
- if err != nil {
- return errors.New("Failed to build server: " + err.Error())
- }
- go func() {
- logrus.Printf("webcli listen %s", endpoint)
- logrus.Fatal(server.ListenAndServe())
- logrus.Printf("Exiting...")
- }()
- return nil
+// SetUpgrader -
+func (app *App) SetUpgrader(u *websocket.Upgrader) {
+ app.upgrader = u
}
func (app *App) makeServer(addr string, handler *http.Handler) (*http.Server, error) {
@@ -190,7 +115,7 @@ func (app *App) healthCheck(w http.ResponseWriter, r *http.Request) {
httputil.ReturnSuccess(r, w, map[string]string{"status": "health", "info": "webcli service health"})
}
-func (app *App) handleWS(w http.ResponseWriter, r *http.Request) {
+func (app *App) HandleWS(w http.ResponseWriter, r *http.Request) {
logrus.Printf("New client connected: %s", r.RemoteAddr)
if r.Method != "GET" {
@@ -281,14 +206,8 @@ func (app *App) handleWS(w http.ResponseWriter, r *http.Request) {
return
}
}
-
-// Exit -
-func (app *App) Exit() (firstCall bool) {
- return true
-}
-
-func (app *App) createKubeClient() error {
- config, err := k8sutil.NewRestConfig(app.options.K8SConfPath)
+func (app *App) CreateKubeClient() error {
+ config, err := k8sutil.NewRestConfig("")
if err != nil {
return err
}
@@ -364,21 +283,6 @@ func (app *App) NewRequest(podName, namespace, containerName string, command []s
return req
}
-func wrapLogger(handler http.Handler) http.Handler {
- return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- rw := &responseWrapper{w, 200}
- handler.ServeHTTP(rw, r)
- logrus.Printf("%s %d %s %s", r.RemoteAddr, rw.status, r.Method, r.URL.Path)
- })
-}
-
-func wrapHeaders(handler http.Handler) http.Handler {
- return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- w.Header().Set("Server", "GoTTY/"+Version)
- handler.ServeHTTP(w, r)
- })
-}
-
func md5Func(str string) string {
h := md5.New()
h.Write([]byte(str))
diff --git a/cmd/webcli/option/option.go b/cmd/webcli/option/option.go
deleted file mode 100644
index e95e7b70ad..0000000000
--- a/cmd/webcli/option/option.go
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (C) 2014-2018 Goodrain Co., Ltd.
-// RAINBOND, Application Management Platform
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version. For any non-GPL usage of Rainbond,
-// one or multiple Commercial Licenses authorized by Goodrain Co., Ltd.
-// must be obtained first.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see .
-
-package option
-
-import (
- "fmt"
-
- "github.com/sirupsen/logrus"
- "github.com/spf13/pflag"
-)
-
-// Config config server
-type Config struct {
- EtcdEndPoints []string
- EtcdCaFile string
- EtcdCertFile string
- EtcdKeyFile string
- Address string
- HostIP string
- HostName string
- Port int
- SessionKey string
- PrometheusMetricPath string
- K8SConfPath string
-}
-
-// WebCliServer container webcli server
-type WebCliServer struct {
- Config
- LogLevel string
-}
-
-// NewWebCliServer new server
-func NewWebCliServer() *WebCliServer {
- return &WebCliServer{}
-}
-
-// AddFlags config
-func (a *WebCliServer) AddFlags(fs *pflag.FlagSet) {
- fs.StringVar(&a.LogLevel, "log-level", "info", "the webcli log level")
- fs.StringVar(&a.Address, "address", "0.0.0.0", "server listen address")
- fs.StringVar(&a.HostIP, "hostIP", "", "Current node Intranet IP")
- fs.StringVar(&a.HostName, "hostName", "", "Current node host name")
- fs.StringVar(&a.K8SConfPath, "kube-conf", "", "absolute path to the kubeconfig file")
- fs.IntVar(&a.Port, "port", 7171, "server listen port")
- fs.StringVar(&a.PrometheusMetricPath, "metric", "/metrics", "prometheus metrics path")
-}
-
-// SetLog 设置log
-func (a *WebCliServer) SetLog() {
- level, err := logrus.ParseLevel(a.LogLevel)
- if err != nil {
- fmt.Println("set log level error." + err.Error())
- return
- }
- logrus.SetLevel(level)
-}
diff --git a/cmd/webcli/server/server.go b/cmd/webcli/server/server.go
deleted file mode 100644
index 936de32fb4..0000000000
--- a/cmd/webcli/server/server.go
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (C) 2014-2018 Goodrain Co., Ltd.
-// RAINBOND, Application Management Platform
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version. For any non-GPL usage of Rainbond,
-// one or multiple Commercial Licenses authorized by Goodrain Co., Ltd.
-// must be obtained first.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see .
-
-package server
-
-import (
- "github.com/goodrain/rainbond/api/webcli/app"
- "os"
- "os/signal"
- "strconv"
- "syscall"
-
- "github.com/goodrain/rainbond/cmd/webcli/option"
- "github.com/sirupsen/logrus"
-)
-
-// Run start run
-func Run(s *option.WebCliServer) error {
- errChan := make(chan error)
- option := app.DefaultOptions
- option.Address = s.Address
- option.Port = strconv.Itoa(s.Port)
- option.SessionKey = s.SessionKey
- option.K8SConfPath = s.K8SConfPath
- ap, err := app.New(&option)
- if err != nil {
- return err
- }
- err = ap.Run()
- if err != nil {
- return err
- }
- defer ap.Exit()
- //step finally: listen Signal
- term := make(chan os.Signal)
- signal.Notify(term, os.Interrupt, syscall.SIGTERM)
- select {
- case <-term:
- logrus.Warn("Received SIGTERM, exiting gracefully...")
- case err := <-errChan:
- logrus.Errorf("Received a error %s, exiting gracefully...", err.Error())
- }
- logrus.Info("See you next time!")
- return nil
-}
diff --git a/cmd/webcli/webcli.go b/cmd/webcli/webcli.go
deleted file mode 100644
index 4da25ea236..0000000000
--- a/cmd/webcli/webcli.go
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (C) 2014-2018 Goodrain Co., Ltd.
-// RAINBOND, Application Management Platform
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version. For any non-GPL usage of Rainbond,
-// one or multiple Commercial Licenses authorized by Goodrain Co., Ltd.
-// must be obtained first.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see .
-
-package main
-
-import (
- "fmt"
- "os"
-
- "github.com/goodrain/rainbond/cmd"
- "github.com/goodrain/rainbond/cmd/webcli/option"
- "github.com/goodrain/rainbond/cmd/webcli/server"
-
- "github.com/spf13/pflag"
-)
-
-func main() {
- if len(os.Args) > 1 && os.Args[1] == "version" {
- cmd.ShowVersion("webcli")
- }
- s := option.NewWebCliServer()
- s.AddFlags(pflag.CommandLine)
- pflag.Parse()
- s.SetLog()
- if err := server.Run(s); err != nil {
- fmt.Fprintf(os.Stderr, "error: %v\n", err)
- os.Exit(1)
- }
-}
diff --git a/pkg/component/core.go b/pkg/component/core.go
index 01bb803a69..5f92a10a2a 100644
--- a/pkg/component/core.go
+++ b/pkg/component/core.go
@@ -34,7 +34,6 @@ import (
"github.com/goodrain/rainbond/pkg/component/k8s"
"github.com/goodrain/rainbond/pkg/component/mq"
"github.com/goodrain/rainbond/pkg/component/prom"
- "github.com/goodrain/rainbond/pkg/component/webcli"
"github.com/goodrain/rainbond/pkg/rainbond"
"github.com/sirupsen/logrus"
"time"
@@ -141,8 +140,3 @@ func MQGrpcServer() rainbond.ComponentCancel {
func MQClient() rainbond.Component {
return mqclient.New()
}
-
-// WebCli -
-func WebCli() rainbond.Component {
- return webcli.New()
-}
diff --git a/pkg/component/webcli/webcliComponent.go b/pkg/component/webcli/webcliComponent.go
deleted file mode 100644
index 152a13b437..0000000000
--- a/pkg/component/webcli/webcliComponent.go
+++ /dev/null
@@ -1,55 +0,0 @@
-package webcli
-
-import (
- "context"
- "github.com/goodrain/rainbond/api/webcli/app"
- "github.com/goodrain/rainbond/cmd/webcli/option"
- "github.com/goodrain/rainbond/pkg/gogo"
- "github.com/spf13/pflag"
- "strconv"
-
- "github.com/goodrain/rainbond/config/configs"
-)
-
-var defaultWebCliComponent *Component
-
-// Component -
-type Component struct {
- app *app.App
-}
-
-func (c *Component) Start(ctx context.Context, cfg *configs.Config) error {
- _ = gogo.Go(func(ctx context.Context) error {
- s := option.NewWebCliServer()
- s.AddFlags(pflag.CommandLine)
- pflag.Parse()
- s.SetLog()
- option := app.DefaultOptions
- option.Address = s.Address
- option.Port = strconv.Itoa(s.Port)
- option.SessionKey = s.SessionKey
- option.K8SConfPath = s.K8SConfPath
- ap, err := app.New(&option)
- c.app = ap
- if err != nil {
- return err
- }
- return ap.Run()
- })
- return nil
-}
-
-func (c *Component) CloseHandle() {
- c.app.Exit()
-}
-
-// New -
-func New() *Component {
- defaultWebCliComponent = &Component{}
- return defaultWebCliComponent
-}
-
-// Default -
-func Default() *Component {
- return defaultWebCliComponent
-}
From 084a71b78d0cb0ee7ea19672213f04231cbe8d7b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=80=86=E6=B5=81=E8=80=8C=E4=B8=8A?= <1666888816@qq.com>
Date: Thu, 6 Jun 2024 11:35:39 +0800
Subject: [PATCH 3/3] =?UTF-8?q?perf:=20remove=20webcli=20Signed-off-by:=20?=
=?UTF-8?q?=E9=80=86=E6=B5=81=E8=80=8C=E4=B8=8A=20<1666888816@qq.com>?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
api/webcli/app/app.go | 15 +----------
api/webcli/cmd/main.go | 57 ------------------------------------------
2 files changed, 1 insertion(+), 71 deletions(-)
delete mode 100644 api/webcli/cmd/main.go
diff --git a/api/webcli/app/app.go b/api/webcli/app/app.go
index 022d080507..aeedaa9cd9 100644
--- a/api/webcli/app/app.go
+++ b/api/webcli/app/app.go
@@ -32,7 +32,6 @@ import (
"github.com/barnettZQG/gotty/server"
"github.com/barnettZQG/gotty/webtty"
- httputil "github.com/goodrain/rainbond/util/http"
k8sutil "github.com/goodrain/rainbond/util/k8s"
"github.com/gorilla/websocket"
api "k8s.io/api/core/v1"
@@ -102,19 +101,7 @@ func (app *App) SetUpgrader(u *websocket.Upgrader) {
app.upgrader = u
}
-func (app *App) makeServer(addr string, handler *http.Handler) (*http.Server, error) {
- server := &http.Server{
- Addr: addr,
- Handler: *handler,
- }
-
- return server, nil
-}
-
-func (app *App) healthCheck(w http.ResponseWriter, r *http.Request) {
- httputil.ReturnSuccess(r, w, map[string]string{"status": "health", "info": "webcli service health"})
-}
-
+// HandleWS -
func (app *App) HandleWS(w http.ResponseWriter, r *http.Request) {
logrus.Printf("New client connected: %s", r.RemoteAddr)
diff --git a/api/webcli/cmd/main.go b/api/webcli/cmd/main.go
deleted file mode 100644
index 33f3a6a3a9..0000000000
--- a/api/webcli/cmd/main.go
+++ /dev/null
@@ -1,57 +0,0 @@
-package main
-
-import (
- "fmt"
- "github.com/goodrain/rainbond-operator/util/constants"
- app2 "github.com/goodrain/rainbond/api/webcli/app"
- utils "github.com/goodrain/rainbond/util"
- k8sutil "github.com/goodrain/rainbond/util/k8s"
- "github.com/sirupsen/logrus"
- restclient "k8s.io/client-go/rest"
-)
-
-func main() {
- option := app2.DefaultOptions
- option.K8SConfPath = "/root/.kube/config"
- config, err := k8sutil.NewRestConfig(option.K8SConfPath)
- if err != nil {
- logrus.Error(err)
- }
- config.UserAgent = "rainbond/webcli"
- app2.SetConfigDefaults(config)
- restClient, err := restclient.RESTClientFor(config)
- if err != nil {
- logrus.Error(err)
- }
- namespace := utils.GetenvDefault("RBD_NAMESPACE", constants.Namespace)
- commands := []string{"sh"}
- req := restClient.Post().
- Resource("pods").
- Name("rainbond-operator-0").
- Namespace(namespace).
- SubResource("exec").
- Param("container", "operator").
- Param("stdin", "true").
- Param("stdout", "true").
- Param("tty", "true")
- for _, c := range commands {
- req.Param("command", c)
- }
-
- slave, err := app2.NewExecContext(req, config)
- if err != nil {
- logrus.Error(err)
- return
- }
- slave.ResizeTerminal(100, 60)
- defer slave.Close()
- for {
- buffer := make([]byte, 1024)
- n, err := slave.Read(buffer)
- if err != nil {
- logrus.Error(err)
- return
- }
- fmt.Print(string(buffer[:n]))
- }
-}