@ppwcode/terraform-ppwcode-modules

A number of general Terraform modules

Usage no npm install needed!

<script type="module">
  import ppwcodeTerraformPpwcodeModules from 'https://cdn.skypack.dev/@ppwcode/terraform-ppwcode-modules';
</script>

README

This repository contains a number of general Terraform modules.

The Terraform documentation describes how to use modules. You import the modules from Github, as described in the documentation. Use the format for public Github repositories, using the "double-slash" to refer to the correct subdirectory.

module "MODULE_INSTANCE_NAME" {
    source = "github.com/peopleware/terraform-ppwcode-modules//MODULE_NAME"
}

On the other hand, …

The module domain_version/ directly, and thus the module subdomain/ that depends on it, uses a Node.js JavaScript script (though a Terraform external data source provider) to get information about the SOA serial and the state of the git repository of the Terraform configuration it is used in. Node.js JavaScript code depends on other npm packages, that need to be installed for the script to be able to work. This repository is therefor, apart from being a collection of Terraform modules, also a Node.js package, with dependencies described in package.json. The dependencies need to be available in a node_modules/ folder next to the script, or in one of its ancestor folders, before Terraform can use the modules in > terraform plan or > terraform apply.

This is done by running > npm install in the project that uses these modules.

For this to work, this collection of Terraform modules / npm package must itself be loaded in the Terraform configuration in which it is used via > npm install. These commands work recursively.

This is done by making the configuration in which these modules are used an npm package itself, with this collection of Terraform modules defined as a development dependency in its package.json. Once > npm install is executed, these modules will be available in node_modules/terraform-ppwcode-modules/. To create an instance of a module MODULE_NAME then, the Terraform configuration has to refer to it via a relative path, like this:

module "MODULE_INSTANCE_NAME" {
    source = "./node_modules/terraform-ppwcode-modules/MODULE_NAME"
}

Note to the Terraform maintainers: go with the flow, and promote npm as the primary method to distribute modules.

Compatibility

This library is intended to be compatible with Node 6, 8, and 10.

Development

Node version

Development is done in Node 10, via nvm.

Compatibility

The code does not use async / await, which was introduced in Node 8.

Also, we use Q as Promise library, instead of native Promises, since Node 6 does not yet support util.promisify(). We use Q.nfcall instead.

Style

JavaScript Style Guide

This code uses Standard coding style.

TODO

Setup a CI

Move to ppwcode team. Request access from Travis. Create parallel builds for Node 6, 8 10, and back tag.