mirror of
https://github.com/opentffoundation/opentf.git
synced 2025-12-22 03:07:51 -05:00
Signed-off-by: Janos <86970079+janosdebugs@users.noreply.github.com> Signed-off-by: Damian Stasik <920747+damianstasik@users.noreply.github.com> Signed-off-by: Roman Grinovski <roman.grinovski@gmail.com> Co-authored-by: Damian Stasik <920747+damianstasik@users.noreply.github.com> Co-authored-by: Roman Grinovski <roman.grinovski@gmail.com>
74 lines
3.1 KiB
Plaintext
74 lines
3.1 KiB
Plaintext
---
|
|
description: >-
|
|
Working directories contain configurations, settings, cached plugins and
|
|
modules, and state data. Learn how to initialize and manage working
|
|
directories.
|
|
---
|
|
|
|
# Initializing Working Directories
|
|
|
|
OpenTofu expects to be invoked from a working directory that contains
|
|
configuration files written in
|
|
[the OpenTofu language](../../language/index.mdx). OpenTofu uses
|
|
configuration content from this directory, and also uses the directory to store
|
|
settings, cached plugins and modules, and sometimes state data.
|
|
|
|
A working directory must be initialized before OpenTofu can perform any
|
|
operations in it (like provisioning infrastructure or modifying state).
|
|
|
|
## Working Directory Contents
|
|
|
|
A OpenTofu working directory typically contains:
|
|
|
|
- A OpenTofu configuration describing resources OpenTofu should manage. This
|
|
configuration is expected to change over time.
|
|
- A hidden `.terraform` directory, which OpenTofu uses to manage cached
|
|
provider plugins and modules, record which
|
|
[workspace](../workspaces/index.mdx) is currently active, and
|
|
record the last known backend configuration in case it needs to migrate state
|
|
on the next run. This directory is automatically managed by OpenTofu, and is
|
|
created during initialization.
|
|
- State data, if the configuration uses the default `local` backend. This is
|
|
managed by OpenTofu in a `terraform.tfstate` file (if the directory only uses
|
|
the default workspace) or a `terraform.tfstate.d` directory (if the directory
|
|
uses multiple workspaces).
|
|
|
|
## Initialization
|
|
|
|
Run the `tofu init` command to initialize a working directory that contains
|
|
a OpenTofu configuration. After initialization, you will be able to perform
|
|
other commands, like `tofu plan` and `tofu apply`.
|
|
|
|
If you try to run a command that relies on initialization without first
|
|
initializing, the command will fail with an error and explain that you need to
|
|
run init.
|
|
|
|
Initialization performs several tasks to prepare a directory, including
|
|
accessing state in the configured backend, downloading and installing provider
|
|
plugins, and downloading modules. Under some conditions (usually when changing
|
|
from one backend to another), it might ask the user for guidance or
|
|
confirmation.
|
|
|
|
For details, see [the `tofu init` command](../../cli/commands/init.mdx).
|
|
|
|
## Reinitialization
|
|
|
|
Certain types of changes to a OpenTofu configuration can require
|
|
reinitialization before normal operations can continue. This includes changes to
|
|
provider requirements, module sources or version constraints, and backend
|
|
configurations.
|
|
|
|
You can reinitialize a directory by running `tofu init` again. In fact, you
|
|
can reinitialize at any time; the init command is idempotent, and will have no
|
|
effect if no changes are required.
|
|
|
|
If reinitialization is required, any commands that rely on initialization will
|
|
fail with an error and tell you so.
|
|
|
|
## Reinitializing Only Modules
|
|
|
|
The `tofu get` command will download modules referenced in the
|
|
configuration, but will not perform the other required initialization tasks.
|
|
This command is only useful for niche workflows, and most OpenTofu users can
|
|
ignore it in favor of `tofu init`.
|