| --- | |
| description: >- | |
| The tofu console command provides an interactive console for evaluating | |
| expressions. | |
| --- | |
| # Command: console | |
| The `tofu console` command provides an interactive console for | |
| evaluating [expressions](../../language/expressions/index.mdx). | |
| :::warning | |
| The `tofu console` command is not designed for use in scripts. You can use it, but | |
| you may find that some functions don't work as intended. | |
| ::: | |
| ## Usage | |
| Usage: `tofu console [options]` | |
| This command provides an interactive command-line console for evaluating and | |
| experimenting with [expressions](../../language/expressions/index.mdx). | |
| You can use it to test interpolations before using them in configurations | |
| and to interact with any values currently saved in | |
| [state](../../language/state/index.mdx). If the current state is empty or has not yet been created, you can use the console to experiment with the expression syntax and | |
| [built-in functions](../../language/functions/index.mdx). The console holds a [lock on the state](../../language/state/locking.mdx), and you will not be able to use the console while performing other actions that modify state. | |
| To close the console, enter the `exit` command or press Control-C | |
| or Control-D. | |
| For configurations using | |
| [the `local` backend](../../language/settings/backends/local.mdx) only, | |
| `tofu console` accepts the legacy command line option | |
| [`-state`](../../language/settings/backends/local.mdx#command-line-arguments). | |
| :::note | |
| Use of variables in [module sources](../../language/modules/sources.mdx#support-for-variable-and-local-evaluation), | |
| [backend configuration](../../language/settings/backends/configuration.mdx#variables-and-locals), | |
| or [encryption block](../../language/state/encryption.mdx#configuration) | |
| requires [assigning values to root module variables](../../language/values/variables.mdx#assigning-values-to-root-module-variables) | |
| when running `tofu console`. | |
| ::: | |
| This command also accepts the following options for tofu console: | |
| - `-var 'NAME=VALUE'` - Sets a value for a single | |
| [input variable](/docs/language/values/variables) declared in the | |
| root module of the configuration. Use this option multiple times to set | |
| more than one variable. Refer to | |
| [Input Variables on the Command Line](#input-variables-on-the-command-line) for more information. | |
| - `-var-file=FILENAME` - Sets values for potentially many | |
| [input variables](/docs/language/values/variables) declared in the | |
| root module of the configuration, using definitions from a | |
| ["tfvars" file](/docs/language/values/variables#variable-definitions-tfvars-files). | |
| Use this option multiple times to include values from more than one file. | |
| - `-json-into=out.json` - Allows simultaneous capture of both human readable and | |
| machine readable logs containing the results of evaluating the given expressions. | |
| There are several other ways to set values for input variables in the root | |
| module, aside from the `-var` and `-var-file` options. Refer to | |
| [Assigning Values to Root Module Variables](../../language/values/variables.mdx#assigning-values-to-root-module-variables) for more information. | |
| ## Remote State | |
| If [remote state](../../language/state/remote.mdx) is used by the current backend, | |
| OpenTofu will read the state for the current workspace from the backend | |
| before evaluating any expressions. | |
| ## Examples | |
| The `tofu console` command will read the OpenTofu configuration in the | |
| current working directory and the OpenTofu state file from the configured | |
| backend so that interpolations can be tested against both the values in the | |
| configuration and the state file. | |
| With the following `main.tf`: | |
| ```hcl | |
| variable "apps" { | |
| type = map(any) | |
| default = { | |
| "foo" = { | |
| "region" = "us-east-1", | |
| }, | |
| "bar" = { | |
| "region" = "eu-west-1", | |
| }, | |
| "baz" = { | |
| "region" = "ap-south-1", | |
| }, | |
| } | |
| } | |
| resource "random_pet" "example" { | |
| for_each = var.apps | |
| } | |
| ``` | |
| Executing `tofu console` will drop you into an interactive shell where you | |
| can test interpolations to: | |
| Print a value from a map: | |
| ``` | |
| > var.apps.foo | |
| { | |
| "region" = "us-east-1" | |
| } | |
| ``` | |
| Filter a map based on a specific value: | |
| ``` | |
| > { for key, value in var.apps : key => value if value.region == "us-east-1" } | |
| { | |
| "foo" = { | |
| "region" = "us-east-1" | |
| } | |
| } | |
| ``` | |
| Check if certain values may not be known until apply: | |
| ``` | |
| > random_pet.example | |
| (known after apply) | |
| ``` | |
| Test various functions: | |
| ``` | |
| > cidrnetmask("172.16.0.0/12") | |
| "255.240.0.0" | |
| ``` |