Project

tfw

0.0
Low commit activity in last 3 years
Terraform Wrapper using Terraform DSL for Ruby
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 2.1
~> 0.8
~> 5.0
~> 0.12
~> 13.0
~> 0.79

Runtime

= 0.1.11
 Project Readme

TFW - Terraform Wrapper

Terraform Wrapper writes terraform configuration using TFDSL (Terraform DSL for Ruby) and invokes the terraform binary.

Motivation (Short Version)

Terraform is an excellent tool, but it lacks funcionalities like Loops and Conditionals, actually since version 0.12+ it has loops as meta-arguments which is a hacky implementation in my humble opinion.

For years I was templating terraform configuration with ERB / Jinja, that's reasonable way to avoid repetition in terraform but it's not very flexible nor reusable.

The solution was writing a tool which mimics terraform usage but writes configuration in plain Ruby.

Usage:

  1. let's create a file called foo.rb
resource 'local_file', 'foo' do 
  content 'foo'
  filename '/tmp/foo.txt'
end
  1. Just like in terrraform, run init and apply
$ tfw init && tfw apply
... <omitted output>
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # local_file.foo will be created
  + resource "local_file" "foo" {
      + content              = "foo"
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "/tmp/foo.txt"
      + id                   = (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

local_file.foo: Creating...
local_file.foo: Creation complete after 0s [id=0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

How it works

TFW will create a subdirectory called .tfw, and it will create a file called .tfw/stack.tf which is the dynamically generated terraform file, and will invoke terrafom in that directory.

Installation

TFW is just a ruby gem and can easily be installed as below:

gem install tfw