2017-12-01 11 views
1

私はパッカープロビジョニングスクリプトに入力パラメータを渡すのに苦労しています。私は様々な選択肢を試しましたが、喜びはありません。パッカープロビジョニングスクリプトで引数を渡すには?

私のprovision.shは、パッカーのビルド中に送信する入力パラメータを受け入れるべきです。

パッカー-var役割を構築= ABC test.json

私は、JSONファイルでユーザー変数を取得することができていますが、私はそれを提供するスクリプトを渡すことができません。入力パラメータに基づいて決定する必要があります。

私は

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

のようなものを試してみました。しかしパッカーの検証自体はそのようなファイル/ディレクトリのエラーメッセージで失敗しています。

誰かが私を助けることができれば本当に助かります。

ありがとうございます。

答えて

1

environment_varsオプションを使用する必要があります(Shell Provisioner - environment_varsを参照)。

例:

"provisioners": [ 
    { 
    "type": "shell" 
    "environment_vars": [ 
     "HOSTNAME={{user `vm_name`}}", 
     "FOO=bar" 
    ], 
    "scripts": [ 
     "provision.sh" 
    ], 
    } 
] 
+0

返信いただきありがとうございます。私は環境変数を理解していると思います。今私はいくつかの環境変数を宣言しています。私の質問は、provision.shスクリプトでそれらを使用する方法です。一般的なシェルスクリプトでは、$ 1、$ 2を使用して入力パラメータを受け取ります。私が$ 1&$ ​​2を印刷するとき、値は設定されていません。 – Thayz

+1

$ 1、$ 2などは_arguments_です。 _環境変数_は、あなたのスクリプト内でそれらの名前、すなわち '$ HOSTNAME'と' $ FOO'と一緒に使うことができます。私は(ba)shスクリプトの紹介を読むことをお勧めします。例えば、http://tldp.org/LDP/abs/html/ –

+0

あなたは何を意味するのか分かります。ありがとう。 – Thayz

1

あなたのスクリプトがすでに引数を使用するように設定されている場合は、 scriptsアレイではなく、inlineとして実行するだけです。

これを実行するには、スクリプトがすでにシステムに存在している必要があります。これは、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`}}"] 
    } 
    ] 
+0

ありがとうございました。 – Thayz

+0

いつでも! @Thayz –

+0

TJビドルを助けた場合は、その答えを必ず受け入れてください。 @ Rickard-von-Essenの解決策が私の問題を解決すると思うので、私は彼の答えを受け入れました。それにもかかわらず、あなたのソリューションは今後も役立ちます。とても感謝します。 – Thayz