Merge pull request #4239 from hashicorp/f-short-init

command: init -short flag
This commit is contained in:
Nick Ethier 2018-05-02 13:49:44 -04:00 committed by GitHub
commit 468baf9823
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 79 additions and 2 deletions

View file

@ -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".

View file

@ -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)