Skip to main content

Terraform developer tool to extract variables and create variables.tf files.

Project description

scratch relax tv

Terraform module development tool.

  1. Extract variables from main.tf and create variables.tf files
  2. Find missing variables in variables.tf and main.tf based on each other
  3. Create a module use stub from a variables.tf file
  4. Delete extra scratchrelaxtv files

workflows

Original module development:

  1. Write main.tf with whatever variables you need
  2. Run scratchrelaxtv to generate variables.tf
  3. Fill in descriptions, defaults, etc. in variables.tf
  4. Run terraform fmt to prettify everything

Cleanup module:

  1. Run scratchrelaxtv in folder with main.tf and variables.tf to find missing variables
  2. Using -cf option, automatically add missing vars to variables.tf
  3. Fill in descriptions, defaults, etc. in variables.tf for newly added vars
  4. Run terraform fmt to prettify everything

install

pip install scratchrelaxtv

examples

generate variables.tf

By default, scratchrelaxtv looks for main.tf and will generate a variables.tf file. Variables will be in the same order in variables.tf as they were in main.tf. There are options to sort variables. You can --force to overwrite an existing variables.tf file. Otherwise, scratchrelaxtv will create new variables.tf files with each run: variables.1.tf, variables.2.tf and so on.

Assume this main.tf:

resource "aws_s3_bucket" "this" {
  count  = "${var.create_bucket ? 1 : 0}"
  bucket = "${var.bucket}"
  region = "${var.region}"
}

Run scratchrelaxtv:

$ scratchrelaxtv
2019-04-26 08:02:54,011 - INFO - creating variables.tf file
2019-04-26 08:02:54,011 - INFO - input file: main.tf
2019-04-26 08:02:54,011 - INFO - output file: variables.tf
2019-04-26 08:02:54,011 - INFO - not forcing overwrite of output file
2019-04-26 08:02:54,011 - INFO - not ordering output file

The generated variables.tf:

variable "create_bucket" {
  description = ""
  type        = "string"
  default     = ""
}

variable "bucket" {
  description = ""
  type        = "string"
  default     = ""
}

variable "region" {
  description = ""
  type        = "string"
  default     = ""
}

Find and fix missing variables

Assume you already have a main.tf and a variables.tf. In this example, the variables.tf is missing the region variable.

main.tf:

resource "aws_s3_bucket" "this" {
  bucket = "${var.bucket}"
  region = "${var.region}"
}

variables.tf:

variable "bucket" {
  description = "The bucket where the stuff will be stored"
  type        = "string"
  default     = ""
}

Run scratchrelaxtv to automatically add any missing variables:

$ scratchrelaxtv -cf
2019-04-26 08:21:27,289 - INFO - checking for missing variables
2019-04-26 08:21:27,289 - INFO - input file: main.tf
2019-04-26 08:21:27,289 - INFO - output file: variables.tf
2019-04-26 08:21:27,289 - INFO - forcing overwrite of output file
2019-04-26 08:21:27,289 - INFO - not ordering output file
2019-04-26 08:21:27,290 - WARNING - input file main.tf is missing variables:
region

Now, the variables.tf looks like this:

variable "bucket" {
  description = "The bucket where the stuff will be stored"
  type        = "string"
  default     = ""
}

variable "region" {
  description = ""
  type        = "string"
  default     = ""
}

Create a stub for using the module

By default, when creating a stub, scratchrelaxtv looks for variables.tf.

Assume this variables.tf:

variable "id" {
  description = "The ID of the resource"
  type        = "string"
  default     = ""
}

variable "bucket" {
  description = "The bucket where the stuff will be stored"
  type        = "string"
  default     = ""
}

variable "region" {
  description = "The AWS region where the bucket lives"
  type        = "string"
  default     = ""
}

Run scratchrelaxtv with the module stub option:

$ scratchrelaxtv -m
2019-04-26 08:09:27,147 - INFO - creating module usage stub
2019-04-26 08:09:27,147 - INFO - input file: variables.tf
2019-04-26 08:09:27,147 - INFO - output file: modstub.tf
2019-04-26 08:09:27,147 - INFO - not forcing overwrite of output file
2019-04-26 08:09:27,147 - INFO - not ordering output file

The generated modstub.tf:

module "tests2" {
  source = "../tests2"

  providers = {
    aws = "aws"
  }

  id     = "${local.id}"
  bucket = "${local.bucket}"
  region = "${local.region}"
}

remove files

$ scratchrelaxtv -r

scratchrelaxtv can also tidy up your directories by removing its own extra generated files. Presumably it will only remove files you no longer need but be careful. This chart shows examples of what would be deleted or not.

NOTE: scratchrelaxtv removes files in the current directory and subdirectories.

Filename Deleted?
variables.tf no
modstub.tf yes
modstub.1.tf yes
variables.1.tf yes
xyz.abc no
variables.a.tf no
variables.43.tf yes
modstub no
modstub..tf no

help

scratchrelaxtv includes help:

$ scratchrelaxtv --help
usage: scratchrelaxtv [-h] [-i INPUT] [-o OUTPUT] [-f] [-m] [-n MODNAME] [-r]
                      [-c] [-a | -d]

optional arguments:
  -h, --help            show this help message and exit
  -i INPUT, --input INPUT
                        file to extract vars from
  -o OUTPUT, --output OUTPUT
                        file to write extracted vars to
  -f, --force           overwrite existing out file
  -m, --modstub         create module usage stub
  -n MODNAME, --modname MODNAME
                        name to use in module stub
  -r, --remove          remove all modstub.tf, variables.#.tf files
  -c, --check           check that all vars are listed
  -a, --asc             sort output variables in ascending order
  -d, --desc            sort output variables in descending order

CHANGE LOG

0.3.0 - 2019.04.25

  • Add functionality to check existing main.tf and variables.tf for missing variables

0.2.1 - 2019.04.25

  • Fix inconsequential error thrown when removing files

0.2.0 - 2019.04.25

  • Add capability to delete extra working files

0.1.3 - 2019.04.17

  • Add module stub capability

0.1.2 - 2019.04.17

  • Add simple docs

0.1.1 - 2019.04.16

  • Initial working version

0.1.0 - 2019.04.15

  • Initial release!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

scratchrelaxtv-0.3.0.tar.gz (26.0 kB view hashes)

Uploaded Source

Built Distribution

scratchrelaxtv-0.3.0-py2.py3-none-any.whl (20.0 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page