forked from jenkins-x/jx
-
Notifications
You must be signed in to change notification settings - Fork 0
/
get_team.go
127 lines (110 loc) · 2.66 KB
/
get_team.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
package cmd
import (
"io"
"strings"
"github.com/jenkins-x/jx/pkg/jx/cmd/templates"
"github.com/jenkins-x/jx/pkg/kube"
"github.com/jenkins-x/jx/pkg/log"
"github.com/spf13/cobra"
)
// GetTeamOptions containers the CLI options
type GetTeamOptions struct {
GetOptions
Pending bool
}
var (
getTeamLong = templates.LongDesc(`
Display the Team or Teams a user is a member of.
`)
getTeamExample = templates.Examples(`
# List the provisioned team or teams the current user is a member of
jx get team
# List the pending Teams which are not yet provisioned and available for use
jx get team -p
`)
)
// NewCmdGetTeam creates the new command for: jx get env
func NewCmdGetTeam(f Factory, out io.Writer, errOut io.Writer) *cobra.Command {
options := &GetTeamOptions{
GetOptions: GetOptions{
CommonOptions: CommonOptions{
Factory: f,
Out: out,
Err: errOut,
},
},
}
cmd := &cobra.Command{
Use: "teams",
Short: "Display the Team or Teams the current user is a member of",
Aliases: []string{"team"},
Long: getTeamLong,
Example: getTeamExample,
Run: func(cmd *cobra.Command, args []string) {
options.Cmd = cmd
options.Args = args
err := options.Run()
CheckErr(err)
},
}
cmd.Flags().BoolVarP(&options.Pending, "pending", "p", false, "Display only pending Teams which are not yet provisioned yet")
options.addGetFlags(cmd)
return cmd
}
// Run implements this command
func (o *GetTeamOptions) Run() error {
kubeClient, _, err := o.KubeClient()
if err != nil {
return err
}
if o.Pending {
return o.getPendingTeams()
}
teams, _, err := kube.GetTeams(kubeClient)
if err != nil {
return err
}
if len(teams) == 0 {
log.Info(`
You do not belong to any teams.
Have you installed Jenkins X yet to create a team?
See https://jenkins-x.io/getting-started/\n for more detail
`)
return nil
}
table := o.CreateTable()
table.AddRow("NAME")
for _, team := range teams {
table.AddRow(team.Name)
}
table.Render()
return nil
}
func (o *GetTeamOptions) getPendingTeams() error {
err := o.registerTeamCRD()
if err != nil {
return err
}
jxClient, ns, err := o.JXClientAndAdminNamespace()
if err != nil {
return err
}
teams, names, err := kube.GetPendingTeams(jxClient, ns)
if err != nil {
return err
}
if len(names) == 0 {
log.Info(`
There are no pending Teams yet. Try create one via: jx create team --pending
`)
return nil
}
table := o.CreateTable()
table.AddRow("NAME", "STATUS", "KIND", "MEMBERS")
for _, team := range teams {
spec := &team.Spec
table.AddRow(team.Name, string(team.Status.ProvisionStatus), string(spec.Kind), strings.Join(spec.Members, ", "))
}
table.Render()
return nil
}