-
Notifications
You must be signed in to change notification settings - Fork 14
/
status.go
165 lines (139 loc) · 4.02 KB
/
status.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
// Copyright 2020-Present VMware, Inc.
// SPDX-License-Identifier: Apache-2.0
package clusterbuilder
import (
"fmt"
"io"
"github.com/pivotal/kpack/pkg/apis/build/v1alpha2"
corev1alpha1 "github.com/pivotal/kpack/pkg/apis/core/v1alpha1"
"github.com/spf13/cobra"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/vmware-tanzu/kpack-cli/pkg/builder"
"github.com/vmware-tanzu/kpack-cli/pkg/commands"
"github.com/vmware-tanzu/kpack-cli/pkg/k8s"
)
func NewStatusCommand(clientSetProvider k8s.ClientSetProvider) *cobra.Command {
cmd := &cobra.Command{
Use: "status <name>",
Short: "Display cluster builder status",
Long: `Prints detailed information about the status of a specific cluster builder.`,
Example: "kp clusterbuilder status my-builder",
Args: commands.ExactArgsWithUsage(1),
SilenceUsage: true,
RunE: func(cmd *cobra.Command, args []string) error {
cs, err := clientSetProvider.GetClientSet("")
if err != nil {
return err
}
bldr, err := cs.KpackClient.KpackV1alpha2().ClusterBuilders().Get(cmd.Context(), args[0], metav1.GetOptions{})
if err != nil {
return err
}
return displayBuilderStatus(bldr, cmd.OutOrStdout())
},
}
return cmd
}
func displayBuilderStatus(bldr *v1alpha2.ClusterBuilder, writer io.Writer) error {
if cond := bldr.Status.GetCondition(corev1alpha1.ConditionReady); cond != nil {
if cond.Status == corev1.ConditionTrue {
return printBuilderReadyStatus(bldr, writer)
} else {
return printBuilderNotReadyStatus(bldr, writer)
}
} else {
return printBuilderConditionUnknownStatus(bldr, writer)
}
}
func printBuilderConditionUnknownStatus(_ *v1alpha2.ClusterBuilder, writer io.Writer) error {
statusWriter := commands.NewStatusWriter(writer)
return statusWriter.AddBlock(
"",
"Status", "Unknown",
)
}
func printBuilderNotReadyStatus(bldr *v1alpha2.ClusterBuilder, writer io.Writer) error {
statusWriter := commands.NewStatusWriter(writer)
condReady := bldr.Status.GetCondition(corev1alpha1.ConditionReady)
return statusWriter.AddBlock(
"",
"Status", "Not Ready",
"Reason", condReady.Message,
)
}
func printBuilderReadyStatus(bldr *v1alpha2.ClusterBuilder, writer io.Writer) error {
statusWriter := commands.NewStatusWriter(writer)
err := statusWriter.AddBlock(
"",
"Status", "Ready",
"Image", bldr.Status.LatestImage,
"Stack ID", bldr.Status.Stack.ID,
"Run Image", bldr.Status.Stack.RunImage,
)
if err != nil {
return err
}
err = statusWriter.AddBlock(
"",
"Stack Ref", " ",
" Name", bldr.Spec.Stack.Name,
" Kind", bldr.Spec.Stack.Kind,
"Store Ref", " ",
" Name", bldr.Spec.Store.Name,
" Kind", bldr.Spec.Store.Kind,
)
if err != nil {
return err
}
bpTableWriter, err := commands.NewTableWriter(writer, "buildpack id", "version", "homepage")
if err != nil {
return nil
}
for _, bpMD := range bldr.Status.BuilderMetadata {
err := bpTableWriter.AddRow(bpMD.Id, bpMD.Version, bpMD.Homepage)
if err != nil {
return err
}
}
err = bpTableWriter.Write()
if err != nil {
return err
}
_, err = writer.Write([]byte("\n"))
if err != nil {
return err
}
cpTableWriter, err := commands.NewTableWriter(writer, "ClusterBuildpack Name", " ClusterBuildpack Kind")
if err != nil {
return nil
}
for _, entry := range bldr.Spec.Order {
for _, ref := range entry.Group {
if ref.ObjectReference.Name != "" && ref.ObjectReference.Kind != "" {
err := cpTableWriter.AddRow(ref.ObjectReference.Name, ref.ObjectReference.Kind)
if err != nil {
return err
}
}
}
cpTableWriter.Write()
}
orderTableWriter, err := commands.NewTableWriter(writer, "Detection Order", "")
if err != nil {
return nil
}
for i, entry := range bldr.Status.Order {
err := orderTableWriter.AddRow(fmt.Sprintf("Group #%d", i+1), "")
if err != nil {
return err
}
for _, ref := range entry.Group {
err := orderTableWriter.AddRow(builder.CreateDetectionOrderRow(ref))
if err != nil {
return err
}
}
}
return orderTableWriter.Write()
}