"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > samwise-CLI: The Open Source Terraform module dependency tracker

samwise-CLI: The Open Source Terraform module dependency tracker

Published on 2024-11-07
Browse:775

Terraform

Terraform is an Infrastructure-as-Code(IaC) tool that is written in Hashicorp Configuration Language(HCL). This article assumes that the reader has worked with Terraform and understand how modules work.

Everyone coding in Terraform has either created their own modules, or at least used someone else's.

Terraform modules

Modules are containers for multiple resources that are used together. A module consists of a collection of .tf and/or .tf.json files kept together in a directory.

Modules are the main way to package and reuse resource configurations with Terraform.

Modules can be published to registries like Terraform registry or GitLab. Modules can also be served from Git repositories by providing the HTTPS or SSH URLs. These can be versioned as well. For example,

module "consul" {
  source = "github.com/hashicorp/example"
}

Versioned:

module "consul" {
  source = "github.com/hashicorp/example?ref=1.2.6"
}

Challenge

As your repositories grow and you reference your modules in other repositories, you would reasonably version your modules to ensure that upstream changes in the source doesn't break your infrastructure. However, it is difficult to keep track of all the new releases for the modules being used and even harder to do it regularly. Unaddressed, this builds overtime as tech debt as one day you discover that a core module is now 3 major versions ahead.

Solution

Presenting samwise-cli, a tool to help track your repository's Terraform/OpenTofu dependencies upstream. Searches your repository for usages of modules and generates a report of the modules that have updates available along with all the versions that are more advanced than the version used currently.

samwise-CLI: The Open Source Terraform module dependency tracker

At the moment, there's only one command, but hopefully there'll be more soon as the tool develops.

Random repo for the time being

samwise-CLI: The Open Source Terraform module dependency tracker Darth-Tech / samwise-cli

A CLI application to accompany on your terraform module journey and sharing your burden of module dependency updates, just as one brave Hobbit helped Frodo carry his :)

samwise

A CLI application to accompany on your terraform module journey and sharing your burden of module dependency updates, just as one brave Hobbit helped Frodo carry his :)

samwise-CLI: The Open Source Terraform module dependency tracker

%,( "' /%% / Cccc' (cause I couldn't find good enough Samwise Gamgee ASCII art) Frodo by Shanaka Dias">
                       \ : /
                    '-: __ :-'
                    -:  )(_ :--
                    -' |r-_i'-
            ,sSSSSs,   (2-,7
            sS';:'`Ss   )-j
           ;K e (e s7  /  (
            S, ''  SJ (  ;/
            sL_~~_;(S_)  _7
|,          'J)_.-' />'-' `Z
j J         /-;-A'-'|'--'-j\
 L L        )  |/   :    /  \
  \ \       | | |    '._.'|  L
   \ \      | | |       | \  J
    \ \    _/ | |       |  ',|
     \ L.,' | | |       |   |/
    _;-r-<_. __. _ l- l>…
View on GitHub

checkForUpdates

samwise-CLI: The Open Source Terraform module dependency tracker

For this to run where modules are using private GitHub repositories, .samwise.yaml config file needs to passed as an argument or needs to be present at the user's home directory.

.samwise.yaml format:

github_key:
github_username:

Currently only GitHub HTTPS authentication is supported but SSH authentication will be supported soon.

Result

CSV Format
samwise-CLI: The Open Source Terraform module dependency tracker

JSON Format
samwise-CLI: The Open Source Terraform module dependency tracker

Limitations(or better described as features to be added)

  • SSH authentication for retrieving module sources
  • Tracking Hashicorp's registry's module(they have an API to list versions here

Context for the name

I love Lord of the Rings :)

Release Statement This article is reproduced at: https://dev.to/thundersparkf/samwise-cli-the-open-source-terraform-module-dependency-tracker-3b1e?1 If there is any infringement, please contact [email protected] to delete it
Latest tutorial More>

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3