github.com/bigcommerce/nomad@v0.9.3-bc/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 list": func() (cli.Command, error) { 134 return &ACLTokenListCommand{ 135 Meta: meta, 136 }, nil 137 }, 138 "acl token self": func() (cli.Command, error) { 139 return &ACLTokenSelfCommand{ 140 Meta: meta, 141 }, nil 142 }, 143 "alloc": func() (cli.Command, error) { 144 return &AllocCommand{ 145 Meta: meta, 146 }, nil 147 }, 148 "alloc exec": func() (cli.Command, error) { 149 return &AllocExecCommand{ 150 Meta: meta, 151 }, nil 152 }, 153 "alloc signal": func() (cli.Command, error) { 154 return &AllocSignalCommand{ 155 Meta: meta, 156 }, nil 157 }, 158 "alloc stop": func() (cli.Command, error) { 159 return &AllocStopCommand{ 160 Meta: meta, 161 }, nil 162 }, 163 "alloc fs": func() (cli.Command, error) { 164 return &AllocFSCommand{ 165 Meta: meta, 166 }, nil 167 }, 168 "alloc logs": func() (cli.Command, error) { 169 return &AllocLogsCommand{ 170 Meta: meta, 171 }, nil 172 }, 173 "alloc restart": func() (cli.Command, error) { 174 return &AllocRestartCommand{ 175 Meta: meta, 176 }, nil 177 }, 178 "alloc status": func() (cli.Command, error) { 179 return &AllocStatusCommand{ 180 Meta: meta, 181 }, nil 182 }, 183 "alloc-status": func() (cli.Command, error) { 184 return &AllocStatusCommand{ 185 Meta: meta, 186 }, nil 187 }, 188 "agent": func() (cli.Command, error) { 189 return &agent.Command{ 190 Version: version.GetVersion(), 191 Ui: agentUi, 192 ShutdownCh: make(chan struct{}), 193 }, nil 194 }, 195 "agent-info": func() (cli.Command, error) { 196 return &AgentInfoCommand{ 197 Meta: meta, 198 }, nil 199 }, 200 "check": func() (cli.Command, error) { 201 return &AgentCheckCommand{ 202 Meta: meta, 203 }, nil 204 }, 205 "deployment": func() (cli.Command, error) { 206 return &DeploymentCommand{ 207 Meta: meta, 208 }, nil 209 }, 210 "deployment fail": func() (cli.Command, error) { 211 return &DeploymentFailCommand{ 212 Meta: meta, 213 }, nil 214 }, 215 "deployment list": func() (cli.Command, error) { 216 return &DeploymentListCommand{ 217 Meta: meta, 218 }, nil 219 }, 220 "deployment pause": func() (cli.Command, error) { 221 return &DeploymentPauseCommand{ 222 Meta: meta, 223 }, nil 224 }, 225 "deployment promote": func() (cli.Command, error) { 226 return &DeploymentPromoteCommand{ 227 Meta: meta, 228 }, nil 229 }, 230 "deployment resume": func() (cli.Command, error) { 231 return &DeploymentResumeCommand{ 232 Meta: meta, 233 }, nil 234 }, 235 "deployment status": func() (cli.Command, error) { 236 return &DeploymentStatusCommand{ 237 Meta: meta, 238 }, nil 239 }, 240 docklog.PluginName: func() (cli.Command, error) { 241 return &DockerLoggerPluginCommand{ 242 Meta: meta, 243 }, nil 244 }, 245 "eval": func() (cli.Command, error) { 246 return &EvalCommand{ 247 Meta: meta, 248 }, nil 249 }, 250 "eval status": func() (cli.Command, error) { 251 return &EvalStatusCommand{ 252 Meta: meta, 253 }, nil 254 }, 255 "eval-status": func() (cli.Command, error) { 256 return &EvalStatusCommand{ 257 Meta: meta, 258 }, nil 259 }, 260 "exec": func() (cli.Command, error) { 261 return &AllocExecCommand{ 262 Meta: meta, 263 }, nil 264 }, 265 "executor": func() (cli.Command, error) { 266 return &ExecutorPluginCommand{ 267 Meta: meta, 268 }, nil 269 }, 270 "fs": func() (cli.Command, error) { 271 return &AllocFSCommand{ 272 Meta: meta, 273 }, nil 274 }, 275 "init": func() (cli.Command, error) { 276 return &JobInitCommand{ 277 Meta: meta, 278 }, nil 279 }, 280 "inspect": func() (cli.Command, error) { 281 return &JobInspectCommand{ 282 Meta: meta, 283 }, nil 284 }, 285 "keygen": func() (cli.Command, error) { 286 return &OperatorKeygenCommand{ 287 Meta: meta, 288 }, nil 289 }, 290 "keyring": func() (cli.Command, error) { 291 return &OperatorKeyringCommand{ 292 Meta: meta, 293 }, nil 294 }, 295 "job": func() (cli.Command, error) { 296 return &JobCommand{ 297 Meta: meta, 298 }, nil 299 }, 300 "job deployments": func() (cli.Command, error) { 301 return &JobDeploymentsCommand{ 302 Meta: meta, 303 }, nil 304 }, 305 "job dispatch": func() (cli.Command, error) { 306 return &JobDispatchCommand{ 307 Meta: meta, 308 }, nil 309 }, 310 "job eval": func() (cli.Command, error) { 311 return &JobEvalCommand{ 312 Meta: meta, 313 }, nil 314 }, 315 "job history": func() (cli.Command, error) { 316 return &JobHistoryCommand{ 317 Meta: meta, 318 }, nil 319 }, 320 "job init": func() (cli.Command, error) { 321 return &JobInitCommand{ 322 Meta: meta, 323 }, nil 324 }, 325 "job inspect": func() (cli.Command, error) { 326 return &JobInspectCommand{ 327 Meta: meta, 328 }, nil 329 }, 330 "job periodic": func() (cli.Command, error) { 331 return &JobPeriodicCommand{ 332 Meta: meta, 333 }, nil 334 }, 335 "job periodic force": func() (cli.Command, error) { 336 return &JobPeriodicForceCommand{ 337 Meta: meta, 338 }, nil 339 }, 340 "job plan": func() (cli.Command, error) { 341 return &JobPlanCommand{ 342 Meta: meta, 343 }, nil 344 }, 345 "job promote": func() (cli.Command, error) { 346 return &JobPromoteCommand{ 347 Meta: meta, 348 }, nil 349 }, 350 "job revert": func() (cli.Command, error) { 351 return &JobRevertCommand{ 352 Meta: meta, 353 }, nil 354 }, 355 "job run": func() (cli.Command, error) { 356 return &JobRunCommand{ 357 Meta: meta, 358 }, nil 359 }, 360 "job status": func() (cli.Command, error) { 361 return &JobStatusCommand{ 362 Meta: meta, 363 }, nil 364 }, 365 "job stop": func() (cli.Command, error) { 366 return &JobStopCommand{ 367 Meta: meta, 368 }, nil 369 }, 370 "job validate": func() (cli.Command, error) { 371 return &JobValidateCommand{ 372 Meta: meta, 373 }, nil 374 }, 375 "logmon": func() (cli.Command, error) { 376 return &LogMonPluginCommand{ 377 Meta: meta, 378 }, nil 379 }, 380 "logs": func() (cli.Command, error) { 381 return &AllocLogsCommand{ 382 Meta: meta, 383 }, nil 384 }, 385 "namespace": func() (cli.Command, error) { 386 return &NamespaceCommand{ 387 Meta: meta, 388 }, nil 389 }, 390 "namespace apply": func() (cli.Command, error) { 391 return &NamespaceApplyCommand{ 392 Meta: meta, 393 }, nil 394 }, 395 "namespace delete": func() (cli.Command, error) { 396 return &NamespaceDeleteCommand{ 397 Meta: meta, 398 }, nil 399 }, 400 "namespace inspect": func() (cli.Command, error) { 401 return &NamespaceInspectCommand{ 402 Meta: meta, 403 }, nil 404 }, 405 "namespace list": func() (cli.Command, error) { 406 return &NamespaceListCommand{ 407 Meta: meta, 408 }, nil 409 }, 410 "namespace status": func() (cli.Command, error) { 411 return &NamespaceStatusCommand{ 412 Meta: meta, 413 }, nil 414 }, 415 "node": func() (cli.Command, error) { 416 return &NodeCommand{ 417 Meta: meta, 418 }, nil 419 }, 420 "node config": func() (cli.Command, error) { 421 return &NodeConfigCommand{ 422 Meta: meta, 423 }, nil 424 }, 425 "node-drain": func() (cli.Command, error) { 426 return &NodeDrainCommand{ 427 Meta: meta, 428 }, nil 429 }, 430 "node drain": func() (cli.Command, error) { 431 return &NodeDrainCommand{ 432 Meta: meta, 433 }, nil 434 }, 435 "node eligibility": func() (cli.Command, error) { 436 return &NodeEligibilityCommand{ 437 Meta: meta, 438 }, nil 439 }, 440 "node-status": func() (cli.Command, error) { 441 return &NodeStatusCommand{ 442 Meta: meta, 443 }, nil 444 }, 445 "node status": func() (cli.Command, error) { 446 return &NodeStatusCommand{ 447 Meta: meta, 448 }, nil 449 }, 450 "operator": func() (cli.Command, error) { 451 return &OperatorCommand{ 452 Meta: meta, 453 }, nil 454 }, 455 456 "operator autopilot": func() (cli.Command, error) { 457 return &OperatorAutopilotCommand{ 458 Meta: meta, 459 }, nil 460 }, 461 462 "operator autopilot get-config": func() (cli.Command, error) { 463 return &OperatorAutopilotGetCommand{ 464 Meta: meta, 465 }, nil 466 }, 467 468 "operator autopilot set-config": func() (cli.Command, error) { 469 return &OperatorAutopilotSetCommand{ 470 Meta: meta, 471 }, nil 472 }, 473 "operator keygen": func() (cli.Command, error) { 474 return &OperatorKeygenCommand{ 475 Meta: meta, 476 }, nil 477 }, 478 "operator keyring": func() (cli.Command, error) { 479 return &OperatorKeyringCommand{ 480 Meta: meta, 481 }, nil 482 }, 483 "operator raft": func() (cli.Command, error) { 484 return &OperatorRaftCommand{ 485 Meta: meta, 486 }, nil 487 }, 488 489 "operator raft list-peers": func() (cli.Command, error) { 490 return &OperatorRaftListCommand{ 491 Meta: meta, 492 }, nil 493 }, 494 495 "operator raft remove-peer": func() (cli.Command, error) { 496 return &OperatorRaftRemoveCommand{ 497 Meta: meta, 498 }, nil 499 }, 500 501 "plan": func() (cli.Command, error) { 502 return &JobPlanCommand{ 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 "ui": func() (cli.Command, error) { 625 return &UiCommand{ 626 Meta: meta, 627 }, nil 628 }, 629 "validate": func() (cli.Command, error) { 630 return &JobValidateCommand{ 631 Meta: meta, 632 }, nil 633 }, 634 "version": func() (cli.Command, error) { 635 return &VersionCommand{ 636 Version: version.GetVersion(), 637 Ui: meta.Ui, 638 }, nil 639 }, 640 } 641 642 deprecated := map[string]cli.CommandFactory{ 643 "client-config": func() (cli.Command, error) { 644 return &DeprecatedCommand{ 645 Old: "client-config", 646 New: "node config", 647 Meta: meta, 648 Command: &NodeConfigCommand{ 649 Meta: meta, 650 }, 651 }, nil 652 }, 653 654 "keygen": func() (cli.Command, error) { 655 return &DeprecatedCommand{ 656 Old: "keygen", 657 New: "operator keygen", 658 Meta: meta, 659 Command: &OperatorKeygenCommand{ 660 Meta: meta, 661 }, 662 }, nil 663 }, 664 665 "keyring": func() (cli.Command, error) { 666 return &DeprecatedCommand{ 667 Old: "keyring", 668 New: "operator keyring", 669 Meta: meta, 670 Command: &OperatorKeyringCommand{ 671 Meta: meta, 672 }, 673 }, nil 674 }, 675 676 "server-force-leave": func() (cli.Command, error) { 677 return &DeprecatedCommand{ 678 Old: "server-force-leave", 679 New: "server force-leave", 680 Meta: meta, 681 Command: &ServerForceLeaveCommand{ 682 Meta: meta, 683 }, 684 }, nil 685 }, 686 687 "server-join": func() (cli.Command, error) { 688 return &DeprecatedCommand{ 689 Old: "server-join", 690 New: "server join", 691 Meta: meta, 692 Command: &ServerJoinCommand{ 693 Meta: meta, 694 }, 695 }, nil 696 }, 697 698 "server-members": func() (cli.Command, error) { 699 return &DeprecatedCommand{ 700 Old: "server-members", 701 New: "server members", 702 Meta: meta, 703 Command: &ServerMembersCommand{ 704 Meta: meta, 705 }, 706 }, nil 707 }, 708 } 709 710 for k, v := range deprecated { 711 all[k] = v 712 } 713 return all 714 }