github.com/pix4d/terravalet@v0.8.1-0.20240131132849-abcd6a79eeeb/cmdremove.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "io" 6 "os" 7 "strings" 8 ) 9 10 func doRemove(planPath string, upPath string) error { 11 planFile, err := os.Open(planPath) 12 if err != nil { 13 return fmt.Errorf("remove: opening the plan file: %s", err) 14 } 15 defer planFile.Close() 16 17 upFile, err := os.Create(upPath) 18 if err != nil { 19 return fmt.Errorf("remove: creating the up file: %s", err) 20 } 21 defer upFile.Close() 22 23 toCreate, toDestroy, err := parse(planFile) 24 if err != nil { 25 return fmt.Errorf("remove: parsing plan: %s", err) 26 } 27 if toCreate.Size() > 0 { 28 return fmt.Errorf("remove: plan contains resources to create: %v", 29 sorted(toCreate.List())) 30 } 31 32 var bld strings.Builder 33 generateRemoveScript(&bld, sorted(toDestroy.List())) 34 _, err = upFile.WriteString(bld.String()) 35 if err != nil { 36 return fmt.Errorf("remove: writing script file: %s", err) 37 } 38 39 return nil 40 } 41 42 func generateRemoveScript(wr io.Writer, addresses []string) { 43 fmt.Fprintf(wr, `#! /bin/sh 44 # DO NOT EDIT. Generated by https://github.com/pix4D/terravalet 45 # This script will remove %d items. 46 47 set -e 48 49 `, len(addresses)) 50 for _, addr := range addresses { 51 fmt.Fprintf(wr, "terraform state rm '%s'\n", addr) 52 } 53 fmt.Fprintln(wr) 54 }