func()

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
}