Skip to content

Commit 6070828

Browse files
authored
Release/v1.1.7 (#18)
* Update features for 1.1.7 with show resources * Update badges, changelogs & build container images * Refactoring detail pods (describe pods)
1 parent 73cabea commit 6070828

File tree

7 files changed

+417
-16
lines changed

7 files changed

+417
-16
lines changed

src/features/menus.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ func GetCommands() []*cobra.Command {
322322
if err != nil {
323323
return err
324324
}
325-
DescribePods(po)
325+
DescribePodsDetail(po)
326326
}
327327
}
328328

src/features/pods.go

Lines changed: 205 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"time"
1212

1313
"github.com/olekukonko/tablewriter"
14+
yaml "gopkg.in/yaml.v2"
1415
v1 "k8s.io/api/apps/v1"
1516
corev1 "k8s.io/api/core/v1"
1617
)
@@ -208,6 +209,210 @@ func DescribePods(pod *corev1.Pod) {
208209
fmt.Printf("Node Name: \t%s\n", pod.Spec.NodeName)
209210
}
210211

212+
func DescribePodsDetail(pod *corev1.Pod) {
213+
var (
214+
container_port string
215+
state string
216+
)
217+
218+
// Print detailed information about the pod
219+
fmt.Printf("Name: \t%s\n", pod.ObjectMeta.Name)
220+
fmt.Printf("Namespace: \t%s\n", pod.ObjectMeta.Namespace)
221+
fmt.Printf("Priority: \t%d\n", pod.Spec.Priority)
222+
fmt.Printf("Node: \t%s\n", pod.Spec.NodeName)
223+
fmt.Printf("Start Time:\t%s\n", pod.Status.StartTime.Time)
224+
225+
// Convert labels to YAML
226+
labelsYAML, err := yaml.Marshal(pod.ObjectMeta.Labels)
227+
if err != nil {
228+
fmt.Println("Error marshaling labels to YAML:", err)
229+
} else {
230+
fmt.Printf("Labels:")
231+
yamlLines := strings.Split(string(labelsYAML), "\n")
232+
for _, line := range yamlLines {
233+
fmt.Printf("\t\t%s\n", line)
234+
}
235+
}
236+
fmt.Printf("Annotations:")
237+
for key, value := range pod.ObjectMeta.Annotations {
238+
fmt.Printf("\t%s: %s\n", key, value)
239+
}
240+
fmt.Printf("Status: \t%s\n", pod.Status.Phase)
241+
fmt.Printf("IP: \t%s\n", pod.Status.PodIP)
242+
243+
fmt.Printf("IPs:\n")
244+
for _, podIP := range pod.Status.PodIPs {
245+
fmt.Printf(" IP: \t\t%s\n", podIP.IP)
246+
}
247+
fmt.Printf("Controlled By: \t%s/%s\n", pod.ObjectMeta.OwnerReferences[0].Kind, pod.ObjectMeta.OwnerReferences[0].Name)
248+
fmt.Println("---------------------------------------------------------------------------")
249+
fmt.Println("Containers:")
250+
for _, container := range pod.Spec.Containers {
251+
252+
containerStatus := GetContainerStatus(pod, container.Name)
253+
if containerStatus != nil {
254+
fmt.Printf(" %s:\n", container.Name)
255+
fmt.Printf(" Container ID: \t%s\n", containerStatus.ContainerID)
256+
fmt.Printf(" Image: \t%s\n", container.Image)
257+
fmt.Printf(" Image ID: \t%s\n", containerStatus.ImageID)
258+
259+
if container.Ports != nil {
260+
fmt.Printf(" Port: \t\t%v\n", container.Ports)
261+
} else {
262+
container_port = "<none>"
263+
fmt.Printf(" Port: \t\t%v\n", container_port)
264+
}
265+
266+
if len(pod.Spec.Containers[0].Ports) > 0 {
267+
if pod.Spec.Containers[0].Ports[0].HostPort != 0 {
268+
fmt.Printf(" Host Port: \t\t%d\n", pod.Spec.Containers[0].Ports[0].HostPort)
269+
} else {
270+
fmt.Printf(" Host Port: \t\t<none>\n")
271+
}
272+
} else {
273+
fmt.Printf(" Host Port: \t\t<none>\n")
274+
}
275+
276+
if pod.Status.ContainerStatuses[0].State.Running != nil {
277+
state = "Running"
278+
} else if pod.Status.ContainerStatuses[0].State.Terminated != nil {
279+
state = "Terminated"
280+
} else {
281+
state = "Waiting"
282+
}
283+
fmt.Printf(" State: \t\t%s\n", state)
284+
if pod.Status.ContainerStatuses[0].State.Running != nil {
285+
fmt.Printf(" Started: \t\t%s\n", pod.Status.ContainerStatuses[0].State.Running.StartedAt.Time)
286+
}
287+
288+
if containerStatus.LastTerminationState.Terminated != nil {
289+
fmt.Printf(" Last State:\n")
290+
fmt.Printf(" Reason: \t%s\n", containerStatus.LastTerminationState.Terminated.Reason)
291+
fmt.Printf(" Exit Code: \t%d\n", containerStatus.LastTerminationState.Terminated.ExitCode)
292+
fmt.Printf(" Started: \t%s\n", containerStatus.LastTerminationState.Terminated.StartedAt.Time)
293+
fmt.Printf(" Finished: \t%s\n", containerStatus.LastTerminationState.Terminated.FinishedAt.Time)
294+
}
295+
296+
fmt.Printf(" Ready: \t%t\n", containerStatus.Ready)
297+
fmt.Printf(" Restart Count: \t%d\n", containerStatus.RestartCount)
298+
fmt.Printf(" Limits:\n")
299+
fmt.Printf(" cpu: %s\n", container.Resources.Limits.Cpu().String())
300+
fmt.Printf(" memory: %s\n", container.Resources.Limits.Memory().String())
301+
fmt.Printf(" Requests:\n")
302+
fmt.Printf(" cpu: %s\n", container.Resources.Requests.Cpu().String())
303+
fmt.Printf(" memory: %s\n", container.Resources.Requests.Memory().String())
304+
305+
labelsYAML, err := yaml.Marshal(container.Env)
306+
if err != nil {
307+
fmt.Println("Error marshaling environment variables to YAML:", err)
308+
} else {
309+
fmt.Printf(" Environment:\n")
310+
env := make([]map[string]interface{}, 0)
311+
if err := yaml.Unmarshal(labelsYAML, &env); err != nil {
312+
fmt.Println("Error unmarshaling environment variables from YAML:", err)
313+
} else {
314+
for _, v := range env {
315+
name := v["name"].(string)
316+
value := v["value"].(string)
317+
fmt.Printf(" %s: %s\n", name, value)
318+
}
319+
}
320+
}
321+
322+
fmt.Printf(" Mounts:\n")
323+
for _, mount := range container.VolumeMounts {
324+
fmt.Printf(" %s from %s (ro:%t)\n", mount.MountPath, mount.Name, mount.ReadOnly)
325+
}
326+
327+
fmt.Println("Conditions:")
328+
fmt.Printf(" Type: \t\tStatus\n")
329+
for _, cond := range pod.Status.Conditions {
330+
if cond.Type == "Initialized" {
331+
fmt.Printf(" %s\t\t%s\n", cond.Type, cond.Status)
332+
}
333+
if cond.Type == "Ready" {
334+
fmt.Printf(" %s\t\t\t%s\n", cond.Type, cond.Status)
335+
}
336+
if cond.Type == "ContainersReady" {
337+
fmt.Printf(" %s\t%s\n", cond.Type, cond.Status)
338+
}
339+
if cond.Type == "PodScheduled" {
340+
fmt.Printf(" %s\t\t%s\n", cond.Type, cond.Status)
341+
}
342+
}
343+
344+
fmt.Println("Volumes:")
345+
for _, volume := range pod.Spec.Volumes {
346+
switch {
347+
case volume.ConfigMap != nil:
348+
fmt.Printf(" %s:\n", volume.Name)
349+
fmt.Printf(" Type: ConfigMap\n")
350+
fmt.Printf(" Name: %s\n", volume.ConfigMap.Name)
351+
if volume.ConfigMap.Optional != nil {
352+
fmt.Printf(" Optional: %t\n", *volume.ConfigMap.Optional)
353+
} else {
354+
fmt.Printf(" Optional: false\n")
355+
}
356+
case volume.Secret != nil:
357+
fmt.Printf(" %s:\n", volume.Name)
358+
fmt.Printf(" Type: Secret\n")
359+
fmt.Printf(" Name: %s\n", volume.Secret.SecretName)
360+
if volume.Secret.Optional != nil {
361+
fmt.Printf(" Optional: %t\n", *volume.Secret.Optional)
362+
} else {
363+
fmt.Printf(" Optional: false\n")
364+
}
365+
default:
366+
fmt.Printf(" %s: Unknown volume type\n", volume.Name)
367+
}
368+
}
369+
370+
// QoS Class
371+
fmt.Printf("QoS Class: \t\t%s\n", pod.Status.QOSClass)
372+
373+
// Node Selectors
374+
nodeSelectors := "<none>"
375+
if len(pod.Spec.NodeSelector) > 0 {
376+
nodeSelectors = fmt.Sprintf("%v", pod.Spec.NodeSelector)
377+
}
378+
fmt.Printf("Node-Selectors: \t%s\n", nodeSelectors)
379+
fmt.Printf("\n")
380+
381+
// Tolerations
382+
tolerations := pod.Spec.Tolerations
383+
tolerationStrings := make([]string, 0)
384+
385+
for _, toleration := range tolerations {
386+
tolerationStrings = append(tolerationStrings, fmt.Sprintf("%s:%s op=%s for %ds", toleration.Key, toleration.Operator, toleration.Effect, toleration.TolerationSeconds))
387+
}
388+
tolerationsString := strings.Join(tolerationStrings, "\n\t\t")
389+
fmt.Printf("Tolerations:\t%s\n", strings.ReplaceAll(fmt.Sprintf("%v", tolerationsString), " ", "\t"))
390+
391+
// Events
392+
events := "<none>"
393+
fmt.Println("Events:")
394+
if len(pod.Status.Conditions) > 0 {
395+
events = ""
396+
for _, condition := range pod.Status.Conditions {
397+
fmt.Printf(" %-16s %v\n", condition.Type, condition.Status)
398+
fmt.Printf(" Last Timestamp: %v\n", condition.LastTransitionTime)
399+
}
400+
events = strings.TrimSuffix(events, ", ")
401+
}
402+
fmt.Printf("\t%s\n", events)
403+
}
404+
}
405+
}
406+
407+
func GetContainerStatus(pod *corev1.Pod, containerName string) *corev1.ContainerStatus {
408+
for _, status := range pod.Status.ContainerStatuses {
409+
if status.Name == containerName {
410+
return &status
411+
}
412+
}
413+
return nil
414+
}
415+
211416
func GetFreePort() (int, error) {
212417
// listen on a random port
213418
l, err := net.Listen("tcp", "127.0.0.1:0")

src/go.mod

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ require (
99
github.com/sirupsen/logrus v1.9.0
1010
github.com/spf13/cobra v1.6.1
1111
github.com/stretchr/testify v1.8.2
12+
gopkg.in/yaml.v2 v2.4.0
1213
k8s.io/api v0.26.3
1314
k8s.io/apimachinery v0.26.3
1415
k8s.io/client-go v0.26.3
@@ -17,7 +18,6 @@ require (
1718
require (
1819
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
1920
github.com/davecgh/go-spew v1.1.1 // indirect
20-
github.com/dustin/go-humanize v1.0.1 // indirect
2121
github.com/emicklei/go-restful/v3 v3.9.0 // indirect
2222
github.com/go-logr/logr v1.2.3 // indirect
2323
github.com/go-openapi/jsonpointer v0.19.5 // indirect
@@ -39,7 +39,6 @@ require (
3939
github.com/mattn/go-isatty v0.0.17 // indirect
4040
github.com/mattn/go-runewidth v0.0.14 // indirect
4141
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
42-
github.com/mitchellh/go-homedir v1.1.0 // indirect
4342
github.com/moby/spdystream v0.2.0 // indirect
4443
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
4544
github.com/modern-go/reflect2 v1.0.2 // indirect
@@ -56,7 +55,6 @@ require (
5655
google.golang.org/appengine v1.6.7 // indirect
5756
google.golang.org/protobuf v1.28.1 // indirect
5857
gopkg.in/inf.v0 v0.9.1 // indirect
59-
gopkg.in/yaml.v2 v2.4.0 // indirect
6058
gopkg.in/yaml.v3 v3.0.1 // indirect
6159
k8s.io/klog/v2 v2.80.1 // indirect
6260
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 // indirect

src/go.sum

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
3737
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
3838
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s=
3939
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w=
40+
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
4041
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
4142
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
4243
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
@@ -53,8 +54,7 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
5354
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
5455
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
5556
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
56-
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
57-
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
57+
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc=
5858
github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE=
5959
github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
6060
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
@@ -175,8 +175,6 @@ github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWV
175175
github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
176176
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
177177
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
178-
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
179-
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
180178
github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8=
181179
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
182180
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=

src/singleton/go.mod

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ require (
99
github.com/sirupsen/logrus v1.9.0
1010
github.com/spf13/cobra v1.6.1
1111
github.com/stretchr/testify v1.8.2
12+
gopkg.in/yaml.v2 v2.4.0
1213
k8s.io/api v0.26.3
1314
k8s.io/apimachinery v0.26.3
1415
k8s.io/client-go v0.26.3
@@ -17,7 +18,6 @@ require (
1718
require (
1819
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
1920
github.com/davecgh/go-spew v1.1.1 // indirect
20-
github.com/dustin/go-humanize v1.0.1 // indirect
2121
github.com/emicklei/go-restful/v3 v3.9.0 // indirect
2222
github.com/go-logr/logr v1.2.3 // indirect
2323
github.com/go-openapi/jsonpointer v0.19.5 // indirect
@@ -39,7 +39,6 @@ require (
3939
github.com/mattn/go-isatty v0.0.17 // indirect
4040
github.com/mattn/go-runewidth v0.0.14 // indirect
4141
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
42-
github.com/mitchellh/go-homedir v1.1.0 // indirect
4342
github.com/moby/spdystream v0.2.0 // indirect
4443
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
4544
github.com/modern-go/reflect2 v1.0.2 // indirect
@@ -56,7 +55,6 @@ require (
5655
google.golang.org/appengine v1.6.7 // indirect
5756
google.golang.org/protobuf v1.28.1 // indirect
5857
gopkg.in/inf.v0 v0.9.1 // indirect
59-
gopkg.in/yaml.v2 v2.4.0 // indirect
6058
gopkg.in/yaml.v3 v3.0.1 // indirect
6159
k8s.io/klog/v2 v2.80.1 // indirect
6260
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 // indirect

src/singleton/go.sum

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
3737
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
3838
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s=
3939
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w=
40+
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
4041
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
4142
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
4243
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
@@ -53,8 +54,7 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
5354
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
5455
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
5556
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
56-
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
57-
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
57+
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc=
5858
github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE=
5959
github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
6060
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
@@ -175,8 +175,6 @@ github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWV
175175
github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
176176
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
177177
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
178-
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
179-
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
180178
github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8=
181179
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
182180
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=

0 commit comments

Comments
 (0)