in pkg/data_terraform.go [30:72]
func (d *TerraformData) ExecuteDuringPlan() error {
d.Block = cty.NilVal
tb := d.BaseBlock.Config().(*MetaProgrammingTFConfig).TerraformBlock()
if tb == nil {
return nil
}
d.Block = tb.EvalContext()
requiredTerraformVersion, ok := tb.Attributes["required_version"]
if ok {
v, diag := requiredTerraformVersion.Expr.Value(&hcl.EvalContext{})
if diag.HasErrors() {
return fmt.Errorf("error while evaluating terraform block's `required_version`: %+v", diag)
}
s := v.AsString()
d.RequiredVersion = &s
}
rp, ok := tb.NestedBlocks["required_providers"]
if !ok || len(rp) == 0 {
return nil
}
d.RequiredProviders = make(map[string]RequiredProvider)
for s, p := range rp[0].Body.Attributes {
providerConfig, diag := p.Expr.Value(&hcl.EvalContext{})
if diag.HasErrors() {
return fmt.Errorf("error while evaluating terraform block's `required_providers.%s`: %+v", s, diag)
}
p := RequiredProvider{}
it := providerConfig.ElementIterator()
for it.Next() {
k, _ := it.Element()
if k.AsString() == "source" {
source := providerConfig.GetAttr("source").AsString()
p.Source = &source
}
if k.AsString() == "version" {
version := providerConfig.GetAttr("version").AsString()
p.Version = &version
}
}
d.RequiredProviders[s] = p
}
return nil
}