mirror of https://github.com/databricks/cli.git
214 lines
8.1 KiB
Cheetah
214 lines
8.1 KiB
Cheetah
// Code generated from OpenAPI specs by Databricks SDK Generator. DO NOT EDIT.
|
|
|
|
package {{(.TrimPrefix "account").SnakeName}}
|
|
|
|
import (
|
|
"github.com/databricks/cli/libs/cmdio"
|
|
"github.com/databricks/cli/libs/flags"
|
|
"github.com/databricks/cli/cmd/root"
|
|
"github.com/databricks/databricks-sdk-go/service/{{.Package.Name}}"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
{{- $excludes := list "command-execution" "statement-execution" "dbfs" "dbsql-permissions" -}}
|
|
{{if not (in $excludes .KebabName) }}
|
|
{{template "service" .}}
|
|
{{else}}
|
|
{{skipThisFile}}
|
|
{{end}}
|
|
|
|
{{define "service"}}
|
|
var Cmd = &cobra.Command{
|
|
Use: "{{(.TrimPrefix "account").KebabName}}",
|
|
{{- if .Description }}
|
|
Short: `{{.Summary | without "`"}}`,
|
|
Long: `{{.Comment " " 80 | without "`"}}`,
|
|
{{- end }}
|
|
Annotations: map[string]string{
|
|
"package": "{{ .Package.Name }}",
|
|
},
|
|
{{- if .IsPrivatePreview }}
|
|
|
|
// This service is being previewed; hide from help output.
|
|
Hidden: true,
|
|
{{- end }}
|
|
}
|
|
|
|
{{- $serviceName := .KebabName -}}
|
|
{{range .Methods}}
|
|
|
|
{{- $excludes := list "put-secret" -}}
|
|
{{if in $excludes .KebabName }}
|
|
{{continue}}
|
|
{{end}}
|
|
// start {{.KebabName}} command
|
|
|
|
{{if .Request}}var {{.CamelName}}Req {{.Service.Package.Name}}.{{.Request.PascalName}}
|
|
var {{.CamelName}}Json flags.JsonFlag
|
|
{{- end}}
|
|
{{if .Wait}}var {{.CamelName}}SkipWait bool
|
|
var {{.CamelName}}Timeout time.Duration{{end}}
|
|
|
|
func init() {
|
|
Cmd.AddCommand({{.CamelName}}Cmd)
|
|
{{if .Wait}}
|
|
{{.CamelName}}Cmd.Flags().BoolVar(&{{.CamelName}}SkipWait, "no-wait", {{.CamelName}}SkipWait, `do not wait to reach {{range $i, $e := .Wait.Success}}{{if $i}} or {{end}}{{.Content}}{{end}} state`)
|
|
{{.CamelName}}Cmd.Flags().DurationVar(&{{.CamelName}}Timeout, "timeout", {{.Wait.Timeout}}*time.Minute, `maximum amount of time to reach {{range $i, $e := .Wait.Success}}{{if $i}} or {{end}}{{.Content}}{{end}} state`)
|
|
{{end -}}
|
|
{{if .Request}}// TODO: short flags
|
|
{{.CamelName}}Cmd.Flags().Var(&{{.CamelName}}Json, "json", `either inline JSON string or @path/to/file.json with request body`)
|
|
{{$method := .}}
|
|
{{range .Request.Fields -}}
|
|
{{- if not .Required -}}
|
|
{{if .Entity.IsObject }}// TODO: complex arg: {{.Name}}
|
|
{{else if .Entity.IsAny }}// TODO: any: {{.Name}}
|
|
{{else if .Entity.ArrayValue }}// TODO: array: {{.Name}}
|
|
{{else if .Entity.MapValue }}// TODO: map via StringToStringVar: {{.Name}}
|
|
{{else if .Entity.IsEmpty }}// TODO: output-only field
|
|
{{else if .Entity.Enum }}{{$method.CamelName}}Cmd.Flags().Var(&{{$method.CamelName}}Req.{{.PascalName}}, "{{.KebabName}}", `{{.Summary | without "`"}}`)
|
|
{{else}}{{$method.CamelName}}Cmd.Flags().{{template "arg-type" .Entity}}(&{{$method.CamelName}}Req.{{.PascalName}}, "{{.KebabName}}", {{$method.CamelName}}Req.{{.PascalName}}, `{{.Summary | without "`"}}`)
|
|
{{end}}
|
|
{{- end -}}
|
|
{{- end}}
|
|
{{end}}
|
|
}
|
|
{{- $excludeFromPrompts := list "workspace get-status" -}}
|
|
{{- $fullCommandName := (print $serviceName " " .KebabName) -}}
|
|
{{- $noPrompt := or .IsCrudCreate (in $excludeFromPrompts $fullCommandName) }}
|
|
|
|
{{ $hasPosArgs := and .Request (or .Request.IsAllRequiredFieldsPrimitive (eq .PascalName "RunNow")) -}}
|
|
{{- $hasSinglePosArg := and $hasPosArgs (eq 1 (len .Request.RequiredFields)) -}}
|
|
{{- $serviceHasNamedIdMap := and (and .Service.List .Service.List.NamedIdMap) (not (eq .PascalName "List")) -}}
|
|
{{- $hasIdPrompt := and (not $noPrompt) (and $hasSinglePosArg $serviceHasNamedIdMap) -}}
|
|
{{- $wait := and .Wait (and (not .IsCrudRead) (not (eq .SnakeName "get_run"))) -}}
|
|
{{- $hasRequiredArgs := and (not $hasIdPrompt) $hasPosArgs -}}
|
|
var {{.CamelName}}Cmd = &cobra.Command{
|
|
Use: "{{.KebabName}}{{if $hasPosArgs}}{{range .Request.RequiredFields}} {{.ConstantName}}{{end}}{{end}}",
|
|
{{- if .Description }}
|
|
Short: `{{.Summary | without "`"}}`,
|
|
Long: `{{.Comment " " 80 | without "`"}}`,
|
|
{{- end }}
|
|
{{- if .IsPrivatePreview }}
|
|
|
|
// This command is being previewed; hide from help output.
|
|
Hidden: true,
|
|
{{- end }}
|
|
|
|
Annotations: map[string]string{},{{if $hasRequiredArgs }}
|
|
Args: func(cmd *cobra.Command, args []string) error {
|
|
check := cobra.ExactArgs({{len .Request.RequiredFields}})
|
|
if cmd.Flags().Changed("json") {
|
|
check = cobra.ExactArgs(0)
|
|
}
|
|
return check(cmd, args)
|
|
},{{end}}
|
|
PreRunE: root.Must{{if .Service.IsAccounts}}Account{{else}}Workspace{{end}}Client,
|
|
RunE: func(cmd *cobra.Command, args []string) (err error) {
|
|
ctx := cmd.Context()
|
|
{{if .Service.IsAccounts}}a := root.AccountClient(ctx){{else}}w := root.WorkspaceClient(ctx){{end}}
|
|
{{- if .Request }}
|
|
if cmd.Flags().Changed("json") {
|
|
err = {{.CamelName}}Json.Unmarshal(&{{.CamelName}}Req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
} else {
|
|
{{- if $hasIdPrompt}}
|
|
if len(args) == 0 {
|
|
promptSpinner := cmdio.Spinner(ctx)
|
|
promptSpinner <- "No{{range .Request.RequiredFields}} {{.ConstantName}}{{end}} argument specified. Loading names for {{.Service.TitleName}} drop-down."
|
|
names, err := {{if .Service.IsAccounts}}a{{else}}w{{end}}.{{(.Service.TrimPrefix "account").PascalName}}.{{.Service.List.NamedIdMap.PascalName}}(ctx{{if .Service.List.Request}}, {{.Service.Package.Name}}.{{.Service.List.Request.PascalName}}{}{{end}})
|
|
close(promptSpinner)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to load names for {{.Service.TitleName}} drop-down. Please manually specify required arguments. Original error: %w", err)
|
|
}
|
|
id, err := cmdio.Select(ctx, names, "{{range .Request.RequiredFields}}{{.Summary | trimSuffix "."}}{{end}}")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
args = append(args, id)
|
|
}
|
|
if len(args) != 1 {
|
|
return fmt.Errorf("expected to have {{range .Request.RequiredFields}}{{.Summary | trimSuffix "." | lower}}{{end}}")
|
|
}
|
|
{{- end -}}
|
|
{{$method := .}}
|
|
{{- range $arg, $field := .Request.RequiredFields}}
|
|
{{if not $field.Entity.IsString -}}
|
|
_, err = fmt.Sscan(args[{{$arg}}], &{{$method.CamelName}}Req.{{$field.PascalName}})
|
|
if err != nil {
|
|
return fmt.Errorf("invalid {{$field.ConstantName}}: %s", args[{{$arg}}])
|
|
}{{else -}}
|
|
{{$method.CamelName}}Req.{{$field.PascalName}} = args[{{$arg}}]
|
|
{{- end -}}{{end}}
|
|
}
|
|
{{end}}
|
|
{{if $wait -}}
|
|
wait, err := {{if .Service.IsAccounts}}a{{else}}w{{end}}.{{.Service.PascalName}}.{{.PascalName}}(ctx{{if .Request}}, {{.CamelName}}Req{{end}})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if {{.CamelName}}SkipWait {
|
|
{{if .Response -}}
|
|
return cmdio.Render(ctx, wait.Response)
|
|
{{- else -}}
|
|
return nil
|
|
{{- end}}
|
|
}
|
|
spinner := cmdio.Spinner(ctx)
|
|
info, err := wait.OnProgress(func(i *{{.Service.Package.Name}}.{{.Wait.Poll.Response.PascalName}}) {
|
|
{{if .Wait.MessagePath -}}
|
|
{{if .Wait.ComplexMessagePath -}}
|
|
if i.{{.Wait.MessagePathHead.PascalName}} == nil {
|
|
return
|
|
}
|
|
status := i{{range .Wait.StatusPath}}.{{.PascalName}}{{end}}
|
|
statusMessage := fmt.Sprintf("current status: %s", status)
|
|
if i.{{.Wait.MessagePathHead.PascalName}} != nil {
|
|
statusMessage = i{{range .Wait.MessagePath}}.{{.PascalName}}{{end}}
|
|
}
|
|
{{- else -}}
|
|
statusMessage := i{{range .Wait.MessagePath}}.{{.PascalName}}{{end}}
|
|
{{- end}}
|
|
{{- else -}}
|
|
status := i{{range .Wait.StatusPath}}.{{.PascalName}}{{end}}
|
|
statusMessage := fmt.Sprintf("current status: %s", status)
|
|
{{- end}}
|
|
spinner <- statusMessage
|
|
}).GetWithTimeout({{.CamelName}}Timeout)
|
|
close(spinner)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return cmdio.Render(ctx, info)
|
|
{{- else -}}
|
|
{{template "method-call" .}}
|
|
{{end -}}
|
|
},
|
|
}
|
|
{{end}}
|
|
// end service {{.Name}}{{end}}
|
|
|
|
{{- define "method-call" -}}
|
|
{{if .Response}}response, err :={{else}}err ={{end}} {{if .Service.IsAccounts}}a{{else}}w{{end}}.{{(.Service.TrimPrefix "account").PascalName}}.{{.PascalName}}{{if .Pagination}}All{{end}}(ctx{{if .Request}}, {{.CamelName}}Req{{end}})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
{{if .Response -}}
|
|
return cmdio.Render(ctx, response)
|
|
{{- else -}}
|
|
return nil
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- define "arg-type" -}}
|
|
{{- if .IsString}}StringVar
|
|
{{- else if .IsBool}}BoolVar
|
|
{{- else if .IsInt64}}Int64Var
|
|
{{- else if .IsFloat64}}Float64Var
|
|
{{- else if .IsInt}}IntVar
|
|
{{- else if .Enum }}StringVar
|
|
{{- else}}/* NOT PRIMITIVE */
|
|
{{- end -}}
|
|
{{- end -}}
|