databricks-cli/bundle/deploy/lock/release.go

59 lines
1.3 KiB
Go
Raw Permalink Normal View History

package lock
import (
"context"
"github.com/databricks/cli/bundle"
"github.com/databricks/cli/libs/diag"
"github.com/databricks/cli/libs/locker"
"github.com/databricks/cli/libs/log"
)
type Goal string
const (
GoalBind = Goal("bind")
GoalUnbind = Goal("unbind")
GoalDeploy = Goal("deploy")
GoalDestroy = Goal("destroy")
)
type release struct {
goal Goal
}
func Release(goal Goal) bundle.Mutator {
return &release{goal}
}
func (m *release) Name() string {
return "lock:release"
}
func (m *release) Apply(ctx context.Context, b *bundle.Bundle) diag.Diagnostics {
// Return early if locking is disabled.
if !b.Config.Bundle.Deployment.Lock.IsEnabled() {
log.Infof(ctx, "Skipping; locking is disabled")
return nil
}
// Return early if the locker is not set.
// It is likely an error occurred prior to initialization of the locker instance.
if b.Locker == nil {
log.Warnf(ctx, "Unable to release lock if locker is not configured")
return nil
}
log.Infof(ctx, "Releasing deployment lock")
switch m.goal {
case GoalDeploy:
return diag.FromErr(b.Locker.Unlock(ctx))
case GoalBind, GoalUnbind:
return diag.FromErr(b.Locker.Unlock(ctx))
case GoalDestroy:
return diag.FromErr(b.Locker.Unlock(ctx, locker.AllowLockFileNotExist))
default:
return diag.Errorf("unknown goal for lock release: %s", m.goal)
}
}