在 Puppet 管理的服务器之间传输文件

在 Puppet 管理的服务器之间传输文件

我们有一个服务器(由 Puppet 管理),每天生成一次文件。有没有一种方法可以让 Puppet 执行以下操作:

  • 确认文件位于服务器 A 上
  • 将其上传至 Puppet Master
  • 确保其在 Puppet 管理的服务器 B 上存在
  • 在服务器B上重新加载服务

我确实不太清楚识别和上传。我想我明白如何确保在服务器B上的存在并重新加载服务。

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

答案1

我会看看出口资源

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

node servera {
    @@file { "/generated/file"
        ensure => present,
        content => $::myspecialfilecontent
        tag => myspecialfile,
    }
}

并在serverb上实现资源:

node serverb {
    File <<| tag == 'myspecialfile' |>> {
        notify => Service["your_service"],
    } 
}

自定义 puppet fact 可能如下所示(将其放在 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) 来实现这一点。

这不是一个很好的解决方案,但它可以发挥作用。

答案2

我们假设您有一个适用于 puppet 管理的所有节点的通用类或节点(如默认值)。

在这里您可以创建策略来管理每天创建的文件,但仅仅是虚拟资源。

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"],
  }
}

相关内容