Skip to content

Commit

Permalink
Merge pull request #4239 from hashicorp/f-short-init
Browse files Browse the repository at this point in the history
command: init -short flag
  • Loading branch information
nickethier committed May 2, 2018
2 parents 057dee3 + 57d7f42 commit d911a1c
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 2 deletions.
71 changes: 69 additions & 2 deletions command/job_init.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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".
Expand Down
10 changes: 10 additions & 0 deletions command/job_init_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"testing"

"github.com/mitchellh/cli"
"github.com/stretchr/testify/require"
)

func TestInitCommand_Implements(t *testing.T) {
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit d911a1c

Please sign in to comment.