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 }