mirror of https://github.com/databricks/cli.git
Fix metadata computation for empty bundle (#939)
## Changes This PR fixes metadata computation for empty bundle. Before we would error because the `terraform.Load()` mutator errors on a empty / no state file. ## Tests Failing integration tests now pass.
This commit is contained in:
parent
d70d7445c4
commit
b6aa4631f1
|
@ -213,6 +213,11 @@ func BundleToTerraform(config *config.Root) *schema.Root {
|
|||
}
|
||||
|
||||
func TerraformToBundle(state *tfjson.State, config *config.Root) error {
|
||||
// This is a no-op if the state is empty.
|
||||
if state.Values == nil || state.Values.RootModule == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
for _, resource := range state.Values.RootModule.Resources {
|
||||
// Limit to resources.
|
||||
if resource.Mode != tfjson.ManagedResourceMode {
|
||||
|
|
|
@ -3,13 +3,20 @@ package terraform
|
|||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"slices"
|
||||
|
||||
"github.com/databricks/cli/bundle"
|
||||
"github.com/hashicorp/terraform-exec/tfexec"
|
||||
tfjson "github.com/hashicorp/terraform-json"
|
||||
)
|
||||
|
||||
type load struct{}
|
||||
type loadMode int
|
||||
|
||||
const ErrorOnEmptyState loadMode = 0
|
||||
|
||||
type load struct {
|
||||
modes []loadMode
|
||||
}
|
||||
|
||||
func (l *load) Name() string {
|
||||
return "terraform.Load"
|
||||
|
@ -31,7 +38,7 @@ func (l *load) Apply(ctx context.Context, b *bundle.Bundle) error {
|
|||
return err
|
||||
}
|
||||
|
||||
err = ValidateState(state)
|
||||
err = l.validateState(state)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -45,9 +52,12 @@ func (l *load) Apply(ctx context.Context, b *bundle.Bundle) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func ValidateState(state *tfjson.State) error {
|
||||
func (l *load) validateState(state *tfjson.State) error {
|
||||
if state.Values == nil {
|
||||
return fmt.Errorf("no deployment state. Did you forget to run 'databricks bundle deploy'?")
|
||||
if slices.Contains(l.modes, ErrorOnEmptyState) {
|
||||
return fmt.Errorf("no deployment state. Did you forget to run 'databricks bundle deploy'?")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
if state.Values.RootModule == nil {
|
||||
|
@ -57,6 +67,6 @@ func ValidateState(state *tfjson.State) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func Load() bundle.Mutator {
|
||||
return &load{}
|
||||
func Load(modes ...loadMode) bundle.Mutator {
|
||||
return &load{modes: modes}
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ func TestLoadWithNoState(t *testing.T) {
|
|||
|
||||
err = bundle.Apply(context.Background(), b, bundle.Seq(
|
||||
Initialize(),
|
||||
Load(),
|
||||
Load(ErrorOnEmptyState),
|
||||
))
|
||||
|
||||
require.ErrorContains(t, err, "Did you forget to run 'databricks bundle deploy'")
|
||||
|
|
|
@ -38,7 +38,7 @@ func newRunCommand() *cobra.Command {
|
|||
terraform.Interpolate(),
|
||||
terraform.Write(),
|
||||
terraform.StatePull(),
|
||||
terraform.Load(),
|
||||
terraform.Load(terraform.ErrorOnEmptyState),
|
||||
))
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
Loading…
Reference in New Issue