すべてのPuppetLinuxクライアントにプッシュしたPerlスクリプトがあります。その後、Puppetマスターでスクリプトmodule/modulename/files/scripts/a_scriptスクリプトを編集しましたが、クライアントはファイルを持っているため、変更を取得できません。どうやらそれはチェックサムやmodtimeを使用していません。ファイルがマスターバージョンで最新であることを確認するためのベストプラクティスは何ですか?チェックサムロジックを作成する必要がありますか、それともすでに組み込みの機能がありますか?
最初にプッシュするために使用したコードは次のとおりです。
file { '/sbin/a_script':
ensure => present,
mode => 744,
owner => root,
source => "puppet:///modulename/scripts/a_script"
}
明らかに、ファイルを削除してプルバックさせるのはハッキーな解決策です。もっと雄弁なものを望んでいます。
[〜#〜] update [〜#〜] Puppetは、次回の実行時にpuppet:/// filebucket内のファイルのチェックサムと同期を行います。エラーが発生したため、ファイル宣言が次のようになりませんでした。実行します。宣言をsite.ppに移動すると、クライアント上の既存のファイルへの変更が同期されました。
フラットなディレクトリ構造からスクリプトを提供することをお勧めします。 puppet:///modulename/a_script
の代わりにpuppet:///modulename/scripts/a_script
しかし、それがオプションでない場合、これは recurse
ディレクティブ のユースケースのように聞こえます。これがないと、デフォルトのアクションは、コンテンツに関係なく、ファイルが存在することを保証するだけのようです。
Puppet File Type Reference もチェックしてください。
-編集-
スクリプトのディレクトリを同期しようとしていると思いました。
あなたの場合、ソースチェックサムが変更された場合、Puppetはデフォルトで ファイルタイプではreplace => true
になります。
クライアントシステムのpuppet agent -t
(またはpuppet agent --debug -t
)からの出力は何ですか?