local.go (54 lines of code) (raw):
package golden
import (
"github.com/zclconf/go-cty/cty"
)
var _ Local = &LocalBlock{}
var _ PlanBlock = &LocalBlock{}
var _ PrePlanBlock = &LocalBlock{}
type Local interface {
SingleValueBlock
// discriminator func
Local()
}
type LocalBlock struct {
*BaseBlock
LocalValue cty.Value `hcl:"value"`
}
func (l *LocalBlock) CanExecutePrePlan() bool {
can := true
upstreams, _ := l.c.GetAncestors(l.Address())
for _, i := range upstreams {
b := i.(Block)
if !b.CanExecutePrePlan() {
can = false
}
}
return can
}
func (l *LocalBlock) ExecuteDuringPlan() error {
return l.parseValue()
}
func (l *LocalBlock) ExecuteBeforePlan() error {
if l.CanExecutePrePlan() {
return l.parseValue()
}
return nil
}
func (l *LocalBlock) parseValue() error {
value, diag := l.HclBlock().Body.Attributes["value"].Expr.Value(l.EvalContext())
if diag.HasErrors() {
return diag
}
l.LocalValue = value
return nil
}
func (l *LocalBlock) Value() cty.Value {
return l.LocalValue
}
func (l *LocalBlock) Type() string {
return ""
}
func (l *LocalBlock) BlockType() string {
return "local"
}
func (l *LocalBlock) Local() {}
func (l *LocalBlock) AddressLength() int { return 2 }