/
tenant_list.go
76 lines (62 loc) · 2.02 KB
/
tenant_list.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
package cmd
import (
"encoding/json"
"os"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"go.infratographer.com/x/events"
"go.infratographer.com/x/gidx"
"go.infratographer.com/permissions-api/pkg/permissions"
ent "go.infratographer.com/tenant-api/internal/ent/generated"
"go.infratographer.com/tenant-api/internal/ent/generated/tenant"
)
var tenantList = &cobra.Command{
Use: "list",
Short: "List Tenants",
Run: listTenant,
}
func init() {
tenantCmd.AddCommand(tenantList)
events.MustViperFlags(viper.GetViper(), tenantList.Flags(), appName)
permissions.MustViperFlags(viper.GetViper(), tenantList.Flags())
tenantList.Flags().Bool("all", false, "query all")
tenantList.Flags().String("only", "", "only get the provided tenant id")
tenantList.Flags().String("parent", "", "parent tenant id")
}
func listTenant(cmd *cobra.Command, _ []string) {
client, closeFn := initializeGraphClient()
defer closeFn()
query := client.Tenant.Query()
var (
tenants []*ent.Tenant
err error
)
if all, _ := cmd.Flags().GetBool("all"); all {
tenants, err = query.All(cmd.Context())
if err != nil {
logger.Fatalw("failed to query all tenants", "error", err)
}
} else if only, _ := cmd.Flags().GetString("only"); only != "" {
onlyID, _ := gidx.Parse(only)
tenants, err = query.Where(tenant.IDEQ(onlyID)).All(cmd.Context())
if err != nil {
logger.Fatalw("failed to get tenant", "error", err)
}
} else if parent, _ := cmd.Flags().GetString("parent"); parent != "" {
parentID, _ := gidx.Parse(parent)
tenants, err = query.Where(tenant.ParentTenantIDEQ(parentID)).All(cmd.Context())
if err != nil {
logger.Fatalw("failed to query all children", "error", err)
}
} else {
tenants, err = query.Where(tenant.ParentTenantIDIsNil()).All(cmd.Context())
if err != nil {
logger.Fatalw("failed to query all root tenants", "error", err)
}
}
enc := json.NewEncoder(os.Stdout)
enc.SetIndent("", " ")
if err := enc.Encode(tenants); err != nil {
logger.Fatalw("failed to encode payload", "error", err)
}
}