A Private Terraform Module Registry in the early stages of development.
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_DATABASE
: Backend provider for registry metadata. Set tomongodb
to use MongoDB. Leaving unset will use localnedb
file. -
CITIZEN_MONGO_DB_URI
: MongoDB database URI if using MongoDB backend. URI format ismongodb://username:password@host:port/database?options…​
. Default ismongodb://localhost:27017/citizen
-
CITIZEN_DATA_PATH
: A directory to save database file if using local backend storage. The default isdata
directory in a current working directory (absolute/relative path can be used). -
CITIZEN_STORAGE
: Storage type to store module files. You can usefile
ors3
type. -
CITIZEN_STORAGE_PATH
: A directory to save module files only ifCITIZEN_STORAGE
isfile
(absolute/relative path can be used). -
CITIZEN_AWS_S3_BUCKET`
: A S3 bucket to save module files only ifCITIZEN_STORAGE
iss3
. -
AWS_ACCESS_KEY_ID
: Your AWS access key only ifCITIZEN_STORAGE
iss3
. -
AWS_SECRET_ACCESS_KEY
: Your AWS secret access key only ifCITIZEN_STORAGE
iss3
.
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
.
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" }
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
Set environment variables, see above.
$ ./bin/citizen server
$ ./bin/citizen publish
Set at least a storage path and the s3 bucket name variables for the tests to succeed. You need to be able to access the bucket, so you probably want to have an active aws or aws-vault profile.
Run the tests:
$ npm test
Run the tests with the environment variables prefixed:
$ CITIZEN_STORAGE_PATH=storage CITIZEN_AWS_S3_BUCKET=terraform-registry-modules npm test