Executable Dependency
This is a module that can be used to check if an executable is already installed, and if it's not, download it from a
URL. This is useful if your Terraform code has an external dependency and you want that dependency to be auto installed
if it's not installed already: e.g., terraform-aws-eks expects the
kubergrunt binary to be installed, and executable-dependency
allows
terraform-aws-eks
to automatically download kubergrunt
if it's not already available.
NOTE: This module requires that Python 3 is installed on your system.
Example code
See the executable-dependency example for working sample code.
Usage
Use the module in your Terraform code, replacing <VERSION>
with the latest version from the releases
page:
module "path" {
source = "git::git@github.com:gruntwork-io/terraform-aws-utilities.git//modules/executable-dependency?ref=<VERSION>"
executable = "kubergrunt"
download_url = "https://github.com/gruntwork-io/kubergrunt/releases/download/v0.5.13/kubergrunt"
append_os_arch = true
}
The arguments to pass are:
-
executable
: The executable to look for on the systemPATH
and ininstall_dir
. If not found, this executable will be downloaded fromdownload_url
. -
download_url
: The URL to download the executable from ifexecutable
is not found on the systemPATH
orinstall_dir
. -
append_os_arch
: If set to true, append the operating system and architecture to the URL. E.g., Appendlinux_amd64
if this code is being run on a 64 bit Linux OS. This is useful to download the proper binary (specifically, a binary using the Go naming conventions) for the current operating system and CPU. -
install_dir
: The folder to copy the executable to after downloading it fromdownload_url
. If set tonull
(the default), the executable will be copied to a folder in the system temp directory. The folder will be named based on an md5 hash ofdownload_url
, so for eachdownload_url
, the executable will only have to be downloaded once.
This module has a single output, executable_path
, which is the path you should use to run the executable. The value
will either be the path of the executable on the system PATH
or a path in install_dir
.
Sample Usage
- Terraform
- Terragrunt
# ------------------------------------------------------------------------------------------------------
# DEPLOY GRUNTWORK'S EXECUTABLE-DEPENDENCY MODULE
# ------------------------------------------------------------------------------------------------------
module "executable_dependency" {
source = "git::git@github.com:gruntwork-io/terraform-aws-utilities.git//modules/executable-dependency?ref=v0.10.5"
# ----------------------------------------------------------------------------------------------------
# REQUIRED VARIABLES
# ----------------------------------------------------------------------------------------------------
# The URL to download the executable from if var.executable is not found on
# the system PATH or in var.install_dir.
download_url = <string>
# The executable to look for on the system PATH and in var.install_dir. If not
# found, this executable will be downloaded from var.download_url.
executable = <string>
# ----------------------------------------------------------------------------------------------------
# OPTIONAL VARIABLES
# ----------------------------------------------------------------------------------------------------
# If set to true, append the operating system and architecture to the URL.
# E.g., Append linux_amd64 if this code is being run on a 64 bit Linux OS.
append_os_arch = true
# Set to false to have disable this module, so it does not try to download the
# executable, and always returns its path unchanged. This weird parameter
# exists solely because Terraform does not support conditional modules.
# Therefore, this is a hack to allow you to conditionally decide if this
# module should run or not.
enabled = true
# The folder to copy the executable to after downloading it from
# var.download_url. If set to null (the default), the executable will be
# copied to a folder in the system temp directory. The folder will be named
# based on an md5 hash of var.download_url, so for each var.download_url, the
# executable will only have to be downloaded once.
install_dir = null
}
# ------------------------------------------------------------------------------------------------------
# DEPLOY GRUNTWORK'S EXECUTABLE-DEPENDENCY MODULE
# ------------------------------------------------------------------------------------------------------
terraform {
source = "git::git@github.com:gruntwork-io/terraform-aws-utilities.git//modules/executable-dependency?ref=v0.10.5"
}
inputs = {
# ----------------------------------------------------------------------------------------------------
# REQUIRED VARIABLES
# ----------------------------------------------------------------------------------------------------
# The URL to download the executable from if var.executable is not found on
# the system PATH or in var.install_dir.
download_url = <string>
# The executable to look for on the system PATH and in var.install_dir. If not
# found, this executable will be downloaded from var.download_url.
executable = <string>
# ----------------------------------------------------------------------------------------------------
# OPTIONAL VARIABLES
# ----------------------------------------------------------------------------------------------------
# If set to true, append the operating system and architecture to the URL.
# E.g., Append linux_amd64 if this code is being run on a 64 bit Linux OS.
append_os_arch = true
# Set to false to have disable this module, so it does not try to download the
# executable, and always returns its path unchanged. This weird parameter
# exists solely because Terraform does not support conditional modules.
# Therefore, this is a hack to allow you to conditionally decide if this
# module should run or not.
enabled = true
# The folder to copy the executable to after downloading it from
# var.download_url. If set to null (the default), the executable will be
# copied to a folder in the system temp directory. The folder will be named
# based on an md5 hash of var.download_url, so for each var.download_url, the
# executable will only have to be downloaded once.
install_dir = null
}
Reference
- Inputs
- Outputs
Required
download_url
stringThe URL to download the executable from if executable
is not found on the system PATH or in install_dir
.
executable
stringThe executable to look for on the system PATH and in install_dir
. If not found, this executable will be downloaded from download_url
.
Optional
append_os_arch
boolIf set to true, append the operating system and architecture to the URL. E.g., Append linux_amd64 if this code is being run on a 64 bit Linux OS.
true
enabled
boolSet to false to have disable this module, so it does not try to download the executable, and always returns its path unchanged. This weird parameter exists solely because Terraform does not support conditional modules. Therefore, this is a hack to allow you to conditionally decide if this module should run or not.
true
install_dir
stringThe folder to copy the executable to after downloading it from download_url
. If set to null (the default), the executable will be copied to a folder in the system temp directory. The folder will be named based on an md5 hash of download_url
, so for each download_url
, the executable will only have to be downloaded once.
null
The path to use to run the executable. Will either be the path of the executable on the system PATH or a path in install_dir
.