YAML出力をStrandard出力ストリームに書き込むJavaプログラムを呼び出す次のスクリプトがあり、それがエコーされます(シンプル)。
#!/bin/bash
echo `/usr/lib/jvm/jre/bin/java -jar /etc/puppet/enc/enc.jar $1`
上記のスクリプトをファイルに持っています
/etc/puppet/enc/javaEnc.shこの提供ノード名を引数として実行すると、次の出力が得られます。
---
classes:
class1:
class2:
問題は、エージェント ノードでエラー メッセージが表示されることです。
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find node 'node-agent-1'; cannot compile
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run
スクリプトが実行されないことがわかりました (または、Java プログラムが呼び出されない、理由がわかりません) - Java プログラムでは、System.out.print を実行するだけでなく、出力をファイルに書き込みます。
出力として述べたのと同じデータを含むファイル (data.yaml) を読み取り、次のスクリプトで出力ストリームに書き込む別のスクリプトがあります。
#!/bin/bash
cat "/etc/puppet/enc/data.yaml"
このスクリプトが external_nodes に対して言及されると、正常に動作し、puppet エージェントがそれ自体を構成します。どこが間違っているのか教えてください。Java プログラムは実際にいくつかの外部リソースを照会し、クラスを分類して出力を生成します。これを完了するのに約 10 秒かかります。これは問題になるでしょうか?Ruby と Python のソリューションを見たことがありますが、どちらも機能させることができませんでした。私はそれを Java で行うことが最も望ましいと考えています。
私の puppet.conf ファイルには次のものがあります。
[master]
node_terminus = exec
external_nodes = /etc/puppet/enc/javaEnc.sh