func init() { // call this as early as possible to ensure we always have timestamps // on fleetctl logs log.EnableTimestamps() globalFlagset.BoolVar(&globalFlags.Help, "help", false, "Print usage information and exit") globalFlagset.BoolVar(&globalFlags.Help, "h", false, "Print usage information and exit") globalFlagset.BoolVar(&globalFlags.Debug, "debug", false, "Print out more debug information to stderr") globalFlagset.BoolVar(&globalFlags.Version, "version", false, "Print the version and exit") globalFlagset.StringVar(&globalFlags.ClientDriver, "driver", clientDriverAPI, fmt.Sprintf("Adapter used to execute fleetctl commands. Options include %q and %q.", clientDriverAPI, clientDriverEtcd)) globalFlagset.StringVar(&globalFlags.Endpoint, "endpoint", defaultEndpoint, fmt.Sprintf("Location of the fleet API if --driver=%s. Alternatively, if --driver=%s, location of the etcd API.", clientDriverAPI, clientDriverEtcd)) globalFlagset.StringVar(&globalFlags.EtcdKeyPrefix, "etcd-key-prefix", registry.DefaultKeyPrefix, "Keyspace for fleet data in etcd (development use only!)") globalFlagset.StringVar(&globalFlags.KeyFile, "key-file", "", "Location of TLS key file used to secure communication with the fleet API or etcd") globalFlagset.StringVar(&globalFlags.CertFile, "cert-file", "", "Location of TLS cert file used to secure communication with the fleet API or etcd") globalFlagset.StringVar(&globalFlags.CAFile, "ca-file", "", "Location of TLS CA file used to secure communication with the fleet API or etcd") globalFlagset.StringVar(&globalFlags.KnownHostsFile, "known-hosts-file", ssh.DefaultKnownHostsFile, "File used to store remote machine fingerprints. Ignored if strict host key checking is disabled.") globalFlagset.BoolVar(&globalFlags.StrictHostKeyChecking, "strict-host-key-checking", true, "Verify host keys presented by remote machines before initiating SSH connections.") globalFlagset.Float64Var(&globalFlags.SSHTimeout, "ssh-timeout", 10.0, "Amount of time in seconds to allow for SSH connection initialization before failing.") globalFlagset.StringVar(&globalFlags.Tunnel, "tunnel", "", "Establish an SSH tunnel through the provided address for communication with fleet and etcd.") globalFlagset.Float64Var(&globalFlags.RequestTimeout, "request-timeout", 3.0, "Amount of time in seconds to allow a single request before considering it failed.") globalFlagset.StringVar(&globalFlags.SSHUserName, "ssh-username", "core", "Username to use when connecting to CoreOS instance.") // deprecated flags globalFlagset.BoolVar(&globalFlags.ExperimentalAPI, "experimental-api", true, hidden) globalFlagset.StringVar(&globalFlags.KeyFile, "etcd-keyfile", "", hidden) globalFlagset.StringVar(&globalFlags.CertFile, "etcd-certfile", "", hidden) globalFlagset.StringVar(&globalFlags.CAFile, "etcd-cafile", "", hidden) }
func init() { // call this as early as possible to ensure we always have timestamps // on fleetctl logs log.EnableTimestamps() globalFlagset.BoolVar(&globalFlags.Debug, "debug", false, "Print out more debug information to stderr") globalFlagset.BoolVar(&globalFlags.Version, "version", false, "Print the version and exit") globalFlagset.StringVar(&globalFlags.Endpoint, "endpoint", "http://127.0.0.1:4001", "etcd endpoint for fleet") globalFlagset.StringVar(&globalFlags.EtcdKeyPrefix, "etcd-key-prefix", registry.DefaultKeyPrefix, "Keyspace for fleet data in etcd (development use only!)") globalFlagset.StringVar(&globalFlags.EtcdKeyFile, "etcd-keyfile", "", "etcd key file authentication") globalFlagset.StringVar(&globalFlags.EtcdCertFile, "etcd-certfile", "", "etcd cert file authentication") globalFlagset.StringVar(&globalFlags.EtcdCAFile, "etcd-cafile", "", "etcd CA file authentication") globalFlagset.BoolVar(&globalFlags.UseAPI, "experimental-api", false, "Use the experimental HTTP API. This flag will be removed when the API is no longer considered experimental.") globalFlagset.StringVar(&globalFlags.KnownHostsFile, "known-hosts-file", ssh.DefaultKnownHostsFile, "File used to store remote machine fingerprints. Ignored if strict host key checking is disabled.") globalFlagset.BoolVar(&globalFlags.StrictHostKeyChecking, "strict-host-key-checking", true, "Verify host keys presented by remote machines before initiating SSH connections.") globalFlagset.StringVar(&globalFlags.Tunnel, "tunnel", "", "Establish an SSH tunnel through the provided address for communication with fleet and etcd.") globalFlagset.Float64Var(&globalFlags.RequestTimeout, "request-timeout", 3.0, "Amount of time in seconds to allow a single request before considering it failed.") }
func main() { if globalFlags.Debug { log.EnableDebug() } // call this as early as possible to ensure we always have timestamps // on fleetctl logs log.EnableTimestamps() if len(os.Args) == 1 { cmdFleet.Help() os.Exit(0) } if os.Args[1] == "--version" || os.Args[1] == "-v" { runVersion(cmdVersion, nil) os.Exit(0) } // determine currentCommand. We only need this for --replace and its // functional tests, so just handle those for now in the switch... // "The rest" doesn't care about "currentCommand" if len(os.Args) > 1 { for i := 1; i < len(os.Args); i++ { switch os.Args[i] { case "start": currentCommand = "start" case "load": currentCommand = "load" case "submit": currentCommand = "submit" default: continue } } } if sharedFlags.Sign { stderr("WARNING: The signed/verified units feature is DEPRECATED and cannot be used.") os.Exit(2) } // if --driver is not set, but --endpoint looks like an etcd // server, set the driver to etcd if globalFlags.Endpoint != "" && globalFlags.ClientDriver == "" { if u, err := url.Parse(strings.Split(globalFlags.Endpoint, ",")[0]); err == nil { if _, port, err := net.SplitHostPort(u.Host); err == nil && (port == "4001" || port == "2379") { log.Debugf("Defaulting to --driver=%s as --endpoint appears to be etcd", clientDriverEtcd) globalFlags.ClientDriver = clientDriverEtcd } } } cmdFleet.SetUsageFunc(usageFunc) cmdFleet.SetHelpTemplate(`{{.UsageString}}`) if err := cmdFleet.Execute(); err != nil { stderr("cannot execute cmdFleet: %v", err) } os.Exit(cmdExitCode) }