// statelocker use used for testing command with a locked state. // This will lock the state file at a given path, then wait for a sigal. On // SIGINT and SIGTERM the state will be Unlocked before exit. package main import ( "io" "log" "os" "os/signal" "syscall" "github.com/hashicorp/terraform/state" ) func main() { if len(os.Args) != 2 { log.Fatal(os.Args[0], "statefile") } s := &state.LocalState{ Path: os.Args[1], } err := s.Lock("command test") if err != nil { io.WriteString(os.Stderr, err.Error()) return } // signal to the caller that we're locked io.WriteString(os.Stdout, "LOCKED") defer func() { if err := s.Unlock(); err != nil { io.WriteString(os.Stderr, err.Error()) } }() c := make(chan os.Signal, 1) signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) <-c }