github.com/leg100/ots@v0.0.7-0.20210919080622-034055ced4bd/delete_backend_config.go (about) 1 package ots 2 3 import ( 4 "context" 5 "fmt" 6 "os" 7 "path/filepath" 8 9 "github.com/hashicorp/hcl/v2" 10 "github.com/hashicorp/hcl/v2/hclwrite" 11 ) 12 13 func deleteBackendConfigFromDirectory(ctx context.Context, exe *Executor) error { 14 return filepath.Walk(exe.Path, func(path string, info os.FileInfo, err error) error { 15 if err != nil { 16 return nil 17 } 18 19 if exe.Path != path && info.IsDir() { 20 return filepath.SkipDir 21 } 22 23 if filepath.Ext(path) != ".tf" { 24 return nil 25 } 26 27 in, err := os.ReadFile(path) 28 if err != nil { 29 return nil 30 } 31 32 deleted, out, err := deleteBackendConfig(in) 33 if err != nil { 34 return nil 35 } 36 37 if deleted { 38 if err := os.WriteFile(path, out, 0644); err != nil { 39 return err 40 } 41 } 42 43 return nil 44 }) 45 } 46 47 func deleteBackendConfig(config []byte) (bool, []byte, error) { 48 var deleted bool 49 50 f, diags := hclwrite.ParseConfig([]byte(config), "", hcl.Pos{Line: 1, Column: 1}) 51 if diags.HasErrors() { 52 return false, nil, fmt.Errorf("unable to parse HCL: %s", diags.Error()) 53 } 54 55 OuterLoop: 56 for _, block := range f.Body().Blocks() { 57 if block.Type() == "terraform" { 58 for _, b2 := range block.Body().Blocks() { 59 if b2.Type() == "backend" { 60 block.Body().RemoveBlock(b2) 61 deleted = true 62 break OuterLoop 63 } 64 } 65 } 66 } 67 68 return deleted, f.Bytes(), nil 69 }