Repository: chanzuckerberg/fogg
Pull request #590 (2021-12-22 20:35:41)

fix!: update tf fmt to 1.1.X; enforce lint and docs 
### Summary
- Check docs doesn't fail if docs out out date, just warns. We should fail so we catch these in CI. 
- fix terraform fmt
- fix terraform lint
- CI improvements
- fix some failing tests
- get us up to TF 1.1.0 syntax + fmt


Patch:
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 025fdd20..96ae4635 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -1,4 +1,3 @@
-
 on: pull_request
 
 jobs:
@@ -8,43 +7,46 @@ jobs:
       - uses: actions/checkout@v2
       - uses: actions/setup-go@v2
         with:
-          go-version: '1.17'
-      - run: go version
-      - name: Setup buildevents
-        uses: kvrhdn/gha-buildevents@v1
+          go-version: "1.17"
+      - name: Run tests
+        run: make test-ci
+      - uses: codecov/codecov-action@v2
+        with:
+          name: fogg
+          fail_ci_if_error: false
+
+  lint:
+    runs-on: ubuntu-18.04
+    steps:
+      - uses: actions/checkout@v2
+      - uses: actions/setup-go@v2
+        with:
+          go-version: "1.17"
+      - uses: hashicorp/setup-terraform@v1
         with:
-          apikey: ${{ secrets.BUILDEVENT_APIKEY }}
-          dataset: buildevents
-          # Required: the job status, this will be used in the post section and sent
-          # as status of the trace. Must always be ${{ job.status }}.
-          job-status: ${{ job.status }}
+          terraform_version: 1.1.3
 
-      # echo "{name}={value}" >> $GITHUB_ENV
-      - run: |
+      # - name: tflint
+      #   uses: reviewdog/action-tflint@master
+      #   with:
+      #     github_token: ${{ secrets.github_token }}
+      #     working_directory: "testdata" # Optional. Change working directory
+      #     reporter: github-pr-review # Optional. Change reporter
+      #     fail_on_error: "true" # Optional. Fail action if errors are found
+      #     filter_mode: "nofilter" # Optional. Check all files, not just the diff
+      #     tflint_rulesets: "aws" # Optional. Extra official rulesets to install
+      #     # flags: "--module" # Optional. Add custom tflint flags
 
-          echo STEP_START=$(date +%s) >> $GITHUB_ENV
-          echo STEP_ID=$(echo install | sum | cut -f 1 -d \ ) >> $GITHUB_ENV
-      - name: Install dependencies
-        run: |
-          buildevents cmd $TRACE_ID $STEP_ID make-setup -- make setup
-          buildevents step $TRACE_ID $STEP_ID $STEP_START install
+      - name: golangci-lint
+        uses: reviewdog/action-golangci-lint@v2
+        with:
+          reporter: github-pr-review
 
-      - run: |
-          echo STEP_START=$(date +%s) >> $GITHUB_ENV
-          echo STEP_ID=$(echo script | sum | cut -f 1 -d \ ) >> $GITHUB_ENV
-      - name: Run tests
-        env:
-          REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.REVIEWDOG_GITHUB_API_TOKEN }}
-        run: |
-          buildevents cmd $TRACE_ID $STEP_ID codecov-validate -- curl --data-binary @codecov.yml https://codecov.io/validate
-          buildevents cmd $TRACE_ID $STEP_ID make-lint-ci -- make lint-ci
-          buildevents cmd $TRACE_ID $STEP_ID make-test-ci -- make test-ci
-          buildevents step $TRACE_ID $STEP_ID $STEP_START script
+      - name: markdownlint
+        uses: reviewdog/action-markdownlint@v0.1
+        with:
+          reporter: github-pr-review
+          github_token: ${{ secrets.GITHUB_TOKEN }}
 
-      - run: |
-          echo STEP_START=$(date +%s) >> $GITHUB_ENV
-          echo STEP_ID=$(echo after_success | sum | cut -f 1 -d \ ) >> $GITHUB_ENV
-      - name: Run codecov
-        run: |
-          buildevents cmd $TRACE_ID $STEP_ID codecov-upload -- bash <(curl -s https://codecov.io/bash)
-          buildevents step $TRACE_ID $STEP_ID $STEP_START after_success
+      - name: terraform fmt
+        run: terraform fmt -check -diff -recursive testdata
diff --git a/.github/workflows/mods.yml b/.github/workflows/mods.yml
deleted file mode 100644
index d9bfdc97..00000000
--- a/.github/workflows/mods.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-on: push
-
-jobs:
-  run:
-    runs-on: ubuntu-latest
-    steps:
-      - uses: actions/checkout@v2
-        with:
-          token: ${{ secrets.CZIBUILDBOT_GITHUB_TOKEN }}
-      - uses: actions/setup-go@v2
-        with:
-          go-version: '1.17'
-      - name: fix go modules
-        run: |
-          go mod tidy
-          git add go.*
-          git config --global user.name "github-actions[bot]"
-          git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
-          git commit -m "tidy modules" || true
-          git push
diff --git a/.reviewdog.yml b/.reviewdog.yml
index c560467b..b3b24d03 100644
--- a/.reviewdog.yml
+++ b/.reviewdog.yml
@@ -1,14 +1,6 @@
 runner:
-  golangci:
-    cmd: ./bin/golangci-lint run --out-format=line-number -v --timeout 5m
-    errorformat:
-      - '%E%f:%l:%c: %m'
-      - '%E%f:%l: %m'
-      - '%C%.%#'
-    level: warning
   markdownlint:
     cmd: "node_modules/.bin/markdownlint -p .gitignore -c .markdownlint.json . 2>&1"
     errorformat:
-      - '%f:%l:%c %m'
-    level: warning
-
+      - "%f:%l:%c %m"
+    level: error
diff --git a/Makefile b/Makefile
index e57a03cf..378e554f 100644
--- a/Makefile
+++ b/Makefile
@@ -8,11 +8,6 @@ export GO111MODULE=on
 
 all: test install
 
-setup: ## setup development dependencies
-	## Release dependencies
-	curl -sfL https://raw.githubusercontent.com/chanzuckerberg/bff/main/download.sh | sh
-.PHONY: setup
-
 fmt:
 	goimports -w -l .
 .PHONY: fmt
@@ -38,6 +33,9 @@ else
 endif
 .PHONY: linter-setup
 
+lint-tf:
+	terraform fmt -check -diff -recursive testdata
+
 lint: lint-setup ## run lint andn print results
 	./bin/reviewdog -conf .reviewdog.yml  -diff "git diff main"
 .PHONY: lint
@@ -53,11 +51,7 @@ lint-all: lint-setup ## run the fast go linters
 
 TEMPLATES := $(shell find templates -not -name "*.go")
 
-docker: ## check to be sure docker is running
-	@docker ps
-.PHONY: docker
-
-release: setup docker ## run a release
+release: setup ## run a release
 	./bin/bff bump
 	git push
 	goreleaser release
@@ -80,15 +74,11 @@ build: fmt ## build the binary
 	go build ${LDFLAGS} .
 .PHONY: build
 
-deps:
-	go mod tidy
-.PHONY: deps
-
 coverage: ## run the go coverage tool, reading file coverage.out
 	go tool cover -html=coverage.out
 .PHONY: coverage
 
-test: fmt deps ## run tests
+test: fmt ## run tests
  ifeq (, $(shell which gotest))
 	go test -failfast -cover ./...
  else
@@ -124,6 +114,6 @@ clean: ## clean the repo
 	rm -rf dist 2>/dev/null || true
 	rm coverage.out 2>/dev/null || true
 
-update-golden-files: clean deps ## update the golden files in testdata
+update-golden-files: clean ## update the golden files in testdata
 	go test -v -run TestIntegration ./apply/ -update
 .PHONY: update-golden-files
diff --git a/templates/templates/.github/workflows/fogg_ci.yml.tmpl b/templates/templates/.github/workflows/fogg_ci.yml.tmpl
index 056c6746..47d52c04 100644
--- a/templates/templates/.github/workflows/fogg_ci.yml.tmpl
+++ b/templates/templates/.github/workflows/fogg_ci.yml.tmpl
@@ -22,8 +22,11 @@ jobs:
         with:
           python-version: '3.6'
       - run: |
+          mkdir /tmp/terraform-docs
+          cd /tmp/terraform-docs
+
           # https://terraform-docs.io/user-guide/installation/#pre-compiled-binary
-          curl -sSLo ./terraform-docs.tar.gz https://terraform-docs.io/dl/v0.14.1/terraform-docs-v0.14.1-$(uname)-amd64.tar.gz
+          curl -sSLo ./terraform-docs.tar.gz https://github.com/terraform-docs/terraform-docs/releases/download/v0.16.0/terraform-docs-v0.16.0-linux-amd64.tar.gz
           tar -xzf terraform-docs.tar.gz
           chmod +x terraform-docs
           echo "$PWD" >> $GITHUB_PATH
diff --git a/templates/templates/common/auth0_provider.tmpl b/templates/templates/common/auth0_provider.tmpl
index 1758b048..7c6fba4c 100644
--- a/templates/templates/common/auth0_provider.tmpl
+++ b/templates/templates/common/auth0_provider.tmpl
@@ -1,5 +1,5 @@
 {{ define "auth0_provider" }}
-provider auth0 {
+provider "auth0" {
   domain = "{{ .Domain }}"
 }
 {{ end }}
diff --git a/templates/templates/common/aws_provider.tmpl b/templates/templates/common/aws_provider.tmpl
index 8dc6c5dd..7af4f3ef 100644
--- a/templates/templates/common/aws_provider.tmpl
+++ b/templates/templates/common/aws_provider.tmpl
@@ -1,5 +1,5 @@
 {{ define "aws_provider" }}
-provider aws {
+provider "aws" {
   {{ if .Alias }}alias = "{{ .Alias }}"{{ end }}
   region = "{{ .Region }}"
   {{ if .Profile }} profile = "{{ .Profile }}"{{ end }}
diff --git a/templates/templates/common/backends.tmpl b/templates/templates/common/backends.tmpl
index 114c1427..305cfc10 100644
--- a/templates/templates/common/backends.tmpl
+++ b/templates/templates/common/backends.tmpl
@@ -1,5 +1,5 @@
 {{ define "backend" }}
-  backend {{ .Kind }} {
+  backend "{{ .Kind }}" {
   {{ if eq .Kind "s3" }}
     bucket         = "{{ .S3.Bucket }}"
     {{ if .S3.DynamoTable }}dynamodb_table = "{{ .S3.DynamoTable }}"{{ end }}
@@ -11,7 +11,7 @@
   {{ else if eq .Kind "remote" }}
     hostname = "{{ .Remote.HostName }}"
     organization = "{{ .Remote.Organization }}"
-    workspaces {
+    workspaces = {
       name = "{{ .Remote.Workspace }}"
     }
   {{ end }}
diff --git a/templates/templates/common/bless_provider.tmpl b/templates/templates/common/bless_provider.tmpl
index 0ef966ba..e8ce004b 100644
--- a/templates/templates/common/bless_provider.tmpl
+++ b/templates/templates/common/bless_provider.tmpl
@@ -1,6 +1,6 @@
 {{define "bless_provider"}}
 
-provider bless {
+provider "bless" {
   region  = "{{ .AWSRegion }}"
   {{ if .AWSProfile -}}
   profile = "{{ .AWSProfile }}"
@@ -12,7 +12,7 @@ provider bless {
 
 {{ $outer := . -}}
 {{ range $region := .AdditionalRegions }}
-provider bless {
+provider "bless" {
   alias = "{{ $region }}"
   region  = "{{ $region }}"
   {{ if $outer.AWSProfile}}
diff --git a/templates/templates/common/datadog_provider.tmpl b/templates/templates/common/datadog_provider.tmpl
index f12d2826..b641842d 100644
--- a/templates/templates/common/datadog_provider.tmpl
+++ b/templates/templates/common/datadog_provider.tmpl
@@ -1,4 +1,3 @@
 {{define "datadog_provider"}}
-provider datadog {
-}
+provider "datadog" {}
 {{ end }}
diff --git a/templates/templates/common/github_provider.tmpl b/templates/templates/common/github_provider.tmpl
index 1eb5d634..eebf6995 100644
--- a/templates/templates/common/github_provider.tmpl
+++ b/templates/templates/common/github_provider.tmpl
@@ -1,5 +1,5 @@
 {{define "github_provider"}}
-provider github {
+provider "github" {
   organization = "{{ .Organization }}"
   {{ if .BaseURL -}}
   base_url = "{{ .BaseURL }}"
diff --git a/templates/templates/common/global_remote.tmpl b/templates/templates/common/global_remote.tmpl
index f03a7ef7..548699ae 100644
--- a/templates/templates/common/global_remote.tmpl
+++ b/templates/templates/common/global_remote.tmpl
@@ -1,5 +1,5 @@
 {{ define "global_remote " }}
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "{{ .Global.Backend.Kind }}"
 
   config = {
diff --git a/templates/templates/common/heroku_provider.tmpl b/templates/templates/common/heroku_provider.tmpl
index ebae2273..314a3a69 100644
--- a/templates/templates/common/heroku_provider.tmpl
+++ b/templates/templates/common/heroku_provider.tmpl
@@ -1,4 +1,3 @@
 {{define "heroku_provider"}}
-provider heroku {
-}
+provider "heroku" {}
 {{ end }}
diff --git a/templates/templates/common/okta_provider.tmpl b/templates/templates/common/okta_provider.tmpl
index 7c9a9fca..0efc6a56 100644
--- a/templates/templates/common/okta_provider.tmpl
+++ b/templates/templates/common/okta_provider.tmpl
@@ -1,5 +1,5 @@
 {{define "okta_provider"}}
-provider okta {
+provider "okta" {
   org_name = "{{ .OrgName }}"
   {{ if .BaseURL -}}
   base_url = "{{ .BaseURL }}"
diff --git a/templates/templates/common/sentry_provider.tmpl b/templates/templates/common/sentry_provider.tmpl
index 7abbcaad..99dd712f 100644
--- a/templates/templates/common/sentry_provider.tmpl
+++ b/templates/templates/common/sentry_provider.tmpl
@@ -1,5 +1,5 @@
 {{define "sentry_provider"}}
-provider sentry {
+provider "sentry" {
   {{ if .BaseURL -}}
   base_url = "{{ .BaseURL }}"
   {{ end -}}
diff --git a/templates/templates/common/snowflake_provider.tmpl b/templates/templates/common/snowflake_provider.tmpl
index d1eb400a..337ee591 100644
--- a/templates/templates/common/snowflake_provider.tmpl
+++ b/templates/templates/common/snowflake_provider.tmpl
@@ -1,5 +1,5 @@
 {{define "snowflake_provider"}}
-provider snowflake {
+provider "snowflake" {
   account = "{{ .Account }}"
   role    = "{{ .Role }}"
   region  = "{{ .Region }}"
diff --git a/templates/templates/common/tfe_provider.tmpl b/templates/templates/common/tfe_provider.tmpl
index aec48b8d..993be292 100644
--- a/templates/templates/common/tfe_provider.tmpl
+++ b/templates/templates/common/tfe_provider.tmpl
@@ -1,5 +1,5 @@
 {{define "tfe_provider"}}
-provider tfe {
+provider "tfe" {
 {{ if .Hostname -}}
   hostname = "{{ .Hostname }}"
 {{ end -}}
diff --git a/templates/templates/component/terraform/fogg.tf.tmpl b/templates/templates/component/terraform/fogg.tf.tmpl
index d31445cf..538e5b14 100644
--- a/templates/templates/component/terraform/fogg.tf.tmpl
+++ b/templates/templates/component/terraform/fogg.tf.tmpl
@@ -63,48 +63,48 @@ terraform {
   {{ end}}
   }
 }
-variable env {
+variable "env" {
   type    =  string
   default = "{{ .Env }}"
 }
 
-variable project {
+variable "project" {
   type    =  string
   default = "{{ .Project }}"
 }
 
 {{if .ProviderConfiguration.AWS}}
-  variable region {
+  variable "region" {
     type    =  string
     default = "{{ .ProviderConfiguration.AWS.Region }}"
   }
 {{ end }}
 
-variable component {
+variable "component" {
   type =  string
   default = "{{ .Name }}"
 }
 
 {{ if (avail "Account" .) }}
-variable account {
+variable "account" {
   type =  string
   default = "{{ .Account }}"
 }
 {{ end }}
 
 {{ if .ProviderConfiguration.AWS }}{{ if .ProviderConfiguration.AWS.Profile }}
-  variable aws_profile {
+  variable "aws_profile" {
     type =  string
     default =  "{{ .ProviderConfiguration.AWS.Profile }}"
   }
 {{ end }}{{ end }}
 
-variable owner {
+variable "owner" {
   type =  string
   default = "{{ .Owner }}"
 }
 
-variable tags {
+variable "tags" {
   type =  object({project: string, env: string, service: string, owner: string, managedBy: string})
   default = {
     project   = "{{ .Project }}"
@@ -116,14 +116,14 @@ variable tags {
 }
 
 {{ range $key, $val := .ExtraVars }}
-variable {{ $key }} {
+variable "{{ $key }}" {
   type =  string
   default = "{{ $val }}"
 }
 {{ end }}
 
 {{ if .Global }}
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "{{ .Global.Backend.Kind }}"
 
   config = {
@@ -135,7 +135,7 @@ data terraform_remote_state global {
 {{ $outer := . }}
 {{ range $component, $backend := .ComponentBackends  }}
 {{ if ne $component $outer.Name }}
-data terraform_remote_state {{ $component }} {
+data "terraform_remote_state" "{{ $component }}" {
   backend = "{{ $backend.Kind }}"
 
   config = {
@@ -146,7 +146,7 @@ data terraform_remote_state {{ $component }} {
 {{ end }}
 
 {{ range $name, $backend := .AccountBackends }}
-data terraform_remote_state {{ $name }} {
+data "terraform_remote_state" "{{ $name }}" {
   backend = "{{ $backend.Kind }}"
 
   config = {
@@ -155,8 +155,8 @@ data terraform_remote_state {{ $name }} {
 }
 {{ end }}
 
-variable aws_accounts {
-  type =  map
+variable "aws_accounts" {
+  type =  map(string)
   default = {
   {{ range $account, $id := .Accounts }}
     {{ $account }} = {{ $id }}
diff --git a/templates/templates/module-invocation/main.tf.tmpl b/templates/templates/module-invocation/main.tf.tmpl
index 6f698cbc..1da0ecf6 100644
--- a/templates/templates/module-invocation/main.tf.tmpl
+++ b/templates/templates/module-invocation/main.tf.tmpl
@@ -1,7 +1,7 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-module {{.ModuleName}} {
+module "{{.ModuleName}}" {
   source = "{{.ModuleSource}}"
   {{range .Variables -}}
     {{.}} = local.{{.}}
diff --git a/templates/templates/module-invocation/outputs.tf.tmpl b/templates/templates/module-invocation/outputs.tf.tmpl
index c5298d1e..d7262f3c 100644
--- a/templates/templates/module-invocation/outputs.tf.tmpl
+++ b/templates/templates/module-invocation/outputs.tf.tmpl
@@ -3,7 +3,7 @@
 
 {{ $outer := . -}}
 {{- range .Outputs -}}
-output {{.}} {
+output "{{.}}" {
   value = module.{{$outer.ModuleName}}.{{.}}
 }
 
diff --git a/templates/templates/repo/scripts/component.mk b/templates/templates/repo/scripts/component.mk
index ecd75eba..0caacd7f 100644
--- a/templates/templates/repo/scripts/component.mk
+++ b/templates/templates/repo/scripts/component.mk
@@ -33,12 +33,7 @@ endif
 .PHONY: lint-tflint
 
 lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
-	@printf "fmt check: "
-	@for f in $(TF); do \
-		printf . \
-		$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true $$f || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-terraform-fmt
 
 check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
diff --git a/templates/templates/repo/scripts/module.mk b/templates/templates/repo/scripts/module.mk
index d8353c0d..3de23397 100644
--- a/templates/templates/repo/scripts/module.mk
+++ b/templates/templates/repo/scripts/module.mk
@@ -9,26 +9,20 @@ all: fmt lint doc
 .PHONY: all
 
 fmt: terraform ## run terraform fmt on this module
-	@printf "fmt: ";
-	@for f in $(TF); do printf .; $(terraform_command) fmt $(TF_ARGS) $$f; done
-	@echo
+	@$(terraform_command) fmt $(TF_ARGS)
 .PHONY: fmt
 
 check: lint check-docs ## run all checks on this module
 .PHONY: check
 
-lint: lint-tf ## run all linters on this module
+lint: lint-tf check-docs ## run all linters on this module
 .PHONY: lint
 
 lint-tf: terraform ## run terraform linters on this module
-	@printf "fmt: ";
-	@for f in $(TF); do \
-	  printf .; $(terraform_command) fmt $(TF_ARGS) --check=true --diff=true || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-tf
 
-readme: ## update this module's README.md 
+readme: ## update this module's README.md
 	bash $(REPO_ROOT)/scripts/update-readme.sh update
 .PHONY: readme
 
@@ -39,6 +33,7 @@ check-docs: ## check that this module's docs are up-to-date
 	@bash $(REPO_ROOT)/scripts/update-readme.sh check; \
 	if [ ! $$? -eq 0 ];  then \
 		echo "Docs are out of date, run \`make docs\`"; \
+		exit 1 ; \
 	fi
 .PHONY: check-docs
 


Test patch:
diff --git a/apply/apply_test.go b/apply/apply_test.go
index f3922bc7..8add5769 100644
--- a/apply/apply_test.go
+++ b/apply/apply_test.go
@@ -269,14 +269,14 @@ func TestApplyModuleInvocation(t *testing.T) {
 	r.Nil(e)
 	i, e := afero.ReadFile(fs, "mymodule/main.tf")
 	r.Nil(e)
-	expected := "# Auto-generated by fogg. Do not edit\n# Make improvements in fogg, so that everyone can benefit.\n\nmodule test-module {\n  source = \"../test-module\"\n  bar    = local.bar\n  foo    = local.foo\n\n}\n"
+	expected := "# Auto-generated by fogg. Do not edit\n# Make improvements in fogg, so that everyone can benefit.\n\nmodule \"test-module\" {\n  source = \"../test-module\"\n  bar    = local.bar\n  foo    = local.foo\n\n}\n"
 	r.Equal(expected, string(i))
 
 	_, e = fs.Stat("mymodule/outputs.tf")
 	r.Nil(e)
 	i, e = afero.ReadFile(fs, "mymodule/outputs.tf")
 	r.Nil(e)
-	expected = "# Auto-generated by fogg. Do not edit\n# Make improvements in fogg, so that everyone can benefit.\n\noutput bar {\n  value = module.test-module.bar\n}\n\noutput foo {\n  value = module.test-module.foo\n}\n\n\n"
+	expected = "# Auto-generated by fogg. Do not edit\n# Make improvements in fogg, so that everyone can benefit.\n\noutput \"bar\" {\n  value = module.test-module.bar\n}\n\noutput \"foo\" {\n  value = module.test-module.foo\n}\n\n\n"
 	r.Equal(expected, string(i))
 }
 
@@ -302,14 +302,14 @@ func TestApplyModuleInvocationWithModuleName(t *testing.T) {
 	r.Nil(e)
 	i, e := afero.ReadFile(fs, "mymodule/main.tf")
 	r.Nil(e)
-	expected := "# Auto-generated by fogg. Do not edit\n# Make improvements in fogg, so that everyone can benefit.\n\nmodule module-name {\n  source = \"../test-module\"\n  bar    = local.bar\n  foo    = local.foo\n\n}\n"
+	expected := "# Auto-generated by fogg. Do not edit\n# Make improvements in fogg, so that everyone can benefit.\n\nmodule \"module-name\" {\n  source = \"../test-module\"\n  bar    = local.bar\n  foo    = local.foo\n\n}\n"
 	r.Equal(expected, string(i))
 
 	_, e = fs.Stat("mymodule/outputs.tf")
 	r.Nil(e)
 	i, e = afero.ReadFile(fs, "mymodule/outputs.tf")
 	r.Nil(e)
-	expected = "# Auto-generated by fogg. Do not edit\n# Make improvements in fogg, so that everyone can benefit.\n\noutput bar {\n  value = module.module-name.bar\n}\n\noutput foo {\n  value = module.module-name.foo\n}\n\n\n"
+	expected = "# Auto-generated by fogg. Do not edit\n# Make improvements in fogg, so that everyone can benefit.\n\noutput \"bar\" {\n  value = module.module-name.bar\n}\n\noutput \"foo\" {\n  value = module.module-name.foo\n}\n\n\n"
 	r.Equal(expected, string(i))
 }
 
diff --git a/apply/golden_file_test.go b/apply/golden_file_test.go
index d09a9d48..f814ac62 100644
--- a/apply/golden_file_test.go
+++ b/apply/golden_file_test.go
@@ -33,6 +33,7 @@ func TestIntegration(t *testing.T) {
 		{"github_actions"},
 		{"circleci"},
 		{"tfe_provider_yaml"},
+		{"remote_backend_yaml"},
 	}
 
 	for _, test := range testCases {
diff --git a/apply/test-module/outputs.tf b/apply/test-module/outputs.tf
index b1630f39..89cf50bd 100644
--- a/apply/test-module/outputs.tf
+++ b/apply/test-module/outputs.tf
@@ -1,7 +1,7 @@
 output "foo" {
-  value = "${var.foo}"
+  value = var.foo
 }
 
 output "bar" {
-  value = "${var.bar}"
+  value = var.bar
 }
diff --git a/testdata/auth0_provider_yaml/scripts/component.mk b/testdata/auth0_provider_yaml/scripts/component.mk
index ecd75eba..0caacd7f 100644
--- a/testdata/auth0_provider_yaml/scripts/component.mk
+++ b/testdata/auth0_provider_yaml/scripts/component.mk
@@ -33,12 +33,7 @@ endif
 .PHONY: lint-tflint
 
 lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
-	@printf "fmt check: "
-	@for f in $(TF); do \
-		printf . \
-		$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true $$f || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-terraform-fmt
 
 check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
diff --git a/testdata/auth0_provider_yaml/scripts/module.mk b/testdata/auth0_provider_yaml/scripts/module.mk
index d8353c0d..3de23397 100644
--- a/testdata/auth0_provider_yaml/scripts/module.mk
+++ b/testdata/auth0_provider_yaml/scripts/module.mk
@@ -9,26 +9,20 @@ all: fmt lint doc
 .PHONY: all
 
 fmt: terraform ## run terraform fmt on this module
-	@printf "fmt: ";
-	@for f in $(TF); do printf .; $(terraform_command) fmt $(TF_ARGS) $$f; done
-	@echo
+	@$(terraform_command) fmt $(TF_ARGS)
 .PHONY: fmt
 
 check: lint check-docs ## run all checks on this module
 .PHONY: check
 
-lint: lint-tf ## run all linters on this module
+lint: lint-tf check-docs ## run all linters on this module
 .PHONY: lint
 
 lint-tf: terraform ## run terraform linters on this module
-	@printf "fmt: ";
-	@for f in $(TF); do \
-	  printf .; $(terraform_command) fmt $(TF_ARGS) --check=true --diff=true || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-tf
 
-readme: ## update this module's README.md 
+readme: ## update this module's README.md
 	bash $(REPO_ROOT)/scripts/update-readme.sh update
 .PHONY: readme
 
@@ -39,6 +33,7 @@ check-docs: ## check that this module's docs are up-to-date
 	@bash $(REPO_ROOT)/scripts/update-readme.sh check; \
 	if [ ! $$? -eq 0 ];  then \
 		echo "Docs are out of date, run \`make docs\`"; \
+		exit 1 ; \
 	fi
 .PHONY: check-docs
 
diff --git a/testdata/auth0_provider_yaml/terraform/accounts/foo/fogg.tf b/testdata/auth0_provider_yaml/terraform/accounts/foo/fogg.tf
index 22455fe7..9eb42c34 100644
--- a/testdata/auth0_provider_yaml/terraform/accounts/foo/fogg.tf
+++ b/testdata/auth0_provider_yaml/terraform/accounts/foo/fogg.tf
@@ -1,13 +1,13 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-provider auth0 {
+provider "auth0" {
   domain = "adomain"
 }
 terraform {
   required_version = "=1.1.1"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "bucket"
 
@@ -71,27 +71,27 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "accounts"
 }
-variable project {
+variable "project" {
   type    = string
   default = "foofoo"
 }
-variable component {
+variable "component" {
   type    = string
   default = "foo"
 }
-variable account {
+variable "account" {
   type    = string
   default = "foo"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foofoo"
@@ -101,7 +101,7 @@ variable tags {
     managedBy = "terraform"
   }
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -115,7 +115,7 @@ data terraform_remote_state global {
 
   }
 }
-data terraform_remote_state foo {
+data "terraform_remote_state" "foo" {
   backend = "s3"
   config = {
 
@@ -129,8 +129,8 @@ data terraform_remote_state foo {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/auth0_provider_yaml/terraform/envs/bar/bam/fogg.tf b/testdata/auth0_provider_yaml/terraform/envs/bar/bam/fogg.tf
index 0e9c81dd..0bfec612 100644
--- a/testdata/auth0_provider_yaml/terraform/envs/bar/bam/fogg.tf
+++ b/testdata/auth0_provider_yaml/terraform/envs/bar/bam/fogg.tf
@@ -1,13 +1,13 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-provider auth0 {
+provider "auth0" {
   domain = "adomain"
 }
 terraform {
   required_version = "=1.1.1"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "bucket"
 
@@ -71,23 +71,23 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "bar"
 }
-variable project {
+variable "project" {
   type    = string
   default = "foofoo"
 }
-variable component {
+variable "component" {
   type    = string
   default = "bam"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foofoo"
@@ -97,7 +97,7 @@ variable tags {
     managedBy = "terraform"
   }
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -111,7 +111,7 @@ data terraform_remote_state global {
 
   }
 }
-data terraform_remote_state foo {
+data "terraform_remote_state" "foo" {
   backend = "s3"
   config = {
 
@@ -125,8 +125,8 @@ data terraform_remote_state foo {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/auth0_provider_yaml/terraform/global/fogg.tf b/testdata/auth0_provider_yaml/terraform/global/fogg.tf
index 27e3b5db..05858a91 100644
--- a/testdata/auth0_provider_yaml/terraform/global/fogg.tf
+++ b/testdata/auth0_provider_yaml/terraform/global/fogg.tf
@@ -1,13 +1,13 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-provider auth0 {
+provider "auth0" {
   domain = "adomain"
 }
 terraform {
   required_version = "=1.1.1"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "bucket"
 
@@ -71,23 +71,23 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = ""
 }
-variable project {
+variable "project" {
   type    = string
   default = "foofoo"
 }
-variable component {
+variable "component" {
   type    = string
   default = "global"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foofoo"
@@ -97,8 +97,8 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/bless_provider_yaml/scripts/component.mk b/testdata/bless_provider_yaml/scripts/component.mk
index ecd75eba..0caacd7f 100644
--- a/testdata/bless_provider_yaml/scripts/component.mk
+++ b/testdata/bless_provider_yaml/scripts/component.mk
@@ -33,12 +33,7 @@ endif
 .PHONY: lint-tflint
 
 lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
-	@printf "fmt check: "
-	@for f in $(TF); do \
-		printf . \
-		$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true $$f || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-terraform-fmt
 
 check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
diff --git a/testdata/bless_provider_yaml/scripts/module.mk b/testdata/bless_provider_yaml/scripts/module.mk
index d8353c0d..3de23397 100644
--- a/testdata/bless_provider_yaml/scripts/module.mk
+++ b/testdata/bless_provider_yaml/scripts/module.mk
@@ -9,26 +9,20 @@ all: fmt lint doc
 .PHONY: all
 
 fmt: terraform ## run terraform fmt on this module
-	@printf "fmt: ";
-	@for f in $(TF); do printf .; $(terraform_command) fmt $(TF_ARGS) $$f; done
-	@echo
+	@$(terraform_command) fmt $(TF_ARGS)
 .PHONY: fmt
 
 check: lint check-docs ## run all checks on this module
 .PHONY: check
 
-lint: lint-tf ## run all linters on this module
+lint: lint-tf check-docs ## run all linters on this module
 .PHONY: lint
 
 lint-tf: terraform ## run terraform linters on this module
-	@printf "fmt: ";
-	@for f in $(TF); do \
-	  printf .; $(terraform_command) fmt $(TF_ARGS) --check=true --diff=true || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-tf
 
-readme: ## update this module's README.md 
+readme: ## update this module's README.md
 	bash $(REPO_ROOT)/scripts/update-readme.sh update
 .PHONY: readme
 
@@ -39,6 +33,7 @@ check-docs: ## check that this module's docs are up-to-date
 	@bash $(REPO_ROOT)/scripts/update-readme.sh check; \
 	if [ ! $$? -eq 0 ];  then \
 		echo "Docs are out of date, run \`make docs\`"; \
+		exit 1 ; \
 	fi
 .PHONY: check-docs
 
diff --git a/testdata/bless_provider_yaml/terraform/accounts/foo/fogg.tf b/testdata/bless_provider_yaml/terraform/accounts/foo/fogg.tf
index ff487620..feb2a9e6 100644
--- a/testdata/bless_provider_yaml/terraform/accounts/foo/fogg.tf
+++ b/testdata/bless_provider_yaml/terraform/accounts/foo/fogg.tf
@@ -1,17 +1,17 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-provider bless {
+provider "bless" {
   region  = "bar"
   profile = "foofoofoo"
 }
-provider bless {
+provider "bless" {
   alias  = "a"
   region = "a"
 
   profile = "foofoofoo"
 }
-provider bless {
+provider "bless" {
   alias  = "b"
   region = "b"
 
@@ -20,7 +20,7 @@ provider bless {
 terraform {
   required_version = "=1.1.1"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "bucket"
 
@@ -84,27 +84,27 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "accounts"
 }
-variable project {
+variable "project" {
   type    = string
   default = "foofoo"
 }
-variable component {
+variable "component" {
   type    = string
   default = "foo"
 }
-variable account {
+variable "account" {
   type    = string
   default = "foo"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foofoo"
@@ -114,7 +114,7 @@ variable tags {
     managedBy = "terraform"
   }
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -128,7 +128,7 @@ data terraform_remote_state global {
 
   }
 }
-data terraform_remote_state foo {
+data "terraform_remote_state" "foo" {
   backend = "s3"
   config = {
 
@@ -142,8 +142,8 @@ data terraform_remote_state foo {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/bless_provider_yaml/terraform/envs/bar/bam/fogg.tf b/testdata/bless_provider_yaml/terraform/envs/bar/bam/fogg.tf
index 2a407ab1..cc23fc3d 100644
--- a/testdata/bless_provider_yaml/terraform/envs/bar/bam/fogg.tf
+++ b/testdata/bless_provider_yaml/terraform/envs/bar/bam/fogg.tf
@@ -1,17 +1,17 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-provider bless {
+provider "bless" {
   region  = "bar"
   profile = "foofoofoo"
 }
-provider bless {
+provider "bless" {
   alias  = "a"
   region = "a"
 
   profile = "foofoofoo"
 }
-provider bless {
+provider "bless" {
   alias  = "b"
   region = "b"
 
@@ -20,7 +20,7 @@ provider bless {
 terraform {
   required_version = "=1.1.1"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "bucket"
 
@@ -84,23 +84,23 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "bar"
 }
-variable project {
+variable "project" {
   type    = string
   default = "foofoo"
 }
-variable component {
+variable "component" {
   type    = string
   default = "bam"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foofoo"
@@ -110,7 +110,7 @@ variable tags {
     managedBy = "terraform"
   }
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -124,7 +124,7 @@ data terraform_remote_state global {
 
   }
 }
-data terraform_remote_state foo {
+data "terraform_remote_state" "foo" {
   backend = "s3"
   config = {
 
@@ -138,8 +138,8 @@ data terraform_remote_state foo {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/bless_provider_yaml/terraform/global/fogg.tf b/testdata/bless_provider_yaml/terraform/global/fogg.tf
index 211cf7a1..27d070a9 100644
--- a/testdata/bless_provider_yaml/terraform/global/fogg.tf
+++ b/testdata/bless_provider_yaml/terraform/global/fogg.tf
@@ -1,17 +1,17 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-provider bless {
+provider "bless" {
   region  = "bar"
   profile = "foofoofoo"
 }
-provider bless {
+provider "bless" {
   alias  = "a"
   region = "a"
 
   profile = "foofoofoo"
 }
-provider bless {
+provider "bless" {
   alias  = "b"
   region = "b"
 
@@ -20,7 +20,7 @@ provider bless {
 terraform {
   required_version = "=1.1.1"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "bucket"
 
@@ -84,23 +84,23 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = ""
 }
-variable project {
+variable "project" {
   type    = string
   default = "foofoo"
 }
-variable component {
+variable "component" {
   type    = string
   default = "global"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foofoo"
@@ -110,8 +110,8 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/circleci/scripts/component.mk b/testdata/circleci/scripts/component.mk
index ecd75eba..0caacd7f 100644
--- a/testdata/circleci/scripts/component.mk
+++ b/testdata/circleci/scripts/component.mk
@@ -33,12 +33,7 @@ endif
 .PHONY: lint-tflint
 
 lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
-	@printf "fmt check: "
-	@for f in $(TF); do \
-		printf . \
-		$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true $$f || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-terraform-fmt
 
 check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
diff --git a/testdata/circleci/scripts/module.mk b/testdata/circleci/scripts/module.mk
index d8353c0d..3de23397 100644
--- a/testdata/circleci/scripts/module.mk
+++ b/testdata/circleci/scripts/module.mk
@@ -9,26 +9,20 @@ all: fmt lint doc
 .PHONY: all
 
 fmt: terraform ## run terraform fmt on this module
-	@printf "fmt: ";
-	@for f in $(TF); do printf .; $(terraform_command) fmt $(TF_ARGS) $$f; done
-	@echo
+	@$(terraform_command) fmt $(TF_ARGS)
 .PHONY: fmt
 
 check: lint check-docs ## run all checks on this module
 .PHONY: check
 
-lint: lint-tf ## run all linters on this module
+lint: lint-tf check-docs ## run all linters on this module
 .PHONY: lint
 
 lint-tf: terraform ## run terraform linters on this module
-	@printf "fmt: ";
-	@for f in $(TF); do \
-	  printf .; $(terraform_command) fmt $(TF_ARGS) --check=true --diff=true || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-tf
 
-readme: ## update this module's README.md 
+readme: ## update this module's README.md
 	bash $(REPO_ROOT)/scripts/update-readme.sh update
 .PHONY: readme
 
@@ -39,6 +33,7 @@ check-docs: ## check that this module's docs are up-to-date
 	@bash $(REPO_ROOT)/scripts/update-readme.sh check; \
 	if [ ! $$? -eq 0 ];  then \
 		echo "Docs are out of date, run \`make docs\`"; \
+		exit 1 ; \
 	fi
 .PHONY: check-docs
 
diff --git a/testdata/circleci/terraform/global/fogg.tf b/testdata/circleci/terraform/global/fogg.tf
index 39dcb386..00212455 100644
--- a/testdata/circleci/terraform/global/fogg.tf
+++ b/testdata/circleci/terraform/global/fogg.tf
@@ -3,7 +3,7 @@
 terraform {
   required_version = "=1.1.1"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "bucket"
 
@@ -60,23 +60,23 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = ""
 }
-variable project {
+variable "project" {
   type    = string
   default = "foo"
 }
-variable component {
+variable "component" {
   type    = string
   default = "global"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foo"
@@ -86,8 +86,8 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/github_actions/.github/workflows/fogg_ci.yml b/testdata/github_actions/.github/workflows/fogg_ci.yml
index 5c21195d..8560d032 100644
--- a/testdata/github_actions/.github/workflows/fogg_ci.yml
+++ b/testdata/github_actions/.github/workflows/fogg_ci.yml
@@ -13,8 +13,11 @@ jobs:
         with:
           python-version: '3.6'
       - run: |
+          mkdir /tmp/terraform-docs
+          cd /tmp/terraform-docs
+
           # https://terraform-docs.io/user-guide/installation/#pre-compiled-binary
-          curl -sSLo ./terraform-docs.tar.gz https://terraform-docs.io/dl/v0.14.1/terraform-docs-v0.14.1-$(uname)-amd64.tar.gz
+          curl -sSLo ./terraform-docs.tar.gz https://github.com/terraform-docs/terraform-docs/releases/download/v0.16.0/terraform-docs-v0.16.0-linux-amd64.tar.gz
           tar -xzf terraform-docs.tar.gz
           chmod +x terraform-docs
           echo "$PWD" >> $GITHUB_PATH
@@ -43,8 +46,11 @@ jobs:
         with:
           python-version: '3.6'
       - run: |
+          mkdir /tmp/terraform-docs
+          cd /tmp/terraform-docs
+
           # https://terraform-docs.io/user-guide/installation/#pre-compiled-binary
-          curl -sSLo ./terraform-docs.tar.gz https://terraform-docs.io/dl/v0.14.1/terraform-docs-v0.14.1-$(uname)-amd64.tar.gz
+          curl -sSLo ./terraform-docs.tar.gz https://github.com/terraform-docs/terraform-docs/releases/download/v0.16.0/terraform-docs-v0.16.0-linux-amd64.tar.gz
           tar -xzf terraform-docs.tar.gz
           chmod +x terraform-docs
           echo "$PWD" >> $GITHUB_PATH
@@ -70,8 +76,11 @@ jobs:
         with:
           python-version: '3.6'
       - run: |
+          mkdir /tmp/terraform-docs
+          cd /tmp/terraform-docs
+
           # https://terraform-docs.io/user-guide/installation/#pre-compiled-binary
-          curl -sSLo ./terraform-docs.tar.gz https://terraform-docs.io/dl/v0.14.1/terraform-docs-v0.14.1-$(uname)-amd64.tar.gz
+          curl -sSLo ./terraform-docs.tar.gz https://github.com/terraform-docs/terraform-docs/releases/download/v0.16.0/terraform-docs-v0.16.0-linux-amd64.tar.gz
           tar -xzf terraform-docs.tar.gz
           chmod +x terraform-docs
           echo "$PWD" >> $GITHUB_PATH
@@ -97,8 +106,11 @@ jobs:
         with:
           python-version: '3.6'
       - run: |
+          mkdir /tmp/terraform-docs
+          cd /tmp/terraform-docs
+
           # https://terraform-docs.io/user-guide/installation/#pre-compiled-binary
-          curl -sSLo ./terraform-docs.tar.gz https://terraform-docs.io/dl/v0.14.1/terraform-docs-v0.14.1-$(uname)-amd64.tar.gz
+          curl -sSLo ./terraform-docs.tar.gz https://github.com/terraform-docs/terraform-docs/releases/download/v0.16.0/terraform-docs-v0.16.0-linux-amd64.tar.gz
           tar -xzf terraform-docs.tar.gz
           chmod +x terraform-docs
           echo "$PWD" >> $GITHUB_PATH
@@ -124,8 +136,11 @@ jobs:
         with:
           python-version: '3.6'
       - run: |
+          mkdir /tmp/terraform-docs
+          cd /tmp/terraform-docs
+
           # https://terraform-docs.io/user-guide/installation/#pre-compiled-binary
-          curl -sSLo ./terraform-docs.tar.gz https://terraform-docs.io/dl/v0.14.1/terraform-docs-v0.14.1-$(uname)-amd64.tar.gz
+          curl -sSLo ./terraform-docs.tar.gz https://github.com/terraform-docs/terraform-docs/releases/download/v0.16.0/terraform-docs-v0.16.0-linux-amd64.tar.gz
           tar -xzf terraform-docs.tar.gz
           chmod +x terraform-docs
           echo "$PWD" >> $GITHUB_PATH
@@ -151,8 +166,11 @@ jobs:
         with:
           python-version: '3.6'
       - run: |
+          mkdir /tmp/terraform-docs
+          cd /tmp/terraform-docs
+
           # https://terraform-docs.io/user-guide/installation/#pre-compiled-binary
-          curl -sSLo ./terraform-docs.tar.gz https://terraform-docs.io/dl/v0.14.1/terraform-docs-v0.14.1-$(uname)-amd64.tar.gz
+          curl -sSLo ./terraform-docs.tar.gz https://github.com/terraform-docs/terraform-docs/releases/download/v0.16.0/terraform-docs-v0.16.0-linux-amd64.tar.gz
           tar -xzf terraform-docs.tar.gz
           chmod +x terraform-docs
           echo "$PWD" >> $GITHUB_PATH
@@ -178,8 +196,11 @@ jobs:
         with:
           python-version: '3.6'
       - run: |
+          mkdir /tmp/terraform-docs
+          cd /tmp/terraform-docs
+
           # https://terraform-docs.io/user-guide/installation/#pre-compiled-binary
-          curl -sSLo ./terraform-docs.tar.gz https://terraform-docs.io/dl/v0.14.1/terraform-docs-v0.14.1-$(uname)-amd64.tar.gz
+          curl -sSLo ./terraform-docs.tar.gz https://github.com/terraform-docs/terraform-docs/releases/download/v0.16.0/terraform-docs-v0.16.0-linux-amd64.tar.gz
           tar -xzf terraform-docs.tar.gz
           chmod +x terraform-docs
           echo "$PWD" >> $GITHUB_PATH
diff --git a/testdata/github_actions/scripts/component.mk b/testdata/github_actions/scripts/component.mk
index ecd75eba..0caacd7f 100644
--- a/testdata/github_actions/scripts/component.mk
+++ b/testdata/github_actions/scripts/component.mk
@@ -33,12 +33,7 @@ endif
 .PHONY: lint-tflint
 
 lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
-	@printf "fmt check: "
-	@for f in $(TF); do \
-		printf . \
-		$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true $$f || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-terraform-fmt
 
 check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
diff --git a/testdata/github_actions/scripts/module.mk b/testdata/github_actions/scripts/module.mk
index d8353c0d..3de23397 100644
--- a/testdata/github_actions/scripts/module.mk
+++ b/testdata/github_actions/scripts/module.mk
@@ -9,26 +9,20 @@ all: fmt lint doc
 .PHONY: all
 
 fmt: terraform ## run terraform fmt on this module
-	@printf "fmt: ";
-	@for f in $(TF); do printf .; $(terraform_command) fmt $(TF_ARGS) $$f; done
-	@echo
+	@$(terraform_command) fmt $(TF_ARGS)
 .PHONY: fmt
 
 check: lint check-docs ## run all checks on this module
 .PHONY: check
 
-lint: lint-tf ## run all linters on this module
+lint: lint-tf check-docs ## run all linters on this module
 .PHONY: lint
 
 lint-tf: terraform ## run terraform linters on this module
-	@printf "fmt: ";
-	@for f in $(TF); do \
-	  printf .; $(terraform_command) fmt $(TF_ARGS) --check=true --diff=true || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-tf
 
-readme: ## update this module's README.md 
+readme: ## update this module's README.md
 	bash $(REPO_ROOT)/scripts/update-readme.sh update
 .PHONY: readme
 
@@ -39,6 +33,7 @@ check-docs: ## check that this module's docs are up-to-date
 	@bash $(REPO_ROOT)/scripts/update-readme.sh check; \
 	if [ ! $$? -eq 0 ];  then \
 		echo "Docs are out of date, run \`make docs\`"; \
+		exit 1 ; \
 	fi
 .PHONY: check-docs
 
diff --git a/testdata/github_actions/terraform/global/fogg.tf b/testdata/github_actions/terraform/global/fogg.tf
index 39dcb386..00212455 100644
--- a/testdata/github_actions/terraform/global/fogg.tf
+++ b/testdata/github_actions/terraform/global/fogg.tf
@@ -3,7 +3,7 @@
 terraform {
   required_version = "=1.1.1"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "bucket"
 
@@ -60,23 +60,23 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = ""
 }
-variable project {
+variable "project" {
   type    = string
   default = "foo"
 }
-variable component {
+variable "component" {
   type    = string
   default = "global"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foo"
@@ -86,8 +86,8 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/github_provider_yaml/scripts/component.mk b/testdata/github_provider_yaml/scripts/component.mk
index ecd75eba..0caacd7f 100644
--- a/testdata/github_provider_yaml/scripts/component.mk
+++ b/testdata/github_provider_yaml/scripts/component.mk
@@ -33,12 +33,7 @@ endif
 .PHONY: lint-tflint
 
 lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
-	@printf "fmt check: "
-	@for f in $(TF); do \
-		printf . \
-		$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true $$f || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-terraform-fmt
 
 check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
diff --git a/testdata/github_provider_yaml/scripts/module.mk b/testdata/github_provider_yaml/scripts/module.mk
index d8353c0d..3de23397 100644
--- a/testdata/github_provider_yaml/scripts/module.mk
+++ b/testdata/github_provider_yaml/scripts/module.mk
@@ -9,26 +9,20 @@ all: fmt lint doc
 .PHONY: all
 
 fmt: terraform ## run terraform fmt on this module
-	@printf "fmt: ";
-	@for f in $(TF); do printf .; $(terraform_command) fmt $(TF_ARGS) $$f; done
-	@echo
+	@$(terraform_command) fmt $(TF_ARGS)
 .PHONY: fmt
 
 check: lint check-docs ## run all checks on this module
 .PHONY: check
 
-lint: lint-tf ## run all linters on this module
+lint: lint-tf check-docs ## run all linters on this module
 .PHONY: lint
 
 lint-tf: terraform ## run terraform linters on this module
-	@printf "fmt: ";
-	@for f in $(TF); do \
-	  printf .; $(terraform_command) fmt $(TF_ARGS) --check=true --diff=true || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-tf
 
-readme: ## update this module's README.md 
+readme: ## update this module's README.md
 	bash $(REPO_ROOT)/scripts/update-readme.sh update
 .PHONY: readme
 
@@ -39,6 +33,7 @@ check-docs: ## check that this module's docs are up-to-date
 	@bash $(REPO_ROOT)/scripts/update-readme.sh check; \
 	if [ ! $$? -eq 0 ];  then \
 		echo "Docs are out of date, run \`make docs\`"; \
+		exit 1 ; \
 	fi
 .PHONY: check-docs
 
diff --git a/testdata/github_provider_yaml/terraform/accounts/foo/fogg.tf b/testdata/github_provider_yaml/terraform/accounts/foo/fogg.tf
index 5def8c91..7865e4c9 100644
--- a/testdata/github_provider_yaml/terraform/accounts/foo/fogg.tf
+++ b/testdata/github_provider_yaml/terraform/accounts/foo/fogg.tf
@@ -1,14 +1,14 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-provider github {
+provider "github" {
   organization = "foo"
   base_url     = "https://example.com/"
 }
 terraform {
   required_version = "=1.1.1"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "bucket"
 
@@ -70,27 +70,27 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "accounts"
 }
-variable project {
+variable "project" {
   type    = string
   default = "foo"
 }
-variable component {
+variable "component" {
   type    = string
   default = "foo"
 }
-variable account {
+variable "account" {
   type    = string
   default = "foo"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foo"
@@ -100,7 +100,7 @@ variable tags {
     managedBy = "terraform"
   }
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -114,7 +114,7 @@ data terraform_remote_state global {
 
   }
 }
-data terraform_remote_state foo {
+data "terraform_remote_state" "foo" {
   backend = "s3"
   config = {
 
@@ -128,8 +128,8 @@ data terraform_remote_state foo {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/github_provider_yaml/terraform/envs/bar/bam/fogg.tf b/testdata/github_provider_yaml/terraform/envs/bar/bam/fogg.tf
index e614f0b2..623bff62 100644
--- a/testdata/github_provider_yaml/terraform/envs/bar/bam/fogg.tf
+++ b/testdata/github_provider_yaml/terraform/envs/bar/bam/fogg.tf
@@ -1,14 +1,14 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-provider github {
+provider "github" {
   organization = "foo"
   base_url     = "https://example.com/"
 }
 terraform {
   required_version = "=1.1.1"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "bucket"
 
@@ -70,23 +70,23 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "bar"
 }
-variable project {
+variable "project" {
   type    = string
   default = "foo"
 }
-variable component {
+variable "component" {
   type    = string
   default = "bam"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foo"
@@ -96,7 +96,7 @@ variable tags {
     managedBy = "terraform"
   }
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -110,7 +110,7 @@ data terraform_remote_state global {
 
   }
 }
-data terraform_remote_state foo {
+data "terraform_remote_state" "foo" {
   backend = "s3"
   config = {
 
@@ -124,8 +124,8 @@ data terraform_remote_state foo {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/github_provider_yaml/terraform/global/fogg.tf b/testdata/github_provider_yaml/terraform/global/fogg.tf
index 30fed1ce..8a6c1ace 100644
--- a/testdata/github_provider_yaml/terraform/global/fogg.tf
+++ b/testdata/github_provider_yaml/terraform/global/fogg.tf
@@ -1,14 +1,14 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-provider github {
+provider "github" {
   organization = "foo"
   base_url     = "https://example.com/"
 }
 terraform {
   required_version = "=1.1.1"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "bucket"
 
@@ -70,23 +70,23 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = ""
 }
-variable project {
+variable "project" {
   type    = string
   default = "foo"
 }
-variable component {
+variable "component" {
   type    = string
   default = "global"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foo"
@@ -96,8 +96,8 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/okta_provider_yaml/scripts/component.mk b/testdata/okta_provider_yaml/scripts/component.mk
index ecd75eba..0caacd7f 100644
--- a/testdata/okta_provider_yaml/scripts/component.mk
+++ b/testdata/okta_provider_yaml/scripts/component.mk
@@ -33,12 +33,7 @@ endif
 .PHONY: lint-tflint
 
 lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
-	@printf "fmt check: "
-	@for f in $(TF); do \
-		printf . \
-		$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true $$f || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-terraform-fmt
 
 check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
diff --git a/testdata/okta_provider_yaml/scripts/module.mk b/testdata/okta_provider_yaml/scripts/module.mk
index d8353c0d..3de23397 100644
--- a/testdata/okta_provider_yaml/scripts/module.mk
+++ b/testdata/okta_provider_yaml/scripts/module.mk
@@ -9,26 +9,20 @@ all: fmt lint doc
 .PHONY: all
 
 fmt: terraform ## run terraform fmt on this module
-	@printf "fmt: ";
-	@for f in $(TF); do printf .; $(terraform_command) fmt $(TF_ARGS) $$f; done
-	@echo
+	@$(terraform_command) fmt $(TF_ARGS)
 .PHONY: fmt
 
 check: lint check-docs ## run all checks on this module
 .PHONY: check
 
-lint: lint-tf ## run all linters on this module
+lint: lint-tf check-docs ## run all linters on this module
 .PHONY: lint
 
 lint-tf: terraform ## run terraform linters on this module
-	@printf "fmt: ";
-	@for f in $(TF); do \
-	  printf .; $(terraform_command) fmt $(TF_ARGS) --check=true --diff=true || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-tf
 
-readme: ## update this module's README.md 
+readme: ## update this module's README.md
 	bash $(REPO_ROOT)/scripts/update-readme.sh update
 .PHONY: readme
 
@@ -39,6 +33,7 @@ check-docs: ## check that this module's docs are up-to-date
 	@bash $(REPO_ROOT)/scripts/update-readme.sh check; \
 	if [ ! $$? -eq 0 ];  then \
 		echo "Docs are out of date, run \`make docs\`"; \
+		exit 1 ; \
 	fi
 .PHONY: check-docs
 
diff --git a/testdata/okta_provider_yaml/terraform/accounts/foo/fogg.tf b/testdata/okta_provider_yaml/terraform/accounts/foo/fogg.tf
index 32ed64cd..97cad79f 100644
--- a/testdata/okta_provider_yaml/terraform/accounts/foo/fogg.tf
+++ b/testdata/okta_provider_yaml/terraform/accounts/foo/fogg.tf
@@ -1,14 +1,14 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-provider okta {
+provider "okta" {
   org_name = "orgname"
   base_url = "oktapreview.com"
 }
 terraform {
   required_version = "=1.1.1"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "bucket"
 
@@ -72,27 +72,27 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "accounts"
 }
-variable project {
+variable "project" {
   type    = string
   default = "foofoo"
 }
-variable component {
+variable "component" {
   type    = string
   default = "foo"
 }
-variable account {
+variable "account" {
   type    = string
   default = "foo"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foofoo"
@@ -102,7 +102,7 @@ variable tags {
     managedBy = "terraform"
   }
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -116,7 +116,7 @@ data terraform_remote_state global {
 
   }
 }
-data terraform_remote_state foo {
+data "terraform_remote_state" "foo" {
   backend = "s3"
   config = {
 
@@ -130,8 +130,8 @@ data terraform_remote_state foo {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/okta_provider_yaml/terraform/envs/bar/bam/fogg.tf b/testdata/okta_provider_yaml/terraform/envs/bar/bam/fogg.tf
index 768c5781..a7cf3a35 100644
--- a/testdata/okta_provider_yaml/terraform/envs/bar/bam/fogg.tf
+++ b/testdata/okta_provider_yaml/terraform/envs/bar/bam/fogg.tf
@@ -1,14 +1,14 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-provider okta {
+provider "okta" {
   org_name = "orgname"
   base_url = "oktapreview.com"
 }
 terraform {
   required_version = "=1.1.1"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "bucket"
 
@@ -72,23 +72,23 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "bar"
 }
-variable project {
+variable "project" {
   type    = string
   default = "foofoo"
 }
-variable component {
+variable "component" {
   type    = string
   default = "bam"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foofoo"
@@ -98,7 +98,7 @@ variable tags {
     managedBy = "terraform"
   }
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -112,7 +112,7 @@ data terraform_remote_state global {
 
   }
 }
-data terraform_remote_state foo {
+data "terraform_remote_state" "foo" {
   backend = "s3"
   config = {
 
@@ -126,8 +126,8 @@ data terraform_remote_state foo {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/okta_provider_yaml/terraform/global/fogg.tf b/testdata/okta_provider_yaml/terraform/global/fogg.tf
index f15fc7d8..1f9585d9 100644
--- a/testdata/okta_provider_yaml/terraform/global/fogg.tf
+++ b/testdata/okta_provider_yaml/terraform/global/fogg.tf
@@ -1,14 +1,14 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-provider okta {
+provider "okta" {
   org_name = "orgname"
   base_url = "oktapreview.com"
 }
 terraform {
   required_version = "=1.1.1"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "bucket"
 
@@ -72,23 +72,23 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = ""
 }
-variable project {
+variable "project" {
   type    = string
   default = "foofoo"
 }
-variable component {
+variable "component" {
   type    = string
   default = "global"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foofoo"
@@ -98,8 +98,8 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/remote_backend_yaml/.fogg-version b/testdata/remote_backend_yaml/.fogg-version
index 2d5cfc01..64e78fd8 100644
--- a/testdata/remote_backend_yaml/.fogg-version
+++ b/testdata/remote_backend_yaml/.fogg-version
@@ -1,1 +1,1 @@
-undefined+undefined+dirty
\ No newline at end of file
+undefined-pre+undefined.dirty
\ No newline at end of file
diff --git a/testdata/remote_backend_yaml/.gitattributes b/testdata/remote_backend_yaml/.gitattributes
index 2f819c43..ebf21819 100644
--- a/testdata/remote_backend_yaml/.gitattributes
+++ b/testdata/remote_backend_yaml/.gitattributes
@@ -2,3 +2,4 @@ fogg.tf linguist-generated
 Makefile linguist-generated
 .travis.yml linguist-generated
 .circleci/config.yml linguist-generated
+.terraformignore linguist-generated
diff --git a/testdata/remote_backend_yaml/.gitignore b/testdata/remote_backend_yaml/.gitignore
index 69565ae8..16291b8b 100644
--- a/testdata/remote_backend_yaml/.gitignore
+++ b/testdata/remote_backend_yaml/.gitignore
@@ -22,12 +22,16 @@
 *.swk
 
 .fogg
-/terraform.d
+/terraform.d/plugins
+/terraform.d/modules
 
 .DS_Store
 .vscode
 .envrc
 
+# Scala language server
+.metals
+
 buildevents.plan
 check-plan.output
 
diff --git a/testdata/remote_backend_yaml/.terraformignore b/testdata/remote_backend_yaml/.terraformignore
new file mode 100644
index 00000000..e472f375
--- /dev/null
+++ b/testdata/remote_backend_yaml/.terraformignore
@@ -0,0 +1,10 @@
+# Auto-generated by fogg. Do not edit
+# Make improvements in fogg, so that everyone can benefit.
+
+
+.fogg/
+terraform.d/**
+**/terraform.d
+**/.terraform.d/**
+**/.terraform/**
+**/.git/**
diff --git a/testdata/remote_backend_yaml/Makefile b/testdata/remote_backend_yaml/Makefile
index 16a8275a..89341231 100644
--- a/testdata/remote_backend_yaml/Makefile
+++ b/testdata/remote_backend_yaml/Makefile
@@ -10,7 +10,7 @@ ACCOUNTS=acct1
 all: check
 
 setup: ## set up working directory by installing dependencies
-	curl -s https://raw.githubusercontent.com/chanzuckerberg/fogg/master/download.sh | bash -s -- -b .fogg/bin vundefined+undefined+dirty
+	curl -s https://raw.githubusercontent.com/chanzuckerberg/fogg/vundefined-pre+undefined.dirty/download.sh | bash -s -- -b .fogg/bin vundefined-pre+undefined.dirty
 	.fogg/bin/fogg setup
 .PHONY: setup
 
@@ -39,9 +39,13 @@ lint-modules: ## lint the terraform code in terraform/modules
 	done
 .PHONY: lint-modules
 
-fmt: fmt-accounts fmt-envs fmt-global fmt-modules ## format code in this repo
+fmt: fmt-fogg fmt-accounts fmt-envs fmt-global fmt-modules ## format code in this repo
 .PHONY: fmt
 
+fmt-fogg:
+	.fogg/bin/fogg fmt
+.PHONY: fmt-fogg
+
 fmt-accounts: ## format code in terraform/accounts
 	@for account in $(ACCOUNTS); do \
 		$(MAKE) -C terraform/accounts/$$account fmt || exit $$?; \
diff --git a/testdata/remote_backend_yaml/scripts/common.mk b/testdata/remote_backend_yaml/scripts/common.mk
index 7ce87601..0a154791 100644
--- a/testdata/remote_backend_yaml/scripts/common.mk
+++ b/testdata/remote_backend_yaml/scripts/common.mk
@@ -6,14 +6,20 @@ TF_VARS := $(patsubst %,-e%,$(filter TF_VAR_%,$(.VARIABLES)))
 REPO_ROOT := $(shell git rev-parse --show-toplevel)
 REPO_RELATIVE_PATH := $(shell git rev-parse --show-prefix)
 AUTO_APPROVE := false
-REFRESH_ENABLED ?= true # Should terraform refresh during plan/apply
+export AWS_SDK_LOAD_CONFIG := 1
 
 TFENV_DIR ?= $(REPO_ROOT)/.fogg/tfenv
 export PATH :=$(TFENV_DIR)/libexec:$(TFENV_DIR)/versions/$(TERRAFORM_VERSION)/:$(REPO_ROOT)/.fogg/bin:$(PATH)
 export TF_PLUGIN_CACHE_DIR=$(REPO_ROOT)/.terraform.d/plugin-cache
 export TF_IN_AUTOMATION=1
 terraform_command ?= $(TFENV_DIR)/versions/$(TERRAFORM_VERSION)/terraform
-MODE ?= local
+
+ifeq ($(TF_BACKEND_KIND),remote)
+	REFRESH := true
+else
+	REFRESH := false
+endif
+
 
 tfenv: ## install the tfenv tool
 	@if [ ! -d ${TFENV_DIR} ]; then \
diff --git a/testdata/remote_backend_yaml/scripts/component.mk b/testdata/remote_backend_yaml/scripts/component.mk
index c7b8d430..0caacd7f 100644
--- a/testdata/remote_backend_yaml/scripts/component.mk
+++ b/testdata/remote_backend_yaml/scripts/component.mk
@@ -33,12 +33,7 @@ endif
 .PHONY: lint-tflint
 
 lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
-	@printf "fmt check: "
-	@for f in $(TF); do \
-		printf . \
-		$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true $$f || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-terraform-fmt
 
 check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
@@ -48,13 +43,16 @@ check-auth-aws:
 	@for p in $(AWS_BACKEND_PROFILE) $(AWS_PROVIDER_PROFILE); do \
 		aws --profile $$p sts get-caller-identity > /dev/null || (echo "AWS AUTH error. This component is configured to use a profile named '$$p'. Please add one to your ~/.aws/config" && exit -1); \
 	done
+	@for r in $(AWS_BACKEND_ROLE_ARN) $(AWS_PROVIDER_ROLE_ARN); do \
+		aws sts assume-role --role-arn $$r --role-session-name fogg-auth-test > /dev/null || (echo "AWS AUTH error. This component is configured to use a role named '$$r'." && exit -1); \
+	done
 .PHONY: check-auth-aws
 
 check-auth-heroku:
 ifeq ($(HEROKU_PROVIDER),1)
 	@echo "Checking heroku auth..."
 	@if command heroku >/dev/null; then \
-		heroku auth:whoami || (echo "Not authenticated to heroku. For SSO accounts, run 'heroku login', for non-sso accounts set HEROKU_EMAIL and HEROKU_API_KEY" && exit -1); \
+		heroku auth:whoami || timeout 15 heroku auth:login || (echo "Not authenticated to heroku. For SSO accounts, run 'heroku login', for non-sso accounts set HEROKU_EMAIL and HEROKU_API_KEY" && exit -1); \
 	else \
 		echo "Heroku CLI not installed, can't check auth."; \
 	fi
@@ -62,12 +60,16 @@ endif
 .PHONY: check-auth-heroku
 
 refresh:
-	@$(terraform_command) refresh $(TF_ARGS)
-	@date +%s > .terraform/refreshed_at
+	@if [ "$(TF_BACKEND_KIND)" != "remote" ]; then \
+		$(terraform_command) refresh $(TF_ARGS); \
+		date +%s > .terraform/refreshed_at; \
+	else \
+		echo "remote backend does not support the refresh command, skipping"; \
+	fi
 .PHONY: refresh
 
 refresh-cached:
-	@last_refresh=`cat .terraform/refreshed_at || echo '0'`; \
+	@last_refresh=`cat .terraform/refreshed_at 2>/dev/null || echo '0'`; \
 	current_time=`date +%s`; \
 	if (( current_time - last_refresh > 600 )); then \
 		echo "It has been awhile since the last refresh. It is time."; \
@@ -78,11 +80,11 @@ refresh-cached:
 .PHONY: refresh-cached
 
 plan: check-auth init fmt refresh-cached ## run a terraform plan
-	@$(terraform_command) plan $(TF_ARGS) -refresh=false -input=false
+	$(terraform_command) plan $(TF_ARGS) -refresh=$(REFRESH) -input=false
 .PHONY: plan
 
 apply: check-auth init refresh ## run a terraform apply
-	@$(terraform_command) apply $(TF_ARGS) -refresh=false -auto-approve=$(AUTO_APPROVE)
+	@$(terraform_command) apply $(TF_ARGS) -refresh=$(REFRESH) -auto-approve=$(AUTO_APPROVE)
 .PHONY: apply
 
 docs:
@@ -102,8 +104,14 @@ init: terraform check-auth ## run terraform init for this component
 .PHONY: init
 
 check-plan: check-auth init refresh-cached ## run a terraform plan and check that it does not fail
-	@$(terraform_command) plan $(TF_ARGS) -detailed-exitcode -lock=false -out=$(CHECK_PLANFILE_PATH) ; \
-	ERR=$$?; \
+	@if [ "$(TF_BACKEND_KIND)" != "remote" ]; then \
+		$(terraform_command) plan $(TF_ARGS) -detailed-exitcode -lock=false -refresh=$(REFRESH) -out=$(CHECK_PLANFILE_PATH) ; \
+		ERR=$$?; \
+		rm $(CHECK_PLANFILE_PATH) 2>/dev/null; \
+	else \
+		$(terraform_command) plan $(TF_ARGS) -detailed-exitcode -lock=false; \
+		ERR=$$?; \
+	fi; \
 	if [ $$ERR -eq 0 ] ; then \
 		echo "Success"; \
 	elif [ $$ERR -eq 1 ] ; then \
@@ -111,11 +119,7 @@ check-plan: check-auth init refresh-cached ## run a terraform plan and check tha
 		exit 1; \
 	elif [ $$ERR -eq 2 ] ; then \
 		echo "Diff";  \
-	fi ; \
-	if [ -n "$(BUILDEVENT_FILE)" ]; then \
-		fogg exp entropy -f $(CHECK_PLANFILE_PATH) -o $(BUILDEVENT_FILE) ; \
-	fi
-	rm $(CHECK_PLANFILE_PATH)
+	fi;
 .PHONY: check-plan
 
 run: check-auth ## run an arbitrary terraform command, CMD. ex `make run CMD='show'`
diff --git a/testdata/remote_backend_yaml/scripts/module.mk b/testdata/remote_backend_yaml/scripts/module.mk
index d8353c0d..3de23397 100644
--- a/testdata/remote_backend_yaml/scripts/module.mk
+++ b/testdata/remote_backend_yaml/scripts/module.mk
@@ -9,26 +9,20 @@ all: fmt lint doc
 .PHONY: all
 
 fmt: terraform ## run terraform fmt on this module
-	@printf "fmt: ";
-	@for f in $(TF); do printf .; $(terraform_command) fmt $(TF_ARGS) $$f; done
-	@echo
+	@$(terraform_command) fmt $(TF_ARGS)
 .PHONY: fmt
 
 check: lint check-docs ## run all checks on this module
 .PHONY: check
 
-lint: lint-tf ## run all linters on this module
+lint: lint-tf check-docs ## run all linters on this module
 .PHONY: lint
 
 lint-tf: terraform ## run terraform linters on this module
-	@printf "fmt: ";
-	@for f in $(TF); do \
-	  printf .; $(terraform_command) fmt $(TF_ARGS) --check=true --diff=true || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-tf
 
-readme: ## update this module's README.md 
+readme: ## update this module's README.md
 	bash $(REPO_ROOT)/scripts/update-readme.sh update
 .PHONY: readme
 
@@ -39,6 +33,7 @@ check-docs: ## check that this module's docs are up-to-date
 	@bash $(REPO_ROOT)/scripts/update-readme.sh check; \
 	if [ ! $$? -eq 0 ];  then \
 		echo "Docs are out of date, run \`make docs\`"; \
+		exit 1 ; \
 	fi
 .PHONY: check-docs
 
diff --git a/templates/templates/common/remote_state.tmpl b/testdata/remote_backend_yaml/terraform.d/.keep
similarity index 100%
rename from templates/templates/common/remote_state.tmpl
rename to testdata/remote_backend_yaml/terraform.d/.keep
diff --git a/testdata/remote_backend_yaml/terraform/accounts/acct1/Makefile b/testdata/remote_backend_yaml/terraform/accounts/acct1/Makefile
index 4f7d6570..41ea6768 100644
--- a/testdata/remote_backend_yaml/terraform/accounts/acct1/Makefile
+++ b/testdata/remote_backend_yaml/terraform/accounts/acct1/Makefile
@@ -1,13 +1,11 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
+
 export TERRAFORM_VERSION := 1.1.1
 export TFLINT_ENABLED := 0
 export TF_PLUGIN_CACHE_DIR := ../../..//.terraform.d/plugin-cache
-
-
-
-
+export TF_BACKEND_KIND := remote
 
 include ../../..//scripts/component.mk
 
diff --git a/testdata/remote_backend_yaml/terraform/accounts/acct1/README.md b/testdata/remote_backend_yaml/terraform/accounts/acct1/README.md
new file mode 100644
index 00000000..e69de29b
diff --git a/testdata/remote_backend_yaml/terraform/accounts/acct1/fogg.tf b/testdata/remote_backend_yaml/terraform/accounts/acct1/fogg.tf
index 88f92d85..e4df3892 100644
--- a/testdata/remote_backend_yaml/terraform/accounts/acct1/fogg.tf
+++ b/testdata/remote_backend_yaml/terraform/accounts/acct1/fogg.tf
@@ -1,106 +1,122 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
+terraform {
+  required_version = "=1.1.1"
 
+  backend "remote" {
 
+    hostname     = "tfe.example.com"
+    organization = "test-org"
+    workspaces = {
+      name = "accounts-acct1"
+    }
 
+  }
+  required_providers {
 
+    archive = {
+      source = "hashicorp/archive"
 
+      version = "~> 2.0"
 
+    }
 
+    local = {
+      source = "hashicorp/local"
 
+      version = "~> 2.0"
 
+    }
 
+    null = {
+      source = "hashicorp/null"
 
+      version = "~> 3.0"
 
+    }
 
+    random = {
+      source = "hashicorp/random"
 
+      version = "~> 2.2"
 
-terraform {
-  required_version = "=1.1.1"
-
-
-  backend "remote" {
+    }
 
+    template = {
+      source = "hashicorp/template"
 
+      version = "~> 2.2"
 
-    hostname     = "tfe.example.com"
-    organization = "test-org"
-    workspaces {
-      name = "accounts/acct1"
     }
 
+    tls = {
+      source = "hashicorp/tls"
 
+      version = "~> 3.0"
 
-  }
+    }
 
+  }
+}
+variable "env" {
+  type    = string
+  default = "accounts"
 }
-
 variable "project" {
   type    = string
   default = "foo"
 }
-
-
-
-
-
+variable "component" {
+  type    = string
+  default = "acct1"
+}
+variable "account" {
+  type    = string
+  default = "acct1"
+}
 variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-
-variable "aws_accounts" {
-  type = map
+variable "tags" {
+  type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
-
-
-
+    project   = "foo"
+    env       = "accounts"
+    service   = "acct1"
+    owner     = "foo@example.com"
+    managedBy = "terraform"
   }
 }
-
-
-
 data "terraform_remote_state" "global" {
   backend = "remote"
-
   config = {
 
 
-
     hostname     = "tfe.example.com"
     organization = "test-org"
-    workspaces {
+    workspaces = {
       name = "global"
     }
 
-
-
   }
 }
+data "terraform_remote_state" "acct1" {
+  backend = "remote"
+  config = {
 
 
+    hostname     = "tfe.example.com"
+    organization = "test-org"
+    workspaces = {
+      name = "accounts-acct1"
+    }
 
-
-provider random {
-  version = "~> 2.2"
-}
-
-provider template {
-  version = "~> 2.1"
-}
-
-provider archive {
-  version = "~> 1.3"
-}
-
-provider null {
-  version = "~> 2.1"
-}
-
-provider local {
-  version = "~> 1.4"
+  }
 }
+variable "aws_accounts" {
+  type = map(string)
+  default = {
 
-provider tls {
-  version = "~> 2.1"
+  }
 }
diff --git a/testdata/remote_backend_yaml/terraform/accounts/acct1/main.tf b/testdata/remote_backend_yaml/terraform/accounts/acct1/main.tf
new file mode 100644
index 00000000..e69de29b
diff --git a/testdata/remote_backend_yaml/terraform/accounts/acct1/outputs.tf b/testdata/remote_backend_yaml/terraform/accounts/acct1/outputs.tf
new file mode 100644
index 00000000..e69de29b
diff --git a/testdata/remote_backend_yaml/terraform/accounts/acct1/variables.tf b/testdata/remote_backend_yaml/terraform/accounts/acct1/variables.tf
new file mode 100644
index 00000000..e69de29b
diff --git a/testdata/remote_backend_yaml/terraform/global/Makefile b/testdata/remote_backend_yaml/terraform/global/Makefile
index a955f8d0..b6c6beac 100644
--- a/testdata/remote_backend_yaml/terraform/global/Makefile
+++ b/testdata/remote_backend_yaml/terraform/global/Makefile
@@ -1,13 +1,11 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
+
 export TERRAFORM_VERSION := 1.1.1
 export TFLINT_ENABLED := 0
 export TF_PLUGIN_CACHE_DIR := ../..//.terraform.d/plugin-cache
-
-
-
-
+export TF_BACKEND_KIND := remote
 
 include ../..//scripts/component.mk
 
diff --git a/testdata/remote_backend_yaml/terraform/global/fogg.tf b/testdata/remote_backend_yaml/terraform/global/fogg.tf
index 41ed603f..da35b8e7 100644
--- a/testdata/remote_backend_yaml/terraform/global/fogg.tf
+++ b/testdata/remote_backend_yaml/terraform/global/fogg.tf
@@ -1,65 +1,81 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
+terraform {
+  required_version = "=1.1.1"
 
+  backend "remote" {
 
+    hostname     = "tfe.example.com"
+    organization = "test-org"
+    workspaces = {
+      name = "global"
+    }
 
+  }
+  required_providers {
 
+    archive = {
+      source = "hashicorp/archive"
 
+      version = "~> 2.0"
 
+    }
 
+    local = {
+      source = "hashicorp/local"
 
+      version = "~> 2.0"
 
+    }
 
+    null = {
+      source = "hashicorp/null"
 
+      version = "~> 3.0"
 
+    }
 
+    random = {
+      source = "hashicorp/random"
 
+      version = "~> 2.2"
 
+    }
 
-terraform {
-  required_version = "~>1.1.1"
-
-  backend "remote" {
-
+    template = {
+      source = "hashicorp/template"
 
+      version = "~> 2.2"
 
-    hostname     = "tfe.example.com"
-    organization = "test-org"
-    workspaces {
-      name = "global"
     }
 
+    tls = {
+      source = "hashicorp/tls"
 
+      version = "~> 3.0"
+
+    }
 
   }
 }
-
 variable "env" {
   type    = string
   default = ""
 }
-
 variable "project" {
   type    = string
   default = "foo"
 }
-
-
-
 variable "component" {
   type    = string
   default = "global"
 }
-
-
-
 variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-
 variable "tags" {
-  type = map(string)
+  type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foo"
     env       = ""
@@ -68,30 +84,9 @@ variable "tags" {
     managedBy = "terraform"
   }
 }
+variable "aws_accounts" {
+  type = map(string)
+  default = {
 
-
-
-
-provider random {
-  version = "~> 2.2"
-}
-
-provider template {
-  version = "~> 2.1"
-}
-
-provider archive {
-  version = "~> 1.3"
-}
-
-provider null {
-  version = "~> 2.1"
-}
-
-provider local {
-  version = "~> 1.4"
-}
-
-provider tls {
-  version = "~> 2.1"
+  }
 }
diff --git a/testdata/snowflake_provider_yaml/scripts/component.mk b/testdata/snowflake_provider_yaml/scripts/component.mk
index ecd75eba..0caacd7f 100644
--- a/testdata/snowflake_provider_yaml/scripts/component.mk
+++ b/testdata/snowflake_provider_yaml/scripts/component.mk
@@ -33,12 +33,7 @@ endif
 .PHONY: lint-tflint
 
 lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
-	@printf "fmt check: "
-	@for f in $(TF); do \
-		printf . \
-		$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true $$f || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-terraform-fmt
 
 check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
diff --git a/testdata/snowflake_provider_yaml/scripts/module.mk b/testdata/snowflake_provider_yaml/scripts/module.mk
index d8353c0d..3de23397 100644
--- a/testdata/snowflake_provider_yaml/scripts/module.mk
+++ b/testdata/snowflake_provider_yaml/scripts/module.mk
@@ -9,26 +9,20 @@ all: fmt lint doc
 .PHONY: all
 
 fmt: terraform ## run terraform fmt on this module
-	@printf "fmt: ";
-	@for f in $(TF); do printf .; $(terraform_command) fmt $(TF_ARGS) $$f; done
-	@echo
+	@$(terraform_command) fmt $(TF_ARGS)
 .PHONY: fmt
 
 check: lint check-docs ## run all checks on this module
 .PHONY: check
 
-lint: lint-tf ## run all linters on this module
+lint: lint-tf check-docs ## run all linters on this module
 .PHONY: lint
 
 lint-tf: terraform ## run terraform linters on this module
-	@printf "fmt: ";
-	@for f in $(TF); do \
-	  printf .; $(terraform_command) fmt $(TF_ARGS) --check=true --diff=true || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-tf
 
-readme: ## update this module's README.md 
+readme: ## update this module's README.md
 	bash $(REPO_ROOT)/scripts/update-readme.sh update
 .PHONY: readme
 
@@ -39,6 +33,7 @@ check-docs: ## check that this module's docs are up-to-date
 	@bash $(REPO_ROOT)/scripts/update-readme.sh check; \
 	if [ ! $$? -eq 0 ];  then \
 		echo "Docs are out of date, run \`make docs\`"; \
+		exit 1 ; \
 	fi
 .PHONY: check-docs
 
diff --git a/testdata/snowflake_provider_yaml/terraform/accounts/foo/fogg.tf b/testdata/snowflake_provider_yaml/terraform/accounts/foo/fogg.tf
index 1d4db678..545cb0f1 100644
--- a/testdata/snowflake_provider_yaml/terraform/accounts/foo/fogg.tf
+++ b/testdata/snowflake_provider_yaml/terraform/accounts/foo/fogg.tf
@@ -1,7 +1,7 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-provider snowflake {
+provider "snowflake" {
   account = "foo"
   role    = "bar"
   region  = "us-west-2"
@@ -9,7 +9,7 @@ provider snowflake {
 terraform {
   required_version = "=1.1.1"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "bucket"
 
@@ -71,27 +71,27 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "accounts"
 }
-variable project {
+variable "project" {
   type    = string
   default = "foo"
 }
-variable component {
+variable "component" {
   type    = string
   default = "foo"
 }
-variable account {
+variable "account" {
   type    = string
   default = "foo"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foo"
@@ -101,7 +101,7 @@ variable tags {
     managedBy = "terraform"
   }
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -115,7 +115,7 @@ data terraform_remote_state global {
 
   }
 }
-data terraform_remote_state foo {
+data "terraform_remote_state" "foo" {
   backend = "s3"
   config = {
 
@@ -129,8 +129,8 @@ data terraform_remote_state foo {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/snowflake_provider_yaml/terraform/envs/bar/bam/fogg.tf b/testdata/snowflake_provider_yaml/terraform/envs/bar/bam/fogg.tf
index 4375e39b..4cfb7ddc 100644
--- a/testdata/snowflake_provider_yaml/terraform/envs/bar/bam/fogg.tf
+++ b/testdata/snowflake_provider_yaml/terraform/envs/bar/bam/fogg.tf
@@ -1,7 +1,7 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-provider snowflake {
+provider "snowflake" {
   account = "foo"
   role    = "bar"
   region  = "us-west-2"
@@ -9,7 +9,7 @@ provider snowflake {
 terraform {
   required_version = "=1.1.1"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "bucket"
 
@@ -71,23 +71,23 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "bar"
 }
-variable project {
+variable "project" {
   type    = string
   default = "foo"
 }
-variable component {
+variable "component" {
   type    = string
   default = "bam"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foo"
@@ -97,7 +97,7 @@ variable tags {
     managedBy = "terraform"
   }
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -111,7 +111,7 @@ data terraform_remote_state global {
 
   }
 }
-data terraform_remote_state foo {
+data "terraform_remote_state" "foo" {
   backend = "s3"
   config = {
 
@@ -125,8 +125,8 @@ data terraform_remote_state foo {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/snowflake_provider_yaml/terraform/global/fogg.tf b/testdata/snowflake_provider_yaml/terraform/global/fogg.tf
index 56c25a0c..35d9d29c 100644
--- a/testdata/snowflake_provider_yaml/terraform/global/fogg.tf
+++ b/testdata/snowflake_provider_yaml/terraform/global/fogg.tf
@@ -1,7 +1,7 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-provider snowflake {
+provider "snowflake" {
   account = "foo"
   role    = "bar"
   region  = "us-west-2"
@@ -9,7 +9,7 @@ provider snowflake {
 terraform {
   required_version = "=1.1.1"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "bucket"
 
@@ -71,23 +71,23 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = ""
 }
-variable project {
+variable "project" {
   type    = string
   default = "foo"
 }
-variable component {
+variable "component" {
   type    = string
   default = "global"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foo"
@@ -97,8 +97,8 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/tfe_provider_yaml/scripts/component.mk b/testdata/tfe_provider_yaml/scripts/component.mk
index ecd75eba..0caacd7f 100644
--- a/testdata/tfe_provider_yaml/scripts/component.mk
+++ b/testdata/tfe_provider_yaml/scripts/component.mk
@@ -33,12 +33,7 @@ endif
 .PHONY: lint-tflint
 
 lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
-	@printf "fmt check: "
-	@for f in $(TF); do \
-		printf . \
-		$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true $$f || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-terraform-fmt
 
 check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
diff --git a/testdata/tfe_provider_yaml/scripts/module.mk b/testdata/tfe_provider_yaml/scripts/module.mk
index d8353c0d..3de23397 100644
--- a/testdata/tfe_provider_yaml/scripts/module.mk
+++ b/testdata/tfe_provider_yaml/scripts/module.mk
@@ -9,26 +9,20 @@ all: fmt lint doc
 .PHONY: all
 
 fmt: terraform ## run terraform fmt on this module
-	@printf "fmt: ";
-	@for f in $(TF); do printf .; $(terraform_command) fmt $(TF_ARGS) $$f; done
-	@echo
+	@$(terraform_command) fmt $(TF_ARGS)
 .PHONY: fmt
 
 check: lint check-docs ## run all checks on this module
 .PHONY: check
 
-lint: lint-tf ## run all linters on this module
+lint: lint-tf check-docs ## run all linters on this module
 .PHONY: lint
 
 lint-tf: terraform ## run terraform linters on this module
-	@printf "fmt: ";
-	@for f in $(TF); do \
-	  printf .; $(terraform_command) fmt $(TF_ARGS) --check=true --diff=true || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-tf
 
-readme: ## update this module's README.md 
+readme: ## update this module's README.md
 	bash $(REPO_ROOT)/scripts/update-readme.sh update
 .PHONY: readme
 
@@ -39,6 +33,7 @@ check-docs: ## check that this module's docs are up-to-date
 	@bash $(REPO_ROOT)/scripts/update-readme.sh check; \
 	if [ ! $$? -eq 0 ];  then \
 		echo "Docs are out of date, run \`make docs\`"; \
+		exit 1 ; \
 	fi
 .PHONY: check-docs
 
diff --git a/testdata/tfe_provider_yaml/terraform/accounts/foo/fogg.tf b/testdata/tfe_provider_yaml/terraform/accounts/foo/fogg.tf
index 29fa956b..25b88951 100644
--- a/testdata/tfe_provider_yaml/terraform/accounts/foo/fogg.tf
+++ b/testdata/tfe_provider_yaml/terraform/accounts/foo/fogg.tf
@@ -1,12 +1,12 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-provider tfe {
+provider "tfe" {
 }
 terraform {
   required_version = "=1.1.1"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "bucket"
 
@@ -70,27 +70,27 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "accounts"
 }
-variable project {
+variable "project" {
   type    = string
   default = "foo"
 }
-variable component {
+variable "component" {
   type    = string
   default = "foo"
 }
-variable account {
+variable "account" {
   type    = string
   default = "foo"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foo"
@@ -100,7 +100,7 @@ variable tags {
     managedBy = "terraform"
   }
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -114,7 +114,7 @@ data terraform_remote_state global {
 
   }
 }
-data terraform_remote_state foo {
+data "terraform_remote_state" "foo" {
   backend = "s3"
   config = {
 
@@ -128,8 +128,8 @@ data terraform_remote_state foo {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/tfe_provider_yaml/terraform/envs/bar/bam/fogg.tf b/testdata/tfe_provider_yaml/terraform/envs/bar/bam/fogg.tf
index 8f29aa41..02f042fa 100644
--- a/testdata/tfe_provider_yaml/terraform/envs/bar/bam/fogg.tf
+++ b/testdata/tfe_provider_yaml/terraform/envs/bar/bam/fogg.tf
@@ -3,7 +3,7 @@
 terraform {
   required_version = "=1.1.1"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "bucket"
 
@@ -60,23 +60,23 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "bar"
 }
-variable project {
+variable "project" {
   type    = string
   default = "foo"
 }
-variable component {
+variable "component" {
   type    = string
   default = "bam"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foo"
@@ -86,7 +86,7 @@ variable tags {
     managedBy = "terraform"
   }
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -100,7 +100,7 @@ data terraform_remote_state global {
 
   }
 }
-data terraform_remote_state foo {
+data "terraform_remote_state" "foo" {
   backend = "s3"
   config = {
 
@@ -114,8 +114,8 @@ data terraform_remote_state foo {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/tfe_provider_yaml/terraform/global/fogg.tf b/testdata/tfe_provider_yaml/terraform/global/fogg.tf
index 5bb0f8e1..3bc92aad 100644
--- a/testdata/tfe_provider_yaml/terraform/global/fogg.tf
+++ b/testdata/tfe_provider_yaml/terraform/global/fogg.tf
@@ -1,12 +1,12 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-provider tfe {
+provider "tfe" {
 }
 terraform {
   required_version = "=1.1.1"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "bucket"
 
@@ -70,23 +70,23 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = ""
 }
-variable project {
+variable "project" {
   type    = string
   default = "foo"
 }
-variable component {
+variable "component" {
   type    = string
   default = "global"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foo"
@@ -96,8 +96,8 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/v2_full_yaml/.github/workflows/fogg_ci.yml b/testdata/v2_full_yaml/.github/workflows/fogg_ci.yml
index d872adf7..8db396ae 100644
--- a/testdata/v2_full_yaml/.github/workflows/fogg_ci.yml
+++ b/testdata/v2_full_yaml/.github/workflows/fogg_ci.yml
@@ -15,8 +15,11 @@ jobs:
         with:
           python-version: '3.6'
       - run: |
+          mkdir /tmp/terraform-docs
+          cd /tmp/terraform-docs
+
           # https://terraform-docs.io/user-guide/installation/#pre-compiled-binary
-          curl -sSLo ./terraform-docs.tar.gz https://terraform-docs.io/dl/v0.14.1/terraform-docs-v0.14.1-$(uname)-amd64.tar.gz
+          curl -sSLo ./terraform-docs.tar.gz https://github.com/terraform-docs/terraform-docs/releases/download/v0.16.0/terraform-docs-v0.16.0-linux-amd64.tar.gz
           tar -xzf terraform-docs.tar.gz
           chmod +x terraform-docs
           echo "$PWD" >> $GITHUB_PATH
diff --git a/testdata/v2_full_yaml/scripts/component.mk b/testdata/v2_full_yaml/scripts/component.mk
index ecd75eba..0caacd7f 100644
--- a/testdata/v2_full_yaml/scripts/component.mk
+++ b/testdata/v2_full_yaml/scripts/component.mk
@@ -33,12 +33,7 @@ endif
 .PHONY: lint-tflint
 
 lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
-	@printf "fmt check: "
-	@for f in $(TF); do \
-		printf . \
-		$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true $$f || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-terraform-fmt
 
 check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
diff --git a/testdata/v2_full_yaml/scripts/module.mk b/testdata/v2_full_yaml/scripts/module.mk
index d8353c0d..3de23397 100644
--- a/testdata/v2_full_yaml/scripts/module.mk
+++ b/testdata/v2_full_yaml/scripts/module.mk
@@ -9,26 +9,20 @@ all: fmt lint doc
 .PHONY: all
 
 fmt: terraform ## run terraform fmt on this module
-	@printf "fmt: ";
-	@for f in $(TF); do printf .; $(terraform_command) fmt $(TF_ARGS) $$f; done
-	@echo
+	@$(terraform_command) fmt $(TF_ARGS)
 .PHONY: fmt
 
 check: lint check-docs ## run all checks on this module
 .PHONY: check
 
-lint: lint-tf ## run all linters on this module
+lint: lint-tf check-docs ## run all linters on this module
 .PHONY: lint
 
 lint-tf: terraform ## run terraform linters on this module
-	@printf "fmt: ";
-	@for f in $(TF); do \
-	  printf .; $(terraform_command) fmt $(TF_ARGS) --check=true --diff=true || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-tf
 
-readme: ## update this module's README.md 
+readme: ## update this module's README.md
 	bash $(REPO_ROOT)/scripts/update-readme.sh update
 .PHONY: readme
 
@@ -39,6 +33,7 @@ check-docs: ## check that this module's docs are up-to-date
 	@bash $(REPO_ROOT)/scripts/update-readme.sh check; \
 	if [ ! $$? -eq 0 ];  then \
 		echo "Docs are out of date, run \`make docs\`"; \
+		exit 1 ; \
 	fi
 .PHONY: check-docs
 
diff --git a/testdata/v2_full_yaml/terraform/accounts/bar/fogg.tf b/testdata/v2_full_yaml/terraform/accounts/bar/fogg.tf
index 9aaa14a2..299798ff 100644
--- a/testdata/v2_full_yaml/terraform/accounts/bar/fogg.tf
+++ b/testdata/v2_full_yaml/terraform/accounts/bar/fogg.tf
@@ -1,6 +1,6 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
-provider aws {
+provider "aws" {
 
   region = "us-west-2"
 
@@ -14,7 +14,7 @@ provider aws {
 # Aliased Providers (for doing things in every region).
 
 
-provider aws {
+provider "aws" {
   alias  = "another_account_same_role"
   region = "us-west-2"
 
@@ -27,7 +27,7 @@ provider aws {
 }
 
 
-provider aws {
+provider "aws" {
   alias  = "another_account_same_role-us-east-2"
   region = "us-east-2"
 
@@ -40,7 +40,7 @@ provider aws {
 }
 
 
-provider aws {
+provider "aws" {
   alias  = "another_account_same_role-us-east-1"
   region = "us-east-1"
 
@@ -53,7 +53,7 @@ provider aws {
 }
 
 
-provider aws {
+provider "aws" {
   alias  = "another_account_more_regions"
   region = "us-west-2"
 
@@ -66,7 +66,7 @@ provider aws {
 }
 
 
-provider aws {
+provider "aws" {
   alias  = "another_account_more_regions-eu-west-2"
   region = "eu-west-2"
 
@@ -79,7 +79,7 @@ provider aws {
 }
 
 
-provider aws {
+provider "aws" {
   alias  = "another_account_different_role"
   region = "us-west-2"
 
@@ -92,7 +92,7 @@ provider aws {
 }
 
 
-provider aws {
+provider "aws" {
   alias  = "another_account_different_role-us-east-2"
   region = "us-east-2"
 
@@ -105,7 +105,7 @@ provider aws {
 }
 
 
-provider aws {
+provider "aws" {
   alias  = "another_account_different_role-us-east-1"
   region = "us-east-1"
 
@@ -118,7 +118,7 @@ provider aws {
 }
 
 
-provider aws {
+provider "aws" {
   alias  = "us-east-2"
   region = "us-east-2"
 
@@ -131,7 +131,7 @@ provider aws {
 }
 
 
-provider aws {
+provider "aws" {
   alias  = "us-east-1"
   region = "us-east-1"
 
@@ -144,14 +144,14 @@ provider aws {
 }
 
 
-provider bless {
+provider "bless" {
   region   = "us-west-2"
   role_arn = "arn:aws:iam::1234567890:role/roll"
 }
 terraform {
   required_version = "=0.100.0"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "buck"
 
@@ -222,31 +222,31 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "accounts"
 }
-variable project {
+variable "project" {
   type    = string
   default = "proj"
 }
-variable region {
+variable "region" {
   type    = string
   default = "us-west-2"
 }
-variable component {
+variable "component" {
   type    = string
   default = "bar"
 }
-variable account {
+variable "account" {
   type    = string
   default = "bar"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "proj"
@@ -256,11 +256,11 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable foo {
+variable "foo" {
   type    = string
   default = "bar1"
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -274,7 +274,7 @@ data terraform_remote_state global {
 
   }
 }
-data terraform_remote_state bar {
+data "terraform_remote_state" "bar" {
   backend = "s3"
   config = {
 
@@ -288,7 +288,7 @@ data terraform_remote_state bar {
 
   }
 }
-data terraform_remote_state foo {
+data "terraform_remote_state" "foo" {
   backend = "s3"
   config = {
 
@@ -302,8 +302,8 @@ data terraform_remote_state foo {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
     bar = 456
diff --git a/testdata/v2_full_yaml/terraform/accounts/foo/fogg.tf b/testdata/v2_full_yaml/terraform/accounts/foo/fogg.tf
index 8bd6c73a..e5ac296d 100644
--- a/testdata/v2_full_yaml/terraform/accounts/foo/fogg.tf
+++ b/testdata/v2_full_yaml/terraform/accounts/foo/fogg.tf
@@ -1,6 +1,6 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
-provider aws {
+provider "aws" {
 
   region = "us-west-2"
 
@@ -14,14 +14,14 @@ provider aws {
 # Aliased Providers (for doing things in every region).
 
 
-provider bless {
+provider "bless" {
   region  = "us-west-2"
   profile = "prof"
 }
 terraform {
   required_version = "=0.100.0"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "buck"
 
@@ -92,31 +92,31 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "accounts"
 }
-variable project {
+variable "project" {
   type    = string
   default = "proj"
 }
-variable region {
+variable "region" {
   type    = string
   default = "us-west-2"
 }
-variable component {
+variable "component" {
   type    = string
   default = "foo"
 }
-variable account {
+variable "account" {
   type    = string
   default = "foo"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "proj"
@@ -126,11 +126,11 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable foo {
+variable "foo" {
   type    = string
   default = "bar1"
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -144,8 +144,8 @@ data terraform_remote_state global {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
     bar = 456
diff --git a/testdata/v2_full_yaml/terraform/envs/prod/datadog/fogg.tf b/testdata/v2_full_yaml/terraform/envs/prod/datadog/fogg.tf
index bd334b17..af15b1fe 100644
--- a/testdata/v2_full_yaml/terraform/envs/prod/datadog/fogg.tf
+++ b/testdata/v2_full_yaml/terraform/envs/prod/datadog/fogg.tf
@@ -1,6 +1,6 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
-provider aws {
+provider "aws" {
 
   region  = "us-west-2"
   profile = "profile"
@@ -10,12 +10,11 @@ provider aws {
 # Aliased Providers (for doing things in every region).
 
 
-provider datadog {
-}
+provider "datadog" {}
 terraform {
   required_version = "=0.100.0"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "buck"
 
@@ -84,31 +83,31 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "prod"
 }
-variable project {
+variable "project" {
   type    = string
   default = "proj"
 }
-variable region {
+variable "region" {
   type    = string
   default = "us-west-2"
 }
-variable component {
+variable "component" {
   type    = string
   default = "datadog"
 }
-variable aws_profile {
+variable "aws_profile" {
   type    = string
   default = "profile"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "proj"
@@ -118,11 +117,11 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable foo {
+variable "foo" {
   type    = string
   default = "bar1"
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -136,7 +135,7 @@ data terraform_remote_state global {
 
   }
 }
-data terraform_remote_state hero {
+data "terraform_remote_state" "hero" {
   backend = "s3"
   config = {
 
@@ -150,7 +149,7 @@ data terraform_remote_state hero {
 
   }
 }
-data terraform_remote_state okta {
+data "terraform_remote_state" "okta" {
   backend = "s3"
   config = {
 
@@ -164,7 +163,7 @@ data terraform_remote_state okta {
 
   }
 }
-data terraform_remote_state sentry {
+data "terraform_remote_state" "sentry" {
   backend = "s3"
   config = {
 
@@ -178,7 +177,7 @@ data terraform_remote_state sentry {
 
   }
 }
-data terraform_remote_state vpc {
+data "terraform_remote_state" "vpc" {
   backend = "s3"
   config = {
 
@@ -192,7 +191,7 @@ data terraform_remote_state vpc {
 
   }
 }
-data terraform_remote_state bar {
+data "terraform_remote_state" "bar" {
   backend = "s3"
   config = {
 
@@ -206,7 +205,7 @@ data terraform_remote_state bar {
 
   }
 }
-data terraform_remote_state foo {
+data "terraform_remote_state" "foo" {
   backend = "s3"
   config = {
 
@@ -220,8 +219,8 @@ data terraform_remote_state foo {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
     bar = 456
diff --git a/testdata/v2_full_yaml/terraform/envs/prod/hero/fogg.tf b/testdata/v2_full_yaml/terraform/envs/prod/hero/fogg.tf
index 4bceb60e..6af45922 100644
--- a/testdata/v2_full_yaml/terraform/envs/prod/hero/fogg.tf
+++ b/testdata/v2_full_yaml/terraform/envs/prod/hero/fogg.tf
@@ -1,6 +1,6 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
-provider aws {
+provider "aws" {
 
   region  = "us-west-2"
   profile = "profile"
@@ -10,12 +10,11 @@ provider aws {
 # Aliased Providers (for doing things in every region).
 
 
-provider heroku {
-}
+provider "heroku" {}
 terraform {
   required_version = "=0.100.0"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "buck"
 
@@ -91,31 +90,31 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "prod"
 }
-variable project {
+variable "project" {
   type    = string
   default = "proj"
 }
-variable region {
+variable "region" {
   type    = string
   default = "us-west-2"
 }
-variable component {
+variable "component" {
   type    = string
   default = "hero"
 }
-variable aws_profile {
+variable "aws_profile" {
   type    = string
   default = "profile"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "proj"
@@ -125,11 +124,11 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable foo {
+variable "foo" {
   type    = string
   default = "bar1"
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -143,8 +142,8 @@ data terraform_remote_state global {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
     bar = 456
diff --git a/testdata/v2_full_yaml/terraform/envs/prod/okta/fogg.tf b/testdata/v2_full_yaml/terraform/envs/prod/okta/fogg.tf
index 40138982..c1d557db 100644
--- a/testdata/v2_full_yaml/terraform/envs/prod/okta/fogg.tf
+++ b/testdata/v2_full_yaml/terraform/envs/prod/okta/fogg.tf
@@ -1,6 +1,6 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
-provider aws {
+provider "aws" {
 
   region  = "us-west-2"
   profile = "profile"
@@ -10,14 +10,14 @@ provider aws {
 # Aliased Providers (for doing things in every region).
 
 
-provider okta {
+provider "okta" {
   org_name = "foo"
   base_url = "https://foo.okta.com/"
 }
 terraform {
   required_version = "=0.100.0"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "buck"
 
@@ -86,31 +86,31 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "prod"
 }
-variable project {
+variable "project" {
   type    = string
   default = "proj"
 }
-variable region {
+variable "region" {
   type    = string
   default = "us-west-2"
 }
-variable component {
+variable "component" {
   type    = string
   default = "okta"
 }
-variable aws_profile {
+variable "aws_profile" {
   type    = string
   default = "profile"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "proj"
@@ -120,11 +120,11 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable foo {
+variable "foo" {
   type    = string
   default = "bar1"
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -138,7 +138,7 @@ data terraform_remote_state global {
 
   }
 }
-data terraform_remote_state datadog {
+data "terraform_remote_state" "datadog" {
   backend = "s3"
   config = {
 
@@ -152,7 +152,7 @@ data terraform_remote_state datadog {
 
   }
 }
-data terraform_remote_state hero {
+data "terraform_remote_state" "hero" {
   backend = "s3"
   config = {
 
@@ -166,7 +166,7 @@ data terraform_remote_state hero {
 
   }
 }
-data terraform_remote_state sentry {
+data "terraform_remote_state" "sentry" {
   backend = "s3"
   config = {
 
@@ -180,7 +180,7 @@ data terraform_remote_state sentry {
 
   }
 }
-data terraform_remote_state vpc {
+data "terraform_remote_state" "vpc" {
   backend = "s3"
   config = {
 
@@ -194,7 +194,7 @@ data terraform_remote_state vpc {
 
   }
 }
-data terraform_remote_state bar {
+data "terraform_remote_state" "bar" {
   backend = "s3"
   config = {
 
@@ -208,7 +208,7 @@ data terraform_remote_state bar {
 
   }
 }
-data terraform_remote_state foo {
+data "terraform_remote_state" "foo" {
   backend = "s3"
   config = {
 
@@ -222,8 +222,8 @@ data terraform_remote_state foo {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
     bar = 456
diff --git a/testdata/v2_full_yaml/terraform/envs/prod/sentry/fogg.tf b/testdata/v2_full_yaml/terraform/envs/prod/sentry/fogg.tf
index b45aaec0..3fd8971c 100644
--- a/testdata/v2_full_yaml/terraform/envs/prod/sentry/fogg.tf
+++ b/testdata/v2_full_yaml/terraform/envs/prod/sentry/fogg.tf
@@ -1,6 +1,6 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
-provider aws {
+provider "aws" {
 
   region  = "us-west-2"
   profile = "profile"
@@ -10,12 +10,12 @@ provider aws {
 # Aliased Providers (for doing things in every region).
 
 
-provider sentry {
+provider "sentry" {
 }
 terraform {
   required_version = "=0.100.0"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "buck"
 
@@ -86,31 +86,31 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "prod"
 }
-variable project {
+variable "project" {
   type    = string
   default = "proj"
 }
-variable region {
+variable "region" {
   type    = string
   default = "us-west-2"
 }
-variable component {
+variable "component" {
   type    = string
   default = "sentry"
 }
-variable aws_profile {
+variable "aws_profile" {
   type    = string
   default = "profile"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "proj"
@@ -120,11 +120,11 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable foo {
+variable "foo" {
   type    = string
   default = "bar1"
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -138,7 +138,7 @@ data terraform_remote_state global {
 
   }
 }
-data terraform_remote_state hero {
+data "terraform_remote_state" "hero" {
   backend = "s3"
   config = {
 
@@ -152,8 +152,8 @@ data terraform_remote_state hero {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
     bar = 456
diff --git a/testdata/v2_full_yaml/terraform/envs/prod/vpc/fogg.tf b/testdata/v2_full_yaml/terraform/envs/prod/vpc/fogg.tf
index 1fb266f1..ff2b437d 100644
--- a/testdata/v2_full_yaml/terraform/envs/prod/vpc/fogg.tf
+++ b/testdata/v2_full_yaml/terraform/envs/prod/vpc/fogg.tf
@@ -1,6 +1,6 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
-provider aws {
+provider "aws" {
 
   region  = "us-west-2"
   profile = "profile"
@@ -12,7 +12,7 @@ provider aws {
 terraform {
   required_version = "=0.100.0"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "buck"
 
@@ -76,31 +76,31 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "prod"
 }
-variable project {
+variable "project" {
   type    = string
   default = "proj"
 }
-variable region {
+variable "region" {
   type    = string
   default = "us-west-2"
 }
-variable component {
+variable "component" {
   type    = string
   default = "vpc"
 }
-variable aws_profile {
+variable "aws_profile" {
   type    = string
   default = "profile"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "proj"
@@ -110,11 +110,11 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable foo {
+variable "foo" {
   type    = string
   default = "bar1"
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -128,7 +128,7 @@ data terraform_remote_state global {
 
   }
 }
-data terraform_remote_state datadog {
+data "terraform_remote_state" "datadog" {
   backend = "s3"
   config = {
 
@@ -142,7 +142,7 @@ data terraform_remote_state datadog {
 
   }
 }
-data terraform_remote_state hero {
+data "terraform_remote_state" "hero" {
   backend = "s3"
   config = {
 
@@ -156,7 +156,7 @@ data terraform_remote_state hero {
 
   }
 }
-data terraform_remote_state okta {
+data "terraform_remote_state" "okta" {
   backend = "s3"
   config = {
 
@@ -170,7 +170,7 @@ data terraform_remote_state okta {
 
   }
 }
-data terraform_remote_state sentry {
+data "terraform_remote_state" "sentry" {
   backend = "s3"
   config = {
 
@@ -184,7 +184,7 @@ data terraform_remote_state sentry {
 
   }
 }
-data terraform_remote_state bar {
+data "terraform_remote_state" "bar" {
   backend = "s3"
   config = {
 
@@ -198,7 +198,7 @@ data terraform_remote_state bar {
 
   }
 }
-data terraform_remote_state foo {
+data "terraform_remote_state" "foo" {
   backend = "s3"
   config = {
 
@@ -212,8 +212,8 @@ data terraform_remote_state foo {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
     bar = 456
diff --git a/testdata/v2_full_yaml/terraform/envs/prod/vpc/main.tf b/testdata/v2_full_yaml/terraform/envs/prod/vpc/main.tf
index 52e4e59e..be475a4e 100644
--- a/testdata/v2_full_yaml/terraform/envs/prod/vpc/main.tf
+++ b/testdata/v2_full_yaml/terraform/envs/prod/vpc/main.tf
@@ -1,7 +1,7 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-module prod-vpc {
+module "prod-vpc" {
   source                             = "github.com/terraform-aws-modules/terraform-aws-vpc?ref=v1.30.0"
   azs                                = local.azs
   cidr                               = local.cidr
diff --git a/testdata/v2_full_yaml/terraform/envs/prod/vpc/outputs.tf b/testdata/v2_full_yaml/terraform/envs/prod/vpc/outputs.tf
index dfa5ea2f..06adb7a7 100644
--- a/testdata/v2_full_yaml/terraform/envs/prod/vpc/outputs.tf
+++ b/testdata/v2_full_yaml/terraform/envs/prod/vpc/outputs.tf
@@ -1,175 +1,175 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-output database_subnet_group {
+output "database_subnet_group" {
   value = module.prod-vpc.database_subnet_group
 }
 
-output database_subnets {
+output "database_subnets" {
   value = module.prod-vpc.database_subnets
 }
 
-output database_subnets_cidr_blocks {
+output "database_subnets_cidr_blocks" {
   value = module.prod-vpc.database_subnets_cidr_blocks
 }
 
-output default_network_acl_id {
+output "default_network_acl_id" {
   value = module.prod-vpc.default_network_acl_id
 }
 
-output default_route_table_id {
+output "default_route_table_id" {
   value = module.prod-vpc.default_route_table_id
 }
 
-output default_security_group_id {
+output "default_security_group_id" {
   value = module.prod-vpc.default_security_group_id
 }
 
-output default_vpc_cidr_block {
+output "default_vpc_cidr_block" {
   value = module.prod-vpc.default_vpc_cidr_block
 }
 
-output default_vpc_default_network_acl_id {
+output "default_vpc_default_network_acl_id" {
   value = module.prod-vpc.default_vpc_default_network_acl_id
 }
 
-output default_vpc_default_route_table_id {
+output "default_vpc_default_route_table_id" {
   value = module.prod-vpc.default_vpc_default_route_table_id
 }
 
-output default_vpc_default_security_group_id {
+output "default_vpc_default_security_group_id" {
   value = module.prod-vpc.default_vpc_default_security_group_id
 }
 
-output default_vpc_enable_dns_hostnames {
+output "default_vpc_enable_dns_hostnames" {
   value = module.prod-vpc.default_vpc_enable_dns_hostnames
 }
 
-output default_vpc_enable_dns_support {
+output "default_vpc_enable_dns_support" {
   value = module.prod-vpc.default_vpc_enable_dns_support
 }
 
-output default_vpc_id {
+output "default_vpc_id" {
   value = module.prod-vpc.default_vpc_id
 }
 
-output default_vpc_instance_tenancy {
+output "default_vpc_instance_tenancy" {
   value = module.prod-vpc.default_vpc_instance_tenancy
 }
 
-output default_vpc_main_route_table_id {
+output "default_vpc_main_route_table_id" {
   value = module.prod-vpc.default_vpc_main_route_table_id
 }
 
-output elasticache_subnet_group {
+output "elasticache_subnet_group" {
   value = module.prod-vpc.elasticache_subnet_group
 }
 
-output elasticache_subnet_group_name {
+output "elasticache_subnet_group_name" {
   value = module.prod-vpc.elasticache_subnet_group_name
 }
 
-output elasticache_subnets {
+output "elasticache_subnets" {
   value = module.prod-vpc.elasticache_subnets
 }
 
-output elasticache_subnets_cidr_blocks {
+output "elasticache_subnets_cidr_blocks" {
   value = module.prod-vpc.elasticache_subnets_cidr_blocks
 }
 
-output igw_id {
+output "igw_id" {
   value = module.prod-vpc.igw_id
 }
 
-output nat_ids {
+output "nat_ids" {
   value = module.prod-vpc.nat_ids
 }
 
-output nat_public_ips {
+output "nat_public_ips" {
   value = module.prod-vpc.nat_public_ips
 }
 
-output natgw_ids {
+output "natgw_ids" {
   value = module.prod-vpc.natgw_ids
 }
 
-output private_route_table_ids {
+output "private_route_table_ids" {
   value = module.prod-vpc.private_route_table_ids
 }
 
-output private_subnets {
+output "private_subnets" {
   value = module.prod-vpc.private_subnets
 }
 
-output private_subnets_cidr_blocks {
+output "private_subnets_cidr_blocks" {
   value = module.prod-vpc.private_subnets_cidr_blocks
 }
 
-output public_route_table_ids {
+output "public_route_table_ids" {
   value = module.prod-vpc.public_route_table_ids
 }
 
-output public_subnets {
+output "public_subnets" {
   value = module.prod-vpc.public_subnets
 }
 
-output public_subnets_cidr_blocks {
+output "public_subnets_cidr_blocks" {
   value = module.prod-vpc.public_subnets_cidr_blocks
 }
 
-output redshift_subnet_group {
+output "redshift_subnet_group" {
   value = module.prod-vpc.redshift_subnet_group
 }
 
-output redshift_subnets {
+output "redshift_subnets" {
   value = module.prod-vpc.redshift_subnets
 }
 
-output redshift_subnets_cidr_blocks {
+output "redshift_subnets_cidr_blocks" {
   value = module.prod-vpc.redshift_subnets_cidr_blocks
 }
 
-output vgw_id {
+output "vgw_id" {
   value = module.prod-vpc.vgw_id
 }
 
-output vpc_cidr_block {
+output "vpc_cidr_block" {
   value = module.prod-vpc.vpc_cidr_block
 }
 
-output vpc_enable_dns_hostnames {
+output "vpc_enable_dns_hostnames" {
   value = module.prod-vpc.vpc_enable_dns_hostnames
 }
 
-output vpc_enable_dns_support {
+output "vpc_enable_dns_support" {
   value = module.prod-vpc.vpc_enable_dns_support
 }
 
-output vpc_endpoint_dynamodb_id {
+output "vpc_endpoint_dynamodb_id" {
   value = module.prod-vpc.vpc_endpoint_dynamodb_id
 }
 
-output vpc_endpoint_dynamodb_pl_id {
+output "vpc_endpoint_dynamodb_pl_id" {
   value = module.prod-vpc.vpc_endpoint_dynamodb_pl_id
 }
 
-output vpc_endpoint_s3_id {
+output "vpc_endpoint_s3_id" {
   value = module.prod-vpc.vpc_endpoint_s3_id
 }
 
-output vpc_endpoint_s3_pl_id {
+output "vpc_endpoint_s3_pl_id" {
   value = module.prod-vpc.vpc_endpoint_s3_pl_id
 }
 
-output vpc_id {
+output "vpc_id" {
   value = module.prod-vpc.vpc_id
 }
 
-output vpc_instance_tenancy {
+output "vpc_instance_tenancy" {
   value = module.prod-vpc.vpc_instance_tenancy
 }
 
-output vpc_main_route_table_id {
+output "vpc_main_route_table_id" {
   value = module.prod-vpc.vpc_main_route_table_id
 }
 
diff --git a/testdata/v2_full_yaml/terraform/envs/staging/comp1/fogg.tf b/testdata/v2_full_yaml/terraform/envs/staging/comp1/fogg.tf
index 36cd224e..3329d767 100644
--- a/testdata/v2_full_yaml/terraform/envs/staging/comp1/fogg.tf
+++ b/testdata/v2_full_yaml/terraform/envs/staging/comp1/fogg.tf
@@ -1,6 +1,6 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
-provider aws {
+provider "aws" {
 
   region  = "us-west-2"
   profile = "profile"
@@ -12,11 +12,11 @@ provider aws {
 terraform {
   required_version = "=0.100.0"
 
-  backend remote {
+  backend "remote" {
 
     hostname     = "example.com"
     organization = "foo"
-    workspaces {
+    workspaces = {
       name = "staging-comp1"
     }
 
@@ -74,31 +74,31 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "staging"
 }
-variable project {
+variable "project" {
   type    = string
   default = "proj"
 }
-variable region {
+variable "region" {
   type    = string
   default = "us-west-2"
 }
-variable component {
+variable "component" {
   type    = string
   default = "comp1"
 }
-variable aws_profile {
+variable "aws_profile" {
   type    = string
   default = "profile"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "proj"
@@ -108,11 +108,11 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable foo {
+variable "foo" {
   type    = string
   default = "bar2"
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -126,7 +126,7 @@ data terraform_remote_state global {
 
   }
 }
-data terraform_remote_state comp2 {
+data "terraform_remote_state" "comp2" {
   backend = "remote"
   config = {
 
@@ -139,7 +139,7 @@ data terraform_remote_state comp2 {
 
   }
 }
-data terraform_remote_state vpc {
+data "terraform_remote_state" "vpc" {
   backend = "remote"
   config = {
 
@@ -152,7 +152,7 @@ data terraform_remote_state vpc {
 
   }
 }
-data terraform_remote_state bar {
+data "terraform_remote_state" "bar" {
   backend = "s3"
   config = {
 
@@ -166,7 +166,7 @@ data terraform_remote_state bar {
 
   }
 }
-data terraform_remote_state foo {
+data "terraform_remote_state" "foo" {
   backend = "s3"
   config = {
 
@@ -180,8 +180,8 @@ data terraform_remote_state foo {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
     bar = 456
diff --git a/testdata/v2_full_yaml/terraform/envs/staging/comp2/fogg.tf b/testdata/v2_full_yaml/terraform/envs/staging/comp2/fogg.tf
index 0d411993..a23286b1 100644
--- a/testdata/v2_full_yaml/terraform/envs/staging/comp2/fogg.tf
+++ b/testdata/v2_full_yaml/terraform/envs/staging/comp2/fogg.tf
@@ -1,6 +1,6 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
-provider aws {
+provider "aws" {
 
   region  = "us-west-2"
   profile = "profile"
@@ -12,11 +12,11 @@ provider aws {
 terraform {
   required_version = "=0.100.0"
 
-  backend remote {
+  backend "remote" {
 
     hostname     = "example.com"
     organization = "foo"
-    workspaces {
+    workspaces = {
       name = "staging-comp2"
     }
 
@@ -74,31 +74,31 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "staging"
 }
-variable project {
+variable "project" {
   type    = string
   default = "proj"
 }
-variable region {
+variable "region" {
   type    = string
   default = "us-west-2"
 }
-variable component {
+variable "component" {
   type    = string
   default = "comp2"
 }
-variable aws_profile {
+variable "aws_profile" {
   type    = string
   default = "profile"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "proj"
@@ -108,11 +108,11 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable foo {
+variable "foo" {
   type    = string
   default = "bar2"
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -126,7 +126,7 @@ data terraform_remote_state global {
 
   }
 }
-data terraform_remote_state comp1 {
+data "terraform_remote_state" "comp1" {
   backend = "remote"
   config = {
 
@@ -139,7 +139,7 @@ data terraform_remote_state comp1 {
 
   }
 }
-data terraform_remote_state vpc {
+data "terraform_remote_state" "vpc" {
   backend = "remote"
   config = {
 
@@ -152,7 +152,7 @@ data terraform_remote_state vpc {
 
   }
 }
-data terraform_remote_state bar {
+data "terraform_remote_state" "bar" {
   backend = "s3"
   config = {
 
@@ -166,7 +166,7 @@ data terraform_remote_state bar {
 
   }
 }
-data terraform_remote_state foo {
+data "terraform_remote_state" "foo" {
   backend = "s3"
   config = {
 
@@ -180,8 +180,8 @@ data terraform_remote_state foo {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
     bar = 456
diff --git a/testdata/v2_full_yaml/terraform/envs/staging/vpc/fogg.tf b/testdata/v2_full_yaml/terraform/envs/staging/vpc/fogg.tf
index 90935898..4b083e26 100644
--- a/testdata/v2_full_yaml/terraform/envs/staging/vpc/fogg.tf
+++ b/testdata/v2_full_yaml/terraform/envs/staging/vpc/fogg.tf
@@ -1,6 +1,6 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
-provider aws {
+provider "aws" {
 
   region  = "us-west-2"
   profile = "profile"
@@ -12,11 +12,11 @@ provider aws {
 terraform {
   required_version = "=0.100.0"
 
-  backend remote {
+  backend "remote" {
 
     hostname     = "example.com"
     organization = "foo"
-    workspaces {
+    workspaces = {
       name = "staging-vpc"
     }
 
@@ -74,31 +74,31 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "staging"
 }
-variable project {
+variable "project" {
   type    = string
   default = "proj"
 }
-variable region {
+variable "region" {
   type    = string
   default = "us-west-2"
 }
-variable component {
+variable "component" {
   type    = string
   default = "vpc"
 }
-variable aws_profile {
+variable "aws_profile" {
   type    = string
   default = "profile"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "proj"
@@ -108,11 +108,11 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable foo {
+variable "foo" {
   type    = string
   default = "bar3"
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -126,7 +126,7 @@ data terraform_remote_state global {
 
   }
 }
-data terraform_remote_state comp1 {
+data "terraform_remote_state" "comp1" {
   backend = "remote"
   config = {
 
@@ -139,7 +139,7 @@ data terraform_remote_state comp1 {
 
   }
 }
-data terraform_remote_state comp2 {
+data "terraform_remote_state" "comp2" {
   backend = "remote"
   config = {
 
@@ -152,7 +152,7 @@ data terraform_remote_state comp2 {
 
   }
 }
-data terraform_remote_state bar {
+data "terraform_remote_state" "bar" {
   backend = "s3"
   config = {
 
@@ -166,7 +166,7 @@ data terraform_remote_state bar {
 
   }
 }
-data terraform_remote_state foo {
+data "terraform_remote_state" "foo" {
   backend = "s3"
   config = {
 
@@ -180,8 +180,8 @@ data terraform_remote_state foo {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
     bar = 456
diff --git a/testdata/v2_full_yaml/terraform/envs/staging/vpc/main.tf b/testdata/v2_full_yaml/terraform/envs/staging/vpc/main.tf
index 9091aaa9..14b26e5c 100644
--- a/testdata/v2_full_yaml/terraform/envs/staging/vpc/main.tf
+++ b/testdata/v2_full_yaml/terraform/envs/staging/vpc/main.tf
@@ -1,7 +1,7 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-module terraform-aws-vpc {
+module "terraform-aws-vpc" {
   source                             = "github.com/terraform-aws-modules/terraform-aws-vpc?ref=v1.30.0"
   azs                                = local.azs
   cidr                               = local.cidr
diff --git a/testdata/v2_full_yaml/terraform/envs/staging/vpc/outputs.tf b/testdata/v2_full_yaml/terraform/envs/staging/vpc/outputs.tf
index 5bee3e1e..72108011 100644
--- a/testdata/v2_full_yaml/terraform/envs/staging/vpc/outputs.tf
+++ b/testdata/v2_full_yaml/terraform/envs/staging/vpc/outputs.tf
@@ -1,175 +1,175 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-output database_subnet_group {
+output "database_subnet_group" {
   value = module.terraform-aws-vpc.database_subnet_group
 }
 
-output database_subnets {
+output "database_subnets" {
   value = module.terraform-aws-vpc.database_subnets
 }
 
-output database_subnets_cidr_blocks {
+output "database_subnets_cidr_blocks" {
   value = module.terraform-aws-vpc.database_subnets_cidr_blocks
 }
 
-output default_network_acl_id {
+output "default_network_acl_id" {
   value = module.terraform-aws-vpc.default_network_acl_id
 }
 
-output default_route_table_id {
+output "default_route_table_id" {
   value = module.terraform-aws-vpc.default_route_table_id
 }
 
-output default_security_group_id {
+output "default_security_group_id" {
   value = module.terraform-aws-vpc.default_security_group_id
 }
 
-output default_vpc_cidr_block {
+output "default_vpc_cidr_block" {
   value = module.terraform-aws-vpc.default_vpc_cidr_block
 }
 
-output default_vpc_default_network_acl_id {
+output "default_vpc_default_network_acl_id" {
   value = module.terraform-aws-vpc.default_vpc_default_network_acl_id
 }
 
-output default_vpc_default_route_table_id {
+output "default_vpc_default_route_table_id" {
   value = module.terraform-aws-vpc.default_vpc_default_route_table_id
 }
 
-output default_vpc_default_security_group_id {
+output "default_vpc_default_security_group_id" {
   value = module.terraform-aws-vpc.default_vpc_default_security_group_id
 }
 
-output default_vpc_enable_dns_hostnames {
+output "default_vpc_enable_dns_hostnames" {
   value = module.terraform-aws-vpc.default_vpc_enable_dns_hostnames
 }
 
-output default_vpc_enable_dns_support {
+output "default_vpc_enable_dns_support" {
   value = module.terraform-aws-vpc.default_vpc_enable_dns_support
 }
 
-output default_vpc_id {
+output "default_vpc_id" {
   value = module.terraform-aws-vpc.default_vpc_id
 }
 
-output default_vpc_instance_tenancy {
+output "default_vpc_instance_tenancy" {
   value = module.terraform-aws-vpc.default_vpc_instance_tenancy
 }
 
-output default_vpc_main_route_table_id {
+output "default_vpc_main_route_table_id" {
   value = module.terraform-aws-vpc.default_vpc_main_route_table_id
 }
 
-output elasticache_subnet_group {
+output "elasticache_subnet_group" {
   value = module.terraform-aws-vpc.elasticache_subnet_group
 }
 
-output elasticache_subnet_group_name {
+output "elasticache_subnet_group_name" {
   value = module.terraform-aws-vpc.elasticache_subnet_group_name
 }
 
-output elasticache_subnets {
+output "elasticache_subnets" {
   value = module.terraform-aws-vpc.elasticache_subnets
 }
 
-output elasticache_subnets_cidr_blocks {
+output "elasticache_subnets_cidr_blocks" {
   value = module.terraform-aws-vpc.elasticache_subnets_cidr_blocks
 }
 
-output igw_id {
+output "igw_id" {
   value = module.terraform-aws-vpc.igw_id
 }
 
-output nat_ids {
+output "nat_ids" {
   value = module.terraform-aws-vpc.nat_ids
 }
 
-output nat_public_ips {
+output "nat_public_ips" {
   value = module.terraform-aws-vpc.nat_public_ips
 }
 
-output natgw_ids {
+output "natgw_ids" {
   value = module.terraform-aws-vpc.natgw_ids
 }
 
-output private_route_table_ids {
+output "private_route_table_ids" {
   value = module.terraform-aws-vpc.private_route_table_ids
 }
 
-output private_subnets {
+output "private_subnets" {
   value = module.terraform-aws-vpc.private_subnets
 }
 
-output private_subnets_cidr_blocks {
+output "private_subnets_cidr_blocks" {
   value = module.terraform-aws-vpc.private_subnets_cidr_blocks
 }
 
-output public_route_table_ids {
+output "public_route_table_ids" {
   value = module.terraform-aws-vpc.public_route_table_ids
 }
 
-output public_subnets {
+output "public_subnets" {
   value = module.terraform-aws-vpc.public_subnets
 }
 
-output public_subnets_cidr_blocks {
+output "public_subnets_cidr_blocks" {
   value = module.terraform-aws-vpc.public_subnets_cidr_blocks
 }
 
-output redshift_subnet_group {
+output "redshift_subnet_group" {
   value = module.terraform-aws-vpc.redshift_subnet_group
 }
 
-output redshift_subnets {
+output "redshift_subnets" {
   value = module.terraform-aws-vpc.redshift_subnets
 }
 
-output redshift_subnets_cidr_blocks {
+output "redshift_subnets_cidr_blocks" {
   value = module.terraform-aws-vpc.redshift_subnets_cidr_blocks
 }
 
-output vgw_id {
+output "vgw_id" {
   value = module.terraform-aws-vpc.vgw_id
 }
 
-output vpc_cidr_block {
+output "vpc_cidr_block" {
   value = module.terraform-aws-vpc.vpc_cidr_block
 }
 
-output vpc_enable_dns_hostnames {
+output "vpc_enable_dns_hostnames" {
   value = module.terraform-aws-vpc.vpc_enable_dns_hostnames
 }
 
-output vpc_enable_dns_support {
+output "vpc_enable_dns_support" {
   value = module.terraform-aws-vpc.vpc_enable_dns_support
 }
 
-output vpc_endpoint_dynamodb_id {
+output "vpc_endpoint_dynamodb_id" {
   value = module.terraform-aws-vpc.vpc_endpoint_dynamodb_id
 }
 
-output vpc_endpoint_dynamodb_pl_id {
+output "vpc_endpoint_dynamodb_pl_id" {
   value = module.terraform-aws-vpc.vpc_endpoint_dynamodb_pl_id
 }
 
-output vpc_endpoint_s3_id {
+output "vpc_endpoint_s3_id" {
   value = module.terraform-aws-vpc.vpc_endpoint_s3_id
 }
 
-output vpc_endpoint_s3_pl_id {
+output "vpc_endpoint_s3_pl_id" {
   value = module.terraform-aws-vpc.vpc_endpoint_s3_pl_id
 }
 
-output vpc_id {
+output "vpc_id" {
   value = module.terraform-aws-vpc.vpc_id
 }
 
-output vpc_instance_tenancy {
+output "vpc_instance_tenancy" {
   value = module.terraform-aws-vpc.vpc_instance_tenancy
 }
 
-output vpc_main_route_table_id {
+output "vpc_main_route_table_id" {
   value = module.terraform-aws-vpc.vpc_main_route_table_id
 }
 
diff --git a/testdata/v2_full_yaml/terraform/global/fogg.tf b/testdata/v2_full_yaml/terraform/global/fogg.tf
index 7a78286c..94c24b63 100644
--- a/testdata/v2_full_yaml/terraform/global/fogg.tf
+++ b/testdata/v2_full_yaml/terraform/global/fogg.tf
@@ -1,6 +1,6 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
-provider aws {
+provider "aws" {
 
   region  = "us-west-2"
   profile = "profile"
@@ -12,7 +12,7 @@ provider aws {
 terraform {
   required_version = "=0.100.0"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "buck"
 
@@ -76,31 +76,31 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = ""
 }
-variable project {
+variable "project" {
   type    = string
   default = "proj"
 }
-variable region {
+variable "region" {
   type    = string
   default = "us-west-2"
 }
-variable component {
+variable "component" {
   type    = string
   default = "global"
 }
-variable aws_profile {
+variable "aws_profile" {
   type    = string
   default = "profile"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "proj"
@@ -110,12 +110,12 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable foo {
+variable "foo" {
   type    = string
   default = "bar1"
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/v2_minimal_valid_yaml/scripts/component.mk b/testdata/v2_minimal_valid_yaml/scripts/component.mk
index ecd75eba..0caacd7f 100644
--- a/testdata/v2_minimal_valid_yaml/scripts/component.mk
+++ b/testdata/v2_minimal_valid_yaml/scripts/component.mk
@@ -33,12 +33,7 @@ endif
 .PHONY: lint-tflint
 
 lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
-	@printf "fmt check: "
-	@for f in $(TF); do \
-		printf . \
-		$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true $$f || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-terraform-fmt
 
 check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
diff --git a/testdata/v2_minimal_valid_yaml/scripts/module.mk b/testdata/v2_minimal_valid_yaml/scripts/module.mk
index d8353c0d..3de23397 100644
--- a/testdata/v2_minimal_valid_yaml/scripts/module.mk
+++ b/testdata/v2_minimal_valid_yaml/scripts/module.mk
@@ -9,26 +9,20 @@ all: fmt lint doc
 .PHONY: all
 
 fmt: terraform ## run terraform fmt on this module
-	@printf "fmt: ";
-	@for f in $(TF); do printf .; $(terraform_command) fmt $(TF_ARGS) $$f; done
-	@echo
+	@$(terraform_command) fmt $(TF_ARGS)
 .PHONY: fmt
 
 check: lint check-docs ## run all checks on this module
 .PHONY: check
 
-lint: lint-tf ## run all linters on this module
+lint: lint-tf check-docs ## run all linters on this module
 .PHONY: lint
 
 lint-tf: terraform ## run terraform linters on this module
-	@printf "fmt: ";
-	@for f in $(TF); do \
-	  printf .; $(terraform_command) fmt $(TF_ARGS) --check=true --diff=true || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-tf
 
-readme: ## update this module's README.md 
+readme: ## update this module's README.md
 	bash $(REPO_ROOT)/scripts/update-readme.sh update
 .PHONY: readme
 
@@ -39,6 +33,7 @@ check-docs: ## check that this module's docs are up-to-date
 	@bash $(REPO_ROOT)/scripts/update-readme.sh check; \
 	if [ ! $$? -eq 0 ];  then \
 		echo "Docs are out of date, run \`make docs\`"; \
+		exit 1 ; \
 	fi
 .PHONY: check-docs
 
diff --git a/testdata/v2_minimal_valid_yaml/terraform/global/fogg.tf b/testdata/v2_minimal_valid_yaml/terraform/global/fogg.tf
index 39dcb386..00212455 100644
--- a/testdata/v2_minimal_valid_yaml/terraform/global/fogg.tf
+++ b/testdata/v2_minimal_valid_yaml/terraform/global/fogg.tf
@@ -3,7 +3,7 @@
 terraform {
   required_version = "=1.1.1"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "bucket"
 
@@ -60,23 +60,23 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = ""
 }
-variable project {
+variable "project" {
   type    = string
   default = "foo"
 }
-variable component {
+variable "component" {
   type    = string
   default = "global"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "foo"
@@ -86,8 +86,8 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/v2_no_aws_provider_yaml/scripts/component.mk b/testdata/v2_no_aws_provider_yaml/scripts/component.mk
index ecd75eba..0caacd7f 100644
--- a/testdata/v2_no_aws_provider_yaml/scripts/component.mk
+++ b/testdata/v2_no_aws_provider_yaml/scripts/component.mk
@@ -33,12 +33,7 @@ endif
 .PHONY: lint-tflint
 
 lint-terraform-fmt: terraform ## run `terraform fmt` in check mode
-	@printf "fmt check: "
-	@for f in $(TF); do \
-		printf . \
-		$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true $$f || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-terraform-fmt
 
 check-auth: check-auth-aws check-auth-heroku ## check that authentication is properly set up for this component
diff --git a/testdata/v2_no_aws_provider_yaml/scripts/module.mk b/testdata/v2_no_aws_provider_yaml/scripts/module.mk
index d8353c0d..3de23397 100644
--- a/testdata/v2_no_aws_provider_yaml/scripts/module.mk
+++ b/testdata/v2_no_aws_provider_yaml/scripts/module.mk
@@ -9,26 +9,20 @@ all: fmt lint doc
 .PHONY: all
 
 fmt: terraform ## run terraform fmt on this module
-	@printf "fmt: ";
-	@for f in $(TF); do printf .; $(terraform_command) fmt $(TF_ARGS) $$f; done
-	@echo
+	@$(terraform_command) fmt $(TF_ARGS)
 .PHONY: fmt
 
 check: lint check-docs ## run all checks on this module
 .PHONY: check
 
-lint: lint-tf ## run all linters on this module
+lint: lint-tf check-docs ## run all linters on this module
 .PHONY: lint
 
 lint-tf: terraform ## run terraform linters on this module
-	@printf "fmt: ";
-	@for f in $(TF); do \
-	  printf .; $(terraform_command) fmt $(TF_ARGS) --check=true --diff=true || exit $$? ; \
-	done
-	@echo
+	$(terraform_command) fmt $(TF_ARGS) --check=true --diff=true
 .PHONY: lint-tf
 
-readme: ## update this module's README.md 
+readme: ## update this module's README.md
 	bash $(REPO_ROOT)/scripts/update-readme.sh update
 .PHONY: readme
 
@@ -39,6 +33,7 @@ check-docs: ## check that this module's docs are up-to-date
 	@bash $(REPO_ROOT)/scripts/update-readme.sh check; \
 	if [ ! $$? -eq 0 ];  then \
 		echo "Docs are out of date, run \`make docs\`"; \
+		exit 1 ; \
 	fi
 .PHONY: check-docs
 
diff --git a/testdata/v2_no_aws_provider_yaml/terraform/envs/staging/vpc/fogg.tf b/testdata/v2_no_aws_provider_yaml/terraform/envs/staging/vpc/fogg.tf
index 9e5ce668..34bd650f 100644
--- a/testdata/v2_no_aws_provider_yaml/terraform/envs/staging/vpc/fogg.tf
+++ b/testdata/v2_no_aws_provider_yaml/terraform/envs/staging/vpc/fogg.tf
@@ -3,7 +3,7 @@
 terraform {
   required_version = "=0.100.0"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "buck"
 
@@ -60,23 +60,23 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = "staging"
 }
-variable project {
+variable "project" {
   type    = string
   default = "proj"
 }
-variable component {
+variable "component" {
   type    = string
   default = "vpc"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "proj"
@@ -86,11 +86,11 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable foo {
+variable "foo" {
   type    = string
   default = "bar3"
 }
-data terraform_remote_state global {
+data "terraform_remote_state" "global" {
   backend = "s3"
   config = {
 
@@ -104,8 +104,8 @@ data terraform_remote_state global {
 
   }
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/v2_no_aws_provider_yaml/terraform/envs/staging/vpc/main.tf b/testdata/v2_no_aws_provider_yaml/terraform/envs/staging/vpc/main.tf
index 9091aaa9..14b26e5c 100644
--- a/testdata/v2_no_aws_provider_yaml/terraform/envs/staging/vpc/main.tf
+++ b/testdata/v2_no_aws_provider_yaml/terraform/envs/staging/vpc/main.tf
@@ -1,7 +1,7 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-module terraform-aws-vpc {
+module "terraform-aws-vpc" {
   source                             = "github.com/terraform-aws-modules/terraform-aws-vpc?ref=v1.30.0"
   azs                                = local.azs
   cidr                               = local.cidr
diff --git a/testdata/v2_no_aws_provider_yaml/terraform/envs/staging/vpc/outputs.tf b/testdata/v2_no_aws_provider_yaml/terraform/envs/staging/vpc/outputs.tf
index 5bee3e1e..72108011 100644
--- a/testdata/v2_no_aws_provider_yaml/terraform/envs/staging/vpc/outputs.tf
+++ b/testdata/v2_no_aws_provider_yaml/terraform/envs/staging/vpc/outputs.tf
@@ -1,175 +1,175 @@
 # Auto-generated by fogg. Do not edit
 # Make improvements in fogg, so that everyone can benefit.
 
-output database_subnet_group {
+output "database_subnet_group" {
   value = module.terraform-aws-vpc.database_subnet_group
 }
 
-output database_subnets {
+output "database_subnets" {
   value = module.terraform-aws-vpc.database_subnets
 }
 
-output database_subnets_cidr_blocks {
+output "database_subnets_cidr_blocks" {
   value = module.terraform-aws-vpc.database_subnets_cidr_blocks
 }
 
-output default_network_acl_id {
+output "default_network_acl_id" {
   value = module.terraform-aws-vpc.default_network_acl_id
 }
 
-output default_route_table_id {
+output "default_route_table_id" {
   value = module.terraform-aws-vpc.default_route_table_id
 }
 
-output default_security_group_id {
+output "default_security_group_id" {
   value = module.terraform-aws-vpc.default_security_group_id
 }
 
-output default_vpc_cidr_block {
+output "default_vpc_cidr_block" {
   value = module.terraform-aws-vpc.default_vpc_cidr_block
 }
 
-output default_vpc_default_network_acl_id {
+output "default_vpc_default_network_acl_id" {
   value = module.terraform-aws-vpc.default_vpc_default_network_acl_id
 }
 
-output default_vpc_default_route_table_id {
+output "default_vpc_default_route_table_id" {
   value = module.terraform-aws-vpc.default_vpc_default_route_table_id
 }
 
-output default_vpc_default_security_group_id {
+output "default_vpc_default_security_group_id" {
   value = module.terraform-aws-vpc.default_vpc_default_security_group_id
 }
 
-output default_vpc_enable_dns_hostnames {
+output "default_vpc_enable_dns_hostnames" {
   value = module.terraform-aws-vpc.default_vpc_enable_dns_hostnames
 }
 
-output default_vpc_enable_dns_support {
+output "default_vpc_enable_dns_support" {
   value = module.terraform-aws-vpc.default_vpc_enable_dns_support
 }
 
-output default_vpc_id {
+output "default_vpc_id" {
   value = module.terraform-aws-vpc.default_vpc_id
 }
 
-output default_vpc_instance_tenancy {
+output "default_vpc_instance_tenancy" {
   value = module.terraform-aws-vpc.default_vpc_instance_tenancy
 }
 
-output default_vpc_main_route_table_id {
+output "default_vpc_main_route_table_id" {
   value = module.terraform-aws-vpc.default_vpc_main_route_table_id
 }
 
-output elasticache_subnet_group {
+output "elasticache_subnet_group" {
   value = module.terraform-aws-vpc.elasticache_subnet_group
 }
 
-output elasticache_subnet_group_name {
+output "elasticache_subnet_group_name" {
   value = module.terraform-aws-vpc.elasticache_subnet_group_name
 }
 
-output elasticache_subnets {
+output "elasticache_subnets" {
   value = module.terraform-aws-vpc.elasticache_subnets
 }
 
-output elasticache_subnets_cidr_blocks {
+output "elasticache_subnets_cidr_blocks" {
   value = module.terraform-aws-vpc.elasticache_subnets_cidr_blocks
 }
 
-output igw_id {
+output "igw_id" {
   value = module.terraform-aws-vpc.igw_id
 }
 
-output nat_ids {
+output "nat_ids" {
   value = module.terraform-aws-vpc.nat_ids
 }
 
-output nat_public_ips {
+output "nat_public_ips" {
   value = module.terraform-aws-vpc.nat_public_ips
 }
 
-output natgw_ids {
+output "natgw_ids" {
   value = module.terraform-aws-vpc.natgw_ids
 }
 
-output private_route_table_ids {
+output "private_route_table_ids" {
   value = module.terraform-aws-vpc.private_route_table_ids
 }
 
-output private_subnets {
+output "private_subnets" {
   value = module.terraform-aws-vpc.private_subnets
 }
 
-output private_subnets_cidr_blocks {
+output "private_subnets_cidr_blocks" {
   value = module.terraform-aws-vpc.private_subnets_cidr_blocks
 }
 
-output public_route_table_ids {
+output "public_route_table_ids" {
   value = module.terraform-aws-vpc.public_route_table_ids
 }
 
-output public_subnets {
+output "public_subnets" {
   value = module.terraform-aws-vpc.public_subnets
 }
 
-output public_subnets_cidr_blocks {
+output "public_subnets_cidr_blocks" {
   value = module.terraform-aws-vpc.public_subnets_cidr_blocks
 }
 
-output redshift_subnet_group {
+output "redshift_subnet_group" {
   value = module.terraform-aws-vpc.redshift_subnet_group
 }
 
-output redshift_subnets {
+output "redshift_subnets" {
   value = module.terraform-aws-vpc.redshift_subnets
 }
 
-output redshift_subnets_cidr_blocks {
+output "redshift_subnets_cidr_blocks" {
   value = module.terraform-aws-vpc.redshift_subnets_cidr_blocks
 }
 
-output vgw_id {
+output "vgw_id" {
   value = module.terraform-aws-vpc.vgw_id
 }
 
-output vpc_cidr_block {
+output "vpc_cidr_block" {
   value = module.terraform-aws-vpc.vpc_cidr_block
 }
 
-output vpc_enable_dns_hostnames {
+output "vpc_enable_dns_hostnames" {
   value = module.terraform-aws-vpc.vpc_enable_dns_hostnames
 }
 
-output vpc_enable_dns_support {
+output "vpc_enable_dns_support" {
   value = module.terraform-aws-vpc.vpc_enable_dns_support
 }
 
-output vpc_endpoint_dynamodb_id {
+output "vpc_endpoint_dynamodb_id" {
   value = module.terraform-aws-vpc.vpc_endpoint_dynamodb_id
 }
 
-output vpc_endpoint_dynamodb_pl_id {
+output "vpc_endpoint_dynamodb_pl_id" {
   value = module.terraform-aws-vpc.vpc_endpoint_dynamodb_pl_id
 }
 
-output vpc_endpoint_s3_id {
+output "vpc_endpoint_s3_id" {
   value = module.terraform-aws-vpc.vpc_endpoint_s3_id
 }
 
-output vpc_endpoint_s3_pl_id {
+output "vpc_endpoint_s3_pl_id" {
   value = module.terraform-aws-vpc.vpc_endpoint_s3_pl_id
 }
 
-output vpc_id {
+output "vpc_id" {
   value = module.terraform-aws-vpc.vpc_id
 }
 
-output vpc_instance_tenancy {
+output "vpc_instance_tenancy" {
   value = module.terraform-aws-vpc.vpc_instance_tenancy
 }
 
-output vpc_main_route_table_id {
+output "vpc_main_route_table_id" {
   value = module.terraform-aws-vpc.vpc_main_route_table_id
 }
 
diff --git a/testdata/v2_no_aws_provider_yaml/terraform/global/fogg.tf b/testdata/v2_no_aws_provider_yaml/terraform/global/fogg.tf
index 370fce2b..8efb0027 100644
--- a/testdata/v2_no_aws_provider_yaml/terraform/global/fogg.tf
+++ b/testdata/v2_no_aws_provider_yaml/terraform/global/fogg.tf
@@ -3,7 +3,7 @@
 terraform {
   required_version = "=0.100.0"
 
-  backend s3 {
+  backend "s3" {
 
     bucket = "buck"
 
@@ -60,23 +60,23 @@ terraform {
 
   }
 }
-variable env {
+variable "env" {
   type    = string
   default = ""
 }
-variable project {
+variable "project" {
   type    = string
   default = "proj"
 }
-variable component {
+variable "component" {
   type    = string
   default = "global"
 }
-variable owner {
+variable "owner" {
   type    = string
   default = "foo@example.com"
 }
-variable tags {
+variable "tags" {
   type = object({ project : string, env : string, service : string, owner : string, managedBy : string })
   default = {
     project   = "proj"
@@ -86,12 +86,12 @@ variable tags {
     managedBy = "terraform"
   }
 }
-variable foo {
+variable "foo" {
   type    = string
   default = "bar1"
 }
-variable aws_accounts {
-  type = map
+variable "aws_accounts" {
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/version_detection/terraform/envs/staging/app/fogg.tf b/testdata/version_detection/terraform/envs/staging/app/fogg.tf
index 28c0a143..a24121dc 100644
--- a/testdata/version_detection/terraform/envs/staging/app/fogg.tf
+++ b/testdata/version_detection/terraform/envs/staging/app/fogg.tf
@@ -38,42 +38,42 @@ terraform {
 }
 
 variable "env" {
-  type    = "string"
+  type    = string
   default = "staging"
 }
 
 variable "project" {
-  type    = "string"
+  type    = string
   default = "acme"
 }
 
 
 variable "region" {
-  type    = "string"
+  type    = string
   default = "us-west-2"
 }
 
 
 variable "component" {
-  type    = "string"
+  type    = string
   default = "app"
 }
 
 
 variable "aws_profile" {
-  type    = "string"
+  type    = string
   default = "acme@infra.exmaple"
 }
 
 
 
 variable "owner" {
-  type    = "string"
+  type    = string
   default = "acme-infra"
 }
 
 variable "tags" {
-  type = "map"
+  type = map(string)
   default = {
     project   = "acme"
     env       = "staging"
@@ -105,7 +105,7 @@ data "terraform_remote_state" "global" {
 
 # map of aws_accounts
 variable "aws_accounts" {
-  type = "map"
+  type = map(string)
   default = {
 
   }
diff --git a/testdata/version_detection/terraform/envs/staging/app/main.tf b/testdata/version_detection/terraform/envs/staging/app/main.tf
index a777df69..2b713483 100644
--- a/testdata/version_detection/terraform/envs/staging/app/main.tf
+++ b/testdata/version_detection/terraform/envs/staging/app/main.tf
@@ -1,35 +1,35 @@
 module "test" {
   source = "../../../modules/test-component"
 
-  project = "${var.project}"
-  env     = "${var.env}"
+  project = var.project
+  env     = var.env
   name    = "golinks"
-  owner   = "${var.owner}"
+  owner   = var.owner
 
-  db_host = "${data.terraform_remote_state.golinksdb.endpoint}"
-  db_name = "${data.terraform_remote_state.golinksdb.database_name}"
-  db_user = "${data.terraform_remote_state.golinksdb.database_username}"
+  db_host = data.terraform_remote_state.golinksdb.endpoint
+  db_name = data.terraform_remote_state.golinksdb.database_name
+  db_user = data.terraform_remote_state.golinksdb.database_username
 
-  ecs_cluster_id              = "${data.terraform_remote_state.ecs.cluster_id}"
-  egress_cidrs                = "${data.terraform_remote_state.cloud-env.private_subnets_cidr_blocks}"
-  ingress_cidrs               = "${data.terraform_remote_state.cloud-env.private_subnets_cidr_blocks}"
-  region                      = "${var.region}"
-  route53_zone_id             = "${data.terraform_remote_state.route53.gostaging_si_czi_technology}"
-  internal_route53_zone_id    = "${data.terraform_remote_state.route53.staging_si_czi_technology}"
-  private_subnets             = "${data.terraform_remote_state.cloud-env.private_subnets}"
-  public_subnets              = "${data.terraform_remote_state.cloud-env.public_subnets}"
-  vpc_id                      = "${data.terraform_remote_state.cloud-env.vpc_id}"
+  ecs_cluster_id              = data.terraform_remote_state.ecs.cluster_id
+  egress_cidrs                = data.terraform_remote_state.cloud-env.private_subnets_cidr_blocks
+  ingress_cidrs               = data.terraform_remote_state.cloud-env.private_subnets_cidr_blocks
+  region                      = var.region
+  route53_zone_id             = data.terraform_remote_state.route53.gostaging_si_czi_technology
+  internal_route53_zone_id    = data.terraform_remote_state.route53.staging_si_czi_technology
+  private_subnets             = data.terraform_remote_state.cloud-env.private_subnets
+  public_subnets              = data.terraform_remote_state.cloud-env.public_subnets
+  vpc_id                      = data.terraform_remote_state.cloud-env.vpc_id
   public_subdomain            = ""
   use_fargate                 = "true"
-  registry_secretsmanager_arn = "${data.terraform_remote_state.credentials.dockerhub_czisi_arn}"
+  registry_secretsmanager_arn = data.terraform_remote_state.credentials.dockerhub_czisi_arn
 }
 
 module "parameters-policy" {
   source = "github.com/chanzuckerberg/cztack//aws-params-reader-policy?ref=v0.15.1"
 
-  project   = "${var.project}"
-  env       = "${var.env}"
-  service   = "${var.name}"
-  region    = "${var.region}"
-  role_name = "${aws_iam_role.role.name}"
+  project   = var.project
+  env       = var.env
+  service   = var.name
+  region    = var.region
+  role_name = aws_iam_role.role.name
 }
\ No newline at end of file
diff --git a/testdata/version_detection/terraform/global/fogg.tf b/testdata/version_detection/terraform/global/fogg.tf
index 09f01b22..6b6b446c 100644
--- a/testdata/version_detection/terraform/global/fogg.tf
+++ b/testdata/version_detection/terraform/global/fogg.tf
@@ -37,41 +37,41 @@ terraform {
 }
 
 variable "env" {
-  type    = "string"
+  type    = string
   default = ""
 }
 
 variable "project" {
-  type    = "string"
+  type    = string
   default = "acme"
 }
 
 
 variable "region" {
-  type    = "string"
+  type    = string
   default = "us-west-2"
 }
 
 
 variable "component" {
-  type    = "string"
+  type    = string
   default = "global"
 }
 
 
 variable "aws_profile" {
-  type    = "string"
+  type    = string
   default = "acme@infra.exmaple"
 }
 
 
 variable "owner" {
-  type    = "string"
+  type    = string
   default = "acme-infra"
 }
 
 variable "tags" {
-  type = "map"
+  type = map(string)
   default = {
     project   = "acme"
     env       = ""
diff --git a/testdata/version_detection/terraform/modules/test-component-2/main.tf b/testdata/version_detection/terraform/modules/test-component-2/main.tf
index 9737e7e7..d122edd3 100644
--- a/testdata/version_detection/terraform/modules/test-component-2/main.tf
+++ b/testdata/version_detection/terraform/modules/test-component-2/main.tf
@@ -1,14 +1,14 @@
 module "test-module" {
-  create      = "${var.create_security_group}"
+  create      = var.create_security_group
   source      = "terraform-aws-modules/security-group/aws"
   version     = "3.1.0"
   name        = "${local.name}-alb"
   description = "Security group for ${var.internal ? "internal" : "internet facing"} ALB"
-  vpc_id      = "${var.vpc_id}"
-  tags        = "${local.tags}"
+  vpc_id      = var.vpc_id
+  tags        = local.tags
 
-  ingress_cidr_blocks = "${var.ingress_cidrs}"
-  egress_cidr_blocks  = "${var.egress_cidrs}"
+  ingress_cidr_blocks = var.ingress_cidrs
+  egress_cidr_blocks  = var.egress_cidrs
   ingress_rules       = ["https-443-tcp", "http-80-tcp"]
   egress_rules        = ["all-all"]
 }
diff --git a/testdata/version_detection/terraform/modules/test-component/main.tf b/testdata/version_detection/terraform/modules/test-component/main.tf
index 4bf04999..e66db7db 100644
--- a/testdata/version_detection/terraform/modules/test-component/main.tf
+++ b/testdata/version_detection/terraform/modules/test-component/main.tf
@@ -14,26 +14,26 @@ data "aws_iam_policy_document" "assume_role" {
 }
 
 resource "aws_iam_role" "role" {
-  name               = "${local.service_name}"
-  assume_role_policy = "${data.aws_iam_policy_document.assume_role.json}"
+  name               = local.service_name
+  assume_role_policy = data.aws_iam_policy_document.assume_role.json
 }
 
 module "parameters-policy" {
   source = "github.com/chanzuckerberg/cztack//aws-params-reader-policy?ref=v0.15.1"
 
-  project   = "${var.project}"
-  env       = "${var.env}"
-  service   = "${var.name}"
-  region    = "${var.region}"
-  role_name = "${aws_iam_role.role.name}"
+  project   = var.project
+  env       = var.env
+  service   = var.name
+  region    = var.region
+  role_name = aws_iam_role.role.name
 }
 
 module "container_environment" {
   source  = "github.com/chanzuckerberg/cztack//aws-params-writer?ref=v0.15.1"
-  project = "${var.project}"
-  env     = "${var.env}"
-  service = "${var.name}"
-  owner   = "${var.owner}"
+  project = var.project
+  env     = var.env
+  service = var.name
+  owner   = var.owner
 
   parameters = {
     AWS_REGION         = "${var.region}"