web-dev-qa-db-fra.com

Comment passer l'argument dans le script de mise à disposition du packer?

J'ai du mal à passer le paramètre d'entrée au script de provisionnement du packer. J'ai essayé différentes options mais pas de joie.

L'objectif est mon provision.sh devrait accepter le paramètre d'entrée que j'envoie lors de la construction du packer.

packer build -var role = abc test.json

Je peux obtenir la variable utilisateur dans le fichier json mais je ne peux pas lui transmettre le script de provision. Je dois prendre une décision basée sur le paramètre d'entrée.

J'ai essayé quelque chose comme

"provisioners": 
{
  "type": "Shell",
  "scripts": [
  "provision.sh {{user `role`}}"
 ]
}

Mais la validation du packer lui-même a échoué sans un tel message d'erreur de fichier/répertoire.

Ce serait vraiment utile si quelqu'un pouvait m'aider à ce sujet.

Merci d'avance.

10
Thayz

Vous devez utiliser le environment_vars option, voir la documentation Shell Provisioner - environment_vars .

Exemple:

"provisioners": [
  {
    "type": "Shell"
    "environment_vars": [
      "HOSTNAME={{user `vm_name`}}",
      "FOO=bar"
    ],
    "scripts": [
      "provision.sh"
    ],
  }
 ]
16
Rickard von Essen

Si votre script est déjà configuré pour utiliser des arguments; vous devez simplement l'exécuter en tant que inline plutôt que dans le tableau scripts.

Pour ce faire, le script doit déjà exister sur le système - vous pouvez le faire en le copiant sur le système avec le provisionneur file.

  "provisioners": [
    {
      "type":        "file",
      "source":      "scripts/provision.sh",
      "destination": "/tmp/provision.sh"
    },
    {
      "type": "Shell",
      "inline": [
        "chmod u+x /tmp/provision.sh",
        "/tmp/provision.sh {{user `vm_name`}}"]
    }
  ]
5
TJ Biddle