Example #1
// BindFlags adds any flags that are common to all kubectl sub commands.
func (f *Factory) BindFlags(flags *pflag.FlagSet) {
	// any flags defined by external projects (not part of pflags)

	if f.flags != nil {
		f.flags.VisitAll(func(flag *pflag.Flag) {

	// Globally persistent flags across all subcommands.
	// TODO Change flag names to consts to allow safer lookup from subcommands.
	// TODO Add a verbose flag that turns on glog logging. Probably need a way
	// to do that automatically for every subcommand.
	flags.BoolVar(&f.clients.matchVersion, FlagMatchBinaryVersion, false, "Require server version to match client version")
	flags.String("ns-path", os.Getenv("HOME")+"/.kubernetes_ns", "Path to the namespace info file that holds the namespace context to use for CLI requests.")
	flags.StringP("namespace", "n", "", "If present, the namespace scope for this CLI request.")
	flags.Bool("validate", false, "If true, use a schema to validate the input before sending it")
Example #2
// NewConfig creates a new instance of Config. If a viper instance is not
// provided, a new one will be created.
func NewConfig(flagSet *flag.FlagSet, v *viper.Viper) *Config {
	if flagSet == nil {
		flagSet = flag.CommandLine

	if v == nil {
		v = viper.New()

	flagSet.StringP("config_file", "c", "", "path to config file")
	flagSet.StringP("service_name", "n", "", "provider service name")
	flagSet.StringP("socket_dir", "s", "/tmp/mistify", "base directory in which to create task sockets")
	flagSet.UintP("default_priority", "p", 50, "default task priority")
	flagSet.StringP("coordinator_url", "u", "", "url of coordinator for making requests")
	flagSet.StringP("log_level", "l", "warning", "log level: debug/info/warn/error/fatal/panic")
	flagSet.Uint64P("request_timeout", "t", 0, "default timeout for requests made by this provider in seconds")

	return &Config{
		viper:   v,
		flagSet: flagSet,
Example #3
// NewConfig creates a new instance of Config. If a viper instance is not
// provided, a new one will be created.
func NewConfig(flagSet *flag.FlagSet, v *viper.Viper) *Config {
	if flagSet == nil {
		flagSet = flag.CommandLine

	if v == nil {
		v = viper.New()

	flagSet.StringP("config_file", "c", "", "path to config file")
	flagSet.StringP("service_name", "n", "", "name of the coordinator")
	flagSet.StringP("socket_dir", "s", "/tmp/mistify", "base directory in which to create task sockets")
	flagSet.UintP("external_port", "p", 8080, "port for the http external request server to listen")
	flagSet.StringP("log_level", "l", "warning", "log level: debug/info/warn/error/fatal/panic")
	flagSet.UintP("request_timeout", "t", 0, "default timeout for requests in seconds")

	return &Config{
		viper:   v,
		flagSet: flagSet,
Example #4
// AddFlags adds all command line flags that will be used by Parse to the FlagSet
func AddFlags(flags *pflag.FlagSet) *ContainerOptions {
	copts := &ContainerOptions{
		flAttach:            opts.NewListOpts(ValidateAttach),
		flVolumes:           opts.NewListOpts(nil),
		flTmpfs:             opts.NewListOpts(nil),
		flBlkioWeightDevice: NewWeightdeviceOpt(ValidateWeightDevice),
		flDeviceReadBps:     NewThrottledeviceOpt(ValidateThrottleBpsDevice),
		flDeviceWriteBps:    NewThrottledeviceOpt(ValidateThrottleBpsDevice),
		flLinks:             opts.NewListOpts(ValidateLink),
		flAliases:           opts.NewListOpts(nil),
		flDeviceReadIOps:    NewThrottledeviceOpt(ValidateThrottleIOpsDevice),
		flDeviceWriteIOps:   NewThrottledeviceOpt(ValidateThrottleIOpsDevice),
		flEnv:               opts.NewListOpts(ValidateEnv),
		flLabels:            opts.NewListOpts(ValidateEnv),
		flDevices:           opts.NewListOpts(ValidateDevice),

		flUlimits: NewUlimitOpt(nil),
		flSysctls: opts.NewMapOpts(nil, opts.ValidateSysctl),

		flPublish:     opts.NewListOpts(nil),
		flExpose:      opts.NewListOpts(nil),
		flDNS:         opts.NewListOpts(opts.ValidateIPAddress),
		flDNSSearch:   opts.NewListOpts(opts.ValidateDNSSearch),
		flDNSOptions:  opts.NewListOpts(nil),
		flExtraHosts:  opts.NewListOpts(ValidateExtraHost),
		flVolumesFrom: opts.NewListOpts(nil),
		flEnvFile:     opts.NewListOpts(nil),
		flCapAdd:      opts.NewListOpts(nil),
		flCapDrop:     opts.NewListOpts(nil),
		flGroupAdd:    opts.NewListOpts(nil),
		flSecurityOpt: opts.NewListOpts(nil),
		flStorageOpt:  opts.NewListOpts(nil),
		flLabelsFile:  opts.NewListOpts(nil),
		flLoggingOpts: opts.NewListOpts(nil),

		flPrivileged:        flags.Bool("privileged", false, "Give extended privileges to this container"),
		flPidMode:           flags.String("pid", "", "PID namespace to use"),
		flUTSMode:           flags.String("uts", "", "UTS namespace to use"),
		flUsernsMode:        flags.String("userns", "", "User namespace to use"),
		flPublishAll:        flags.BoolP("publish-all", "P", false, "Publish all exposed ports to random ports"),
		flStdin:             flags.BoolP("interactive", "i", false, "Keep STDIN open even if not attached"),
		flTty:               flags.BoolP("tty", "t", false, "Allocate a pseudo-TTY"),
		flOomKillDisable:    flags.Bool("oom-kill-disable", false, "Disable OOM Killer"),
		flOomScoreAdj:       flags.Int("oom-score-adj", 0, "Tune host's OOM preferences (-1000 to 1000)"),
		flContainerIDFile:   flags.String("cidfile", "", "Write the container ID to the file"),
		flEntrypoint:        flags.String("entrypoint", "", "Overwrite the default ENTRYPOINT of the image"),
		flHostname:          flags.StringP("hostname", "h", "", "Container host name"),
		flMemoryString:      flags.StringP("memory", "m", "", "Memory limit"),
		flMemoryReservation: flags.String("memory-reservation", "", "Memory soft limit"),
		flMemorySwap:        flags.String("memory-swap", "", "Swap limit equal to memory plus swap: '-1' to enable unlimited swap"),
		flKernelMemory:      flags.String("kernel-memory", "", "Kernel memory limit"),
		flUser:              flags.StringP("user", "u", "", "Username or UID (format: <name|uid>[:<group|gid>])"),
		flWorkingDir:        flags.StringP("workdir", "w", "", "Working directory inside the container"),
		flCPUShares:         flags.Int64P("cpu-shares", "c", 0, "CPU shares (relative weight)"),
		flCPUPercent:        flags.Int64("cpu-percent", 0, "CPU percent (Windows only)"),
		flCPUPeriod:         flags.Int64("cpu-period", 0, "Limit CPU CFS (Completely Fair Scheduler) period"),
		flCPUQuota:          flags.Int64("cpu-quota", 0, "Limit CPU CFS (Completely Fair Scheduler) quota"),
		flCpusetCpus:        flags.String("cpuset-cpus", "", "CPUs in which to allow execution (0-3, 0,1)"),
		flCpusetMems:        flags.String("cpuset-mems", "", "MEMs in which to allow execution (0-3, 0,1)"),
		flBlkioWeight:       flags.Uint16("blkio-weight", 0, "Block IO (relative weight), between 10 and 1000"),
		flIOMaxBandwidth:    flags.String("io-maxbandwidth", "", "Maximum IO bandwidth limit for the system drive (Windows only)"),
		flIOMaxIOps:         flags.Uint64("io-maxiops", 0, "Maximum IOps limit for the system drive (Windows only)"),
		flSwappiness:        flags.Int64("memory-swappiness", -1, "Tune container memory swappiness (0 to 100)"),
		flNetMode:           flags.String("net", "default", "Connect a container to a network"),
		flMacAddress:        flags.String("mac-address", "", "Container MAC address (e.g. 92:d0:c6:0a:29:33)"),
		flIPv4Address:       flags.String("ip", "", "Container IPv4 address (e.g."),
		flIPv6Address:       flags.String("ip6", "", "Container IPv6 address (e.g. 2001:db8::33)"),
		flIpcMode:           flags.String("ipc", "", "IPC namespace to use"),
		flPidsLimit:         flags.Int64("pids-limit", 0, "Tune container pids limit (set -1 for unlimited)"),
		flRestartPolicy:     flags.String("restart", "no", "Restart policy to apply when a container exits"),
		flReadonlyRootfs:    flags.Bool("read-only", false, "Mount the container's root filesystem as read only"),
		flLoggingDriver:     flags.String("log-driver", "", "Logging driver for container"),
		flCgroupParent:      flags.String("cgroup-parent", "", "Optional parent cgroup for the container"),
		flVolumeDriver:      flags.String("volume-driver", "", "Optional volume driver for the container"),
		flStopSignal:        flags.String("stop-signal", signal.DefaultStopSignal, fmt.Sprintf("Signal to stop a container, %v by default", signal.DefaultStopSignal)),
		flIsolation:         flags.String("isolation", "", "Container isolation technology"),
		flShmSize:           flags.String("shm-size", "", "Size of /dev/shm, default value is 64MB"),
		flNoHealthcheck:     flags.Bool("no-healthcheck", false, "Disable any container-specified HEALTHCHECK"),
		flHealthCmd:         flags.String("health-cmd", "", "Command to run to check health"),
		flHealthInterval:    flags.Duration("health-interval", 0, "Time between running the check"),
		flHealthTimeout:     flags.Duration("health-timeout", 0, "Maximum time to allow one check to run"),
		flHealthRetries:     flags.Int("health-retries", 0, "Consecutive failures needed to report unhealthy"),
		flRuntime:           flags.String("runtime", "", "Runtime to use for this container"),

	flags.VarP(&copts.flAttach, "attach", "a", "Attach to STDIN, STDOUT or STDERR")
	flags.Var(&copts.flBlkioWeightDevice, "blkio-weight-device", "Block IO weight (relative device weight)")
	flags.Var(&copts.flDeviceReadBps, "device-read-bps", "Limit read rate (bytes per second) from a device")
	flags.Var(&copts.flDeviceWriteBps, "device-write-bps", "Limit write rate (bytes per second) to a device")
	flags.Var(&copts.flDeviceReadIOps, "device-read-iops", "Limit read rate (IO per second) from a device")
	flags.Var(&copts.flDeviceWriteIOps, "device-write-iops", "Limit write rate (IO per second) to a device")
	flags.VarP(&copts.flVolumes, "volume", "v", "Bind mount a volume")
	flags.Var(&copts.flTmpfs, "tmpfs", "Mount a tmpfs directory")
	flags.Var(&copts.flLinks, "link", "Add link to another container")
	flags.Var(&copts.flAliases, "net-alias", "Add network-scoped alias for the container")
	flags.Var(&copts.flDevices, "device", "Add a host device to the container")
	flags.VarP(&copts.flLabels, "label", "l", "Set meta data on a container")
	flags.Var(&copts.flLabelsFile, "label-file", "Read in a line delimited file of labels")
	flags.VarP(&copts.flEnv, "env", "e", "Set environment variables")
	flags.Var(&copts.flEnvFile, "env-file", "Read in a file of environment variables")
	flags.VarP(&copts.flPublish, "publish", "p", "Publish a container's port(s) to the host")
	flags.Var(&copts.flExpose, "expose", "Expose a port or a range of ports")
	flags.Var(&copts.flDNS, "dns", "Set custom DNS servers")
	flags.Var(&copts.flDNSSearch, "dns-search", "Set custom DNS search domains")
	flags.Var(&copts.flDNSOptions, "dns-opt", "Set DNS options")
	flags.Var(&copts.flExtraHosts, "add-host", "Add a custom host-to-IP mapping (host:ip)")
	flags.Var(&copts.flVolumesFrom, "volumes-from", "Mount volumes from the specified container(s)")
	flags.Var(&copts.flCapAdd, "cap-add", "Add Linux capabilities")
	flags.Var(&copts.flCapDrop, "cap-drop", "Drop Linux capabilities")
	flags.Var(&copts.flGroupAdd, "group-add", "Add additional groups to join")
	flags.Var(&copts.flSecurityOpt, "security-opt", "Security Options")
	flags.Var(&copts.flStorageOpt, "storage-opt", "Set storage driver options per container")
	flags.Var(copts.flUlimits, "ulimit", "Ulimit options")
	flags.Var(copts.flSysctls, "sysctl", "Sysctl options")
	flags.Var(&copts.flLoggingOpts, "log-opt", "Log driver options")

	return copts