- https://github.com/Invicton-Labs/terraform-external-shell-resource
- https://registry.terraform.io/modules/Invicton-Labs/shell-resource/external/latest
and
- https://github.com/Invicton-Labs/terraform-external-shell-data
- https://registry.terraform.io/modules/Invicton-Labs/shell-data/external/latest
A workaround for hashicorp/terraform#610 <-- please 👍, meanwhile:
This module runs a command as a null_resource
and makes the stdout, stderr and exit status available as outputs (stored in triggers map). See an external data source version with more features at https://github.com/matti/terraform-shell-outputs (that runs on every apply, this one only runs once when the resource is created and if command is changed).
module "files" {
source = "matti/resource/shell"
command = "ls -l"
}
output "my_files" {
value = module.files.stdout
}
...
Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
Outputs:
my_files = total 16
-rw-r--r-- 1 mpa staff 112 Feb 9 09:06 main.tf
-rw-r--r-- 1 mpa staff 1007 Feb 9 09:07 terraform.tfstate
module "first" {
source = "matti/resource/shell"
command = ">/tmp/first echo I was here first"
}
module "greeting" {
source = "matti/resource/shell"
# workaround for missing depends_on in modules
depends = [
module.first.id
]
environment = {
GREETING = "hello"
}
command = "echo $GREETING world from $(pwd) where /tmp/first has content: $(cat /tmp/first)"
command_when_destroy = "echo $GREETING and good bye from $(pwd)"
# runs on every apply
trigger = timestamp()
working_dir = "/tmp"
# mark outputs (stdout & stderr) as sensitive
# sensitive_outputs = true
}
output "greeting" {
value = module.greeting.stdout
}
Apply complete! Resources: 6 added, 0 changed, 0 destroyed.
Outputs:
greeting = hello world from /private/tmp where /tmp/first has content: I was here first
This module also supports being run on Windows machines (assuming they support Powershell). If the command_windows
and/or command_when_destroy_windows
inputs are specified, they will be used instead of command
/command_when_destroy
when Terraform is run on Windows. If they are not specified, the command
/command_when_destroy
commands will be run regardless of the operating system.