github.com/replicatedhq/ship@v0.55.0/pkg/lifecycle/terraform/when.go (about)

     1  package terraform
     2  
     3  import (
     4  	"github.com/go-kit/kit/log"
     5  	"github.com/go-kit/kit/log/level"
     6  	"github.com/replicatedhq/ship/pkg/api"
     7  	"github.com/replicatedhq/ship/pkg/state"
     8  	"github.com/replicatedhq/ship/pkg/templates"
     9  	"github.com/spf13/viper"
    10  )
    11  
    12  func (t *ForkTerraformer) evaluateWhen(when string, release api.Release) bool {
    13  	debug := level.Debug(log.With(t.Logger, "struct", "ForkTerraformer", "method", "execute"))
    14  
    15  	return evaluateWhen(when, release, debug, t.Viper, t.StateManager)
    16  }
    17  
    18  func (t *DaemonlessTerraformer) evaluateWhen(when string, release api.Release) bool {
    19  	debug := level.Debug(log.With(t.Logger, "struct", "DaemonlessTerraformer", "method", "execute"))
    20  
    21  	return evaluateWhen(when, release, debug, t.Viper, t.StateManager)
    22  }
    23  
    24  func evaluateWhen(when string, release api.Release, logger log.Logger, viper *viper.Viper, manager state.Manager) bool {
    25  	if manager == nil {
    26  		return true
    27  	}
    28  
    29  	builderBuilder := templates.BuilderBuilder{Logger: logger, Viper: viper, Manager: manager}
    30  
    31  	configState, err := manager.CachedState()
    32  	if err != nil {
    33  		_ = logger.Log("terraform.when.loadState", err.Error())
    34  	}
    35  
    36  	currentConfig, err := configState.CurrentConfig()
    37  	if err != nil {
    38  		_ = logger.Log("terraform.when.getConfig", err.Error())
    39  	}
    40  
    41  	fullBuilder, err := builderBuilder.FullBuilder(release.Metadata, release.Spec.Config.V1, currentConfig)
    42  	if err != nil {
    43  		_ = logger.Log("terraform.when.buildBuilder", err.Error())
    44  	}
    45  
    46  	build, err := fullBuilder.Bool(when, true)
    47  
    48  	if err != nil {
    49  		_ = logger.Log("terraform.when.error", err.Error())
    50  		// the terraform step should be run if the template function returns an error
    51  		return true
    52  	}
    53  
    54  	return build
    55  }