in pkg/cmd/root/root.go [73:117]
func NewCmd() *cobra.Command {
var cmd = &cobra.Command{
Use: cmdutil.BinName + " <command> [arguments]",
SuggestFor: []string{"mock", "ec2-mock", "ec2-metadata-mock"},
Version: version,
Example: fmt.Sprintf(" %s --mock-delay-sec 10\tmocks all metadata paths\n %s spot --action terminate\tmocks spot ITN only", cmdutil.BinName, cmdutil.BinName),
PersistentPreRunE: setupAndSaveConfig, // persistentPreRun runs before PreRun
PreRunE: preRun,
Run: run,
Short: "Tool to mock Amazon EC2 instance metadata",
Long: cmdutil.BinName + " is a tool to mock Amazon EC2 instance metadata.",
}
cmd.SetVersionTemplate(`{{.Version}}`)
// global flags
cmd.PersistentFlags().StringP(gf.HostNameFlag, "n", "", "the HTTP hostname for the mock url (default: 0.0.0.0)")
cmd.PersistentFlags().StringP(gf.PortFlag, "p", "", "the HTTP port where the mock runs (default: 1338)")
cmd.PersistentFlags().StringP(gf.ConfigFileFlag, "c", "", "config file for cli input parameters in json format (default: "+cfg.GetDefaultCfgFileName()+")")
cmd.PersistentFlags().BoolP(gf.SaveConfigToFileFlag, "s", false, "whether to save processed config from all input sources in "+cfg.GetSavedCfgFileName()+" in $HOME or working dir, if homedir is not found (default: false)")
cmd.PersistentFlags().BoolP(gf.WatchConfigFileFlag, "w", false, "whether to watch the config file "+cfg.GetSavedCfgFileName()+" in $HOME or working dir, if homedir is not found (default: false)")
cmd.PersistentFlags().Int64P(gf.MockDelayInSecFlag, "d", 0, "spot itn delay in seconds, relative to the application start time (default: 0 seconds)")
cmd.PersistentFlags().String(gf.MockTriggerTimeFlag, "", "spot itn trigger time in RFC3339 format. This takes priority over "+gf.MockDelayInSecFlag+" (default: none)")
cmd.PersistentFlags().Int64P(gf.MockIPCountFlag, "x", 2, "number of IPs in a cluster that can receive a Spot Interrupt Notice and/or Scheduled Event")
cmd.PersistentFlags().BoolP(gf.Imdsv2Flag, "I", false, "whether to enable IMDSv2 only, requiring a session token when submitting requests (default: false, meaning both IMDS v1 and v2 are enabled)")
cmd.PersistentFlags().Int64(gf.RebalanceDelayInSecFlag, 0, "rebalance rec delay in seconds, relative to the application start time (default: 0 seconds)")
cmd.PersistentFlags().String(gf.RebalanceTriggerTimeFlag, "", "rebalance rec trigger time in RFC3339 format. This takes priority over "+gf.RebalanceDelayInSecFlag+" (default: none)")
cmd.PersistentFlags().Int64P(gf.ASGTerminationDelayInSecFlag, "", 0, "asg termination delay in seconds, relative to the application start time (default: 0 seconds)")
cmd.PersistentFlags().Int64P(gf.ASGTerminationTriggerTimeFlag, "", 0, "asg termination trigger time in RFC3339 format. This takes priority over "+gf.ASGTerminationDelayInSecFlag+" (default: none)")
// add subcommands
cmd.AddCommand(spot.Command, events.Command, asglifecycle.Command)
// bind all non-metadata flags at top level
var topLevelGFlags []*pflag.Flag
for _, n := range gf.GetTopLevelFlags() {
topLevelGFlags = append(topLevelGFlags, cmd.PersistentFlags().Lookup(n))
}
cfg.BindTopLevelGFlags(topLevelGFlags)
// bind second level flags
cfg.BindServerCfg(cmd.PersistentFlags().Lookup(gf.HostNameFlag))
cfg.BindServerCfg(cmd.PersistentFlags().Lookup(gf.PortFlag))
return cmd
}