func()

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
}