github.com/ThomasObenaus/nomad@v0.11.1/command/commands.go (about)

     1  package command
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  
     7  	"github.com/hashicorp/nomad/command/agent"
     8  	"github.com/hashicorp/nomad/version"
     9  	colorable "github.com/mattn/go-colorable"
    10  	"github.com/mitchellh/cli"
    11  )
    12  
    13  const (
    14  	// EnvNomadCLINoColor is an env var that toggles colored UI output.
    15  	EnvNomadCLINoColor = `NOMAD_CLI_NO_COLOR`
    16  )
    17  
    18  // DeprecatedCommand is a command that wraps an existing command and prints a
    19  // deprecation notice and points the user to the new command. Deprecated
    20  // commands are always hidden from help output.
    21  type DeprecatedCommand struct {
    22  	cli.Command
    23  	Meta
    24  
    25  	// Old is the old command name, New is the new command name.
    26  	Old, New string
    27  }
    28  
    29  // Help wraps the embedded Help command and prints a warning about deprecations.
    30  func (c *DeprecatedCommand) Help() string {
    31  	c.warn()
    32  	return c.Command.Help()
    33  }
    34  
    35  // Run wraps the embedded Run command and prints a warning about deprecation.
    36  func (c *DeprecatedCommand) Run(args []string) int {
    37  	c.warn()
    38  	return c.Command.Run(args)
    39  }
    40  
    41  func (c *DeprecatedCommand) warn() {
    42  	c.Ui.Warn(wrapAtLength(fmt.Sprintf(
    43  		"WARNING! The \"nomad %s\" command is deprecated. Please use \"nomad %s\" "+
    44  			"instead. This command will be removed in Nomad 0.10 (or later).",
    45  		c.Old,
    46  		c.New)))
    47  	c.Ui.Warn("")
    48  }
    49  
    50  // NamedCommand is a interface to denote a commmand's name.
    51  type NamedCommand interface {
    52  	Name() string
    53  }
    54  
    55  // Commands returns the mapping of CLI commands for Nomad. The meta
    56  // parameter lets you set meta options for all commands.
    57  func Commands(metaPtr *Meta, agentUi cli.Ui) map[string]cli.CommandFactory {
    58  	if metaPtr == nil {
    59  		metaPtr = new(Meta)
    60  	}
    61  
    62  	meta := *metaPtr
    63  	if meta.Ui == nil {
    64  		meta.Ui = &cli.BasicUi{
    65  			Reader:      os.Stdin,
    66  			Writer:      colorable.NewColorableStdout(),
    67  			ErrorWriter: colorable.NewColorableStderr(),
    68  		}
    69  	}
    70  
    71  	all := map[string]cli.CommandFactory{
    72  		"acl": func() (cli.Command, error) {
    73  			return &ACLCommand{
    74  				Meta: meta,
    75  			}, nil
    76  		},
    77  		"acl bootstrap": func() (cli.Command, error) {
    78  			return &ACLBootstrapCommand{
    79  				Meta: meta,
    80  			}, nil
    81  		},
    82  		"acl policy": func() (cli.Command, error) {
    83  			return &ACLPolicyCommand{
    84  				Meta: meta,
    85  			}, nil
    86  		},
    87  		"acl policy apply": func() (cli.Command, error) {
    88  			return &ACLPolicyApplyCommand{
    89  				Meta: meta,
    90  			}, nil
    91  		},
    92  		"acl policy delete": func() (cli.Command, error) {
    93  			return &ACLPolicyDeleteCommand{
    94  				Meta: meta,
    95  			}, nil
    96  		},
    97  		"acl policy info": func() (cli.Command, error) {
    98  			return &ACLPolicyInfoCommand{
    99  				Meta: meta,
   100  			}, nil
   101  		},
   102  		"acl policy list": func() (cli.Command, error) {
   103  			return &ACLPolicyListCommand{
   104  				Meta: meta,
   105  			}, nil
   106  		},
   107  		"acl token": func() (cli.Command, error) {
   108  			return &ACLTokenCommand{
   109  				Meta: meta,
   110  			}, nil
   111  		},
   112  		"acl token create": func() (cli.Command, error) {
   113  			return &ACLTokenCreateCommand{
   114  				Meta: meta,
   115  			}, nil
   116  		},
   117  		"acl token update": func() (cli.Command, error) {
   118  			return &ACLTokenUpdateCommand{
   119  				Meta: meta,
   120  			}, nil
   121  		},
   122  		"acl token delete": func() (cli.Command, error) {
   123  			return &ACLTokenDeleteCommand{
   124  				Meta: meta,
   125  			}, nil
   126  		},
   127  		"acl token info": func() (cli.Command, error) {
   128  			return &ACLTokenInfoCommand{
   129  				Meta: meta,
   130  			}, nil
   131  		},
   132  		"acl token list": func() (cli.Command, error) {
   133  			return &ACLTokenListCommand{
   134  				Meta: meta,
   135  			}, nil
   136  		},
   137  		"acl token self": func() (cli.Command, error) {
   138  			return &ACLTokenSelfCommand{
   139  				Meta: meta,
   140  			}, nil
   141  		},
   142  		"alloc": func() (cli.Command, error) {
   143  			return &AllocCommand{
   144  				Meta: meta,
   145  			}, nil
   146  		},
   147  		"alloc exec": func() (cli.Command, error) {
   148  			return &AllocExecCommand{
   149  				Meta: meta,
   150  			}, nil
   151  		},
   152  		"alloc signal": func() (cli.Command, error) {
   153  			return &AllocSignalCommand{
   154  				Meta: meta,
   155  			}, nil
   156  		},
   157  		"alloc stop": func() (cli.Command, error) {
   158  			return &AllocStopCommand{
   159  				Meta: meta,
   160  			}, nil
   161  		},
   162  		"alloc fs": func() (cli.Command, error) {
   163  			return &AllocFSCommand{
   164  				Meta: meta,
   165  			}, nil
   166  		},
   167  		"alloc logs": func() (cli.Command, error) {
   168  			return &AllocLogsCommand{
   169  				Meta: meta,
   170  			}, nil
   171  		},
   172  		"alloc restart": func() (cli.Command, error) {
   173  			return &AllocRestartCommand{
   174  				Meta: meta,
   175  			}, nil
   176  		},
   177  		"alloc status": func() (cli.Command, error) {
   178  			return &AllocStatusCommand{
   179  				Meta: meta,
   180  			}, nil
   181  		},
   182  		"alloc-status": func() (cli.Command, error) {
   183  			return &AllocStatusCommand{
   184  				Meta: meta,
   185  			}, nil
   186  		},
   187  		"agent": func() (cli.Command, error) {
   188  			return &agent.Command{
   189  				Version:    version.GetVersion(),
   190  				Ui:         agentUi,
   191  				ShutdownCh: make(chan struct{}),
   192  			}, nil
   193  		},
   194  		"agent-info": func() (cli.Command, error) {
   195  			return &AgentInfoCommand{
   196  				Meta: meta,
   197  			}, nil
   198  		},
   199  		"check": func() (cli.Command, error) {
   200  			return &AgentCheckCommand{
   201  				Meta: meta,
   202  			}, nil
   203  		},
   204  		"deployment": func() (cli.Command, error) {
   205  			return &DeploymentCommand{
   206  				Meta: meta,
   207  			}, nil
   208  		},
   209  		"deployment fail": func() (cli.Command, error) {
   210  			return &DeploymentFailCommand{
   211  				Meta: meta,
   212  			}, nil
   213  		},
   214  		"deployment list": func() (cli.Command, error) {
   215  			return &DeploymentListCommand{
   216  				Meta: meta,
   217  			}, nil
   218  		},
   219  		"deployment pause": func() (cli.Command, error) {
   220  			return &DeploymentPauseCommand{
   221  				Meta: meta,
   222  			}, nil
   223  		},
   224  		"deployment promote": func() (cli.Command, error) {
   225  			return &DeploymentPromoteCommand{
   226  				Meta: meta,
   227  			}, nil
   228  		},
   229  		"deployment resume": func() (cli.Command, error) {
   230  			return &DeploymentResumeCommand{
   231  				Meta: meta,
   232  			}, nil
   233  		},
   234  		"deployment status": func() (cli.Command, error) {
   235  			return &DeploymentStatusCommand{
   236  				Meta: meta,
   237  			}, nil
   238  		},
   239  		"eval": func() (cli.Command, error) {
   240  			return &EvalCommand{
   241  				Meta: meta,
   242  			}, nil
   243  		},
   244  		"eval status": func() (cli.Command, error) {
   245  			return &EvalStatusCommand{
   246  				Meta: meta,
   247  			}, nil
   248  		},
   249  		"eval-status": func() (cli.Command, error) {
   250  			return &EvalStatusCommand{
   251  				Meta: meta,
   252  			}, nil
   253  		},
   254  		"exec": func() (cli.Command, error) {
   255  			return &AllocExecCommand{
   256  				Meta: meta,
   257  			}, nil
   258  		},
   259  		"fs": func() (cli.Command, error) {
   260  			return &AllocFSCommand{
   261  				Meta: meta,
   262  			}, nil
   263  		},
   264  		"init": func() (cli.Command, error) {
   265  			return &JobInitCommand{
   266  				Meta: meta,
   267  			}, nil
   268  		},
   269  		"inspect": func() (cli.Command, error) {
   270  			return &JobInspectCommand{
   271  				Meta: meta,
   272  			}, nil
   273  		},
   274  		"keygen": func() (cli.Command, error) {
   275  			return &OperatorKeygenCommand{
   276  				Meta: meta,
   277  			}, nil
   278  		},
   279  		"keyring": func() (cli.Command, error) {
   280  			return &OperatorKeyringCommand{
   281  				Meta: meta,
   282  			}, nil
   283  		},
   284  		"job": func() (cli.Command, error) {
   285  			return &JobCommand{
   286  				Meta: meta,
   287  			}, nil
   288  		},
   289  		"job deployments": func() (cli.Command, error) {
   290  			return &JobDeploymentsCommand{
   291  				Meta: meta,
   292  			}, nil
   293  		},
   294  		"job dispatch": func() (cli.Command, error) {
   295  			return &JobDispatchCommand{
   296  				Meta: meta,
   297  			}, nil
   298  		},
   299  		"job eval": func() (cli.Command, error) {
   300  			return &JobEvalCommand{
   301  				Meta: meta,
   302  			}, nil
   303  		},
   304  		"job history": func() (cli.Command, error) {
   305  			return &JobHistoryCommand{
   306  				Meta: meta,
   307  			}, nil
   308  		},
   309  		"job init": func() (cli.Command, error) {
   310  			return &JobInitCommand{
   311  				Meta: meta,
   312  			}, nil
   313  		},
   314  		"job inspect": func() (cli.Command, error) {
   315  			return &JobInspectCommand{
   316  				Meta: meta,
   317  			}, nil
   318  		},
   319  		"job periodic": func() (cli.Command, error) {
   320  			return &JobPeriodicCommand{
   321  				Meta: meta,
   322  			}, nil
   323  		},
   324  		"job periodic force": func() (cli.Command, error) {
   325  			return &JobPeriodicForceCommand{
   326  				Meta: meta,
   327  			}, nil
   328  		},
   329  		"job plan": func() (cli.Command, error) {
   330  			return &JobPlanCommand{
   331  				Meta: meta,
   332  			}, nil
   333  		},
   334  		"job promote": func() (cli.Command, error) {
   335  			return &JobPromoteCommand{
   336  				Meta: meta,
   337  			}, nil
   338  		},
   339  		"job revert": func() (cli.Command, error) {
   340  			return &JobRevertCommand{
   341  				Meta: meta,
   342  			}, nil
   343  		},
   344  		"job run": func() (cli.Command, error) {
   345  			return &JobRunCommand{
   346  				Meta: meta,
   347  			}, nil
   348  		},
   349  		"job status": func() (cli.Command, error) {
   350  			return &JobStatusCommand{
   351  				Meta: meta,
   352  			}, nil
   353  		},
   354  		"job stop": func() (cli.Command, error) {
   355  			return &JobStopCommand{
   356  				Meta: meta,
   357  			}, nil
   358  		},
   359  		"job validate": func() (cli.Command, error) {
   360  			return &JobValidateCommand{
   361  				Meta: meta,
   362  			}, nil
   363  		},
   364  		"logs": func() (cli.Command, error) {
   365  			return &AllocLogsCommand{
   366  				Meta: meta,
   367  			}, nil
   368  		},
   369  		"monitor": func() (cli.Command, error) {
   370  			return &MonitorCommand{
   371  				Meta: meta,
   372  			}, nil
   373  		},
   374  		"namespace": func() (cli.Command, error) {
   375  			return &NamespaceCommand{
   376  				Meta: meta,
   377  			}, nil
   378  		},
   379  		"namespace apply": func() (cli.Command, error) {
   380  			return &NamespaceApplyCommand{
   381  				Meta: meta,
   382  			}, nil
   383  		},
   384  		"namespace delete": func() (cli.Command, error) {
   385  			return &NamespaceDeleteCommand{
   386  				Meta: meta,
   387  			}, nil
   388  		},
   389  		"namespace inspect": func() (cli.Command, error) {
   390  			return &NamespaceInspectCommand{
   391  				Meta: meta,
   392  			}, nil
   393  		},
   394  		"namespace list": func() (cli.Command, error) {
   395  			return &NamespaceListCommand{
   396  				Meta: meta,
   397  			}, nil
   398  		},
   399  		"namespace status": func() (cli.Command, error) {
   400  			return &NamespaceStatusCommand{
   401  				Meta: meta,
   402  			}, nil
   403  		},
   404  		"node": func() (cli.Command, error) {
   405  			return &NodeCommand{
   406  				Meta: meta,
   407  			}, nil
   408  		},
   409  		"node config": func() (cli.Command, error) {
   410  			return &NodeConfigCommand{
   411  				Meta: meta,
   412  			}, nil
   413  		},
   414  		"node-drain": func() (cli.Command, error) {
   415  			return &NodeDrainCommand{
   416  				Meta: meta,
   417  			}, nil
   418  		},
   419  		"node drain": func() (cli.Command, error) {
   420  			return &NodeDrainCommand{
   421  				Meta: meta,
   422  			}, nil
   423  		},
   424  		"node eligibility": func() (cli.Command, error) {
   425  			return &NodeEligibilityCommand{
   426  				Meta: meta,
   427  			}, nil
   428  		},
   429  		"node-status": func() (cli.Command, error) {
   430  			return &NodeStatusCommand{
   431  				Meta: meta,
   432  			}, nil
   433  		},
   434  		"node status": func() (cli.Command, error) {
   435  			return &NodeStatusCommand{
   436  				Meta: meta,
   437  			}, nil
   438  		},
   439  		"operator": func() (cli.Command, error) {
   440  			return &OperatorCommand{
   441  				Meta: meta,
   442  			}, nil
   443  		},
   444  
   445  		"operator autopilot": func() (cli.Command, error) {
   446  			return &OperatorAutopilotCommand{
   447  				Meta: meta,
   448  			}, nil
   449  		},
   450  
   451  		"operator autopilot get-config": func() (cli.Command, error) {
   452  			return &OperatorAutopilotGetCommand{
   453  				Meta: meta,
   454  			}, nil
   455  		},
   456  
   457  		"operator autopilot set-config": func() (cli.Command, error) {
   458  			return &OperatorAutopilotSetCommand{
   459  				Meta: meta,
   460  			}, nil
   461  		},
   462  		"operator keygen": func() (cli.Command, error) {
   463  			return &OperatorKeygenCommand{
   464  				Meta: meta,
   465  			}, nil
   466  		},
   467  		"operator keyring": func() (cli.Command, error) {
   468  			return &OperatorKeyringCommand{
   469  				Meta: meta,
   470  			}, nil
   471  		},
   472  		"operator raft": func() (cli.Command, error) {
   473  			return &OperatorRaftCommand{
   474  				Meta: meta,
   475  			}, nil
   476  		},
   477  
   478  		"operator raft list-peers": func() (cli.Command, error) {
   479  			return &OperatorRaftListCommand{
   480  				Meta: meta,
   481  			}, nil
   482  		},
   483  
   484  		"operator raft remove-peer": func() (cli.Command, error) {
   485  			return &OperatorRaftRemoveCommand{
   486  				Meta: meta,
   487  			}, nil
   488  		},
   489  
   490  		"plan": func() (cli.Command, error) {
   491  			return &JobPlanCommand{
   492  				Meta: meta,
   493  			}, nil
   494  		},
   495  
   496  		"plugin": func() (cli.Command, error) {
   497  			return &PluginCommand{
   498  				Meta: meta,
   499  			}, nil
   500  		},
   501  		"plugin status": func() (cli.Command, error) {
   502  			return &PluginStatusCommand{
   503  				Meta: meta,
   504  			}, nil
   505  		},
   506  
   507  		"quota": func() (cli.Command, error) {
   508  			return &QuotaCommand{
   509  				Meta: meta,
   510  			}, nil
   511  		},
   512  
   513  		"quota apply": func() (cli.Command, error) {
   514  			return &QuotaApplyCommand{
   515  				Meta: meta,
   516  			}, nil
   517  		},
   518  
   519  		"quota delete": func() (cli.Command, error) {
   520  			return &QuotaDeleteCommand{
   521  				Meta: meta,
   522  			}, nil
   523  		},
   524  
   525  		"quota init": func() (cli.Command, error) {
   526  			return &QuotaInitCommand{
   527  				Meta: meta,
   528  			}, nil
   529  		},
   530  
   531  		"quota inspect": func() (cli.Command, error) {
   532  			return &QuotaInspectCommand{
   533  				Meta: meta,
   534  			}, nil
   535  		},
   536  
   537  		"quota list": func() (cli.Command, error) {
   538  			return &QuotaListCommand{
   539  				Meta: meta,
   540  			}, nil
   541  		},
   542  
   543  		"quota status": func() (cli.Command, error) {
   544  			return &QuotaStatusCommand{
   545  				Meta: meta,
   546  			}, nil
   547  		},
   548  
   549  		"run": func() (cli.Command, error) {
   550  			return &JobRunCommand{
   551  				Meta: meta,
   552  			}, nil
   553  		},
   554  		"sentinel": func() (cli.Command, error) {
   555  			return &SentinelCommand{
   556  				Meta: meta,
   557  			}, nil
   558  		},
   559  		"sentinel list": func() (cli.Command, error) {
   560  			return &SentinelListCommand{
   561  				Meta: meta,
   562  			}, nil
   563  		},
   564  		"sentinel apply": func() (cli.Command, error) {
   565  			return &SentinelApplyCommand{
   566  				Meta: meta,
   567  			}, nil
   568  		},
   569  		"sentinel delete": func() (cli.Command, error) {
   570  			return &SentinelDeleteCommand{
   571  				Meta: meta,
   572  			}, nil
   573  		},
   574  		"sentinel read": func() (cli.Command, error) {
   575  			return &SentinelReadCommand{
   576  				Meta: meta,
   577  			}, nil
   578  		},
   579  		"server": func() (cli.Command, error) {
   580  			return &ServerCommand{
   581  				Meta: meta,
   582  			}, nil
   583  		},
   584  		"server force-leave": func() (cli.Command, error) {
   585  			return &ServerForceLeaveCommand{
   586  				Meta: meta,
   587  			}, nil
   588  		},
   589  		"server join": func() (cli.Command, error) {
   590  			return &ServerJoinCommand{
   591  				Meta: meta,
   592  			}, nil
   593  		},
   594  		"server members": func() (cli.Command, error) {
   595  			return &ServerMembersCommand{
   596  				Meta: meta,
   597  			}, nil
   598  		},
   599  		"server-force-leave": func() (cli.Command, error) {
   600  			return &ServerForceLeaveCommand{
   601  				Meta: meta,
   602  			}, nil
   603  		},
   604  		"server-join": func() (cli.Command, error) {
   605  			return &ServerJoinCommand{
   606  				Meta: meta,
   607  			}, nil
   608  		},
   609  		"server-members": func() (cli.Command, error) {
   610  			return &ServerMembersCommand{
   611  				Meta: meta,
   612  			}, nil
   613  		},
   614  		"status": func() (cli.Command, error) {
   615  			return &StatusCommand{
   616  				Meta: meta,
   617  			}, nil
   618  		},
   619  		"stop": func() (cli.Command, error) {
   620  			return &JobStopCommand{
   621  				Meta: meta,
   622  			}, nil
   623  		},
   624  		"system": func() (cli.Command, error) {
   625  			return &SystemCommand{
   626  				Meta: meta,
   627  			}, nil
   628  		},
   629  		"system gc": func() (cli.Command, error) {
   630  			return &SystemGCCommand{
   631  				Meta: meta,
   632  			}, nil
   633  		},
   634  		"system reconcile": func() (cli.Command, error) {
   635  			return &SystemReconcileCommand{
   636  				Meta: meta,
   637  			}, nil
   638  		},
   639  		"system reconcile summaries": func() (cli.Command, error) {
   640  			return &SystemReconcileSummariesCommand{
   641  				Meta: meta,
   642  			}, nil
   643  		},
   644  		"ui": func() (cli.Command, error) {
   645  			return &UiCommand{
   646  				Meta: meta,
   647  			}, nil
   648  		},
   649  		"validate": func() (cli.Command, error) {
   650  			return &JobValidateCommand{
   651  				Meta: meta,
   652  			}, nil
   653  		},
   654  		"version": func() (cli.Command, error) {
   655  			return &VersionCommand{
   656  				Version: version.GetVersion(),
   657  				Ui:      meta.Ui,
   658  			}, nil
   659  		},
   660  		"volume": func() (cli.Command, error) {
   661  			return &VolumeCommand{
   662  				Meta: meta,
   663  			}, nil
   664  		},
   665  		"volume status": func() (cli.Command, error) {
   666  			return &VolumeStatusCommand{
   667  				Meta: meta,
   668  			}, nil
   669  		},
   670  		"volume register": func() (cli.Command, error) {
   671  			return &VolumeRegisterCommand{
   672  				Meta: meta,
   673  			}, nil
   674  		},
   675  		"volume deregister": func() (cli.Command, error) {
   676  			return &VolumeDeregisterCommand{
   677  				Meta: meta,
   678  			}, nil
   679  		},
   680  	}
   681  
   682  	deprecated := map[string]cli.CommandFactory{
   683  		"client-config": func() (cli.Command, error) {
   684  			return &DeprecatedCommand{
   685  				Old:  "client-config",
   686  				New:  "node config",
   687  				Meta: meta,
   688  				Command: &NodeConfigCommand{
   689  					Meta: meta,
   690  				},
   691  			}, nil
   692  		},
   693  
   694  		"keygen": func() (cli.Command, error) {
   695  			return &DeprecatedCommand{
   696  				Old:  "keygen",
   697  				New:  "operator keygen",
   698  				Meta: meta,
   699  				Command: &OperatorKeygenCommand{
   700  					Meta: meta,
   701  				},
   702  			}, nil
   703  		},
   704  
   705  		"keyring": func() (cli.Command, error) {
   706  			return &DeprecatedCommand{
   707  				Old:  "keyring",
   708  				New:  "operator keyring",
   709  				Meta: meta,
   710  				Command: &OperatorKeyringCommand{
   711  					Meta: meta,
   712  				},
   713  			}, nil
   714  		},
   715  
   716  		"server-force-leave": func() (cli.Command, error) {
   717  			return &DeprecatedCommand{
   718  				Old:  "server-force-leave",
   719  				New:  "server force-leave",
   720  				Meta: meta,
   721  				Command: &ServerForceLeaveCommand{
   722  					Meta: meta,
   723  				},
   724  			}, nil
   725  		},
   726  
   727  		"server-join": func() (cli.Command, error) {
   728  			return &DeprecatedCommand{
   729  				Old:  "server-join",
   730  				New:  "server join",
   731  				Meta: meta,
   732  				Command: &ServerJoinCommand{
   733  					Meta: meta,
   734  				},
   735  			}, nil
   736  		},
   737  
   738  		"server-members": func() (cli.Command, error) {
   739  			return &DeprecatedCommand{
   740  				Old:  "server-members",
   741  				New:  "server members",
   742  				Meta: meta,
   743  				Command: &ServerMembersCommand{
   744  					Meta: meta,
   745  				},
   746  			}, nil
   747  		},
   748  	}
   749  
   750  	for k, v := range deprecated {
   751  		all[k] = v
   752  	}
   753  	return all
   754  }