无法在Terraform中运行Shell脚本

时间:2019-08-28 13:28:58

标签: bash azure shell 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}"
  }
}

错误消息:

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'

2 个答案:

答案 0 :(得分:0)

错误消息指出它“无法打开”脚本文件。 原因可能是:

  1. 脚本文件不存在(可能尚未在计算机上创建)
  2. 权限问题

如果要通过程序(例如terraform或脚本)运行命令,则需要指定shell和/或正确的路径。 示例:

/bin/sh /path/to/script/myscript.sh
or
/bin/bash /path/to/script/myscript.sh

我不确定,但是我认为local-exec用于运行ls,echo,mkdir等本地命令,而remote-exec用于运行脚本。 尽管我尚未使用过此provisioner,但是您可以解决这个问题。

法郎: https://www.terraform.io/docs/provisioners/local-exec.html

https://www.terraform.io/docs/provisioners/remote-exec.html

答案 1 :(得分:0)

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

["/bin/sh" "-c" "appsettings.sh arg1 arg2"]

因此命令解释器将appsettings.sh作为命令名称,与按以下方式运行非常相似

$appsettings.sh arg1 arg2

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

$ ./appsettings.h
$ /home/user/appsettings.sh # Example

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

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}"

即添加 ./ appsettings