-
Notifications
You must be signed in to change notification settings - Fork 402
/
main.go
110 lines (88 loc) · 3.05 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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// Copyright (C) 2019 Storj Labs, Inc.
// See LICENSE for copying information.
package main
import (
"os"
"github.com/spf13/cobra"
"storj.io/storj/internal/fpath"
)
// Flags contains different flags for commands
type Flags struct {
Directory string
Host string
SatelliteCount int
StorageNodeCount int
Identities int
IsDev bool
OnlyEnv bool // only do things necessary for loading env vars
// Connection string for the postgres database to use for storj-sim processes
Postgres string
}
var printCommands bool
func main() {
cobra.EnableCommandSorting = false
var flags Flags
rootCmd := &cobra.Command{
Use: "storj-sim",
Short: "Storj Network Simulator",
}
defaultConfigDir := fpath.ApplicationDir("storj", "local-network")
configDir := defaultConfigDir
if os.Getenv("STORJ_NETWORK_DIR") != "" {
configDir = os.Getenv("STORJ_NETWORK_DIR")
}
rootCmd.PersistentFlags().StringVarP(&flags.Directory, "config-dir", "", configDir, "base project directory")
rootCmd.PersistentFlags().StringVarP(&flags.Host, "host", "", "127.0.0.1", "host to use for network")
rootCmd.PersistentFlags().IntVarP(&flags.SatelliteCount, "satellites", "", 1, "number of satellites to start")
rootCmd.PersistentFlags().IntVarP(&flags.StorageNodeCount, "storage-nodes", "", 10, "number of storage nodes to start")
rootCmd.PersistentFlags().IntVarP(&flags.Identities, "identities", "", 10, "number of identities to create")
rootCmd.PersistentFlags().BoolVarP(&printCommands, "print-commands", "x", false, "print commands as they are run")
rootCmd.PersistentFlags().BoolVarP(&flags.IsDev, "dev", "", false, "use configuration values tuned for development")
rootCmd.PersistentFlags().StringVarP(&flags.Postgres, "postgres", "", "", "connection string for postgres. If provided, storj-sim will use postgres for all databases that support it.")
networkCmd := &cobra.Command{
Use: "network",
Short: "local network for testing",
}
networkCmd.AddCommand(
&cobra.Command{
Use: "run",
Short: "run network",
RunE: func(cmd *cobra.Command, args []string) (err error) {
return networkExec(&flags, args, "run")
},
}, &cobra.Command{
Use: "env [name]",
Short: "print environment variables",
RunE: func(cmd *cobra.Command, args []string) (err error) {
return networkEnv(&flags, args)
},
}, &cobra.Command{
Use: "setup",
Short: "setup network",
RunE: func(cmd *cobra.Command, args []string) (err error) {
return networkExec(&flags, args, "setup")
},
}, &cobra.Command{
Use: "test <command>",
Short: "run command with an actual network",
Args: cobra.MinimumNArgs(1),
RunE: func(cmd *cobra.Command, args []string) (err error) {
return networkTest(&flags, args[0], args[1:])
},
}, &cobra.Command{
Use: "destroy",
Short: "destroys network if it exists",
RunE: func(cmd *cobra.Command, args []string) (err error) {
return networkDestroy(&flags, args)
},
},
)
rootCmd.AddCommand(
networkCmd,
)
rootCmd.SilenceUsage = true
err := rootCmd.Execute()
if err != nil {
os.Exit(1)
}
}