github.com/superfly/nomad@v0.10.5-fly/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 "quota": func() (cli.Command, error) { 497 return &QuotaCommand{ 498 Meta: meta, 499 }, nil 500 }, 501 502 "quota apply": func() (cli.Command, error) { 503 return &QuotaApplyCommand{ 504 Meta: meta, 505 }, nil 506 }, 507 508 "quota delete": func() (cli.Command, error) { 509 return &QuotaDeleteCommand{ 510 Meta: meta, 511 }, nil 512 }, 513 514 "quota init": func() (cli.Command, error) { 515 return &QuotaInitCommand{ 516 Meta: meta, 517 }, nil 518 }, 519 520 "quota inspect": func() (cli.Command, error) { 521 return &QuotaInspectCommand{ 522 Meta: meta, 523 }, nil 524 }, 525 526 "quota list": func() (cli.Command, error) { 527 return &QuotaListCommand{ 528 Meta: meta, 529 }, nil 530 }, 531 532 "quota status": func() (cli.Command, error) { 533 return &QuotaStatusCommand{ 534 Meta: meta, 535 }, nil 536 }, 537 538 "run": func() (cli.Command, error) { 539 return &JobRunCommand{ 540 Meta: meta, 541 }, nil 542 }, 543 "sentinel": func() (cli.Command, error) { 544 return &SentinelCommand{ 545 Meta: meta, 546 }, nil 547 }, 548 "sentinel list": func() (cli.Command, error) { 549 return &SentinelListCommand{ 550 Meta: meta, 551 }, nil 552 }, 553 "sentinel apply": func() (cli.Command, error) { 554 return &SentinelApplyCommand{ 555 Meta: meta, 556 }, nil 557 }, 558 "sentinel delete": func() (cli.Command, error) { 559 return &SentinelDeleteCommand{ 560 Meta: meta, 561 }, nil 562 }, 563 "sentinel read": func() (cli.Command, error) { 564 return &SentinelReadCommand{ 565 Meta: meta, 566 }, nil 567 }, 568 "server": func() (cli.Command, error) { 569 return &ServerCommand{ 570 Meta: meta, 571 }, nil 572 }, 573 "server force-leave": func() (cli.Command, error) { 574 return &ServerForceLeaveCommand{ 575 Meta: meta, 576 }, nil 577 }, 578 "server join": func() (cli.Command, error) { 579 return &ServerJoinCommand{ 580 Meta: meta, 581 }, nil 582 }, 583 "server members": func() (cli.Command, error) { 584 return &ServerMembersCommand{ 585 Meta: meta, 586 }, nil 587 }, 588 "server-force-leave": func() (cli.Command, error) { 589 return &ServerForceLeaveCommand{ 590 Meta: meta, 591 }, nil 592 }, 593 "server-join": func() (cli.Command, error) { 594 return &ServerJoinCommand{ 595 Meta: meta, 596 }, nil 597 }, 598 "server-members": func() (cli.Command, error) { 599 return &ServerMembersCommand{ 600 Meta: meta, 601 }, nil 602 }, 603 "status": func() (cli.Command, error) { 604 return &StatusCommand{ 605 Meta: meta, 606 }, nil 607 }, 608 "stop": func() (cli.Command, error) { 609 return &JobStopCommand{ 610 Meta: meta, 611 }, nil 612 }, 613 "system": func() (cli.Command, error) { 614 return &SystemCommand{ 615 Meta: meta, 616 }, nil 617 }, 618 "system gc": func() (cli.Command, error) { 619 return &SystemGCCommand{ 620 Meta: meta, 621 }, nil 622 }, 623 "system reconcile": func() (cli.Command, error) { 624 return &SystemReconcileCommand{ 625 Meta: meta, 626 }, nil 627 }, 628 "system reconcile summaries": func() (cli.Command, error) { 629 return &SystemReconcileSummariesCommand{ 630 Meta: meta, 631 }, nil 632 }, 633 "ui": func() (cli.Command, error) { 634 return &UiCommand{ 635 Meta: meta, 636 }, nil 637 }, 638 "validate": func() (cli.Command, error) { 639 return &JobValidateCommand{ 640 Meta: meta, 641 }, nil 642 }, 643 "version": func() (cli.Command, error) { 644 return &VersionCommand{ 645 Version: version.GetVersion(), 646 Ui: meta.Ui, 647 }, nil 648 }, 649 } 650 651 deprecated := map[string]cli.CommandFactory{ 652 "client-config": func() (cli.Command, error) { 653 return &DeprecatedCommand{ 654 Old: "client-config", 655 New: "node config", 656 Meta: meta, 657 Command: &NodeConfigCommand{ 658 Meta: meta, 659 }, 660 }, nil 661 }, 662 663 "keygen": func() (cli.Command, error) { 664 return &DeprecatedCommand{ 665 Old: "keygen", 666 New: "operator keygen", 667 Meta: meta, 668 Command: &OperatorKeygenCommand{ 669 Meta: meta, 670 }, 671 }, nil 672 }, 673 674 "keyring": func() (cli.Command, error) { 675 return &DeprecatedCommand{ 676 Old: "keyring", 677 New: "operator keyring", 678 Meta: meta, 679 Command: &OperatorKeyringCommand{ 680 Meta: meta, 681 }, 682 }, nil 683 }, 684 685 "server-force-leave": func() (cli.Command, error) { 686 return &DeprecatedCommand{ 687 Old: "server-force-leave", 688 New: "server force-leave", 689 Meta: meta, 690 Command: &ServerForceLeaveCommand{ 691 Meta: meta, 692 }, 693 }, nil 694 }, 695 696 "server-join": func() (cli.Command, error) { 697 return &DeprecatedCommand{ 698 Old: "server-join", 699 New: "server join", 700 Meta: meta, 701 Command: &ServerJoinCommand{ 702 Meta: meta, 703 }, 704 }, nil 705 }, 706 707 "server-members": func() (cli.Command, error) { 708 return &DeprecatedCommand{ 709 Old: "server-members", 710 New: "server members", 711 Meta: meta, 712 Command: &ServerMembersCommand{ 713 Meta: meta, 714 }, 715 }, nil 716 }, 717 } 718 719 for k, v := range deprecated { 720 all[k] = v 721 } 722 return all 723 }