Skip to main content

Python client tool for aws private terraform registry.

Project description

aws-terraform-registry-cli

PyPI Version PyPI License

Versions following Semantic Versioning

Overview

This project create a python client which work with AWS Terraform Private Registry.

Features:

  • Show client configuration (for debug purpose)
  • Authentication:
    • JWT Token generation
    • .terraformrc generation to configure Devops workstation
  • Terraform module publication from external storage (like a githb module release)
  • Terraform module release (more detail on it below) to store every module inside default bucket of the AWS Terraform Private Registry..

See documentation.

The AWS Terraform Private Registry follow this Architectural design:

Architecture

Installation

Install this library directly into an activated virtual environment:

$ uv tool install aws_terraform_registry
or
$ python3 -m pip install aws_terraform_registry

Configuration

We have to provide few informations to this client :

Name Description
secret_key_name AWS Secret manager name where JWT Secret is stored
repository_url HTTPS endpoint of the registry
dynamodb_table_name AWS dynamodb table name
bucket_name bucket name
default_namespace default namespace to publish terraform module ("devops" per default)

All this information can come from several way (choose the rigth for you):

  • from a yaml configuration file
  • from environment variable

Yaml configuration can be overriden with environment variable.

YAML configuration

The default file name is terraform_registry.yaml, you can override this with TFR_CONFIG_FILE environmentt variable.

To find thie configuratin file, directories will be lookup in this order:

  • user home directory
  • command line directory
  • /etc/tfr

Environment variable

Name Enviromnent variable name
secret_key_name TFR_SECRET_KEY_NAME
repository_url TFR_REPOSITORY_URL
dynamodb_table_name TFR_DYNAMODB_TABLE_NAME
bucket_name TFR_BUCKET_NAME
default_namespace TFR_DEFAULT_NAMESPACE

All environment variable can be set with .env file inside your command line directory.

Usage

> tfr
usage: tfr [-h] {config,generate-token,generate-terraformrc,publish,release} ...

Manage terraform registry

positional arguments:
  {config,generate-token,generate-terraformrc,release,unpublish,publish}
                        commands
    config              Show configuration parameters
    generate-token      Generate an access token
    generate-terraformrc
                        Generate terraformrc configuration file
    release             Release a terraform module from custom source.
    publish             Publish a terraform module from custom source.
    unpublish           Unpublish a terraform module (Keep archive on s3).

optional arguments:
  -h, --help            show this help message and exit

Configuration

You can print what the python client use as configuration with the command :

tfr config

Example with an empty configuration:

bucket_name: null
default_namespace: devops
dynamodb_table_name: null
repository_url: null
secret_key_name: null

Authentication

Obtain a JWT token

Command :

usage: tfr generate-token [-h] [-weeks WEEKS]

optional arguments:
  -h, --help            show this help message and exit
  -weeks WEEKS, --weeks WEEKS
                        #weeks of validity (52 per default)

Configure terraform with your private registry

Users must create .terraformrc file in their $HOME directory, with this content:

credentials "registry.my-domain.com" {
    token = "Mytoken"
}

Command :

usage: tfr generate-terraformrc [-h] -output-directory OUTPUT_DIRECTORY [-weeks WEEKS]

optional arguments:
  -h, --help            show this help message and exit
  -output-directory OUTPUT_DIRECTORY, --output-directory OUTPUT_DIRECTORY
                        output directory
  -weeks WEEKS, --weeks WEEKS
                        #weeks of validity (52 per default)

Terraform & Publication

You have two way to publish a module, using:

  • publish
  • release

What's the difference ?

publish: register the source module as is in the aws private terraform regstry. You could have access issue if this url is not public.

release:

  • store the source into the dedicated bucket of aws private terraform regstry. The access is managed within registry.
  • archive (targ.gz) if the source is a folder
  • download the source if it's an http url
  • As your module will be stored within registry bucket, terraform client will use s3 signed url

We use release from our ci/cd pipeline and publish only when we have to do something like 'quick and dirty' ... (It never happen, I swear !)

Release command

usage: tfr release [-h] [-namespace NAMESPACE] -name NAME -system SYSTEM -version VERSION -source SOURCE

optional arguments:
  -h, --help            show this help message and exit
  -namespace NAMESPACE, --namespace NAMESPACE
                        module namespace
  -name NAME, --name NAME
                        module name
  -system SYSTEM, --system SYSTEM
                        module system (aws, ...)
  -version VERSION, --version VERSION
                        module version
  -source SOURCE, --source SOURCE
                        module source

Unpublish command

usage: tfr unpublish [-h] [-namespace NAMESPACE] -name NAME -system SYSTEM -version VERSION -source SOURCE

optional arguments:
  -h, --help            show this help message and exit
  -namespace NAMESPACE, --namespace NAMESPACE
                        module namespace
  -name NAME, --name NAME
                        module name
  -system SYSTEM, --system SYSTEM
                        module system (aws, ...)
  -version VERSION, --version VERSION
                        module version

Publish command

usage: tfr publish [-h] [-namespace NAMESPACE] -name NAME -system SYSTEM -version VERSION -source SOURCE

optional arguments:
  -h, --help            show this help message and exit
  -namespace NAMESPACE, --namespace NAMESPACE
                        module namespace
  -name NAME, --name NAME
                        module name
  -system SYSTEM, --system SYSTEM
                        module system (aws, ...)
  -version VERSION, --version VERSION
                        module version
  -source SOURCE, --source SOURCE
                        module source

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aws_terraform_registry-1.3.1.tar.gz (19.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aws_terraform_registry-1.3.1-py3-none-any.whl (22.5 kB view details)

Uploaded Python 3

File details

Details for the file aws_terraform_registry-1.3.1.tar.gz.

File metadata

  • Download URL: aws_terraform_registry-1.3.1.tar.gz
  • Upload date:
  • Size: 19.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for aws_terraform_registry-1.3.1.tar.gz
Algorithm Hash digest
SHA256 80379593df4e87797aca086fa55e254c081725c8f7f76e234fd7f6c028cc4db2
MD5 4ce12973fa02c867c55cd31eca4ad874
BLAKE2b-256 be57a5fa27fcb4c0508df9a6e30330f0b12d8d13e0bc742462500a32e0e2f47b

See more details on using hashes here.

File details

Details for the file aws_terraform_registry-1.3.1-py3-none-any.whl.

File metadata

  • Download URL: aws_terraform_registry-1.3.1-py3-none-any.whl
  • Upload date:
  • Size: 22.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for aws_terraform_registry-1.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 711f79f1da12b9aafde407dfe780de7b17e8fe760a9aef81ed9d5894d85c5a14
MD5 47d9d7d99b13c8c3d9e778974faac927
BLAKE2b-256 48e8c64f42fdc6f3463f3c3224a5f0528a5619bf3e261c583a03c395a2545a96

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page