如何使用puppet将文件复制到所有客户端?

如何使用puppet将文件复制到所有客户端? 我已经设置了一个木偶服务器和客户端,我已经测试了正常工作的连接。 我不是木偶专家,我只是一个初学者,我只想知道如何从puppet服务器将文件复制到所有客户端? 我也想知道如何删除文件?

Puppet文件服务器

本指南介绍了Puppet文件服务function的使用。


木偶主服务包括用于传输静态文件的文件服务器。 如果文件资源声明在其source属性中包含puppet:URI,则节点将从主文件服务器中检索该文件:

 #将远程文件复制到/ etc / sudoers
 file {“/ etc / sudoers”:
     mode => 440,
     owner => root,
     group => root,
     source =>“puppet:/// modules / module_name / sudoers”
 }

所有puppet文件服务器URI的结构如下:

puppet://{server hostname (optional)}/{mount point}/{remainder of path} 

如果省略服务器主机名(即puppet:///{mount point}/{path} ;请注意三次斜杠),URI将解析为评估节点认为是其主服务器的任何服务器。 由于这使得清单代码更具可移植性和可重用性,因此应尽可能省略主机名。

puppet的其余部分:URI以两种方式之一映射到服务器的文件系统,具体取决于文件是由module提供还是通过custom mount point公开。

服务模块文件

由于绝大多数文件服务应该通过模块完成,因此Puppet文件服务器提供了一个称为模块的特殊和半魔法挂载点,默认情况下可用。 如果URI的挂载点是模块,Puppet将:

  • 将路径的下一段解释为模块的名称…
  • …在服务器的模块路径中找到该模块(如“模块查找”中所述…
  • …并解析从该模块的files /目录开始的路径的其余部分。
  • 也就是说,如果名为test_module的模块安装在中央服务器的/etc/puppet/modules目录中,则以下puppet:URI …

     puppet:///modules/test_module/testfile.txt 

    …将解析为以下绝对路径:

     /etc/puppet/modules/test_module/files/testfile.txt 

    如果test_module安装在/usr/share/puppet/modules ,则相同的URI将解析为:

     /usr/share/puppet/modules/test_module/files/testfile.txt 

虽然使用模块安装点不需要其他配置,但可以通过添加[modules]配置块在文件服务器配置中指定一些访问控制。 见安全。

从自定义挂载点提供文件

Puppet还可以从服务器文件服务器配置中指定的任意挂载点提供文件(参见下文)。 从自定义安装点提供文件时,Puppet不会执行模块安装中使用的额外URI抽象,并将安装名称后的路径解析为简单的目录结构。

文件服务器配置

文件服务器配置数据的默认位置是/etc/puppet/fileserver.conf ; 这可以通过将--fsconfig标志传递给puppet master来更改。

fileserver.conf文件的格式几乎与rsync的格式完全相同,大致类似于INI文件:

 [mount_point] path /path/to/files allow *.domain.com deny *.wireless.domain.com 

当前可以为给定的挂载点指定以下选项:

  • 磁盘上挂载位置的路径
  • 任意数量的allow指令
  • 任意数量的拒绝指令

path是唯一必需的选项,但由于默认安全配置是拒绝所有访问,因此任何节点都无法使用没有allow指令的安装点。

该路径可以包含%h%H%d任何一个或全部,它们分别由客户端的主机名,完全限定的域名和域名动态替换。 所有这些都取自客户端的SSL证书(如果您的主机名/证书名称不匹配,请小心)。 这在创建模块时非常有用,其中每个客户端的文件完全分开保存,例如私有ssh主机密钥。 例如,配置

 [private] path /data/private/%h allow * 

来自客户端client1.example.com的文件/private/file.txt请求将查找文件/data/private/client1/file.txt ,而来自client2.example.com的相同请求将尝试检索文件/文件服务器上的data / private / client2 / file.txt。

当前路径不能包含尾部斜杠,否则将导致错误。 另外请注意,在puppet.conf您没有指定具有尾部斜杠的目录位置。

安全

保护Puppet文件服务器包括允许和拒绝每个安装点的访问(以不同的特定级别)。 可以通过三种方式识别节点组的权限或拒绝:按IP地址,按名称或通过单个全局通配符(*)。 自定义安装点默认拒绝所有访问。

除了自定义安装点之外,还有两个可以使用fileserver.conf管理的特殊安装点: modulesplugins 。 这些挂载点都不应指定路径选项。 上面的“从自定义挂载点服务文件”中描述了模块挂载点的行为。 插件挂载不是真正的挂载点,而是一个允许fileserver.conf指定允许哪些节点从Puppet Master同步插件的挂钩。 默认情况下,这两个挂载点都存在,并且两者都默认允许所有访问; 如果为这些特殊安装之一设置了任何allow或deny指令,则其安全设置将与普通安装的行为相同(即,它将默认拒绝所有访问)。 请注意,这些是deny *不冗余的唯一挂载点。

如果节点没有直接连接到Puppet文件服务器,例如使用反向代理和Mongrel(请参阅使用Mongrel),则文件服务器将看到所有连接来自代理服务器的IP地址而不是Puppet Agent节点的IP地址。 在这种情况下,最好根据主机名限制访问。 此外,需要允许充当反向代理(通常为127.0.0.0/8)的机器访问适用的安装点。

优先

更具体的deny和allow语句优先于不太具体的语句; 也就是说,node.domain.com的allow语句会让它连接,尽管* .domain.com的拒绝声明。 在给定的特异性级别,拒绝语句优先于allow语句。

将IP地址指令与主机名和域名指令混合可能会导致不可预测的行为,因此请尽量避免这样做。 (目前,如果node.domain.com的IP地址为192.168.1.80且fileserver.conf包含allow 192.168.1.80并拒绝node.domain.com,则基于IP的allow指令实际上将优先。此行为可能会在未来,不应该依赖。)

主机名

可以使用完整主机名指定主机名,也可以使用*通配符指定整个域:

 [export] path /export allow host.domain1.com allow *.domain2.com deny badhost.domain2.com 

IP地址

可以使用完整的IP地址或通配地址,与主机名类似地指定IP地址。 您还可以使用CIDR样式表示法:

 [export] path /export allow 127.0.0.1 allow 192.168.0.* allow 192.168.1.0/24 

全球允许

指定单个通配符将允许任何节点访问装入点:

 [export] path /export allow * 

请注意,自定义安装点的默认行为等同于deny *。