自分で訓練puppet
し、次のチェックリストを作成しました。
class bratch::test {
file { '/var/cache/tempFile':
owner => 'root',
group => 'root',
mode => '0644',
source => "puppet://${puppetserver}/modules/bratch/tempFile"
}
exec { "create_file":
command => "/bin/echo boop >> /tmp/outputFile",
}
期待どおりに動作しましたが、実際には実行が終わるまでその実行ラインについては考えませんでした。
出力リダイレクトを理解したら、puppet
シェルを呼び出すという意味ですか?では、その環境はどこから来るのか?毎回環境を初期化しますか、それともPuppetエージェントから直接継承しますか?
答え1
これ文書この時点では少し混乱しています。
プロバイダー
POSIX
シェルを介したり、補間を行わずに直接外部バイナリを実行します。これはほとんどのコマンドを実行するためのより安全で予測可能な方法ですが、ワイルドカードおよびシェル組み込み(「for」および「if」ステートメントなどの制御ロジックを含む)は使用できません。
デフォルト値は
feature
==ですposix
。シェル
提供されたコマンドを渡します
/bin/sh
。 POSIX システムにのみ適用されます。これにより、シェルワイルドカードおよび組み込みコマンドを使用でき、コマンドパスを正規化する必要がなくなります。これはプロバイダよりも便利かもしれませんがposix
、いつものようにエスケープに注意する必要があるという意味でもあります。
exec
このプロバイダは、Puppet 0.25.xの種類と非常によく似ています。
したがって、プロバイダーを使用している場合は、shell
リダイレクトを使用できる必要がありますが、既定値はです。posix
つまり、自分で行うので、指定しない限りshell
...
どちらの場合も、ドキュメントには環境について多くの内容が記載されていません。確認が必要ですパスワード:
begin
# Do our chdir
Dir.chdir(dir) do
environment = {}
environment[:PATH] = resource[:path].join(File::PATH_SEPARATOR) if resource[:path]
空白に設定されてから、environment
そのフィールドを使用して提供されているすべての設定でいっぱいになるため、毎回再初期化されます。
しかし、移動経路をたどると次のようになります。関数呼び出し次の操作を行います。
output = Puppet::Util::Execution.execute(command, :failonfail => false, :combine => true,
:uid => resource[:user], :gid => resource[:group],
:override_locale => false,
:custom_environment => environment)
Execution.execute
着信電話execute_posix
、これは順番にする:
command = [command].flatten
...
options[:custom_environment] ||= {}
Puppet::Util.withenv(options[:custom_environment]) do
Kernel.exec(*command)
私はRubyを知りません。コマンドと引数を配列として明示的に指定し、次のような"/bin/echo boop >> /tmp/outputFile"
文字列を指定しない限り、そう言いたいと思います。Kernel.exec
、の:
この文字列はコマンドラインとして扱われ、実行前にシェル拡張が必要です。
そのため、shell
プロバイダとして設定しなくてもリダイレクトを使用できます。さらに進んでみるとwithenv
、environment
上記で設定された配列は、オーバーレイのセットとして使用されます。environment
フィールドが次の場合いいえ指定すると何も上書きしません。したがって、環境はPuppetから継承する必要があります。 Puppetがどのような環境になるのかわかりませんが、UbuntuなどのUpstart-as-initシステムでサービスとして実行されている場合は、少なくともTERM
そしてPATH
利用可能。