Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmd/benchmark/benchmark.go
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ func validateFlags(cmd *cobra.Command, args []string) error {
return common.FlagValidationError(cmd, fmt.Sprintf("invalid storage directory name: %s", flagStorageDir))
}
// if no target is specified, i.e., we have a local target only, check if the directory exists
if !cmd.Flags().Lookup("targets").Changed && !cmd.Flags().Lookup("target").Changed {
if !cmd.Flags().Lookup(common.FlagTargetsFileName).Changed && !cmd.Flags().Lookup(common.FlagTargetHostName).Changed {
if _, err := os.Stat(flagStorageDir); os.IsNotExist(err) {
return common.FlagValidationError(cmd, fmt.Sprintf("storage dir does not exist: %s", flagStorageDir))
}
Expand Down
4 changes: 2 additions & 2 deletions cmd/config/restore.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,15 +157,15 @@ func runRestoreCmd(cmd *cobra.Command, args []string) error {
cmdArgs := []string{"config"}

// copy target flags from restore command first
targetFlags := []string{"target", "targets", "user", "key", "port"}
targetFlags := []string{common.FlagTargetHostName, common.FlagTargetsFileName, common.FlagTargetUserName, common.FlagTargetKeyName, common.FlagTargetPortName}
for _, flagName := range targetFlags {
if flag := cmd.Flags().Lookup(flagName); flag != nil && flag.Changed {
cmdArgs = append(cmdArgs, fmt.Sprintf("--%s", flagName), flag.Value.String())
}
}

// copy relevant global flags from root command next
globalFlags := []string{"debug", "output", "tempdir", "syslog", "log-stdout"}
globalFlags := []string{common.FlagDebugName, common.FlagOutputDirName, common.FlagTargetTempRootName, common.FlagSyslogName, common.FlagLogStdOutName}
for _, flagName := range globalFlags {
if flag := cmd.Root().PersistentFlags().Lookup(flagName); flag != nil && flag.Changed {
if flag.Value.Type() == "bool" {
Expand Down
21 changes: 6 additions & 15 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,15 +74,6 @@ var (
flagNoCheckUpdate bool
)

const (
flagDebugName = "debug"
flagSyslogName = "syslog"
flagLogStdOutName = "log-stdout"
flagOutputDirName = "output"
flagTargetTempRootName = "tempdir"
flagNoCheckUpdateName = "noupdate"
)

func init() {
rootCmd.SetUsageTemplate(`Usage:{{if .Runnable}}
{{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}
Expand Down Expand Up @@ -124,12 +115,12 @@ Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}}
rootCmd.AddGroup([]*cobra.Group{{ID: "other", Title: "Other Commands:"}}...)
rootCmd.AddCommand(updateCmd)
// Global (persistent) flags
rootCmd.PersistentFlags().BoolVar(&flagDebug, flagDebugName, false, "enable debug logging and retain temporary directories")
rootCmd.PersistentFlags().BoolVar(&flagSyslog, flagSyslogName, false, "write logs to syslog instead of a file")
rootCmd.PersistentFlags().BoolVar(&flagLogStdOut, flagLogStdOutName, false, "write logs to stdout")
rootCmd.PersistentFlags().StringVar(&flagOutputDir, flagOutputDirName, "", "override the output directory")
rootCmd.PersistentFlags().StringVar(&flagTargetTempRoot, flagTargetTempRootName, "", "override the temporary target directory, must exist and allow execution")
rootCmd.PersistentFlags().BoolVar(&flagNoCheckUpdate, flagNoCheckUpdateName, false, "skip application update check")
rootCmd.PersistentFlags().BoolVar(&flagDebug, common.FlagDebugName, false, "enable debug logging and retain temporary directories")
rootCmd.PersistentFlags().BoolVar(&flagSyslog, common.FlagSyslogName, false, "write logs to syslog instead of a file")
rootCmd.PersistentFlags().BoolVar(&flagLogStdOut, common.FlagLogStdOutName, false, "write logs to stdout")
rootCmd.PersistentFlags().StringVar(&flagOutputDir, common.FlagOutputDirName, "", "override the output directory")
rootCmd.PersistentFlags().StringVar(&flagTargetTempRoot, common.FlagTargetTempRootName, "", "override the temporary target directory, must exist and allow execution")
rootCmd.PersistentFlags().BoolVar(&flagNoCheckUpdate, common.FlagNoCheckUpdateName, false, "skip application update check")
}

// Execute adds all child commands to the root command and sets flags appropriately.
Expand Down
10 changes: 1 addition & 9 deletions cmd/telemetry/telemetry.go
Original file line number Diff line number Diff line change
Expand Up @@ -244,15 +244,7 @@ func validateFlags(cmd *cobra.Command, args []string) error {
if flagDuration < 0 {
return common.FlagValidationError(cmd, "duration must be 0 or greater")
}
target, err := cmd.Flags().GetString("target")
if err != nil {
panic("failed to get target flag")
}
targets, err := cmd.Flags().GetString("targets")
if err != nil {
panic("failed to get targets flag")
}
if flagDuration == 0 && (target != "" || targets != "") {
if flagDuration == 0 && (cmd.Flags().Lookup(common.FlagTargetsFileName).Changed || cmd.Flags().Lookup(common.FlagTargetHostName).Changed) {
return common.FlagValidationError(cmd, "duration must be greater than 0 when collecting from a remote target")
}
if flagInstrMixFrequency < 100000 { // 100,000 instructions is the minimum frequency
Expand Down
10 changes: 10 additions & 0 deletions internal/common/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,16 @@ import (
"github.com/spf13/cobra"
)

// Flag names for flags defined in the root command, but sometimes used in other commands.
const (
FlagDebugName = "debug"
FlagSyslogName = "syslog"
FlagLogStdOutName = "log-stdout"
FlagOutputDirName = "output"
FlagTargetTempRootName = "tempdir"
FlagNoCheckUpdateName = "noupdate"
)

var AppName = filepath.Base(os.Args[0])

// AppContext represents the application context that can be accessed from all commands.
Expand Down
48 changes: 24 additions & 24 deletions internal/common/targets.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,29 +38,29 @@ var (

// target flag names
const (
flagTargetsFileName = "targets"
flagTargetHostName = "target"
flagTargetPortName = "port"
flagTargetUserName = "user"
flagTargetKeyName = "key"
FlagTargetsFileName = "targets"
FlagTargetHostName = "target"
FlagTargetPortName = "port"
FlagTargetUserName = "user"
FlagTargetKeyName = "key"
)

var targetFlags = []Flag{
{Name: flagTargetHostName, Help: "host name or IP address of remote target"},
{Name: flagTargetPortName, Help: "port for SSH to remote target"},
{Name: flagTargetUserName, Help: "user name for SSH to remote target"},
{Name: flagTargetKeyName, Help: "private key file for SSH to remote target"},
{Name: flagTargetsFileName, Help: "file with remote target(s) connection details. See targets.yaml for format."},
{Name: FlagTargetHostName, Help: "host name or IP address of remote target"},
{Name: FlagTargetPortName, Help: "port for SSH to remote target"},
{Name: FlagTargetUserName, Help: "user name for SSH to remote target"},
{Name: FlagTargetKeyName, Help: "private key file for SSH to remote target"},
{Name: FlagTargetsFileName, Help: "file with remote target(s) connection details. See targets.yaml for format."},
}

func AddTargetFlags(cmd *cobra.Command) {
cmd.Flags().StringVar(&flagTargetHost, flagTargetHostName, "", targetFlags[0].Help)
cmd.Flags().StringVar(&flagTargetPort, flagTargetPortName, "", targetFlags[1].Help)
cmd.Flags().StringVar(&flagTargetUser, flagTargetUserName, "", targetFlags[2].Help)
cmd.Flags().StringVar(&flagTargetKeyFile, flagTargetKeyName, "", targetFlags[3].Help)
cmd.Flags().StringVar(&flagTargetsFile, flagTargetsFileName, "", targetFlags[4].Help)
cmd.Flags().StringVar(&flagTargetHost, FlagTargetHostName, "", targetFlags[0].Help)
cmd.Flags().StringVar(&flagTargetPort, FlagTargetPortName, "", targetFlags[1].Help)
cmd.Flags().StringVar(&flagTargetUser, FlagTargetUserName, "", targetFlags[2].Help)
cmd.Flags().StringVar(&flagTargetKeyFile, FlagTargetKeyName, "", targetFlags[3].Help)
cmd.Flags().StringVar(&flagTargetsFile, FlagTargetsFileName, "", targetFlags[4].Help)

cmd.MarkFlagsMutuallyExclusive(flagTargetHostName, flagTargetsFileName)
cmd.MarkFlagsMutuallyExclusive(FlagTargetHostName, FlagTargetsFileName)
}

func GetTargetFlagGroup() FlagGroup {
Expand All @@ -72,13 +72,13 @@ func GetTargetFlagGroup() FlagGroup {

func ValidateTargetFlags(cmd *cobra.Command) error {
if flagTargetsFile != "" && flagTargetHost != "" {
return fmt.Errorf("only one of --%s or --%s can be specified", flagTargetsFileName, flagTargetHostName)
return fmt.Errorf("only one of --%s or --%s can be specified", FlagTargetsFileName, FlagTargetHostName)
}
if flagTargetsFile != "" && (flagTargetPort != "" || flagTargetUser != "" || flagTargetKeyFile != "") {
return fmt.Errorf("if --%s is specified, --%s, --%s, and --%s must not be specified", flagTargetsFileName, flagTargetPortName, flagTargetUserName, flagTargetKeyName)
return fmt.Errorf("if --%s is specified, --%s, --%s, and --%s must not be specified", FlagTargetsFileName, FlagTargetPortName, FlagTargetUserName, FlagTargetKeyName)
}
if (flagTargetPort != "" || flagTargetUser != "" || flagTargetKeyFile != "") && flagTargetHost == "" {
return fmt.Errorf("if --%s, --%s, or --%s is specified, --%s must also be specified", flagTargetPortName, flagTargetUserName, flagTargetKeyName, flagTargetHostName)
return fmt.Errorf("if --%s, --%s, or --%s is specified, --%s must also be specified", FlagTargetPortName, FlagTargetUserName, FlagTargetKeyName, FlagTargetHostName)
}
// confirm that the targets file exists
if flagTargetsFile != "" {
Expand Down Expand Up @@ -136,7 +136,7 @@ func GetTargets(cmd *cobra.Command, needsElevatedPrivileges bool, failIfCantElev
return
}
targetTempDirRoot := tempDirFlag.Value.String()
flagTargetsFile, _ := cmd.Flags().GetString(flagTargetsFileName)
flagTargetsFile, _ := cmd.Flags().GetString(FlagTargetsFileName)
if flagTargetsFile != "" {
targets, targetErrs, err = getTargetsFromFile(flagTargetsFile, localTempDir)
} else {
Expand Down Expand Up @@ -185,10 +185,10 @@ func GetTargets(cmd *cobra.Command, needsElevatedPrivileges bool, failIfCantElev
// - targetError: An error indicating a problem with the target host connection.
// - err: An error object indicating any error that occurred during the function execution.
func getSingleTarget(cmd *cobra.Command, needsElevatedPrivileges bool, failIfCantElevate bool, localTempDir string) (target.Target, error, error) {
targetHost, _ := cmd.Flags().GetString(flagTargetHostName)
targetPort, _ := cmd.Flags().GetString(flagTargetPortName)
targetUser, _ := cmd.Flags().GetString(flagTargetUserName)
targetKey, _ := cmd.Flags().GetString(flagTargetKeyName)
targetHost, _ := cmd.Flags().GetString(FlagTargetHostName)
targetPort, _ := cmd.Flags().GetString(FlagTargetPortName)
targetUser, _ := cmd.Flags().GetString(FlagTargetUserName)
targetKey, _ := cmd.Flags().GetString(FlagTargetKeyName)
if targetHost != "" {
return getRemoteTarget(targetHost, targetPort, targetUser, targetKey, needsElevatedPrivileges, failIfCantElevate, localTempDir)
} else {
Expand Down