Categorygithub.com/BerlingskeMedia/terraform-module-versions
modulepackage
0.0.0-20211008102313-63585a540d96
Repository: https://github.com/berlingskemedia/terraform-module-versions.git
Documentation: pkg.go.dev

# README

terraform-module-versions

Checks for updates of external terraform modules referenced in given Terraform (0.10.x - 0.12.x) modules. Outputs Markdown tables by default, as well as JSONL (-o jsonl, one JSON object per line), JSON (-o json), and JUnit XML (-o junit).

Supported module sources:

  • Git with SemVer tags
  • Terraform Registry
    • public <NAMESPACE>/<NAME>/<PROVIDER>
    • private <HOSTNAME>/<NAMESPACE>/<NAME>/<PROVIDER>

Example

$ terraform-module-versions check examples
| UPDATE? |              NAME               | CONSTRAINT | VERSION | LATEST MATCHING | LATEST |
|---------|---------------------------------|------------|---------|-----------------|--------|
| (Y)     | consul                          | ~0.7.3     |         | 0.7.11          | 0.8.0  |
| (Y)     | consul_github_https_missing_ref | 0.7.3      |         | v0.7.3          | v0.8.0 |
| (Y)     | consul_github_https_no_ref      |            |         |                 | v0.8.0 |
| Y       | consul_github_ssh               | ~0.1.0     | 0.1.0   | v0.1.2          | v0.8.0 |
| (Y)     | example_git_scp                 | ~> 0.12    | 0.12.0  |                 | 3.0.3  |
| (Y)     | example_git_ssh_branch          |            | master  |                 | 3.0.3  |

Contents

Examples

$ cat examples/main.tf
module "consul" {
  source = "hashicorp/consul/aws"
  version = "~0.7.3"
}

module "consul_github_https_missing_ref" {
  source = "github.com/hashicorp/terraform-aws-consul"
  version = "0.7.3"
}

module "consul_github_https_no_ref" {
  source = "github.com/hashicorp/terraform-aws-consul"
}

module "consul_github_https" {
  source = "github.com/hashicorp/terraform-aws-consul?ref=v0.8.0"
  version = "0.8.0"
}

module "consul_github_ssh" {
  source = "[email protected]:hashicorp/terraform-aws-consul?ref=0.1.0"
  version = "~0.1.0"
}

module "example_git_ssh_branch" {
  source = "git::ssh://[email protected]/keilerkonzept/terraform-module-versions?ref=master"
}

module "example_git_scp" {
  source = "git::[email protected]:keilerkonzept/terraform-module-versions?ref=0.12.0"
  version = "~> 0.12"
}

module "local" {
  source = "./local"
}

List modules with their current versions

# list modules with their current versions and version constraints (if specified)
$ terraform-module-versions list examples
TYPENAMECONSTRAINTVERSIONSOURCE
registryconsul~0.7.3hashicorp/consul/aws
locallocal./local
gitexample_git_ssh_branchmastergit::ssh://[email protected]/keilerkonzept/terraform-module-versions?ref=master
gitexample_git_scp~> 0.120.12.0git::[email protected]:keilerkonzept/terraform-module-versions?ref=0.12.0
gitconsul_github_ssh~0.1.00.1.0[email protected]:hashicorp/terraform-aws-consul?ref=0.1.0
gitconsul_github_https_no_refgithub.com/hashicorp/terraform-aws-consul
gitconsul_github_https_missing_ref0.7.3github.com/hashicorp/terraform-aws-consul
gitconsul_github_https0.8.0v0.8.0github.com/hashicorp/terraform-aws-consul?ref=v0.8.0

with -o json:

[
  {
    "path": "examples/main.tf",
    "name": "consul",
    "type": "registry",
    "source": "hashicorp/consul/aws",
    "constraint": "~0.7.3"
  },
  {
    "path": "examples/main.tf",
    "name": "consul_github_https",
    "type": "git",
    "source": "github.com/hashicorp/terraform-aws-consul?ref=v0.8.0",
    "constraint": "0.8.0",
    "version": "v0.8.0"
  },
  {
    "path": "examples/main.tf",
    "name": "consul_github_https_missing_ref",
    "type": "git",
    "source": "github.com/hashicorp/terraform-aws-consul",
    "constraint": "0.7.3"
  },
  {
    "path": "examples/main.tf",
    "name": "consul_github_https_no_ref",
    "type": "git",
    "source": "github.com/hashicorp/terraform-aws-consul"
  },
  {
    "path": "examples/main.tf",
    "name": "consul_github_ssh",
    "type": "git",
    "source": "[email protected]:hashicorp/terraform-aws-consul?ref=0.1.0",
    "constraint": "~0.1.0",
    "version": "0.1.0"
  },
  {
    "path": "examples/main.tf",
    "name": "example_git_scp",
    "type": "git",
    "source": "git::[email protected]:keilerkonzept/terraform-module-versions?ref=0.12.0",
    "constraint": "~> 0.12",
    "version": "0.12.0"
  },
  {
    "path": "examples/main.tf",
    "name": "example_git_ssh_branch",
    "type": "git",
    "source": "git::ssh://[email protected]/keilerkonzept/terraform-module-versions?ref=master",
    "version": "master"
  },
  {
    "path": "examples/main.tf",
    "name": "local",
    "type": "local",
    "source": "./local"
  }
]

Check for module updates

# check: check for module updates from (usually) remote sources
$ terraform-module-versions check examples
UPDATE?NAMECONSTRAINTVERSIONLATEST MATCHINGLATEST
(Y)consul~0.7.30.7.110.8.0
(Y)consul_github_https_missing_ref0.7.3v0.7.3v0.8.0
(Y)consul_github_https_no_refv0.8.0
Yconsul_github_ssh~0.1.00.1.0v0.1.2v0.8.0
(Y)example_git_scp~> 0.120.12.03.0.3
(Y)example_git_ssh_branchmaster3.0.3

with -o json:

[
  {
    "path": "examples/main.tf",
    "name": "consul",
    "constraint": "~0.7.3",
    "latestMatching": "0.7.11",
    "latestOverall": "0.8.0",
    "nonMatchingUpdate": true
  },
  {
    "path": "examples/main.tf",
    "name": "consul_github_https_missing_ref",
    "constraint": "0.7.3",
    "latestMatching": "v0.7.3",
    "latestOverall": "v0.8.0",
    "nonMatchingUpdate": true
  },
  {
    "path": "examples/main.tf",
    "name": "consul_github_https_no_ref",
    "latestOverall": "v0.8.0",
    "nonMatchingUpdate": true
  },
  {
    "path": "examples/main.tf",
    "name": "consul_github_ssh",
    "constraint": "~0.1.0",
    "version": "0.1.0",
    "latestMatching": "v0.1.2",
    "latestOverall": "v0.8.0",
    "matchingUpdate": true,
    "nonMatchingUpdate": true
  },
  {
    "path": "examples/main.tf",
    "name": "example_git_scp",
    "constraint": "~> 0.12",
    "version": "0.12.0",
    "latestOverall": "3.0.3",
    "nonMatchingUpdate": true
  },
  {
    "path": "examples/main.tf",
    "name": "example_git_ssh_branch",
    "version": "master",
    "latestOverall": "3.0.3",
    "nonMatchingUpdate": true
  }
]
# check -all: check for updates, include up-to-date-modules in output
$ terraform-module-versions check -all examples
UPDATE?NAMECONSTRAINTVERSIONLATEST MATCHINGLATEST
(Y)consul~0.7.30.7.110.8.0
consul_github_https0.8.0v0.8.0v0.8.0
(Y)consul_github_https_missing_ref0.7.3v0.7.3v0.8.0
(Y)consul_github_https_no_refv0.8.0
Yconsul_github_ssh~0.1.00.1.0v0.1.2v0.8.0
(Y)example_git_scp~> 0.120.12.03.0.3
(Y)example_git_ssh_branchmaster3.0.3
?local

Check for updates of specific modules

# check -module: check for updates of specific modules
$ terraform-module-versions check -all -module=consul_github_https -module=consul_github_ssh examples
UPDATE?NAMECONSTRAINTVERSIONLATEST MATCHINGLATEST
consul_github_https0.8.0v0.8.0v0.8.0
Yconsul_github_ssh~0.1.00.1.0v0.1.2v0.8.0
# check -module: check for updates of specific modules
$ terraform-module-versions check -module=consul_github_https -module=consul_github_ssh examples
UPDATE?NAMECONSTRAINTVERSIONLATEST MATCHINGLATEST
Yconsul_github_ssh~0.1.00.1.0v0.1.2v0.8.0

with -o json:

[
  {
    "path": "examples/main.tf",
    "name": "consul_github_ssh",
    "constraint": "~0.1.0",
    "version": "0.1.0",
    "latestMatching": "v0.1.2",
    "latestOverall": "v0.8.0",
    "matchingUpdate": true,
    "nonMatchingUpdate": true
  }
]

Get it

Using go get:

go get -u github.com/keilerkonzept/terraform-module-versions

Or download the binary for your platform from the releases page.

Usage

USAGE
  terraform-module-versions [options] <subcommand>

SUBCOMMANDS
  list     List referenced terraform modules with their detected versions
  check    Check referenced terraform modules' sources for newer versions
  version  Print version and exit

FLAGS
  -o markdown       (alias for -output)
  -output markdown  output format, one of [json jsonl junit markdown markdown-wide]
  -q false          (alias for -quiet)
  -quiet false      suppress log output (stderr)

list

USAGE
  terraform-module-versions list [options] [<path> ...]

List referenced terraform modules with their detected versions

FLAGS
  -module ...       include this module (may be specified repeatedly. by default, all modules are included)
  -o markdown       (alias for -output)
  -output markdown  output format, one of [json jsonl junit markdown markdown-wide]

check

USAGE
  terraform-module-versions check [options] [<path> ...]

Check referenced terraform modules' sources for newer versions

FLAGS
  -E false                           (alias for -any-found-nonzero-exit)
  -H ...                             (alias for -registry-header)
  -a false                           (alias for -all)
  -all false                         include modules without updates
  -any-found-nonzero-exit false      exit with a nonzero code when any module not matching to it's latest version found
  -basic-auth ...                    Authentication string to authenticate on repository calls. Should be string '[username]:[password]'
  -e false                           (alias for -updates-found-nonzero-exit)
  -module ...                        include this module (may be specified repeatedly. by default, all modules are included)
  -o markdown                        (alias for -output)
  -output markdown                   output format, one of [json jsonl junit markdown markdown-wide]
  -registry-header ...               extra HTTP headers for requests to Terraform module registries (a key/value pair KEY:VALUE, may be specified repeatedly)
  -u false                           (alias for -use-url)
  -updates-found-nonzero-exit false  exit with a nonzero code when modules with updates are found
  -use-url false                     Use URL instead of SSH checkout. Usable if autorizing via token.

# Packages

No description provided by the author