Skip to content

A Private Terraform Module Registry

License

Notifications You must be signed in to change notification settings

datacamp-engineering/citizen

 
 

Repository files navigation

Citizen

Build Status FOSSA Status Dependency Status devDependency Status

A Private Terraform Module Registry in the early stages of development.

Requirements

  • Node.js 8+

  • HTTPS - Terraform module registry only support HTTPS.

Usage

citizen server

To launch the registry server

$ ./citizen server

It will be launched at http://localhost:3000. You can check it at http://localhost:3000/health.

Because Terraform CLI works with only HTTPS server, you should set up HTTPS in front of the registry server.

If you want to test it at local, you need a tool which provides HTTPS like ngrok.

Environment variables:

  • CITIZEN_DATA_PATH: A directory to save database file. The default is data directory in a current working directory (absolute/relative path can be used).

  • CITIZEN_STORAGE : Storage type to store module files. You can use file or s3 type.

  • CITIZEN_STORAGE_PATH: A directory to save module files only if CITIZEN_STORAGE is file (absolute/relative path can be used).

  • CITIZEN_AWS_S3_BUCKET`: A S3 bucket to save module files only if CITIZEN_STORAGE is s3.

  • AWS_ACCESS_KEY_ID: Your AWS access key only if CITIZEN_STORAGE is s3.

  • AWS_SECRET_ACCESS_KEY: Your AWS secret access key only if CITIZEN_STORAGE is s3.

citizen publish

Since official Terraform Module Registry is integrated with GitHub, users can publish terraform modules if they just push it on GitHub.

Citizen provides a special command to publish a module onto citizen registry server instead integrating GitHub.

In a module directory, you can publish your terraform module via a command below:

$ ./citizen publish <namespace> <name> <provider> <version>

You should set CITIZEN_ADDR as citizen registry server address which you will publish your modules to. e.g. https://registry.example.com.

Examples

If you have ALB module in ./alb directory and your registry server is launched at https://registry.example.com, you run below command in ./alb directory to publish ALB module.

$ CITIZEN_ADDR=https://registry.example.com \
  citizen publish dev-team alb aws 0.1.0

Then, you can define it in your terraform file like this:

module "alb" {
  source = "registry.example.com/dev-team/alb/aws"
  version = "0.1.0"
}

Docker

You can use docker to launch the registry server. The docker image is in outsideris/citizen.

$ docker run -d -p "3000:3000" outsideris/citizen:latest

Development

Set environment variables, see above.

$ ./bin/citizen server
$ ./bin/citizen publish

Test

$ npm test

Build distributions

$ npm run build

Under dist/, citizen binaries for linux, darwin and windows made.

License

FOSSA Status

About

A Private Terraform Module Registry

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 98.5%
  • Other 1.5%