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