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

Create advanced and global options #371

Merged
merged 1 commit into from
Mar 13, 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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
17 changes: 15 additions & 2 deletions cmd/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,12 @@ var (
)

type command struct {
globalOpts struct{}
globalOpts struct {
KubeOpts
}
//advandedOpts leaves us the possibility to provide different types of options.
//For now, we use it for the TransferOpts in `dataset upload` and `job run`
advancedOpts interface{}

name string
flagParser *flags.Parser
Expand All @@ -45,7 +50,7 @@ type command struct {
out *Output
}

func createCommand(ui cli.Ui, runFunc func([]string) error, helpFunc func() string, usageFunc func() string, fgroup interface{}, opts flags.Options, name string) *command {
func createCommand(ui cli.Ui, runFunc func([]string) error, helpFunc func() string, usageFunc func() string, fgroup, adv interface{}, opts flags.Options, name string) *command {
c := &command{
flagParser: flags.NewNamedParser(usageFunc(), opts),
runFunc: runFunc,
Expand All @@ -60,6 +65,14 @@ func createCommand(ui cli.Ui, runFunc func([]string) error, helpFunc func() stri
panic("failed to add option group: " + err.Error())
}

if adv != nil {
_, err = c.flagParser.AddGroup("Advanced Options", "Advanced Options", adv)
if err != nil {
panic("failed to add option group: " + err.Error())
}
c.advancedOpts = adv
}

_, err = c.flagParser.AddGroup("Global Options", "Global Options", &c.globalOpts)
if err != nil {
panic("failed to add global option group: " + err.Error())
Expand Down
2 changes: 1 addition & 1 deletion cmd/dataset.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ type Dataset struct {
//DatasetFactory creates the command
func DatasetFactory(ui cli.Ui) cli.CommandFactory {
cmd := &Dataset{}
cmd.command = createCommand(ui, cmd.Execute, cmd.Description, cmd.Usage, cmd, flags.None, "nerd dataset")
cmd.command = createCommand(ui, cmd.Execute, cmd.Description, cmd.Usage, cmd, nil, flags.None, "nerd dataset")

return func() (cli.Command, error) {
return cmd, nil
Expand Down
11 changes: 5 additions & 6 deletions cmd/dataset_delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import (

//DatasetDelete command
type DatasetDelete struct {
KubeOpts
All bool `long:"all" short:"a" description:"delete all your datasets in one command"`

*command
Expand All @@ -21,7 +20,7 @@ type DatasetDelete struct {
//DatasetDeleteFactory creates the command
func DatasetDeleteFactory(ui cli.Ui) cli.CommandFactory {
cmd := &DatasetDelete{}
cmd.command = createCommand(ui, cmd.Execute, cmd.Description, cmd.Usage, cmd, flags.None, "nerd dataset delete")
cmd.command = createCommand(ui, cmd.Execute, cmd.Description, cmd.Usage, cmd, nil, flags.None, "nerd dataset delete")
return func() (cli.Command, error) {
return cmd, nil
}
Expand All @@ -36,14 +35,14 @@ func (cmd *DatasetDelete) Execute(args []string) (err error) {
return errShowUsage(fmt.Sprintf(MessageNotEnoughArguments, 1, ""))
}

kopts := cmd.KubeOpts
kopts := cmd.globalOpts.KubeOpts
deps, err := NewDeps(cmd.Logger(), kopts)
if err != nil {
return renderConfigError(err, "failed to configure")
}

ctx := context.Background()
ctx, cancel := context.WithTimeout(ctx, cmd.Timeout)
ctx, cancel := context.WithTimeout(ctx, kopts.Timeout)
defer cancel()

kube := svc.NewKube(deps)
Expand All @@ -63,14 +62,14 @@ func (cmd *DatasetDelete) Execute(args []string) (err error) {
}

func (cmd *DatasetDelete) deleteAll() error {
kopts := cmd.KubeOpts
kopts := cmd.globalOpts.KubeOpts
deps, err := NewDeps(cmd.Logger(), kopts)
if err != nil {
return renderConfigError(err, "failed to configure")
}

ctx := context.Background()
ctx, cancel := context.WithTimeout(ctx, cmd.Timeout)
ctx, cancel := context.WithTimeout(ctx, kopts.Timeout)
defer cancel()

s, err := cmd.out.Ask("Are you sure you want to delete all your datasets? (y/N)")
Expand Down
6 changes: 2 additions & 4 deletions cmd/dataset_download.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ const (

//DatasetDownload command
type DatasetDownload struct {
KubeOpts

Input string `long:"input-of" description:"specify a job name where the datasets were used as its input. Dataset name is no longer mandatory."`
Output string `long:"output-of" description:"specify a job name where the datasets were used as its output. Dataset name is no longer mandatory."`

Expand All @@ -32,7 +30,7 @@ type DatasetDownload struct {
//DatasetDownloadFactory creates the command
func DatasetDownloadFactory(ui cli.Ui) cli.CommandFactory {
cmd := &DatasetDownload{}
cmd.command = createCommand(ui, cmd.Execute, cmd.Description, cmd.Usage, cmd, flags.None, "nerd dataset download")
cmd.command = createCommand(ui, cmd.Execute, cmd.Description, cmd.Usage, cmd, nil, flags.None, "nerd dataset download")
return func() (cli.Command, error) {
return cmd, nil
}
Expand Down Expand Up @@ -70,7 +68,7 @@ func (cmd *DatasetDownload) Execute(args []string) (err error) {
return renderServiceError(err, "failed to turn local path into absolute path")
}

deps, err := NewDeps(cmd.Logger(), cmd.KubeOpts)
deps, err := NewDeps(cmd.Logger(), cmd.globalOpts.KubeOpts)
if err != nil {
return renderConfigError(err, "failed to configure")
}
Expand Down
8 changes: 3 additions & 5 deletions cmd/dataset_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,13 @@ import (

//DatasetList command
type DatasetList struct {
KubeOpts

*command
}

//DatasetListFactory creates the command
func DatasetListFactory(ui cli.Ui) cli.CommandFactory {
cmd := &DatasetList{}
cmd.command = createCommand(ui, cmd.Execute, cmd.Description, cmd.Usage, cmd, flags.None, "nerd dataset list")
cmd.command = createCommand(ui, cmd.Execute, cmd.Description, cmd.Usage, cmd, nil, flags.None, "nerd dataset list")
return func() (cli.Command, error) {
return cmd, nil
}
Expand All @@ -32,14 +30,14 @@ func (cmd *DatasetList) Execute(args []string) (err error) {
if len(args) > 0 {
return errShowUsage(MessageNoArgumentRequired)
}
kopts := cmd.KubeOpts
kopts := cmd.globalOpts.KubeOpts
deps, err := NewDeps(cmd.Logger(), kopts)
if err != nil {
return renderConfigError(err, "failed to configure")
}

ctx := context.Background()
ctx, cancel := context.WithTimeout(ctx, cmd.Timeout)
ctx, cancel := context.WithTimeout(ctx, kopts.Timeout)
defer cancel()

in := &svc.ListDatasetsInput{}
Expand Down
12 changes: 7 additions & 5 deletions cmd/dataset_upload.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ import (

//DatasetUpload command
type DatasetUpload struct {
KubeOpts
TransferOpts
Name string `long:"name" short:"n" description:"assign a name to the dataset"`

*command
Expand All @@ -28,7 +26,7 @@ type DatasetUpload struct {
//DatasetUploadFactory creates the command
func DatasetUploadFactory(ui cli.Ui) cli.CommandFactory {
cmd := &DatasetUpload{}
cmd.command = createCommand(ui, cmd.Execute, cmd.Description, cmd.Usage, cmd, flags.PassAfterNonOption, "nerd dataset upload")
cmd.command = createCommand(ui, cmd.Execute, cmd.Description, cmd.Usage, cmd, &TransferOpts{}, flags.PassAfterNonOption, "nerd dataset upload")
return func() (cli.Command, error) {
return cmd, nil
}
Expand Down Expand Up @@ -59,13 +57,17 @@ func (cmd *DatasetUpload) Execute(args []string) (err error) {
return errors.Wrap(err, "failed to upload dataset")
}

deps, err := NewDeps(cmd.Logger(), cmd.KubeOpts)
deps, err := NewDeps(cmd.Logger(), cmd.globalOpts.KubeOpts)
if err != nil {
return renderConfigError(err, "failed to configure")
}

kube := svc.NewKube(deps)
mgr, sto, sta, err := cmd.TransferOpts.TransferManager(kube)
t, ok := cmd.advancedOpts.(*TransferOpts)
if !ok {
return renderConfigError(fmt.Errorf("unable to use transfer options"), "failed to configure")
}
mgr, sto, sta, err := t.TransferManager(kube)
if err != nil {
return errors.Wrap(err, "failed to setup transfer manager")
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/job.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ type Job struct {
//JobFactory creates the command
func JobFactory(ui cli.Ui) cli.CommandFactory {
cmd := &Job{}
cmd.command = createCommand(ui, cmd.Execute, cmd.Description, cmd.Usage, cmd, flags.None, "nerd job")
cmd.command = createCommand(ui, cmd.Execute, cmd.Description, cmd.Usage, cmd, nil, flags.None, "nerd job")

return func() (cli.Command, error) {
return cmd, nil
Expand Down
11 changes: 5 additions & 6 deletions cmd/job_delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import (

//JobDelete command
type JobDelete struct {
KubeOpts
All bool `long:"all" short:"a" description:"delete all your jobs in one command"`

*command
Expand All @@ -21,7 +20,7 @@ type JobDelete struct {
//JobDeleteFactory creates the command
func JobDeleteFactory(ui cli.Ui) cli.CommandFactory {
cmd := &JobDelete{}
cmd.command = createCommand(ui, cmd.Execute, cmd.Description, cmd.Usage, cmd, flags.None, "nerd job delete")
cmd.command = createCommand(ui, cmd.Execute, cmd.Description, cmd.Usage, cmd, nil, flags.None, "nerd job delete")
return func() (cli.Command, error) {
return cmd, nil
}
Expand All @@ -36,14 +35,14 @@ func (cmd *JobDelete) Execute(args []string) (err error) {
return errShowUsage(fmt.Sprintf(MessageNotEnoughArguments, 1, ""))
}

kopts := cmd.KubeOpts
kopts := cmd.globalOpts.KubeOpts
deps, err := NewDeps(cmd.Logger(), kopts)
if err != nil {
return renderConfigError(err, "failed to configure")
}

ctx := context.Background()
ctx, cancel := context.WithTimeout(ctx, cmd.Timeout)
ctx, cancel := context.WithTimeout(ctx, kopts.Timeout)
defer cancel()

kube := svc.NewKube(deps)
Expand All @@ -63,14 +62,14 @@ func (cmd *JobDelete) Execute(args []string) (err error) {
return nil
}
func (cmd *JobDelete) deleteAll() error {
kopts := cmd.KubeOpts
kopts := cmd.globalOpts.KubeOpts
deps, err := NewDeps(cmd.Logger(), kopts)
if err != nil {
return renderConfigError(err, "failed to configure")
}

ctx := context.Background()
ctx, cancel := context.WithTimeout(ctx, cmd.Timeout)
ctx, cancel := context.WithTimeout(ctx, kopts.Timeout)
defer cancel()

s, err := cmd.out.Ask("Are you sure you want to delete all your jobs? (y/N)")
Expand Down
8 changes: 3 additions & 5 deletions cmd/job_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,13 @@ import (

//JobList command
type JobList struct {
KubeOpts

*command
}

//JobListFactory creates the command
func JobListFactory(ui cli.Ui) cli.CommandFactory {
cmd := &JobList{}
cmd.command = createCommand(ui, cmd.Execute, cmd.Description, cmd.Usage, cmd, flags.None, "nerd job list")
cmd.command = createCommand(ui, cmd.Execute, cmd.Description, cmd.Usage, cmd, nil, flags.None, "nerd job list")
return func() (cli.Command, error) {
return cmd, nil
}
Expand All @@ -33,14 +31,14 @@ func (cmd *JobList) Execute(args []string) (err error) {
if len(args) > 0 {
return errShowUsage(MessageNoArgumentRequired)
}
kopts := cmd.KubeOpts
kopts := cmd.globalOpts.KubeOpts
deps, err := NewDeps(cmd.Logger(), kopts)
if err != nil {
return renderConfigError(err, "failed to configure")
}

ctx := context.Background()
ctx, cancel := context.WithTimeout(ctx, cmd.Timeout)
ctx, cancel := context.WithTimeout(ctx, kopts.Timeout)
defer cancel()

kube := svc.NewKube(deps)
Expand Down
7 changes: 3 additions & 4 deletions cmd/job_logs.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import (

//JobLogs command
type JobLogs struct {
KubeOpts
Tail int64 `long:"tail" short:"t" description:"only return the oldest N lines of the process logs"`

*command
Expand All @@ -23,7 +22,7 @@ type JobLogs struct {
//JobLogsFactory creates the command
func JobLogsFactory(ui cli.Ui) cli.CommandFactory {
cmd := &JobLogs{}
cmd.command = createCommand(ui, cmd.Execute, cmd.Description, cmd.Usage, cmd, flags.None, "nerd job logs")
cmd.command = createCommand(ui, cmd.Execute, cmd.Description, cmd.Usage, cmd, nil, flags.None, "nerd job logs")
return func() (cli.Command, error) {
return cmd, nil
}
Expand All @@ -37,14 +36,14 @@ func (cmd *JobLogs) Execute(args []string) (err error) {
return errShowUsage(fmt.Sprintf(MessageTooManyArguments, 1, ""))
}

kopts := cmd.KubeOpts
kopts := cmd.globalOpts.KubeOpts
deps, err := NewDeps(cmd.Logger(), kopts)
if err != nil {
return renderConfigError(err, "failed to configure")
}

ctx := context.Background()
ctx, cancel := context.WithTimeout(ctx, cmd.Timeout)
ctx, cancel := context.WithTimeout(ctx, kopts.Timeout)
defer cancel()

in := &svc.FetchJobLogsInput{
Expand Down
12 changes: 7 additions & 5 deletions cmd/job_run.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,14 @@ type JobRun struct {
VCPU string `long:"vcpu" description:"number of vcpus to use for this job" default:"2"`
Inputs []string `long:"input" description:"specify one or more inputs that will be used for the job using the following format: <DIR|DATASET_NAME>:<JOB_DIR>"`
Outputs []string `long:"output" description:"specify one or more output folders that will be stored as datasets after the job is finished using the following format: <DATASET_NAME>:<JOB_DIR>"`
KubeOpts
TransferOpts

*command
}

//JobRunFactory creates the command
func JobRunFactory(ui cli.Ui) cli.CommandFactory {
cmd := &JobRun{}
cmd.command = createCommand(ui, cmd.Execute, cmd.Description, cmd.Usage, cmd, flags.PassAfterNonOption, "nerd job run")
cmd.command = createCommand(ui, cmd.Execute, cmd.Description, cmd.Usage, cmd, &TransferOpts{}, flags.PassAfterNonOption, "nerd job run")
return func() (cli.Command, error) {
return cmd, nil
}
Expand Down Expand Up @@ -89,7 +87,7 @@ func (cmd *JobRun) Execute(args []string) (err error) {
return errShowUsage(fmt.Sprintf(MessageNotEnoughArguments, 1, ""))
}

kopts := cmd.KubeOpts
kopts := cmd.globalOpts.KubeOpts
deps, err := NewDeps(cmd.Logger(), kopts)
if err != nil {
return renderConfigError(err, "failed to configure")
Expand Down Expand Up @@ -120,7 +118,11 @@ func (cmd *JobRun) Execute(args []string) (err error) {

//setup the transfer manager
kube := svc.NewKube(deps)
mgr, sto, sta, err := cmd.TransferOpts.TransferManager(kube)
t, ok := cmd.advancedOpts.(*TransferOpts)
if !ok {
return fmt.Errorf("unable to use transfer options")
}
mgr, sto, sta, err := t.TransferManager(kube)
if err != nil {
return errors.Wrap(err, "failed to setup transfer manager")
}
Expand Down