mirror of https://github.com/databricks/cli.git
Denormalize fallback logic into jobs and pipelines functions
This commit is contained in:
parent
e4770c66f0
commit
12943dbcff
|
@ -236,24 +236,6 @@ func (t *translateContext) rewriteValue(ctx context.Context, p dyn.Path, v dyn.V
|
||||||
return dyn.NewValue(out, v.Locations()), nil
|
return dyn.NewValue(out, v.Locations()), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *translateContext) rewriteRelativeTo(ctx context.Context, p dyn.Path, v dyn.Value, fn rewriteFunc, dir, fallback string) (dyn.Value, error) {
|
|
||||||
nv, err := t.rewriteValue(ctx, p, v, fn, dir)
|
|
||||||
if err == nil {
|
|
||||||
return nv, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we failed to rewrite the path, try to rewrite it relative to the fallback directory.
|
|
||||||
if fallback != "" {
|
|
||||||
nv, nerr := t.rewriteValue(ctx, p, v, fn, fallback)
|
|
||||||
if nerr == nil {
|
|
||||||
// TODO: Emit a warning that this path should be rewritten.
|
|
||||||
return nv, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return dyn.InvalidValue, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *translatePaths) Apply(ctx context.Context, b *bundle.Bundle) diag.Diagnostics {
|
func (m *translatePaths) Apply(ctx context.Context, b *bundle.Bundle) diag.Diagnostics {
|
||||||
t := &translateContext{
|
t := &translateContext{
|
||||||
b: b,
|
b: b,
|
||||||
|
@ -279,6 +261,8 @@ func (m *translatePaths) Apply(ctx context.Context, b *bundle.Bundle) diag.Diagn
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// gatherFallbackPaths collects the fallback paths for relative paths in the configuration.
|
||||||
|
// Read more about the motivation for this functionality in the "fallback" path translation tests.
|
||||||
func gatherFallbackPaths(v dyn.Value, typ string) (map[string]string, error) {
|
func gatherFallbackPaths(v dyn.Value, typ string) (map[string]string, error) {
|
||||||
fallback := make(map[string]string)
|
fallback := make(map[string]string)
|
||||||
pattern := dyn.NewPattern(dyn.Key("resources"), dyn.Key(typ), dyn.AnyKey())
|
pattern := dyn.NewPattern(dyn.Key("resources"), dyn.Key(typ), dyn.AnyKey())
|
||||||
|
|
|
@ -39,7 +39,7 @@ func (t *translateContext) applyArtifactTranslations(ctx context.Context, v dyn.
|
||||||
return dyn.InvalidValue, fmt.Errorf("unable to determine directory for artifact %s: %w", key, err)
|
return dyn.InvalidValue, fmt.Errorf("unable to determine directory for artifact %s: %w", key, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return t.rewriteRelativeTo(ctx, p, v, rewritePattern.fn, dir, "")
|
return t.rewriteValue(ctx, p, v, rewritePattern.fn, dir)
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return dyn.InvalidValue, err
|
return dyn.InvalidValue, err
|
||||||
|
|
|
@ -24,6 +24,6 @@ func (t *translateContext) applyDashboardTranslations(ctx context.Context, v dyn
|
||||||
return dyn.InvalidValue, fmt.Errorf("unable to determine directory for dashboard %s: %w", key, err)
|
return dyn.InvalidValue, fmt.Errorf("unable to determine directory for dashboard %s: %w", key, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return t.rewriteRelativeTo(ctx, p, v, t.retainLocalAbsoluteFilePath, dir, "")
|
return t.rewriteValue(ctx, p, v, t.retainLocalAbsoluteFilePath, dir)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,23 @@ func (t *translateContext) applyJobTranslations(ctx context.Context, v dyn.Value
|
||||||
return dyn.InvalidValue, err
|
return dyn.InvalidValue, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return t.rewriteRelativeTo(ctx, p, v, rewritePatternFn, dir, fallback[key])
|
// Try to rewrite the path relative to the directory of the configuration file where the value was defined.
|
||||||
|
nv, err := t.rewriteValue(ctx, p, v, rewritePatternFn, dir)
|
||||||
|
if err == nil {
|
||||||
|
return nv, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we failed to rewrite the path, try to rewrite it relative to the fallback directory.
|
||||||
|
// We only do this for jobs and pipelines because of the comment in [gatherFallbackPaths].
|
||||||
|
if fallback[key] != "" {
|
||||||
|
nv, nerr := t.rewriteValue(ctx, p, v, rewritePatternFn, fallback[key])
|
||||||
|
if nerr == nil {
|
||||||
|
// TODO: Emit a warning that this path should be rewritten.
|
||||||
|
return nv, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dyn.InvalidValue, err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,23 @@ func (t *translateContext) applyPipelineTranslations(ctx context.Context, v dyn.
|
||||||
return dyn.InvalidValue, fmt.Errorf("unable to determine directory for pipeline %s: %w", key, err)
|
return dyn.InvalidValue, fmt.Errorf("unable to determine directory for pipeline %s: %w", key, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return t.rewriteRelativeTo(ctx, p, v, rewritePattern.fn, dir, fallback[key])
|
// Try to rewrite the path relative to the directory of the configuration file where the value was defined.
|
||||||
|
nv, err := t.rewriteValue(ctx, p, v, rewritePattern.fn, dir)
|
||||||
|
if err == nil {
|
||||||
|
return nv, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we failed to rewrite the path, try to rewrite it relative to the fallback directory.
|
||||||
|
// We only do this for jobs and pipelines because of the comment in [gatherFallbackPaths].
|
||||||
|
if fallback[key] != "" {
|
||||||
|
nv, nerr := t.rewriteValue(ctx, p, v, rewritePattern.fn, fallback[key])
|
||||||
|
if nerr == nil {
|
||||||
|
// TODO: Emit a warning that this path should be rewritten.
|
||||||
|
return nv, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dyn.InvalidValue, err
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return dyn.InvalidValue, err
|
return dyn.InvalidValue, err
|
||||||
|
|
Loading…
Reference in New Issue