From d59d8261fd3dd9490484dc76be46f5d6348c5229 Mon Sep 17 00:00:00 2001 From: Sergiusz Urbaniak Date: Fri, 28 Apr 2017 15:00:55 +0200 Subject: [PATCH] *: add --no-required option Terraform implies a variable being required if you don't specify a default value, see [1]. Only if you leave out a default value the above "Required" column becomes a meaning. The reality is, we specify a lot of default values for variables that are indeed required but for whom we provide a sane default. Furthermore we also specify quite some default empty string values "" for variables which indeed are required, but we still cannot leave them out to mark them as required, because of limitations in terraform where those values are being used in ternary operators. Therefore the "Required" markdown column is meaningless in a lot of use cases. This fixes it by introducing a `--no-required` option for markdown generation which simply does not print it. It defaults to false to retain current functionality. [1] https://www.terraform.io/intro/getting-started/variables.html#defining-variables --- main.go | 10 +++++++--- print/print.go | 30 ++++++++++++++++++++++++------ 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/main.go b/main.go index 3b4da75..8006832 100644 --- a/main.go +++ b/main.go @@ -18,7 +18,7 @@ var version = "v0.1.0" const usage = ` Usage: - terraform-docs [json | md | markdown] ... + terraform-docs [--no-required] [json | md | markdown] ... terraform-docs -h | --help Examples: @@ -35,6 +35,9 @@ const usage = ` # Generate markdown tables of inputs and outputs $ teraform-docs md ./my-module + # Generate markdown tables of inputs and outputs, but don't print "Required" column + $ teraform-docs --no-required md ./my-module + # Generate markdown tables of inputs and outputs for the given module and ../config.tf $ teraform-docs md ./my-module ../config.tf @@ -87,14 +90,15 @@ func main() { } doc := doc.Create(files) + printRequired := !args["--no-required"].(bool) var out string switch { case args["markdown"].(bool): - out, err = print.Markdown(doc) + out, err = print.Markdown(doc, printRequired) case args["md"].(bool): - out, err = print.Markdown(doc) + out, err = print.Markdown(doc, printRequired) case args["json"].(bool): out, err = print.JSON(doc) default: diff --git a/print/print.go b/print/print.go index c317cc9..5e9cd4d 100644 --- a/print/print.go +++ b/print/print.go @@ -50,7 +50,7 @@ func Pretty(d *doc.Doc) (string, error) { } // Markdown prints the given doc as markdown. -func Markdown(d *doc.Doc) (string, error) { +func Markdown(d *doc.Doc, printRequired bool) (string, error) { var buf bytes.Buffer if len(d.Comment) > 0 { @@ -59,8 +59,20 @@ func Markdown(d *doc.Doc) (string, error) { if len(d.Inputs) > 0 { buf.WriteString("\n## Inputs\n\n") - buf.WriteString("| Name | Description | Type | Default | Required |\n") - buf.WriteString("|------|-------------|:----:|:-----:|:-----:|\n") + buf.WriteString("| Name | Description | Type | Default |") + + if printRequired { + buf.WriteString(" Required |\n") + } else { + buf.WriteString("\n") + } + + buf.WriteString("|------|-------------|:----:|:-----:|") + if printRequired { + buf.WriteString(":-----:|\n") + } else { + buf.WriteString("\n") + } } for _, v := range d.Inputs { @@ -72,12 +84,18 @@ func Markdown(d *doc.Doc) (string, error) { def = fmt.Sprintf("`%s`", def) } - buf.WriteString(fmt.Sprintf("| %s | %s | %s | %s | %v |\n", + buf.WriteString(fmt.Sprintf("| %s | %s | %s | %s |", v.Name, normalizeMarkdownDesc(v.Description), v.Type, - def, - humanize(v.Default))) + def)) + + if printRequired { + buf.WriteString(fmt.Sprintf(" %v |\n", + humanize(v.Default))) + } else { + buf.WriteString("\n") + } } if len(d.Outputs) > 0 {