J'essaie d'exécuter un script shell avec la commande local-EXEC dans Terraform. Quand j'exécute cela, il continue à venir avec l'erreur "Can't open appsettings.sh"
. Ce script fonctionne bien lors de la course manuellement. Des idées ce qui me manque?
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}"
}
}
message d'erreur:
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'
Le problème ici est, Terraform Exécutez la commande comme
["/bin/sh" "-c" "appsettings.sh arg1 arg2"]
Donc, l'interprète de commande prend appsettings.sh comme nom de commande très similaire à celui-ci ci-dessous.
$appsettings.sh arg1 arg2
qui ne peut pas être fait car il n'y a pas de commandement comme celui-ci. Donc, pour exécuter ce script shell, vous devez soit fournir le chemin absolu du script shell ou par rapport au format ci-dessous.
$ ./appsettings.h
$ /home/user/appsettings.sh # Example
Pour réaliser cela réorganiser votre commande SH ci-dessous
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}"
i.e. Ajouter ./ appsettings
Le message d'erreur indique qu'il "Impossible d'ouvrir" le fichier de script. La raison pourrait être:
Si vous exécutez une commande via un programme (E.G Terraform ou Script), vous devez spécifier la coque et le chemin approprié. Exemple:
/bin/sh /path/to/script/myscript.sh
or
/bin/bash /path/to/script/myscript.sh
Je ne suis pas sûr mais je pense que local-exec
est utilisé pour exécuter les commandes locales telles que LS, Echo, Mkdir, etc. et remote-exec
est utilisé pour exécuter le script. Bien que je n'ai pas encore utilisé ce provisioner
mais vous pouvez jouer autour de cela.
Réfractions: https://www.terraform.io/docs/provisionnistes/local-exec.html
https://www.terraform.io/docs/provisionnistes/remote-exec.html