Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

command: init -short flag #4239

Merged
merged 1 commit into from
May 2, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we remove the ephemeral disk too

size = 300
}

task "redis" {
driver = "docker"

config {
image = "redis:3.2"
port_map {
db = 6379
}
}

resources {
cpu = 500 # 500 MHz
memory = 256 # 256MB
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove these comments to. Just about every job file I see still has them and they're almost always wrong because people tweak the resources without touching the comments 😅

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should leave the units in, but remove the numbers.

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