in pkg/transform_update_in_place.go [34:80]
func (u *UpdateInPlaceTransform) Decode(block *golden.HclBlock, context *hcl.EvalContext) error {
var err error
u.TargetBlockAddress, err = getRequiredStringAttribute("target_block_address", block, context)
if err != nil {
return err
}
cfg := u.Config().(*MetaProgrammingTFConfig)
b := cfg.RootBlock(u.TargetBlockAddress)
if b == nil {
return fmt.Errorf("cannot find block: %s", u.TargetBlockAddress)
}
u.targetBlock = b
u.updateBlock = hclwrite.NewBlock("patch", []string{})
dynamicBlockBody, err := getOptionalStringAttribute("dynamic_block_body", block, context)
if err != nil {
return err
}
if dynamicBlockBody != nil {
u.DynamicBlockBody = *dynamicBlockBody
patch, diag := hclwrite.ParseConfig([]byte(fmt.Sprintf("patch {\n%s\n}", u.DynamicBlockBody)), u.Address(), hcl.InitialPos)
if diag.HasErrors() {
return fmt.Errorf("error while parsing patch body: %s", diag.Error())
}
if err = decodeAsDynamicBlockBody(u.updateBlock, patch.Body().Blocks()[0]); err != nil {
return err
}
}
for _, b := range block.NestedBlocks() {
switch b.Type {
case "asraw":
{
if err = decodeAsRawBlock(u.updateBlock, b); err != nil {
return err
}
continue
}
case "asstring":
{
if err = decodeAsStringBlock(u.updateBlock, b, 0, context); err != nil {
return err
}
continue
}
}
}
return nil
}