Scripting

使用 Puppet 同步兩個目錄

  • January 2, 2018

我有一堆伺服器,上面有兩個需要同步的目錄。例如,在我可能擁有的同一台伺服器上/var/path/to/dir1/var/path/to/dir2每個伺服器下可能有文件和文件夾。我想同步/var/path/to/dir1/var/path/to/dir2作為“備份”。

有誰知道在 Puppet 中同步這兩個目錄的有效方法?我是否必須創建一個自定義腳本來執行此操作並使用execPuppet 清單文件中的方法?

我的猜測是創建一個腳本來遞歸驗證主目錄中每個文件的 MD5 雜湊,然後使用該列表驗證第二個目錄中的文件。我不確定是否有辦法在 Puppet 中原生地做到這一點。

你在 puppet 上走在了正確的軌道上。讓 puppetmaster 作為事實來源,將它們存放在執行 puppetmaster 的伺服器中,並聲明應該存在的文件和規範版本。您甚至可能希望使用 SVN 或 GIT 之類的東西對您在 puppetmaster 伺服器中提供的文件進行版本控制。

這為您提供了關於這兩個位置中的內容的一些強有力的保證。

file { '/var/path/to/dir1/':
 ensure   => 'present',
 source   => 'puppet:///path/to/dir1',
 recurse  => 'true',
} 
file { '/var/path/to/dir2/':
 ensure   => 'present',
 source   => 'puppet:///path/to/dir1',
 recurse  => 'true',
}

如上所述,您可能需要刪除任何收集到的不受歡迎的額外內容,例如

{
 purge => 'true',
 force => 'true',
}

正如向我指出的那樣(謝謝!!),如果 ‘/var/path/to/dir1/’ 下有大量文件或子文件夾的深層層次結構,則完成 puppet 執行的時間可能會增加迅速。我仍然建議您將 puppet 伺服器作為事實來源,但您最好使用 rsync,例如:

rsync::get { '/var/path/to/dir1/':
 source  => 'puppet:///path/to/dir1',
 purge   => true,
}

rsync::get { '/var/path/to/dir2/':
 source  => 'puppet:///path/to/dir1',
 purge   => true,
}

引用自:https://serverfault.com/questions/647863