cmd

package
v1.7.0-beta Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 5, 2023 License: MIT Imports: 32 Imported by: 0

Documentation

Overview

Package cmd contains all the main commands for the `geneos` program

Index

Constants

View Source
const (
	CommandGroupConfig      = "config"
	CommandGroupComponents  = "components"
	CommandGroupCredentials = "credentials"
	CommandGroupManage      = "manage"
	CommandGroupOther       = "other"
	CommandGroupProcess     = "process"
	CommandGroupSubsystems  = "subsystems"
	CommandGroupView        = "view"
)

Available command groups for Cobra command set-up. This influences the display of the help text for the top-level `geneos` command.

Variables

DefaultUserKeyfile is the path to the user's key file as a config.Keyfile type

View Source
var Execname = execname // filepath.Base(os.Args[0])

Execname is the basename, without extension, of the underlying binary used to start the program. The initialising routines evaluate symlinks etc.

initialise to sensible default

View Source
var GeneosCmd = &cobra.Command{
	Use:   Execname + " COMMAND [flags] [TYPE] [NAME...] [parameters...]",
	Short: "Take control of your Geneos environments",
	Long:  geneosCmdDescription,
	Example: strings.ReplaceAll(`
geneos init demo -u jondoe@example.com -l
geneos ps
geneos restart
`, "|", "`"),

	Annotations: map[string]string{
		"needshomedir": "true",
	},
	CompletionOptions: cobra.CompletionOptions{
		DisableDefaultCmd: true,
	},
	Version:            cordial.VERSION,
	DisableAutoGenTag:  true,
	DisableSuggestions: true,

	PersistentPreRunE: func(command *cobra.Command, args []string) (err error) {

		command.Root().ParseFlags(args)

		if quiet {
			zerolog.SetGlobalLevel(zerolog.Disabled)
		} else if debug {
			zerolog.SetGlobalLevel(zerolog.DebugLevel)
		} else {
			zerolog.SetGlobalLevel(zerolog.InfoLevel)
		}

		// check for "replacedby" annotation, warn the user, run the new
		// command later (after prerun) but if the help flag is set
		// output the help for the new command and cleanly exit.
		var newcmd *cobra.Command

		if r, ok := command.Annotations["replacedby"]; ok {
			var newargs []string

			newcmd, newargs, err = command.Root().Find(append(strings.Split(r, " "), args...))
			if err != nil {
				log.Fatal().Err(err).Msg("")
			}
			if newcmd != nil {
				fmt.Printf("*** Please note that the %q command has been replaced by %q\n\n", command.CommandPath(), newcmd.CommandPath())
				command.RunE = func(cmd *cobra.Command, args []string) error {
					newcmd.ParseFlags(newargs)
					parseArgs(newcmd, newargs)
					return newcmd.RunE(newcmd, newcmd.Flags().Args())
				}
			}
		}

		if r, ok := command.Annotations["aliasfor"]; ok {
			var newargs []string

			newcmd, newargs, err = command.Root().Find(append(strings.Split(r, " "), args...))
			if err != nil {
				log.Fatal().Err(err).Msg("")
			}
			if newcmd != nil {
				command.RunE = func(cmd *cobra.Command, args []string) error {
					newcmd.ParseFlags(newargs)
					parseArgs(newcmd, newargs)
					return newcmd.RunE(newcmd, newcmd.Flags().Args())
				}
			}
		}

		if newcmd != nil {
			if t, _ := command.Flags().GetBool("help"); t {
				command.RunE = nil

				command.Run = func(cmd *cobra.Command, args []string) {
					newcmd.Usage()
				}
				return nil
			}
		}

		if t, _ := command.Flags().GetBool("help"); t {
			command.RunE = nil

			command.Run = func(cmd *cobra.Command, args []string) {
				command.Usage()
			}
			return nil
		}

		if geneos.Root() == "" {
			if command.Annotations["needshomedir"] == "true" {
				command.SetUsageTemplate(" ")
				return GeneosUnsetError
			}
		}
		if command.Name() == "help" {

			return nil
		}
		return parseArgs(command, args)
	},
}

GeneosCmd represents the base command when called without any subcommands

View Source
var GeneosUnsetError = errors.New(strings.ReplaceAll(`Geneos location not set.

You can do one of the following:
* Run |geneos config set geneos=/PATH| (where |/PATH| is the location of the Geneos installation)
* Run |geneos init| or |geneos init /PATH| to initialise an installation
  * There are also variations on the |init| command, please see help for the command
* Set the |GENEOS_HOME| or |ITRS_HOME| environment variables, either once or in your |.profile|:
  * |export GENEOS_HOME=/PATH|

`, "|", "`"))
View Source
var Hostname string

Hostname is the cmd package global host selected ny the `--host`/`-H` option

View Source
var RunPlaceholder = func(command *cobra.Command, args []string) {}

RunPlaceholder is an empty function for commands that have to run but no do anything

Used to allow PersistentPreRun to check for aliases for legacy commands

View Source
var UserKeyFile config.KeyFile

UserKeyFile is the path to the user's key file. It starts as DefaultUserKeyFile but can be changed.

Functions

func AddInstance added in v1.5.0

func AddInstance(ct *geneos.Component, addCmdExtras instance.SetConfigValues, items []string, args ...string) (err error)

AddInstance add an instance of ct the the option extra configuration values addCmdExtras

func CmdArgs added in v1.5.0

func CmdArgs(command *cobra.Command) (ct *geneos.Component, args []string)

func CmdArgsParams added in v1.5.0

func CmdArgsParams(command *cobra.Command) (ct *geneos.Component, args, params []string)

func CommandPS added in v1.5.0

func CommandPS(ct *geneos.Component, args []string, params []string) (err error)

CommandPS writes running instance information to STDOUT

XXX relies on global flags

func Execute

func Execute()

Execute adds all child commands to the root command and sets flags appropriately. This is called by main.main(). It only needs to happen once to the RootCmd.

func ImportFiles added in v1.5.0

func ImportFiles(ct *geneos.Component, args []string, sources []string) (err error)

ImportFiles add a file to an instance, from local or URL overwrites without asking - use case is license files, setup files etc. backup / history track older files (date/time?) no restart or reload of components?

func RunE added in v1.5.0

func RunE(root *cobra.Command, path []string, args []string) (err error)

RunE runs a command in a sub-package to avoid import loops. It is named to align with the cobra struct member of the same name.

The caller must have:

DisableFlagParsing: true,

set in their command struct for flags to work. Then hook this function like this in the command struct:

RunE: func(command *cobra.Command, args []string) (err error) {
     return RunE(command.Root(), []string{"host", "ls"}, args)
},

func Set added in v1.5.0

func Set(ct *geneos.Component, args, params []string) error

func Start added in v1.5.0

func Start(ct *geneos.Component, watchlogs bool, autostart bool, args []string, params []string) (err error)

Start is a single entrypoint for multiple commands to start instances. ct is the component type, nil means all. watchlogs is a flag to, well, watch logs while autostart is a flag to indicate if Start() is being called as part of a group of instances - this is for use by autostart checking.

Types

This section is empty.

Directories

Path Synopsis
Package aescmd groups related AES256 keyfile and crypto commands
Package aescmd groups related AES256 keyfile and crypto commands
Package cfgcmd groups config commands in their own package
Package cfgcmd groups config commands in their own package
Package hostcmd contains all the host subsystem commands
Package hostcmd contains all the host subsystem commands
Package initcmd contains all the init subsystem commands
Package initcmd contains all the init subsystem commands
Package pkgcmd contains all the package subsystem commands
Package pkgcmd contains all the package subsystem commands
Package tlscmd contains all the TLS subsystem commands
Package tlscmd contains all the TLS subsystem commands

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL