无法在 Terraform 中运行 shell 脚本

Sam*_*gan 7 bash shell azure terraform

我正在尝试使用 Terraform 中的 local-exec 命令运行 shell 脚本。当我运行这个时,它不断出现错误"Can't open appsettings.sh"。该脚本在手动运行时运行良好。我缺少什么想法吗?

resource "null_resource" "sp" {

  triggers = {
    shell_hash = "${sha256(file("${path.module}/appsettings.sh"))}"
  }
  provisioner "local-exec" {
      command = "appsettings.sh ${azuread_application.rbac-server-principal.application_id} ${azuread_application.rbac-client-principal.application_id}"
      interpreter = ["sh"]
      working_dir = "${path.module}"
  }
}
Run Code Online (Sandbox Code Playgroud)

错误信息:

Error: Error running command 'appsettings.sh 59942507-xxxx-xxxx-xxxxx 4c64-xxxx-xxxx-xxxxx': exit status 127. Output: sh: 0: Can't open appsettings.sh 59942507-xxxx-xxxx-xxxxx 4c64-xxxx-xxxx-xxxxx'
Run Code Online (Sandbox Code Playgroud)

Saj*_*nnu 3

这里的问题是,terraform 将命令运行为

["/bin/sh" "-c" "appsettings.sh arg1 arg2"]
Run Code Online (Sandbox Code Playgroud)

因此命令解释器将 appsettings.sh 作为命令名,这与下面的运行非常相似

$appsettings.sh arg1 arg2
Run Code Online (Sandbox Code Playgroud)

这是无法完成的,因为没有这样的命令。因此,要运行该 shell 脚本,您必须提供 shell 脚本的绝对路径或相对路径,如下所示

$ ./appsettings.h
$ /home/user/appsettings.sh # Example
Run Code Online (Sandbox Code Playgroud)

要实现此目的,请重新排列您的命令属性,如下所示

command = "./appsettings.sh ${azuread_application.rbac-server-principal.application_id} ${azuread_application.rbac-client-principal.application_id}"

 OR

command = "${path.module}/appsettings.sh ${azuread_application.rbac-server-principal.application_id} ${azuread_application.rbac-client-principal.application_id}"
Run Code Online (Sandbox Code Playgroud)

即添加./appsettings