-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
92 lines (82 loc) · 2.28 KB
/
main.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
package main
import (
"context"
"fmt"
"strings"
"github.com/spf13/cobra"
"github.com/xebia/gcp-path/internal"
)
var loadViaCloudAsset bool
func main() {
root := &cobra.Command{Use: "gcp-path"}
root.PersistentFlags().BoolVarP(&loadViaCloudAsset, "use-asset-api", "u", false, "use Cloud Asset API to load folders")
ls := &cobra.Command{
Use: "ls [organization name]....",
Short: "List resources",
Args: cobra.MinimumNArgs(0),
SilenceUsage: true,
RunE: func(cmd *cobra.Command, args []string) error {
ctx := context.Background()
hierarchy, err := internal.LoadResourceHierarchy(ctx, args, !loadViaCloudAsset)
if err != nil {
return err
}
return hierarchy.ListPaths(hierarchy.AvailableOrganizations())
},
}
getResourceName := &cobra.Command{
Use: "get-resource-name [path...]",
Short: "Get resource name by path",
Args: cobra.MinimumNArgs(1),
SilenceUsage: true,
RunE: func(cmd *cobra.Command, args []string) error {
ctx := context.Background()
hierarchy, err := internal.LoadResourceHierarchy(ctx, nil, !loadViaCloudAsset)
if err != nil {
return err
}
for _, path := range args {
resourceName, err := hierarchy.GetResourceName(path)
if err != nil {
return err
}
idOnly, err := cmd.Flags().GetBool("id")
if err != nil {
return err
}
if idOnly {
parts := strings.Split(resourceName, "/")
resourceName = parts[len(parts)-1]
}
fmt.Printf("%s\n", resourceName)
}
return nil
},
}
getResourceName.Flags().Bool("id", false, "print only the resource id number")
getPath := &cobra.Command{
Use: "get-path [resource-name...]",
Short: "Get path of resource name",
Args: cobra.MinimumNArgs(1),
SilenceUsage: true,
RunE: func(cmd *cobra.Command, args []string) error {
ctx := context.Background()
hierarchy, err := internal.LoadResourceHierarchy(ctx, nil, !loadViaCloudAsset)
if err != nil {
return err
}
for _, resourceName := range args {
path, err := hierarchy.GetPathByResourceName(resourceName)
if err != nil {
return err
}
fmt.Printf("%s\n", path)
}
return nil
},
}
root.AddCommand(ls)
root.AddCommand(getResourceName)
root.AddCommand(getPath)
_ = root.Execute()
}