我正在尝试使用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'
答案 0 :(得分:0)
错误消息指出它“无法打开”脚本文件。 原因可能是:
如果要通过程序(例如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
答案 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