Puppet Bolt はジョブとして実行される Bash スクリプトに引数を渡しません。

Puppet Bolt はジョブとして実行される Bash スクリプトに引数を渡しません。

リモートシステムでBashスクリプトを実行するためにPuppet Boltを使用しようとすると、Boltコマンドに渡された引数を受け取らないため、スクリプトが正しく機能しない状況に常に直面します。次の操作でスクリプトを実行する場合:

bolt task run --targets localhost madeUpModule::scriptTakeInUserAndGroup user='testuser' group='testgroup'

No user or group definedスクリプトに対して定義した条件に基づいています。

これはすべて、スクリプトをローカルでテストし、パラメータを処理できることを確認した後に行われます。

スクリプト/タスクがパラメータを受け取らないのはなぜですか?


答え1

注:これはもともと質問の一部として投稿されたため、CWの回答として投稿しています。


わかりましたので、投稿する前にこの問題に対する解決策を見つけました。文書化されているにもかかわらず、これのために時間を無駄にしたので、投稿を作成したかったのです。

スクリプトがインストールされていない場合、またはコード管理ツールを使用してそのバージョンを管理できるように凝集したタスクに切り替えるには、スクリプトにコードを追加して環境変数(プレフィックスPT_が付いている)を確認し、その引数を読みます。 。

私はリモートコンピュータでスクリプトを実行しようとしていましたが、もともと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正常に動作します。

関連情報