mirror of https://github.com/databricks/cli.git
63 lines
1.7 KiB
Go
63 lines
1.7 KiB
Go
package run
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/databricks/cli/bundle"
|
|
"github.com/databricks/cli/bundle/config/resources"
|
|
refs "github.com/databricks/cli/bundle/resources"
|
|
"github.com/databricks/cli/bundle/run/output"
|
|
)
|
|
|
|
type key string
|
|
|
|
func (k key) Key() string {
|
|
return string(k)
|
|
}
|
|
|
|
// Runner defines the interface for a runnable resource (or workload).
|
|
type Runner interface {
|
|
// Key returns the fully qualified (unique) identifier for this runnable resource.
|
|
// This is used for showing the user hints w.r.t. disambiguation.
|
|
Key() string
|
|
|
|
// Name returns the resource's name, if defined.
|
|
Name() string
|
|
|
|
// Run the underlying worklow.
|
|
Run(ctx context.Context, opts *Options) (output.RunOutput, error)
|
|
|
|
// Restart the underlying workflow by cancelling any existing runs before
|
|
// starting a new one.
|
|
Restart(ctx context.Context, opts *Options) (output.RunOutput, error)
|
|
|
|
// Cancel the underlying workflow.
|
|
Cancel(ctx context.Context) error
|
|
|
|
// Runners support parsing and completion of additional positional arguments.
|
|
argsHandler
|
|
}
|
|
|
|
// IsRunnable returns a filter that only allows runnable resources.
|
|
func IsRunnable(ref refs.Reference) bool {
|
|
switch ref.Resource.(type) {
|
|
case *resources.Job, *resources.Pipeline:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
// ToRunner converts a resource reference to a runnable resource.
|
|
func ToRunner(b *bundle.Bundle, ref refs.Reference) (Runner, error) {
|
|
switch resource := ref.Resource.(type) {
|
|
case *resources.Job:
|
|
return &jobRunner{key: key(ref.KeyWithType), bundle: b, job: resource}, nil
|
|
case *resources.Pipeline:
|
|
return &pipelineRunner{key: key(ref.KeyWithType), bundle: b, pipeline: resource}, nil
|
|
default:
|
|
return nil, fmt.Errorf("unsupported resource type: %T", resource)
|
|
}
|
|
}
|