Skip to content

Instantly share code, notes, and snippets.

@eriknelson
Created November 22, 2017 20:32
Show Gist options
  • Save eriknelson/9c34e83136e8fb7fd6110985b74fcb3b to your computer and use it in GitHub Desktop.
Save eriknelson/9c34e83136e8fb7fd6110985b74fcb3b to your computer and use it in GitHub Desktop.
diff --git a/cmd/broker/main.go b/cmd/broker/main.go
index 15895167..0e0af329 100644
--- a/cmd/broker/main.go
+++ b/cmd/broker/main.go
@@ -16,11 +16,103 @@
package main
-import "github.com/openshift/ansible-service-broker/pkg/app"
+import (
+ logging "github.com/op/go-logging"
+ "runtime/debug"
+ //"github.com/openshift/ansible-service-broker/pkg/app"
+ "fmt"
+ "github.com/openshift/ansible-service-broker/pkg/clients"
+ //"k8s.io/apimachinery/pkg/runtime"
+ "bufio"
+ "bytes"
+ "io"
+ "k8s.io/apimachinery/pkg/runtime/serializer"
+ "k8s.io/client-go/kubernetes/scheme"
+ "k8s.io/client-go/pkg/api/v1"
+ rest "k8s.io/client-go/rest"
+ "k8s.io/client-go/tools/remotecommand"
+ "k8s.io/kubernetes/pkg/api"
+ "os"
+)
+
+const (
+ PodName = "asb-1-zzwlt"
+ PodNamespace = "ansible-service-broker"
+ ContainerName = "asb"
+)
func main() {
- app := app.CreateApp()
- app.Start()
+ TestCommand := []string{"whoami"}
+
+ log := NewLogger()
+
+ k8sClient, err := clients.Kubernetes(log)
+ if err != nil {
+ fmt.Printf("error creating k8s client:")
+ fmt.Printf("%+v", err.Error())
+ return
+ }
+
+ clientConfig := k8sClient.ClientConfig
+ clientConfig.GroupVersion = &v1.SchemeGroupVersion
+ clientConfig.NegotiatedSerializer =
+ serializer.DirectCodecFactory{CodecFactory: scheme.Codecs}
+
+ // NOTE: kubectl exec simply sets the API path to /api when where is no
+ // Group, which is the case for pod exec.
+ clientConfig.APIPath = "/api"
+
+ log.Infof("%+v\n", clientConfig)
+ log.Infof("%s", string(debug.Stack()))
+
+ restClient, err := rest.RESTClientFor(clientConfig)
+ if err != nil {
+ fmt.Printf("error creating rest client:")
+ fmt.Printf("%+v", err.Error())
+ return
+ }
+
+ req := restClient.Post().
+ Resource("pods").
+ Name(PodName).
+ Namespace(PodNamespace).
+ SubResource("exec").
+ Param("container", ContainerName)
+
+ req.VersionedParams(&api.PodExecOptions{
+ Container: ContainerName,
+ Command: TestCommand,
+ Stdin: false,
+ Stdout: true,
+ Stderr: true,
+ TTY: false,
+ }, api.ParameterCodec)
+
+ exec, err := remotecommand.NewExecutor(clientConfig, "POST", req.URL())
+ if err != nil {
+ fmt.Printf("error getting new remotecommand executor")
+ fmt.Printf("%+v", err.Error())
+ }
+
+ var stdoutBuffer, stderrBuffer bytes.Buffer
+ stdoutWriter := bufio.NewWriter(&stdoutBuffer)
+ stderrWriter := bufio.NewWriter(&stderrBuffer)
+
+ err = exec.Stream(remotecommand.StreamOptions{
+ Stdout: stdoutWriter,
+ Stderr: stderrWriter,
+ })
+
+ // Flush?
+
+ fmt.Printf("stdoutBuffer: [%s]", stdoutBuffer.String())
+ fmt.Printf("stderrBuffer: [%s]", stderrBuffer.String())
+
+ if err != nil {
+ log.Error("Bad shit happened")
+ log.Errorf("%+v", err.Error())
+ }
+
////////////////////////////////////////////////////////////
// TODO:
// try/finally to make sure we clean things up cleanly?
@@ -29,3 +121,35 @@ func main() {
//}
////////////////////////////////////////////////////////////
}
+
+const LOGGING_MODULE = "cluster-sbx"
+
+func NewLogger() *logging.Logger {
+ logger := logging.MustGetLogger(LOGGING_MODULE)
+ var backends []logging.Backend
+
+ colorFormatter := logging.MustStringFormatter(
+ "%{color}[%{time}] [%{level}] %{message}%{color:reset}",
+ )
+
+ standardFormatter := logging.MustStringFormatter(
+ "[%{time}] [%{level}] %{message}",
+ )
+
+ var formattedBackend = func(writer io.Writer, isColored bool) logging.Backend {
+ backend := logging.NewLogBackend(writer, "", 0)
+ formatter := standardFormatter
+ if isColored {
+ formatter = colorFormatter
+ }
+ return logging.NewBackendFormatter(backend, formatter)
+ }
+
+ backends = append(backends, formattedBackend(os.Stdout, true /* isColored */))
+
+ multiBackend := logging.MultiLogger(backends...)
+ logger.SetBackend(multiBackend)
+ logging.SetLevel(logging.DEBUG, LOGGING_MODULE)
+
+ return logger
+}
diff --git a/glide.yaml b/glide.yaml
index efb63913..a1a89358 100644
--- a/glide.yaml
+++ b/glide.yaml
@@ -30,25 +30,29 @@ import:
version: v0.11.4
- package: github.com/docker/go-connections
version: 7da10c8c50cad14494ec818dcdfb6506265c0086
-
-# copied compatible versions from service-catalog glide.yaml
- package: k8s.io/kubernetes
- version: ebb8d6e0fadfc95f3d64ccecc36c8ed2ac9224ef # client-go origin version
+ version: ebb8d6e0fadfc95f3d64ccecc36c8ed2ac9224ef
- package: k8s.io/client-go
- version: e356aa2e77ab4a5914c216c12ba14cce25a25ab0 # in sync with kubernetes 1.7.0
+ version: e356aa2e77ab4a5914c216c12ba14cce25a25ab0
- package: k8s.io/apimachinery
- version: abe34e4f5b4413c282a83011892cbeea5b32223b # wanted by client-go; release-1.7 branch
+ version: abe34e4f5b4413c282a83011892cbeea5b32223b
- package: k8s.io/apiserver
- version: ab57ed5a72c3b67058f665d660e23bae18339fc2 # June 23, similar to client-go. No 1.7 branch yet BUT this version is perfectly compatible it seems
+ version: ab57ed5a72c3b67058f665d660e23bae18339fc2
- package: github.com/onsi/gomega
- version: d59fa0ac68bb5dd932ee8d24eed631cdd519efc3 # wanted by k8s.io/kubernetes
+ version: d59fa0ac68bb5dd932ee8d24eed631cdd519efc3
- package: github.com/onsi/ginkgo
- version: 67b9df7f55fe1165fd9ad49aca7754cce01a42b8 # wanted by k8s.io/kubernetes
+ version: 67b9df7f55fe1165fd9ad49aca7754cce01a42b8
- package: github.com/emicklei/go-restful
- version: ff4f55a206334ef123e4f79bbf348980da81ca46 # not a direct dep, but forces the version for k8s/apiserver
+ version: ff4f55a206334ef123e4f79bbf348980da81ca46
subpackages:
- swagger
- package: gopkg.in/natefinch/lumberjack.v2
version: 20b71e5b60d756d3d2f80def009790325acc2b23
- package: github.com/exponent-io/jsonpath
version: d6023ce2651d8eafb5c75bb0c7167536102ec9f5
+- package: google.golang.org/grpc
+ version: ^1.8.0
+ subpackages:
+ - status
+ - keepalive
+- package: github.com/docker/spdystream
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment