リモートシステムでBashスクリプトを実行するためにPuppet Boltを使用しようとすると、Boltコマンドに渡された引数を受け取らないため、スクリプトが正しく機能しない状況に常に直面します。次の操作でスクリプトを実行する場合:
bolt task run --targets localhost madeUpModule::scriptTakeInUserAndGroup user='testuser' group='testgroup'
No user or group defined
スクリプトに対して定義した条件に基づいています。
これはすべて、スクリプトをローカルでテストし、パラメータを処理できることを確認した後に行われます。
スクリプト/タスクがパラメータを受け取らないのはなぜですか?
答え1
注:これはもともと質問の一部として投稿されたため、CWの回答として投稿しています。。
わかりましたので、投稿する前にこの問題に対する解決策を見つけました。文書化されているにもかかわらず、これのために時間を無駄にしたので、投稿を作成したかったのです。
私はリモートコンピュータでスクリプトを実行しようとしていましたが、もともとstdinを介して$ 1、$ 2などでbaskスクリプトにパラメータを渡すことができると思いました。これらの変数はBashでスクリプトを起動した後、次のように入力された値を受け取ります。./scriptTakeInUserAndGroup ユーザーグループ(ここでecho $ 1が印刷されますユーザー最初の引数を渡したからです)。
人形ボルトでは動作しません。 Unixの場合、Puppet Boltにはinput_methodの2つのオプションがあります。標準入力と環境。これまでstdinオプションを使用していませんでしたが、環境変数が変数名と混同されていることがわかった場合は機能することがわかりました。
bolt task run --targets localhost madeUpModule::scriptTakeInUserAndGroup user='testuser' group='testgroup'
これらの変数は、JSONメタデータが呼び出す名前に渡されません。
スクリプトを入力すると、printenv | grep user
環境に次のものが表示されますPT_user=testuser
。
むしろ、面倒なことにPT_
変数名の前に追加します。 $ userで実行されているbashスクリプトがクラッシュします。
スクリプトを変更して使用すると$PT_user
正常に動作します。