func BuildCLIOptions()

in tools/cassandra/main.go [59:231]


func BuildCLIOptions() *cli.App {

	app := cli.NewApp()
	app.Name = "cadence-cassandra-tool"
	app.Usage = "Command line tool for cadence cassandra operations"
	app.Version = "0.0.1"

	app.Flags = []cli.Flag{
		cli.StringFlag{
			Name:   schema.CLIFlagEndpoint,
			Value:  "127.0.0.1",
			Usage:  "hostname or ip address of cassandra host to connect to",
			EnvVar: "CASSANDRA_HOST",
		},
		cli.IntFlag{
			Name:   schema.CLIFlagPort,
			Value:  DefaultCassandraPort,
			Usage:  "Port of cassandra host to connect to",
			EnvVar: "CASSANDRA_DB_PORT",
		},
		cli.StringFlag{
			Name:   schema.CLIFlagUser,
			Value:  "",
			Usage:  "User name used for authentication for connecting to cassandra host",
			EnvVar: "CASSANDRA_USER",
		},
		cli.StringFlag{
			Name:   schema.CLIFlagPassword,
			Value:  "",
			Usage:  "Password used for authentication for connecting to cassandra host",
			EnvVar: "CASSANDRA_PASSWORD",
		},
		cli.StringSliceFlag{
			Name:  schema.CLIFlagAllowedAuthenticators,
			Value: &cli.StringSlice{""},
			Usage: "Set allowed authenticators for servers with custom authenticators",
		},
		cli.IntFlag{
			Name:   schema.CLIFlagTimeout,
			Value:  DefaultTimeout,
			Usage:  "request Timeout in seconds used for cql client",
			EnvVar: "CASSANDRA_TIMEOUT",
		},
		cli.IntFlag{
			Name:  schema.CLIOptConnectTimeout,
			Value: DefaultConnectTimeout,
			Usage: "Connection Timeout in seconds used for cql client",
		},
		cli.StringFlag{
			Name:   schema.CLIFlagKeyspace,
			Value:  "cadence",
			Usage:  "name of the cassandra Keyspace",
			EnvVar: "CASSANDRA_KEYSPACE",
		},
		cli.BoolFlag{
			Name:  schema.CLIFlagQuiet,
			Usage: "Don't set exit status to 1 on error",
		},
		cli.IntFlag{
			Name:   schema.CLIFlagProtoVersion,
			Usage:  "Protocol Version to connect to cassandra host",
			EnvVar: "CASSANDRA_PROTO_VERSION",
		},

		cli.BoolFlag{
			Name:   schema.CLIFlagEnableTLS,
			Usage:  "enable TLS",
			EnvVar: "CASSANDRA_ENABLE_TLS",
		},
		cli.StringFlag{
			Name:   schema.CLIFlagTLSCertFile,
			Usage:  "TLS cert file",
			EnvVar: "CASSANDRA_TLS_CERT",
		},
		cli.StringFlag{
			Name:   schema.CLIFlagTLSKeyFile,
			Usage:  "TLS key file",
			EnvVar: "CASSANDRA_TLS_KEY",
		},
		cli.StringFlag{
			Name:   schema.CLIFlagTLSCaFile,
			Usage:  "TLS CA file",
			EnvVar: "CASSANDRA_TLS_CA",
		},
		cli.BoolFlag{
			Name:   schema.CLIFlagTLSEnableHostVerification,
			Usage:  "TLS host verification",
			EnvVar: "CASSANDRA_TLS_VERIFY_HOST",
		},
		cli.StringFlag{
			Name:   schema.CLIFlagTLSServerName,
			Usage:  "TLS ServerName",
			EnvVar: "CASSANDRA_TLS_SERVER_NAME",
		},
	}

	app.Commands = []cli.Command{
		{
			Name:    "setup-schema",
			Aliases: []string{"setup"},
			Usage:   "setup initial version of cassandra schema",
			Flags: []cli.Flag{
				cli.StringFlag{
					Name:  schema.CLIFlagVersion,
					Usage: "initial version of the schema, cannot be used with disable-versioning",
				},
				cli.StringFlag{
					Name:  schema.CLIFlagSchemaFile,
					Usage: "path to the .cql schema file; if un-specified, will just setup versioning tables",
				},
				cli.BoolFlag{
					Name:  schema.CLIFlagDisableVersioning,
					Usage: "disable setup of schema versioning",
				},
				cli.BoolFlag{
					Name:  schema.CLIFlagOverwrite,
					Usage: "drop all existing tables before setting up new schema",
				},
			},
			Action: func(c *cli.Context) {
				cliHandler(c, setupSchema)
			},
		},
		{
			Name:    "update-schema",
			Aliases: []string{"update"},
			Usage:   "update cassandra schema to a specific version",
			Flags: []cli.Flag{
				cli.StringFlag{
					Name:  schema.CLIFlagTargetVersion,
					Usage: "target version for the schema update, defaults to latest",
				},
				cli.StringFlag{
					Name:  schema.CLIFlagSchemaDir,
					Usage: "path to directory containing versioned schema",
				},
				cli.BoolFlag{
					Name:  schema.CLIFlagDryrun,
					Usage: "do a dryrun",
				},
			},
			Action: func(c *cli.Context) {
				cliHandler(c, updateSchema)
			},
		},
		{
			Name:    "create-Keyspace",
			Aliases: []string{"create"},
			Usage:   "creates a Keyspace with simple strategy. If datacenter is provided, will use network topology strategy",
			Flags: []cli.Flag{
				cli.StringFlag{
					Name:  schema.CLIFlagKeyspace,
					Usage: "name of the Keyspace",
				},
				cli.StringFlag{
					Name:  schema.CLIFlagDatacenter,
					Value: "",
					Usage: "name of the cassandra datacenter, used when creating the keyspace with network topology strategy",
				},
				cli.IntFlag{
					Name:  schema.CLIFlagReplicationFactor,
					Value: 1,
					Usage: "replication factor for the Keyspace",
				},
			},
			Action: func(c *cli.Context) {
				cliHandler(c, createKeyspace)
			},
		},
	}

	return app
}