json
Synopsis
Generate JSON of inputs and outputs.
terraform-docs json [PATH] [flags]
Options
--escape escape special characters (default true)
-h, --help help for json
Inherited Options
-c, --config string config file name (default ".terraform-docs.yml")
--footer-from string relative path of a file to read footer from (default "")
--header-from string relative path of a file to read header from (default "main.tf")
--hide strings hide section [all, data-sources, footer, header, inputs, modules, outputs, providers, requirements, resources]
--lockfile read .terraform.lock.hcl if exist (default true)
--output-check check if content of output file is up to date (default false)
--output-file string file path to insert output into (default "")
--output-mode string output to file method [inject, replace] (default "inject")
--output-template string output template (default "<!-- BEGIN_TF_DOCS -->\n{{ .Content }}\n<!-- END_TF_DOCS -->")
--output-values inject output values into outputs (default false)
--output-values-from string inject output values from file into outputs (default "")
--read-comments use comments as description when description is empty (default true)
--recursive update submodules recursively (default false)
--recursive-include-main include the main module (default true)
--recursive-path string submodules path to recursively update (default "modules")
--show strings show section [all, data-sources, footer, header, inputs, modules, outputs, providers, requirements, resources]
--sort sort items (default true)
--sort-by string sort items by criteria [name, required, type] (default "name")
Example
Given the examples
module:
terraform-docs json --footer-from footer.md ./examples/
generates the following output:
{
"header": "Usage:\n\nExample of 'foo_bar' module in `foo_bar.tf`.\n\n- list item 1\n- list item 2\n\nEven inline **formatting** in _here_ is possible.\nand some [link](https://domain.com/)\n\n* list item 3\n* list item 4\n\n```hcl\nmodule \"foo_bar\" {\n source = \"github.com/foo/bar\"\n\n id = \"1234567890\"\n name = \"baz\"\n\n zones = [\"us-east-1\", \"us-west-1\"]\n\n tags = {\n Name = \"baz\"\n Created-By = \"first.last@email.com\"\n Date-Created = \"20180101\"\n }\n}\n```\n\nHere is some trailing text after code block,\nfollowed by another line of text.\n\n| Name | Description |\n|------|-----------------|\n| Foo | Foo description |\n| Bar | Bar description |",
"footer": "## This is an example of a footer\n\nIt looks exactly like a header, but is placed at the end of the document",
"inputs": [
{
"name": "bool-1",
"type": "bool",
"description": "It's bool number one.",
"default": true,
"required": false
},
{
"name": "bool-2",
"type": "bool",
"description": "It's bool number two.",
"default": false,
"required": false
},
{
"name": "bool-3",
"type": "bool",
"description": null,
"default": true,
"required": false
},
{
"name": "bool_default_false",
"type": "bool",
"description": null,
"default": false,
"required": false
},
{
"name": "input-with-code-block",
"type": "list",
"description": "This is a complicated one. We need a newline. \nAnd an example in a code block\n```\ndefault = [\n \"machine rack01:neptune\"\n]\n```\n",
"default": [
"name rack:location"
],
"required": false
},
{
"name": "input-with-pipe",
"type": "string",
"description": "It includes v1 | v2 | v3",
"default": "v1",
"required": false
},
{
"name": "input_with_underscores",
"type": "any",
"description": "A variable with underscores.",
"default": null,
"required": true
},
{
"name": "list-1",
"type": "list",
"description": "It's list number one.",
"default": [
"a",
"b",
"c"
],
"required": false
},
{
"name": "list-2",
"type": "list",
"description": "It's list number two.",
"default": null,
"required": true
},
{
"name": "list-3",
"type": "list",
"description": null,
"default": [],
"required": false
},
{
"name": "list_default_empty",
"type": "list(string)",
"description": null,
"default": [],
"required": false
},
{
"name": "long_type",
"type": "object({\n name = string,\n foo = object({ foo = string, bar = string }),\n bar = object({ foo = string, bar = string }),\n fizz = list(string),\n buzz = list(string)\n })",
"description": "This description is itself markdown.\n\nIt spans over multiple lines.\n",
"default": {
"bar": {
"bar": "bar",
"foo": "bar"
},
"buzz": [
"fizz",
"buzz"
],
"fizz": [],
"foo": {
"bar": "foo",
"foo": "foo"
},
"name": "hello"
},
"required": false
},
{
"name": "map-1",
"type": "map",
"description": "It's map number one.",
"default": {
"a": 1,
"b": 2,
"c": 3
},
"required": false
},
{
"name": "map-2",
"type": "map",
"description": "It's map number two.",
"default": null,
"required": true
},
{
"name": "map-3",
"type": "map",
"description": null,
"default": {},
"required": false
},
{
"name": "no-escape-default-value",
"type": "string",
"description": "The description contains `something_with_underscore`. Defaults to 'VALUE_WITH_UNDERSCORE'.",
"default": "VALUE_WITH_UNDERSCORE",
"required": false
},
{
"name": "number-1",
"type": "number",
"description": "It's number number one.",
"default": 42,
"required": false
},
{
"name": "number-2",
"type": "number",
"description": "It's number number two.",
"default": null,
"required": true
},
{
"name": "number-3",
"type": "number",
"description": null,
"default": "19",
"required": false
},
{
"name": "number-4",
"type": "number",
"description": null,
"default": 15.75,
"required": false
},
{
"name": "number_default_zero",
"type": "number",
"description": null,
"default": 0,
"required": false
},
{
"name": "object_default_empty",
"type": "object({})",
"description": null,
"default": {},
"required": false
},
{
"name": "string-1",
"type": "string",
"description": "It's string number one.",
"default": "bar",
"required": false
},
{
"name": "string-2",
"type": "string",
"description": "It's string number two.",
"default": null,
"required": true
},
{
"name": "string-3",
"type": "string",
"description": null,
"default": "",
"required": false
},
{
"name": "string-special-chars",
"type": "string",
"description": null,
"default": "\\.\u003c\u003e[]{}_-",
"required": false
},
{
"name": "string_default_empty",
"type": "string",
"description": null,
"default": "",
"required": false
},
{
"name": "string_default_null",
"type": "string",
"description": null,
"default": null,
"required": false
},
{
"name": "string_no_default",
"type": "string",
"description": null,
"default": null,
"required": true
},
{
"name": "unquoted",
"type": "any",
"description": null,
"default": null,
"required": true
},
{
"name": "with-url",
"type": "string",
"description": "The description contains url. https://www.domain.com/foo/bar_baz.html",
"default": "",
"required": false
}
],
"modules": [
{
"name": "bar",
"source": "baz",
"version": "4.5.6",
"description": null
},
{
"name": "baz",
"source": "baz",
"version": "4.5.6",
"description": null
},
{
"name": "foo",
"source": "bar",
"version": "1.2.3",
"description": "another type of description for module foo"
},
{
"name": "foobar",
"source": "git@github.com:module/path",
"version": "v7.8.9",
"description": null
}
],
"outputs": [
{
"name": "output-0.12",
"description": "terraform 0.12 only"
},
{
"name": "output-1",
"description": "It's output number one."
},
{
"name": "output-2",
"description": "It's output number two."
},
{
"name": "unquoted",
"description": "It's unquoted output."
}
],
"providers": [
{
"name": "aws",
"alias": null,
"version": "\u003e= 2.15.0"
},
{
"name": "aws",
"alias": "ident",
"version": "\u003e= 2.15.0"
},
{
"name": "foo",
"alias": null,
"version": "\u003e= 1.0"
},
{
"name": "null",
"alias": null,
"version": null
},
{
"name": "tls",
"alias": null,
"version": null
}
],
"requirements": [
{
"name": "terraform",
"version": "\u003e= 0.12"
},
{
"name": "aws",
"version": "\u003e= 2.15.0"
},
{
"name": "foo",
"version": "\u003e= 1.0"
},
{
"name": "random",
"version": "\u003e= 2.2.0"
}
],
"resources": [
{
"type": "resource",
"name": "baz",
"provider": "foo",
"source": "https://registry.acme.com/foo",
"mode": "managed",
"version": "latest",
"description": null
},
{
"type": "resource",
"name": "foo",
"provider": "null",
"source": "hashicorp/null",
"mode": "managed",
"version": "latest",
"description": null
},
{
"type": "private_key",
"name": "baz",
"provider": "tls",
"source": "hashicorp/tls",
"mode": "managed",
"version": "latest",
"description": "this description for tls_private_key.baz which can be multiline."
},
{
"type": "caller_identity",
"name": "current",
"provider": "aws",
"source": "hashicorp/aws",
"mode": "data",
"version": "latest",
"description": null
},
{
"type": "caller_identity",
"name": "ident",
"provider": "aws",
"source": "hashicorp/aws",
"mode": "data",
"version": "latest",
"description": null
}
]
}