Я бы посмотрел на экспортированные ресурсы .
Вы можете определить дополнительный ресурс, используя настраиваемый факт в качестве источника для содержимого файла:
node servera {
@@file { "/generated/file"
ensure => present,
content => $::myspecialfilecontent
tag => myspecialfile,
}
}
и реализовать ресурс на serverb:
node serverb {
File <<| tag == 'myspecialfile' |>> {
notify => Service["your_service"],
}
}
пользовательский факт марионетки может выглядеть следующим образом (поместите его в файл modules /.../ lib / facter / myspecialfilecontent.rb и включите pluginsync):
filename = '/generated/file'
Facter.add(:myspecialfilecontent) do
setcode do
if File.file?(filename)
File.read(filename)
end
end
end
вам потребуется storeconfigs = true
(puppetdb) для этого.
Это не очень чистое решение, но оно может работать.
Предположим, что у вас есть общий класс или узел (например, по умолчанию), который применяется ко всем узлам, управляемым марионеткой.
Здесь вы создаете политику для управления файлом, создаваемым ежедневно, но только виртуальным ресурсом.
node default {
$fsufix = strftime("%y_%m_%d")
@file { "everyday_file" :
path => "/scratch/usern/file_${fsufix}",
ensure => present,
}
}
Затем для сервераA , вам просто нужно проверить, присутствует ли этот файл, реализовав виртуальный ресурс, который мы только что создали ранее:
node 'serverA' inherits default {
realize(File["everyday_file"])
}
После этого вы хотите, чтобы serverB выполнял то же самое, что и serverA, плюс обновлял службу, если файл был создан или изменен:
node 'serverB' inherits default {
realize(File["everyday_file"])
service { "mysqld" :
ensure => running,
hasrestart => true,
subscribe => File ["everyday_file"],
}
}