Merge pull request #4239 from hashicorp/f-short-init
command: init -short flag
This commit is contained in:
commit
468baf9823
|
@ -26,6 +26,11 @@ Alias: nomad init
|
|||
|
||||
Creates an example job file that can be used as a starting
|
||||
point to customize further.
|
||||
|
||||
Init Options:
|
||||
|
||||
-short
|
||||
If the short flag is set, a minimal jobspec without comments is emitted.
|
||||
`
|
||||
return strings.TrimSpace(helpText)
|
||||
}
|
||||
|
@ -37,8 +42,18 @@ func (c *JobInitCommand) Synopsis() string {
|
|||
func (c *JobInitCommand) Name() string { return "job init" }
|
||||
|
||||
func (c *JobInitCommand) Run(args []string) int {
|
||||
var short bool
|
||||
|
||||
flags := c.Meta.FlagSet(c.Name(), FlagSetClient)
|
||||
flags.Usage = func() { c.Ui.Output(c.Help()) }
|
||||
flags.BoolVar(&short, "short", false, "")
|
||||
|
||||
if err := flags.Parse(args); err != nil {
|
||||
return 1
|
||||
}
|
||||
|
||||
// Check for misuse
|
||||
if len(args) != 0 {
|
||||
if len(flags.Args()) != 0 {
|
||||
c.Ui.Error("This command takes no arguments")
|
||||
c.Ui.Error(commandErrorText(c))
|
||||
return 1
|
||||
|
@ -55,8 +70,16 @@ func (c *JobInitCommand) Run(args []string) int {
|
|||
return 1
|
||||
}
|
||||
|
||||
var jobSpec []byte
|
||||
|
||||
if short {
|
||||
jobSpec = []byte(shortJob)
|
||||
} else {
|
||||
jobSpec = []byte(defaultJob)
|
||||
}
|
||||
|
||||
// Write out the example
|
||||
err = ioutil.WriteFile(DefaultInitName, []byte(defaultJob), 0660)
|
||||
err = ioutil.WriteFile(DefaultInitName, jobSpec, 0660)
|
||||
if err != nil {
|
||||
c.Ui.Error(fmt.Sprintf("Failed to write '%s': %v", DefaultInitName, err))
|
||||
return 1
|
||||
|
@ -67,6 +90,50 @@ func (c *JobInitCommand) Run(args []string) int {
|
|||
return 0
|
||||
}
|
||||
|
||||
var shortJob = strings.TrimSpace(`
|
||||
job "example" {
|
||||
datacenters = ["dc1"]
|
||||
|
||||
group "cache" {
|
||||
ephemeral_disk {
|
||||
size = 300
|
||||
}
|
||||
|
||||
task "redis" {
|
||||
driver = "docker"
|
||||
|
||||
config {
|
||||
image = "redis:3.2"
|
||||
port_map {
|
||||
db = 6379
|
||||
}
|
||||
}
|
||||
|
||||
resources {
|
||||
cpu = 500 # 500 MHz
|
||||
memory = 256 # 256MB
|
||||
network {
|
||||
mbits = 10
|
||||
port "db" {}
|
||||
}
|
||||
}
|
||||
|
||||
service {
|
||||
name = "redis-cache"
|
||||
tags = ["global", "cache"]
|
||||
port = "db"
|
||||
check {
|
||||
name = "alive"
|
||||
type = "tcp"
|
||||
interval = "10s"
|
||||
timeout = "2s"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`)
|
||||
|
||||
var defaultJob = strings.TrimSpace(`
|
||||
# There can only be a single job definition per file. This job is named
|
||||
# "example" so it will create a job with the ID and Name "example".
|
||||
|
|
|
@ -7,6 +7,7 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/mitchellh/cli"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestInitCommand_Implements(t *testing.T) {
|
||||
|
@ -57,6 +58,15 @@ func TestInitCommand_Run(t *testing.T) {
|
|||
t.Fatalf("unexpected file content\n\n%s", string(content))
|
||||
}
|
||||
|
||||
// Works with -short flag
|
||||
os.Remove(DefaultInitName)
|
||||
if code := cmd.Run([]string{"-short"}); code != 0 {
|
||||
require.Zero(t, code, "unexpected exit code: %d", code)
|
||||
}
|
||||
content, err = ioutil.ReadFile(DefaultInitName)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, string(content), shortJob)
|
||||
|
||||
// Fails if the file exists
|
||||
if code := cmd.Run([]string{}); code != 1 {
|
||||
t.Fatalf("expect exit code 1, got: %d", code)
|
||||
|
|
Loading…
Reference in a new issue