/
githubmirror
/
terraform
Обзор
Документация
Войти
/
githubmirror
/
terraform
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
internal/command/testdata/statelocker.go
54 строки
1 KB
Martin Atkins
Move states/ to internal/states/
18 май 2021, 00:09
18 май 2021, 00:09
f40800b
Код
Авторство
О чём код?
// 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" "time" "github.com/hashicorp/terraform/internal/command/clistate" "github.com/hashicorp/terraform/internal/states/statemgr" ) func main() { if len(os.Args) != 2 { log.Fatal(os.Args[0], "statefile") } s := &clistate.LocalState{ Path: os.Args[1], } info := statemgr.NewLockInfo() info.Operation = "test" info.Info = "state locker" lockID, err := s.Lock(info) if err != nil { io.WriteString(os.Stderr, err.Error()) return } // signal to the caller that we're locked io.WriteString(os.Stdout, "LOCKID "+lockID) defer func() { if err := s.Unlock(lockID); err != nil { io.WriteString(os.Stderr, err.Error()) } }() c := make(chan os.Signal, 1) signal.Notify(c, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP) // timeout after 10 second in case we don't get cleaned up by the test select { case <-time.After(10 * time.Second): case <-c: } }