Internet Explorer is no longer supported. Many things will still work, but your experience will be degraded and some things won't function. Please use a modern browser such as Edge, Chrome, or Firefox.

HOWTO: Create and Upload Terraform Modules to a Private Registry in ProGet

view on GitHub

Using ProGet, you can easily set up a private registry to create and upload your internal terraform modules.

This guide will show you how to set up a "Feed" in ProGet as a private terraform module registry. We will also walk you through packaging your modules and uploading them to this feed.

Step 1: Create a New Feed

We'll start by creating a Terraform feed that we will use to host our internal terraform packages.

Navigate to "Feeds" and select "Create New Feed". Then select "Terraform Modules", listed under "System & Software Configuration".

Then select "Private/Internal Terraform Modules" and name the feed, which we will call internal-terraform. Then select "Create New Feed"

You will then be redirected to your new internal-terraform feed, currently empty.

Step 2: Create a Metadata File

To upload your module to your internal-terraform feed, you'll need to package it. You can read more about what goes into a module package on the Terraform Modules page. To package a module you'll first need to create a Universal Package JSON metadata file. This file, named upack.json, provides essential information about your module. The format includes:

{
  "group": "«company-name»",
  "name": "«module-name»",
  "version": "«version»"
}

You can also use additional Universal Package properties like summary and description to provide additional metadata for users in ProGet.

Step 3: Package your Module

Once you have created the metadata file for your module, you'll need to package it. You can do this through ProGet's UI but we recommend using the pgutil command line tool. This needs a bit of minor configuration before use such as setting up your ProGet instance and API key as a source by running:

$ pgutil sources add --name=Default --url=«proget-url» --api-key=«api-key»

Now package your module using the upack create command:

$ pgutil upack create --source-directory=«path-to-module» --manifest=«path-to-upack»

Step 4: Upload your Packaged Module

Once packaged, you cam use pgutil to upload your module to your internal-terraform feed using the packages upload command:

pgutil packages upload --feed=internal-terraform --input-file=«path-to-module»

Your module will then be uploaded to the internal-terraform feed.

Step 5: Edit your .tf File

Once you've uploaded a package to your feed, you can add the module to your Terraform configuration by adding this block in your .tf file (e.g., main.tf):

module "«module-name»" {
  source  = "«proget-host-name»/«feed-name»__«namespace»/«module-name»/«provider»"
  version = "«version»"
}

Once you add this to your .tf file, you can add in additional variables and then run terraform init.