mirror of https://github.com/databricks/cli.git
Add override to support YAML inputs for apps (#921)
## Changes <!-- Summary of your changes that are easy to understand --> Take @andrefurlan-db 's original [commit](https://github.com/databricks/cli/compare/databricks:6e21ced...andrefurlan-db:12ed10c) to add `apps` support to the CLI and add the yaml file-support as an override (the apps routes are already apart of the Go SDK and are available for use in the CLI) **NOTE: this feature is still private preview. CLI usage will be internal only** ## Tests <!-- How is this tested? -->
This commit is contained in:
parent
b91fab7d09
commit
e408b701ac
|
@ -0,0 +1,58 @@
|
|||
package apps
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/databricks/cli/cmd/root"
|
||||
"github.com/databricks/cli/libs/cmdio"
|
||||
"github.com/databricks/cli/libs/flags"
|
||||
"github.com/databricks/databricks-sdk-go/service/serving"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
func createOverride(cmd *cobra.Command, deployReq *serving.DeployAppRequest) {
|
||||
var manifestYaml flags.YamlFlag
|
||||
var resourcesYaml flags.YamlFlag
|
||||
createJson := cmd.Flag("json").Value.(*flags.JsonFlag)
|
||||
|
||||
// TODO: short flags
|
||||
cmd.Flags().Var(&manifestYaml, "manifest", `either inline YAML string or @path/to/manifest.yaml`)
|
||||
cmd.Flags().Var(&resourcesYaml, "resources", `either inline YAML string or @path/to/resources.yaml`)
|
||||
|
||||
cmd.Annotations = make(map[string]string)
|
||||
|
||||
cmd.PreRunE = root.MustWorkspaceClient
|
||||
cmd.RunE = func(cmd *cobra.Command, args []string) (err error) {
|
||||
ctx := cmd.Context()
|
||||
w := root.WorkspaceClient(ctx)
|
||||
if cmd.Flags().Changed("json") {
|
||||
err = createJson.Unmarshal(&deployReq)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else if cmd.Flags().Changed("manifest") {
|
||||
err = manifestYaml.Unmarshal(&deployReq.Manifest)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if cmd.Flags().Changed("resources") {
|
||||
err = resourcesYaml.Unmarshal(&deployReq.Resources)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return fmt.Errorf("please provide command input in YAML format by specifying the --manifest flag or provide a json payload using the --json flag")
|
||||
}
|
||||
response, err := w.Apps.Create(ctx, *deployReq)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return cmdio.Render(ctx, response)
|
||||
}
|
||||
}
|
||||
|
||||
func init() {
|
||||
createOverrides = append(createOverrides, createOverride)
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
package flags
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/ghodss/yaml"
|
||||
)
|
||||
|
||||
type YamlFlag struct {
|
||||
raw []byte
|
||||
}
|
||||
|
||||
func (y *YamlFlag) String() string {
|
||||
return fmt.Sprintf("YAML (%d bytes)", len(y.raw))
|
||||
}
|
||||
|
||||
// TODO: Command.MarkFlagFilename()
|
||||
func (y *YamlFlag) Set(v string) error {
|
||||
// Load request from file if it starts with '@' (like curl).
|
||||
if v[0] != '@' {
|
||||
y.raw = []byte(v)
|
||||
return nil
|
||||
}
|
||||
buf, err := os.ReadFile(v[1:])
|
||||
if err != nil {
|
||||
return fmt.Errorf("read %s: %w", v, err)
|
||||
}
|
||||
y.raw = buf
|
||||
return nil
|
||||
}
|
||||
|
||||
func (y *YamlFlag) Unmarshal(v any) error {
|
||||
if y.raw == nil {
|
||||
return nil
|
||||
}
|
||||
return yaml.Unmarshal(y.raw, v)
|
||||
}
|
||||
|
||||
func (y *YamlFlag) Type() string {
|
||||
return "YAML"
|
||||
}
|
Loading…
Reference in New Issue