bitbucket.org/Aishee/synsec@v0.0.0-20210414005726-236fc01a153d/cmd/synsec-cli/scenarios.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"bitbucket.org/Aishee/synsec/pkg/cwhub"
     7  
     8  	log "github.com/sirupsen/logrus"
     9  
    10  	"github.com/spf13/cobra"
    11  )
    12  
    13  func NewScenariosCmd() *cobra.Command {
    14  	var cmdScenarios = &cobra.Command{
    15  		Use:   "scenarios [action] [config]",
    16  		Short: "Install/Remove/Upgrade/Inspect scenario(s) from hub",
    17  		Example: `ccscli scenarios list [-a]
    18  ccscli scenarios install breakteam/ssh-bf
    19  ccscli scenarios inspect breakteam/ssh-bf
    20  ccscli scenarios upgrade breakteam/ssh-bf
    21  ccscli scenarios remove breakteam/ssh-bf
    22  `,
    23  		Args: cobra.MinimumNArgs(1),
    24  		PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
    25  			if err := csConfig.LoadHub(); err != nil {
    26  				log.Fatalf(err.Error())
    27  			}
    28  			if csConfig.Hub == nil {
    29  				return fmt.Errorf("you must configure cli before interacting with hub")
    30  			}
    31  
    32  			if err := setHubBranch(); err != nil {
    33  				return fmt.Errorf("error while setting hub branch: %s", err)
    34  			}
    35  
    36  			if err := cwhub.GetHubIdx(csConfig.Hub); err != nil {
    37  				log.Fatalf("Failed to get Hub index : %v", err)
    38  				log.Infoln("Run 'sudo ccscli hub update' to get the hub index")
    39  			}
    40  			return nil
    41  		},
    42  		PersistentPostRun: func(cmd *cobra.Command, args []string) {
    43  			if cmd.Name() == "inspect" || cmd.Name() == "list" {
    44  				return
    45  			}
    46  			log.Infof(ReloadMessage())
    47  		},
    48  	}
    49  
    50  	var cmdScenariosInstall = &cobra.Command{
    51  		Use:     "install [config]",
    52  		Short:   "Install given scenario(s)",
    53  		Long:    `Fetch and install given scenario(s) from hub`,
    54  		Example: `ccscli scenarios install synsec/xxx synsec/xyz`,
    55  		Args:    cobra.MinimumNArgs(1),
    56  		Run: func(cmd *cobra.Command, args []string) {
    57  			for _, name := range args {
    58  				InstallItem(name, cwhub.SCENARIOS, forceAction)
    59  			}
    60  		},
    61  	}
    62  	cmdScenariosInstall.PersistentFlags().BoolVarP(&downloadOnly, "download-only", "d", false, "Only download packages, don't enable")
    63  	cmdScenariosInstall.PersistentFlags().BoolVar(&forceAction, "force", false, "Force install : Overwrite tainted and outdated files")
    64  	cmdScenarios.AddCommand(cmdScenariosInstall)
    65  
    66  	var cmdScenariosRemove = &cobra.Command{
    67  		Use:     "remove [config]",
    68  		Short:   "Remove given scenario(s)",
    69  		Long:    `remove given scenario(s)`,
    70  		Example: `ccscli scenarios remove synsec/xxx synsec/xyz`,
    71  		Args:    cobra.MinimumNArgs(1),
    72  		Run: func(cmd *cobra.Command, args []string) {
    73  			if all {
    74  				RemoveMany(cwhub.SCENARIOS, "")
    75  			} else {
    76  				for _, name := range args {
    77  					RemoveMany(cwhub.SCENARIOS, name)
    78  				}
    79  			}
    80  		},
    81  	}
    82  	cmdScenariosRemove.PersistentFlags().BoolVar(&purge, "purge", false, "Delete source file too")
    83  	cmdScenariosRemove.PersistentFlags().BoolVar(&forceAction, "force", false, "Force remove : Remove tainted and outdated files")
    84  	cmdScenariosRemove.PersistentFlags().BoolVar(&all, "all", false, "Delete all the scenarios")
    85  	cmdScenarios.AddCommand(cmdScenariosRemove)
    86  
    87  	var cmdScenariosUpgrade = &cobra.Command{
    88  		Use:     "upgrade [config]",
    89  		Short:   "Upgrade given scenario(s)",
    90  		Long:    `Fetch and Upgrade given scenario(s) from hub`,
    91  		Example: `ccscli scenarios upgrade synsec/xxx synsec/xyz`,
    92  		Run: func(cmd *cobra.Command, args []string) {
    93  			if all {
    94  				UpgradeConfig(cwhub.SCENARIOS, "", forceAction)
    95  			} else {
    96  				if len(args) == 0 {
    97  					log.Fatalf("no target scenario to upgrade")
    98  				}
    99  				for _, name := range args {
   100  					UpgradeConfig(cwhub.SCENARIOS, name, forceAction)
   101  				}
   102  			}
   103  		},
   104  	}
   105  	cmdScenariosUpgrade.PersistentFlags().BoolVarP(&all, "all", "a", false, "Upgrade all the scenarios")
   106  	cmdScenariosUpgrade.PersistentFlags().BoolVar(&forceAction, "force", false, "Force upgrade : Overwrite tainted and outdated files")
   107  	cmdScenarios.AddCommand(cmdScenariosUpgrade)
   108  
   109  	var cmdScenariosInspect = &cobra.Command{
   110  		Use:     "inspect [config]",
   111  		Short:   "Inspect given scenario",
   112  		Long:    `Inspect given scenario`,
   113  		Example: `ccscli scenarios inspect synsec/xxx`,
   114  		Args:    cobra.MinimumNArgs(1),
   115  		Run: func(cmd *cobra.Command, args []string) {
   116  			InspectItem(args[0], cwhub.SCENARIOS)
   117  		},
   118  	}
   119  	cmdScenariosInspect.PersistentFlags().StringVarP(&prometheusURL, "url", "u", "", "Prometheus url")
   120  	cmdScenarios.AddCommand(cmdScenariosInspect)
   121  
   122  	var cmdScenariosList = &cobra.Command{
   123  		Use:   "list [config]",
   124  		Short: "List all scenario(s) or given one",
   125  		Long:  `List all scenario(s) or given one`,
   126  		Example: `ccscli scenarios list
   127  ccscli scenarios list breakteam/xxx`,
   128  		Run: func(cmd *cobra.Command, args []string) {
   129  			ListItem(cwhub.SCENARIOS, args)
   130  		},
   131  	}
   132  	cmdScenariosList.PersistentFlags().BoolVarP(&all, "all", "a", false, "List as well disabled items")
   133  	cmdScenarios.AddCommand(cmdScenariosList)
   134  
   135  	return cmdScenarios
   136  }