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