在木偶pipe理的服务器之间传输文件

我们有一个服务器(由puppetpipe理),每天生成一个文件。 有没有一种方法可以使傀儡做到以下几点:

  • 认识到该文件在服务器A上
  • 将其上传到木偶大师
  • 确保它存在于木偶pipe理的服务器B上
  • 重新加载服务器B上的服务

这真的是我不清楚的认识和上传。 我想我知道如何确保服务器B上存在并重新加载服务。

任何模式或文档都会有所帮助。 谢谢。

我会看看导出的资源 。

您可以使用自定义事实来定义其他资源作为文件内容的来源:

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)。

这不是一个很干净的解决scheme,但它可以工作。

假设您有一个适用于puppetpipe理的所有节点的公共类或节点(如默认)。

在这里,您创build了用于pipe理每天创build的文件的策略,但仅创build一个虚拟资源。

 node default { $fsufix = strftime("%y_%m_%d") @file { "everyday_file" : path => "/scratch/usern/file_${fsufix}", ensure => present, } } 

那么对于serverA来说,只需要通过实现我们之前创build的虚拟资源来检查该文件是否存在:

 node 'serverA' inherits default { realize(File["everyday_file"]) } 

在此之后,如果创build或修改文件,则希望serverB与serverA执行相同的操作,并刷新服务:

 node 'serverB' inherits default { realize(File["everyday_file"]) service { "mysqld" : ensure => running, hasrestart => true, subscribe => File ["everyday_file"], } }