9cda37205d
In the old remote state system we had the idea of a local backup, which is actually still present for the legacy backends but no longer applies for the new-style backends like the s3 backend. It's problematic when an apply runs for long enough that someone's time-limited AWS STS credentials expire and then Terraform fails and can't persist state to S3. To reduce the risk of lost state, here we add some extra fallback code for the local apply operation in particular. If either state writing or state persisting fail then we attempt to write the state to a special backup file errored.tfstate, and produce an error message that guides the user on how to retry uploading this state. In the unlikely event that we can't write to local disk either (e.g. permissions problems) we take a last-ditch attempt to dump the JSON onto stdout and advise the user to manually copy it into a file for import. If even that doesn't work for some reason, we assume a critical Terraform bug (JSON-serialization problem with states?) and bail out with an apologetic error message. This is implemented for the apply command in particular because this is the one command where new objects are created in real APIs that we don't want to lose track of. For other operations it's less bad to just generate a simple error message and have the user retry. This fixes #14298. |
||
---|---|---|
.. | ||
test-fixtures | ||
backend.go | ||
backend_apply.go | ||
backend_apply_test.go | ||
backend_local.go | ||
backend_plan.go | ||
backend_plan_test.go | ||
backend_refresh.go | ||
backend_refresh_test.go | ||
backend_test.go | ||
cli.go | ||
counthookaction_string.go | ||
hook_count.go | ||
hook_count_action.go | ||
hook_count_test.go | ||
hook_state.go | ||
hook_state_test.go | ||
local_test.go | ||
testing.go |