Добрый день!
Необходимо с puppet сервера скопировать на клиенты файл с заменой и предварительным бэкапом заменяемого файла на клиенте.
filebucket не подходит, т.к.если собирать бэкап на puppet сервере то не понятно с какого клиента он и структура папок при бэкапе просто дикая. Вариант оставлять на клиенте, опят же структура папок дикая, а оставлять в той же папке где и бэкапируемый файл - не хочется разводить бардак.
В итоге манифест ниже. Но для того чтоб он не создавал бэкапы файла каждый раз как подключается клиент, надо сравнивать копируемый файл и файл на клиенте и если они разные тогда продолжать выполнение манифеста, если нет, соответственно не продолжать выполнение манифеста. Это моё видение решения, а я с puppet знаком второй день. ) Возможно есть какие-то более адекватные варианты?
class cp_file {
$timestampdir = generate('/bin/date', '+%Y%m%d') $timestampbackup = generate('/bin/date', '+%Y%m%d_%H%M%S')
file {'/root/backup': path => '/root/backup', ensure => directory, mode => '0644', owner => 'root', group => 'root', }
file {'/root/backup/date': path => «/root/backup/${timestampdir}», ensure => directory, mode => '0644', owner => 'root', group => 'root', require => File['/root/backup'] }
file { 'backup_file': path => «/root/backup/${timestampdir}/test.txt_${timestampbackup}», ensure => file, mode => '0644', owner => 'root', group => 'root', # recurse => true, require => File['/root/backup/date'], source => 'file:///lin/ch/nf/test.txt' }
file { 'file': path => '/lin/ch/nf/test.txt', ensure => file, mode => '0644', owner => 'root', group => 'root', recurse => true, require => File['backup_file'], source => 'puppet:///modules/cp_file/test.txt' } }