Skip to content

Latest commit

 

History

History
79 lines (65 loc) · 1.8 KB

README.md

File metadata and controls

79 lines (65 loc) · 1.8 KB

Build Status

nixform

define terraform infrastructure in Nix

Terraform by Hashicorp is a great tool with a meh language. Fixed.

Installation

First, install nix. Then,

# install nixform (and deps)
nix-env -i -f "https://github.com/brainrape/nixform/archive/master.tar.gz"

Usage

Create a file like example.tf.nix containing a nix expression that evaluates to a set that looks like terraform's json format:

let
  lib = (import <nixpkgs> {}).lib;
  tpls = lib.mapAttrs (name: lib.recursiveUpdate {
    tags.name = name;
    ami = "ami-0d729a60";
    instance_type = "t2.nano";
  });
in {
  provider.aws.region = "us-east-1";
  resource.aws_instance = tpls {
    one = {};
    two = {
      tags.description = "Second!";
      instance_type = "t2.micro";
    };
  };
}

Then use nixform instead of terraform.

nixform apply

How?

Before running terraform with the given arguments, *.tf.nix is evaluated strictly and output in terraform json format. The above example will produce an example.tf.json like this:

{
    "provider": {
        "aws": {
            "region": "us-east-1"
        }
    },
    "resource": {
        "aws_instance": {
            "one": {
                "ami": "ami-0d729a60",
                "instance_type": "t2.nano",
                "tags": {
                    "name": "one"
                }
            },
            "two": {
                "ami": "ami-0d729a60",
                "instance_type": "t2.micro",
                "tags": {
                    "description": "Second!",
                    "name": "two"
                }
            }
        }
    }
}