website/docs/cli/commands/providers/schema.mdx
The tofu providers schema command is used to print detailed schemas for the providers used in the current configuration.
Usage: tofu providers schema [options]
:::note
Use of variables in module sources,
backend configuration,
or encryption block
requires assigning values to root module variables
when running tofu providers schema.
:::
The following flags are available:
-json - Displays the schemas in a machine-readable, JSON format.
-var 'NAME=VALUE' - Sets a value for a single
input variable 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 for more information.
-var-file=FILENAME - Sets values for potentially many
input variables declared in the
root module of the configuration, using definitions from a
"tfvars" file.
Use this option multiple times to include values from more than one file.
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 for more information.
Please note that, at this time, the -json flag is a required option. In future releases, this command will be extended to allow for additional options.
The output includes a format_version key, which has
value "1.0". The semantics of this version are:
"1.1", for backward-compatible
changes or additions. Ignore any object properties with unrecognized names to
remain forward-compatible with future minor versions."2.0", for changes that are not
backward-compatible. Reject any input which reports an unsupported major
version.We will introduce new major versions only within the bounds of the OpenTofu 1.0 Compatibility Promises.
The following sections describe the JSON output format by example, using a pseudo-JSON notation.
Important elements are described with comments, which are prefixed with //.
To avoid excessive repetition, we've split the complete format into several discrete sub-objects, described under separate headers. References wrapped in angle brackets (like <block-representation>) are placeholders which, in the real output, would be replaced by an instance of the specified sub-object.
The JSON output format consists of the following objects and sub-objects:
tofu providers schema -json{
"format_version": "1.0",
// "provider_schemas" describes the provider schemas for all
// providers throughout the configuration tree.
"provider_schemas": {
// keys in this map are the provider type, such as "random"
"example_provider_name": {
// "provider" is the schema for the provider configuration
"provider": <schema-representation>,
// "resource_schemas" map the resource type name to the resource's schema
"resource_schemas": {
"example_resource_name": <schema-representation>
},
// "data_source_schemas" map the data source type name to the
// data source's schema
"data_source_schemas": {
"example_datasource_name": <schema-representation>,
}
},
"example_provider_two": { … }
}
}
A schema representation pairs a provider or resource schema (in a "block") with that schema's version.
{
// "version" is the schema version, not the provider version
"version": int64,
"block": <block-representation>
}
A block representation contains "attributes" and "block_types" (which represent nested blocks).
{
// "attributes" describes any attributes that appear directly inside the
// block. Keys in this map are the attribute names.
"attributes": {
"example_attribute_name": {
// "type" is a representation of a type specification
// that the attribute's value must conform to.
"type": "string",
// "description" is an English-language description of
// the purpose and usage of the attribute.
"description": "string",
// "required", if set to true, specifies that an
// omitted or null value is not permitted.
"required": bool,
// "optional", if set to true, specifies that an
// omitted or null value is permitted.
"optional": bool,
// "computed", if set to true, indicates that the
// value comes from the provider rather than the
// configuration.
"computed": bool,
// "sensitive", if set to true, indicates that the
// attribute may contain sensitive information.
"sensitive": bool
},
},
// "block_types" describes any nested blocks that appear directly
// inside the block.
// Keys in this map are the names of the block_type.
"block_types": {
"example_block_name": {
// "nesting_mode" describes the nesting mode for the
// child block, and can be one of the following:
// single
// list
// set
// map
"nesting_mode": "list",
"block": <block-representation>,
// "min_items" and "max_items" set lower and upper
// limits on the number of child blocks allowed for
// the list and set modes. These are
// omitted for other modes.
"min_items": 1,
"max_items": 3
}
}