/terraform-shell-resource

Run (exec) a command in shell and capture the output (stdout, stderr) and status code (exit status)

Primary LanguageHCLMIT LicenseMIT

no longer maintained

and

-

-

-

-

terraform-shell-resource

Build Status

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).

Usage

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

Full usage

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

Windows support

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.

Additional examples

See tests and examples

Related issues: