├── .gitignore ├── .vscode ├── settings.json └── launch.json ├── glide.lock ├── .debug ├── Dockerfile ├── runDelve.sh ├── debug.sh └── runDelveLoop.sh ├── Gopkg.toml ├── main.go ├── README.md └── Gopkg.lock /.gitignore: -------------------------------------------------------------------------------- 1 | debug 2 | vendor 3 | main 4 | telepresence.log 5 | .DS_Store -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.exclude": { 3 | "debug": true, 4 | "main": true, 5 | "glide.lock": true, 6 | "vendor": true 7 | }, 8 | "git.ignoreLimitWarning": true 9 | } -------------------------------------------------------------------------------- /glide.lock: -------------------------------------------------------------------------------- 1 | hash: a29b1a3935c3ed98c522eae3e29783a1943bc23369b53f898b2fbe62c5143b79 2 | updated: 2017-06-25T20:52:30.479371911-04:00 3 | imports: 4 | - name: github.com/golang/glog 5 | version: 44145f04b68cf362d9c4df2182967c2275eaefed 6 | testImports: [] 7 | -------------------------------------------------------------------------------- /.debug/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM golang:1.11 2 | 3 | ENV GOPATH=/opt/go:$GOPATH \ 4 | PATH=/opt/go/bin:$PATH 5 | 6 | # snag delve and dep 7 | RUN go get github.com/derekparker/delve/cmd/dlv && \ 8 | curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh 9 | 10 | 11 | WORKDIR /opt/go/src/local/myorg/myapp 12 | 13 | CMD ["bash"] -------------------------------------------------------------------------------- /.debug/runDelve.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # do horribleness to copy service account information to the spot that client-go expects it 4 | # TODO: find a way to mount $TELEPRESENCE_ROOT as root. proot? 5 | K8S_SA_PATH=/var/run/secrets/kubernetes.io/serviceaccount 6 | 7 | mkdir -p $K8S_SA_PATH 8 | cp $TELEPRESENCE_ROOT$K8S_SA_PATH/* $K8S_SA_PATH 9 | 10 | # run delve in a loop or just once 11 | echo "### single dlv" 12 | dlv debug --listen=0.0.0.0:2345 --headless=true --api-version 2 13 | -------------------------------------------------------------------------------- /.debug/debug.sh: -------------------------------------------------------------------------------- 1 | if [ ! -d ".debug" ]; then 2 | echo "This script expects to be run in the root directory of the project." 3 | exit 1 4 | fi 5 | 6 | bashCmd="-c .debug/runDelveLoop.sh" 7 | 8 | if [ "$1" == "--manual" ]; then 9 | bashCmd="" 10 | fi 11 | 12 | docker build .debug -t vscode-go-debug 13 | 14 | telepresence --docker-run -v "$(pwd)":/opt/go/src/local/myorg/myapp \ 15 | -p 2345:2345 -it \ 16 | --cap-add=SYS_PTRACE \ 17 | vscode-go-debug \ 18 | bash $bashCmd -------------------------------------------------------------------------------- /.debug/runDelveLoop.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # do horribleness to copy service account information to the spot that client-go expects it 4 | # TODO: find a way to mount $TELEPRESENCE_ROOT as root. proot? 5 | K8S_SA_PATH=/var/run/secrets/kubernetes.io/serviceaccount 6 | 7 | mkdir -p $K8S_SA_PATH 8 | cp $TELEPRESENCE_ROOT$K8S_SA_PATH/* $K8S_SA_PATH 9 | 10 | while true; do 11 | 12 | echo "### looping dlv" 13 | { 14 | dlv debug --listen=0.0.0.0:2345 --headless=true --api-version 2 15 | } <&- 16 | 17 | read -rep $'\n### Debugging Ended:\n 1) Make changes and press enter to debug again\n 2) Ctrl+C to exit the container' 18 | done -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "name": "Kubernetes/Telepresence", 6 | "type": "go", 7 | "request": "launch", 8 | "mode": "remote", 9 | "remotePath": "/opt/go/src/local/myorg/myapp", 10 | "port": 2345, 11 | "host": "127.0.0.1", 12 | "program": "${workspaceRoot}", 13 | "env": {}, 14 | "args": [] 15 | }, 16 | { 17 | "name": "Local Debug", 18 | "type": "go", 19 | "request": "launch", 20 | "mode": "debug", 21 | "program": "${workspaceRoot}" 22 | } 23 | ] 24 | } -------------------------------------------------------------------------------- /Gopkg.toml: -------------------------------------------------------------------------------- 1 | # Gopkg.toml example 2 | # 3 | # Refer to https://golang.github.io/dep/docs/Gopkg.toml.html 4 | # for detailed Gopkg.toml documentation. 5 | # 6 | # required = ["github.com/user/thing/cmd/thing"] 7 | # ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] 8 | # 9 | # [[constraint]] 10 | # name = "github.com/user/project" 11 | # version = "1.0.0" 12 | # 13 | # [[constraint]] 14 | # name = "github.com/user/project2" 15 | # branch = "dev" 16 | # source = "github.com/myfork/project2" 17 | # 18 | # [[override]] 19 | # name = "github.com/x/y" 20 | # version = "2.4.0" 21 | # 22 | # [prune] 23 | # non-go = false 24 | # go-tests = true 25 | # unused-packages = true 26 | 27 | 28 | [prune] 29 | go-tests = true 30 | unused-packages = true 31 | 32 | 33 | 34 | [[constraint]] 35 | name = "github.com/op/go-logging" 36 | version = "1.0.0" 37 | -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "os" 5 | 6 | logging "github.com/op/go-logging" 7 | metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 8 | 9 | "k8s.io/client-go/kubernetes" 10 | "k8s.io/client-go/rest" 11 | ) 12 | 13 | var ( 14 | _log = logging.MustGetLogger("prometheus-autoscaler") 15 | _logFormat = logging.MustStringFormatter( 16 | `%{time:15:04:05.000} %{level:.4s} %{message}`, 17 | ) 18 | ) 19 | 20 | func init() { 21 | backend := logging.NewLogBackend(os.Stdout, "", 0) 22 | backendFormatted := logging.NewBackendFormatter(backend, _logFormat) 23 | 24 | logging.SetBackend(backendFormatted) 25 | } 26 | 27 | func main() { 28 | _log.Infof("Application Starting") 29 | 30 | // creates the in-cluster config 31 | config, err := rest.InClusterConfig() 32 | if err != nil { 33 | _log.Fatalf("rest.InClusterConfig failed: %v", err) 34 | } 35 | // creates the clientset 36 | clientset, err := kubernetes.NewForConfig(config) 37 | if err != nil { 38 | _log.Fatalf("kubernetes.NewForConfig failed: %v", err) 39 | } 40 | 41 | pods, err := clientset.CoreV1().Pods("").List(metav1.ListOptions{}) 42 | if err != nil { 43 | _log.Fatalf("list pods failed: %v", err) 44 | } 45 | 46 | _log.Infof("There are %d pods in the cluster", len(pods.Items)) 47 | } 48 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # go-kubernetes-vscode-dev 2 | 3 | This repo is a template to get started writing golang applications designed to run in Kubernetes. It requires access to an existing kubernetes cluster. 4 | 5 | If you do not have access to a Kubernetes cluster than I'd recommend trying minikube (https://kubernetes.io/docs/setup/minikube/). 6 | 7 | ### Dependencies 8 | 9 | - VSCode/Go Extensions: https://code.visualstudio.com/docs/languages/go 10 | - Telepresence: http://www.telepresence.io/ 11 | 12 | ### How to use 13 | 14 | 1. Make sure that kubectl is pointed to the environment you want to debug in. Telepresence will create a deployment in the cluster you are pointed at. Be aware. 15 | 2. Type some Go 16 | 3. In the Terminal window run `.debug/debug.sh`. Your applications output will show up in this window. You only need to do this once. 17 | 4. When you see `API server listening at: [::]:2345` in the terminal window Delve is ready. 18 | 5. Smack F5 in VSCode to connect to Delve on port `2345`. 19 | 6. After debugging you will be presented with a prompt to either start a new debug session or exit the container. 20 | 21 | Alternatively you can run `.debug/debug.sh --manual`. This will start the Telepresence container and leave you at a command prompt. From here you can debug Kubernetes networking issues, manage dependencies (`dep`), manually trigger a debug session (`.debug/runDelve.sh`), etc. 22 | 23 | ### Caveats 24 | 25 | - Telepresence mounts the actual container's file system at `$TELEPRESENCE_ROOT`. Note that `runDelve.sh` copies the service account information from this mounted filesystem into an expected spot in the telepresence container. There is probably a better solution somewhere, but this works just for simple Kubernetes development. 26 | - Telepresence's documentation on how to deal with this issue: http://www.telepresence.io/howto/volumes.html. 27 | - The Telepresence `--docker-run` parameter does not provide a way to set the service account. If you want to access the Kubernetes API you will need to setup the default service account in a way that allows you to make the queries you would like. 28 | - Other documented limitations here: http://www.telepresence.io/reference/limitations.html 29 | 30 | ### Previous Iteration 31 | 32 | Previously this project used a unix pipe to pass commands back and forth between two different shell scripts. It was complicated and didn't work sometimes, but it made for a nice UX when it did. This has been scrapped in favor of the above approach. If you are interested in the way things used to be done: 33 | 34 | https://github.com/number101010/go-kubernetes-vscode-dev/tree/a296d80d84bf4ff4297b0bffe32dd1b852be7a0c -------------------------------------------------------------------------------- /Gopkg.lock: -------------------------------------------------------------------------------- 1 | # This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. 2 | 3 | 4 | [[projects]] 5 | digest = "1:b402bb9a24d108a9405a6f34675091b036c8b056aac843bf6ef2389a65c5cf48" 6 | name = "github.com/gogo/protobuf" 7 | packages = [ 8 | "proto", 9 | "sortkeys", 10 | ] 11 | pruneopts = "UT" 12 | revision = "4cbf7e384e768b4e01799441fdf2a706a5635ae7" 13 | version = "v1.2.0" 14 | 15 | [[projects]] 16 | digest = "1:4c0989ca0bcd10799064318923b9bc2db6b4d6338dd75f3f2d86c3511aaaf5cf" 17 | name = "github.com/golang/protobuf" 18 | packages = [ 19 | "proto", 20 | "ptypes", 21 | "ptypes/any", 22 | "ptypes/duration", 23 | "ptypes/timestamp", 24 | ] 25 | pruneopts = "UT" 26 | revision = "aa810b61a9c79d51363740d207bb46cf8e620ed5" 27 | version = "v1.2.0" 28 | 29 | [[projects]] 30 | branch = "master" 31 | digest = "1:0bfbe13936953a98ae3cfe8ed6670d396ad81edf069a806d2f6515d7bb6950df" 32 | name = "github.com/google/btree" 33 | packages = ["."] 34 | pruneopts = "UT" 35 | revision = "4030bb1f1f0c35b30ca7009e9ebd06849dd45306" 36 | 37 | [[projects]] 38 | branch = "master" 39 | digest = "1:3ee90c0d94da31b442dde97c99635aaafec68d0b8a3c12ee2075c6bdabeec6bb" 40 | name = "github.com/google/gofuzz" 41 | packages = ["."] 42 | pruneopts = "UT" 43 | revision = "24818f796faf91cd76ec7bddd72458fbced7a6c1" 44 | 45 | [[projects]] 46 | digest = "1:65c4414eeb350c47b8de71110150d0ea8a281835b1f386eacaa3ad7325929c21" 47 | name = "github.com/googleapis/gnostic" 48 | packages = [ 49 | "OpenAPIv2", 50 | "compiler", 51 | "extensions", 52 | ] 53 | pruneopts = "UT" 54 | revision = "7c663266750e7d82587642f65e60bc4083f1f84e" 55 | version = "v0.2.0" 56 | 57 | [[projects]] 58 | branch = "master" 59 | digest = "1:86c1210529e69d69860f2bb3ee9ccce0b595aa3f9165e7dd1388e5c612915888" 60 | name = "github.com/gregjones/httpcache" 61 | packages = [ 62 | ".", 63 | "diskcache", 64 | ] 65 | pruneopts = "UT" 66 | revision = "c63ab54fda8f77302f8d414e19933f2b6026a089" 67 | 68 | [[projects]] 69 | digest = "1:3e551bbb3a7c0ab2a2bf4660e7fcad16db089fdcfbb44b0199e62838038623ea" 70 | name = "github.com/json-iterator/go" 71 | packages = ["."] 72 | pruneopts = "UT" 73 | revision = "1624edc4454b8682399def8740d46db5e4362ba4" 74 | version = "v1.1.5" 75 | 76 | [[projects]] 77 | digest = "1:33422d238f147d247752996a26574ac48dcf472976eda7f5134015f06bf16563" 78 | name = "github.com/modern-go/concurrent" 79 | packages = ["."] 80 | pruneopts = "UT" 81 | revision = "bacd9c7ef1dd9b15be4a9909b8ac7a4e313eec94" 82 | version = "1.0.3" 83 | 84 | [[projects]] 85 | digest = "1:e32bdbdb7c377a07a9a46378290059822efdce5c8d96fe71940d87cb4f918855" 86 | name = "github.com/modern-go/reflect2" 87 | packages = ["."] 88 | pruneopts = "UT" 89 | revision = "4b7aa43c6742a2c18fdef89dd197aaae7dac7ccd" 90 | version = "1.0.1" 91 | 92 | [[projects]] 93 | digest = "1:5b3b29ce0e569f62935d9541dff2e16cc09df981ebde48e82259076a73a3d0c7" 94 | name = "github.com/op/go-logging" 95 | packages = ["."] 96 | pruneopts = "UT" 97 | revision = "b2cb9fa56473e98db8caba80237377e83fe44db5" 98 | version = "v1" 99 | 100 | [[projects]] 101 | branch = "master" 102 | digest = "1:3bf17a6e6eaa6ad24152148a631d18662f7212e21637c2699bff3369b7f00fa2" 103 | name = "github.com/petar/GoLLRB" 104 | packages = ["llrb"] 105 | pruneopts = "UT" 106 | revision = "53be0d36a84c2a886ca057d34b6aa4468df9ccb4" 107 | 108 | [[projects]] 109 | digest = "1:0e7775ebbcf00d8dd28ac663614af924411c868dca3d5aa762af0fae3808d852" 110 | name = "github.com/peterbourgon/diskv" 111 | packages = ["."] 112 | pruneopts = "UT" 113 | revision = "5f041e8faa004a95c88a202771f4cc3e991971e6" 114 | version = "v2.0.1" 115 | 116 | [[projects]] 117 | branch = "master" 118 | digest = "1:38f553aff0273ad6f367cb0a0f8b6eecbaef8dc6cb8b50e57b6a81c1d5b1e332" 119 | name = "golang.org/x/crypto" 120 | packages = ["ssh/terminal"] 121 | pruneopts = "UT" 122 | revision = "505ab145d0a99da450461ae2c1a9f6cd10d1f447" 123 | 124 | [[projects]] 125 | branch = "master" 126 | digest = "1:37f4a0712bbf9b111cf2951fe0efeea300ce87f7915047d4d1d5806a256ca634" 127 | name = "golang.org/x/net" 128 | packages = [ 129 | "context", 130 | "context/ctxhttp", 131 | "http/httpguts", 132 | "http2", 133 | "http2/hpack", 134 | "idna", 135 | ] 136 | pruneopts = "UT" 137 | revision = "891ebc4b82d6e74f468c533b06f983c7be918a96" 138 | 139 | [[projects]] 140 | branch = "master" 141 | digest = "1:5276e08fe6a1dfdb65b4f46a2e5d5c9e00be6e499105e441049c3c04a0c83b36" 142 | name = "golang.org/x/oauth2" 143 | packages = [ 144 | ".", 145 | "internal", 146 | ] 147 | pruneopts = "UT" 148 | revision = "d668ce993890a79bda886613ee587a69dd5da7a6" 149 | 150 | [[projects]] 151 | branch = "master" 152 | digest = "1:ba8cbf57cfd92d5f8592b4aca1a35d92c162363d32aeabd5b12555f8896635e7" 153 | name = "golang.org/x/sys" 154 | packages = [ 155 | "unix", 156 | "windows", 157 | ] 158 | pruneopts = "UT" 159 | revision = "4d1cda033e0619309c606fc686de3adcf599539e" 160 | 161 | [[projects]] 162 | digest = "1:a2ab62866c75542dd18d2b069fec854577a20211d7c0ea6ae746072a1dccdd18" 163 | name = "golang.org/x/text" 164 | packages = [ 165 | "collate", 166 | "collate/build", 167 | "internal/colltab", 168 | "internal/gen", 169 | "internal/tag", 170 | "internal/triegen", 171 | "internal/ucd", 172 | "language", 173 | "secure/bidirule", 174 | "transform", 175 | "unicode/bidi", 176 | "unicode/cldr", 177 | "unicode/norm", 178 | "unicode/rangetable", 179 | ] 180 | pruneopts = "UT" 181 | revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" 182 | version = "v0.3.0" 183 | 184 | [[projects]] 185 | branch = "master" 186 | digest = "1:9fdc2b55e8e0fafe4b41884091e51e77344f7dc511c5acedcfd98200003bff90" 187 | name = "golang.org/x/time" 188 | packages = ["rate"] 189 | pruneopts = "UT" 190 | revision = "85acf8d2951cb2a3bde7632f9ff273ef0379bcbd" 191 | 192 | [[projects]] 193 | digest = "1:08206298775e5b462e6c0333f4471b44e63f1a70e42952b6ede4ecc9572281eb" 194 | name = "google.golang.org/appengine" 195 | packages = [ 196 | "internal", 197 | "internal/base", 198 | "internal/datastore", 199 | "internal/log", 200 | "internal/remote_api", 201 | "internal/urlfetch", 202 | "urlfetch", 203 | ] 204 | pruneopts = "UT" 205 | revision = "4a4468ece617fc8205e99368fa2200e9d1fad421" 206 | version = "v1.3.0" 207 | 208 | [[projects]] 209 | digest = "1:2d1fbdc6777e5408cabeb02bf336305e724b925ff4546ded0fa8715a7267922a" 210 | name = "gopkg.in/inf.v0" 211 | packages = ["."] 212 | pruneopts = "UT" 213 | revision = "d2d2541c53f18d2a059457998ce2876cc8e67cbf" 214 | version = "v0.9.1" 215 | 216 | [[projects]] 217 | digest = "1:4d2e5a73dc1500038e504a8d78b986630e3626dc027bc030ba5c75da257cdb96" 218 | name = "gopkg.in/yaml.v2" 219 | packages = ["."] 220 | pruneopts = "UT" 221 | revision = "51d6538a90f86fe93ac480b35f37b2be17fef232" 222 | version = "v2.2.2" 223 | 224 | [[projects]] 225 | branch = "master" 226 | digest = "1:b73534f8441bf1e20a5b77c55810c6f986d10bd9fb3d26a90f5c6c9dc517ec0f" 227 | name = "k8s.io/api" 228 | packages = [ 229 | "admissionregistration/v1alpha1", 230 | "admissionregistration/v1beta1", 231 | "apps/v1", 232 | "apps/v1beta1", 233 | "apps/v1beta2", 234 | "auditregistration/v1alpha1", 235 | "authentication/v1", 236 | "authentication/v1beta1", 237 | "authorization/v1", 238 | "authorization/v1beta1", 239 | "autoscaling/v1", 240 | "autoscaling/v2beta1", 241 | "autoscaling/v2beta2", 242 | "batch/v1", 243 | "batch/v1beta1", 244 | "batch/v2alpha1", 245 | "certificates/v1beta1", 246 | "coordination/v1beta1", 247 | "core/v1", 248 | "events/v1beta1", 249 | "extensions/v1beta1", 250 | "networking/v1", 251 | "policy/v1beta1", 252 | "rbac/v1", 253 | "rbac/v1alpha1", 254 | "rbac/v1beta1", 255 | "scheduling/v1alpha1", 256 | "scheduling/v1beta1", 257 | "settings/v1alpha1", 258 | "storage/v1", 259 | "storage/v1alpha1", 260 | "storage/v1beta1", 261 | ] 262 | pruneopts = "UT" 263 | revision = "d04500c8c3dda9c980b668c57abc2ca61efcf5c4" 264 | 265 | [[projects]] 266 | branch = "master" 267 | digest = "1:0d9bf4c072699dbbaf6a664bc4f42752e3482d1a73ed5c4b12dfcf285ee36ca3" 268 | name = "k8s.io/apimachinery" 269 | packages = [ 270 | "pkg/api/errors", 271 | "pkg/api/meta", 272 | "pkg/api/resource", 273 | "pkg/apis/meta/v1", 274 | "pkg/apis/meta/v1/unstructured", 275 | "pkg/apis/meta/v1beta1", 276 | "pkg/conversion", 277 | "pkg/conversion/queryparams", 278 | "pkg/fields", 279 | "pkg/labels", 280 | "pkg/runtime", 281 | "pkg/runtime/schema", 282 | "pkg/runtime/serializer", 283 | "pkg/runtime/serializer/json", 284 | "pkg/runtime/serializer/protobuf", 285 | "pkg/runtime/serializer/recognizer", 286 | "pkg/runtime/serializer/streaming", 287 | "pkg/runtime/serializer/versioning", 288 | "pkg/selection", 289 | "pkg/types", 290 | "pkg/util/clock", 291 | "pkg/util/errors", 292 | "pkg/util/framer", 293 | "pkg/util/intstr", 294 | "pkg/util/json", 295 | "pkg/util/naming", 296 | "pkg/util/net", 297 | "pkg/util/runtime", 298 | "pkg/util/sets", 299 | "pkg/util/validation", 300 | "pkg/util/validation/field", 301 | "pkg/util/yaml", 302 | "pkg/version", 303 | "pkg/watch", 304 | "third_party/forked/golang/reflect", 305 | ] 306 | pruneopts = "UT" 307 | revision = "4d029f0333996cf231080e108e0bd1ece2a94d9f" 308 | 309 | [[projects]] 310 | digest = "1:67a85fd36cd1803b7421e6179e55e0b6668417ab338e20451cec0988f0762c63" 311 | name = "k8s.io/client-go" 312 | packages = [ 313 | "discovery", 314 | "kubernetes", 315 | "kubernetes/scheme", 316 | "kubernetes/typed/admissionregistration/v1alpha1", 317 | "kubernetes/typed/admissionregistration/v1beta1", 318 | "kubernetes/typed/apps/v1", 319 | "kubernetes/typed/apps/v1beta1", 320 | "kubernetes/typed/apps/v1beta2", 321 | "kubernetes/typed/auditregistration/v1alpha1", 322 | "kubernetes/typed/authentication/v1", 323 | "kubernetes/typed/authentication/v1beta1", 324 | "kubernetes/typed/authorization/v1", 325 | "kubernetes/typed/authorization/v1beta1", 326 | "kubernetes/typed/autoscaling/v1", 327 | "kubernetes/typed/autoscaling/v2beta1", 328 | "kubernetes/typed/autoscaling/v2beta2", 329 | "kubernetes/typed/batch/v1", 330 | "kubernetes/typed/batch/v1beta1", 331 | "kubernetes/typed/batch/v2alpha1", 332 | "kubernetes/typed/certificates/v1beta1", 333 | "kubernetes/typed/coordination/v1beta1", 334 | "kubernetes/typed/core/v1", 335 | "kubernetes/typed/events/v1beta1", 336 | "kubernetes/typed/extensions/v1beta1", 337 | "kubernetes/typed/networking/v1", 338 | "kubernetes/typed/policy/v1beta1", 339 | "kubernetes/typed/rbac/v1", 340 | "kubernetes/typed/rbac/v1alpha1", 341 | "kubernetes/typed/rbac/v1beta1", 342 | "kubernetes/typed/scheduling/v1alpha1", 343 | "kubernetes/typed/scheduling/v1beta1", 344 | "kubernetes/typed/settings/v1alpha1", 345 | "kubernetes/typed/storage/v1", 346 | "kubernetes/typed/storage/v1alpha1", 347 | "kubernetes/typed/storage/v1beta1", 348 | "pkg/apis/clientauthentication", 349 | "pkg/apis/clientauthentication/v1alpha1", 350 | "pkg/apis/clientauthentication/v1beta1", 351 | "pkg/version", 352 | "plugin/pkg/client/auth/exec", 353 | "rest", 354 | "rest/watch", 355 | "tools/clientcmd/api", 356 | "tools/metrics", 357 | "tools/reference", 358 | "transport", 359 | "util/cert", 360 | "util/connrotation", 361 | "util/flowcontrol", 362 | "util/integer", 363 | ] 364 | pruneopts = "UT" 365 | revision = "e64494209f554a6723674bd494d69445fb76a1d4" 366 | version = "v10.0.0" 367 | 368 | [[projects]] 369 | digest = "1:e2999bf1bb6eddc2a6aa03fe5e6629120a53088926520ca3b4765f77d7ff7eab" 370 | name = "k8s.io/klog" 371 | packages = ["."] 372 | pruneopts = "UT" 373 | revision = "a5bc97fbc634d635061f3146511332c7e313a55a" 374 | version = "v0.1.0" 375 | 376 | [[projects]] 377 | digest = "1:7719608fe0b52a4ece56c2dde37bedd95b938677d1ab0f84b8a7852e4c59f849" 378 | name = "sigs.k8s.io/yaml" 379 | packages = ["."] 380 | pruneopts = "UT" 381 | revision = "fd68e9863619f6ec2fdd8625fe1f02e7c877e480" 382 | version = "v1.1.0" 383 | 384 | [solve-meta] 385 | analyzer-name = "dep" 386 | analyzer-version = 1 387 | input-imports = [ 388 | "github.com/op/go-logging", 389 | "k8s.io/client-go/kubernetes", 390 | "k8s.io/client-go/rest", 391 | ] 392 | solver-name = "gps-cdcl" 393 | solver-version = 1 394 | --------------------------------------------------------------------------------