tfnew is a small cli tool for generating new terraform modules in a fairly opinionated way
curl -fsSL https://raw.githubusercontent.com/fitz7/tfnew/main/install.sh | bash
go install gitub.com/fitz7/tfnew@latest
This step is optional in using tfnew
as all the args are also supported by tfnew module
.
tfnew init
will create a .tfnew.yaml
file in the root of your project directory (wherever the .git folder is)
tfnew init
By default, tfnew init
specifies a local backend and a local terraform.tfstate
file.
currently the only other supported backend is gcs
tfnew init --backend=gcs --backend_gcs_bucket=my-state-bucket --backend_gcs_prefix=my-repo
This will configure subsequent runs in this project to create a terraform backend
block configured to use gcs with the bucket and prefix
Important
the prefix defined is not the final prefix. when you create your first module the prefix will be of the form prefix/module_path
tfnew module modules/new-module
Will generate a new module with a very basic terraform block in the versions.tf
file
terraform {
required_version = ">= 1.0"
}
A root module will be generated with a backend block to store the root modules state. It will also set the required terraform version to the latest minor version
tfnew module root-module --root
terraform {
required_version = "~> 1.6"
backend "gcs" {
bucket = "my-state-bucket"
prefix = "root-module"
}
}
required_providers must be referenced by their source and are also generated with their latest minor version
tfnew module root-module-providers --root --required_providers=hashicorp/google,hashicorp/google-beta
terraform {
required_version = "~> 1.6"
backend "gcs" {
bucket = "my-state-bucket"
prefix = "root-module-providers"
}
required_providers {
google = {
source = "hashicorp/google"
version = "~> 5.8"
}
google-beta = {
source = "hashicorp/google-beta"
version = "~> 5.8"
}
}
}