web-dev-qa-db-fra.com

Impossible d'exécuter Script Shell dans Terraform

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'
4
Sam Cogan

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

0
Sajeer Noohukannu

Le message d'erreur indique qu'il "Impossible d'ouvrir" le fichier de script. La raison pourrait être:

  1. Le fichier de script n'est pas présent (peut-être qu'il n'est pas encore créé sur la machine)
  2. Problème de permission

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

1
Khalid Waseem