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

kar*_*k87 8 puppet

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

Rin*_*ind 8

傀儡文件服务器

本指南涵盖了 Puppet 文件服务功能的使用。


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

# 复制一个远程文件到/etc/sudoers
文件 { "/etc/sudoers":
    模式 => 440,
    所有者 => 根,
    组 => 根,
    来源 => "puppet:///modules/module_name/sudoers"
}

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

puppet://{server hostname (optional)}/{mount point}/{remainder of path}
Run Code Online (Sandbox Code Playgroud)

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

该傀儡的其余部分:URI映射到服务器的两种方式,这取决于这些文件是由提供一个文件系统,module或暴露通过custom mount point

服务模块文件

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

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

    puppet:///modules/test_module/testfile.txt
    
    Run Code Online (Sandbox Code Playgroud)

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

    /etc/puppet/modules/test_module/files/testfile.txt
    
    Run Code Online (Sandbox Code Playgroud)

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

    /usr/share/puppet/modules/test_module/files/testfile.txt
    
    Run Code Online (Sandbox Code Playgroud)

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

从自定义挂载点提供文件

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

文件服务器配置

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

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

[mount_point]
    path /path/to/files
    allow *.domain.com
    deny *.wireless.domain.com
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

[private]
   path /data/private/%h
   allow *
Run Code Online (Sandbox Code Playgroud)

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

当前路径不能包含尾部斜杠,否则会导致错误。还要注意,puppet.conf您没有指定带有斜杠的目录位置。

安全

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

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

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

优先事项

更具体的拒绝和允许语句优先于不太具体的语句;也就是说,node.domain.com 的允许语句将允许它连接,尽管 *.domain.com 的拒绝语句。在给定的特定级别,拒绝语句优先于允许语句。

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

主机名

可以使用完整的主机名或使用 * 通配符指定整个域来指定主机名:

[export]
    path /export
    allow host.domain1.com
    allow *.domain2.com
    deny badhost.domain2.com
Run Code Online (Sandbox Code Playgroud)

IP地址

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

[export]
    path /export
    allow 127.0.0.1
    allow 192.168.0.*
    allow 192.168.1.0/24
Run Code Online (Sandbox Code Playgroud)

全局允许

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

[export]
    path /export
    allow *
Run Code Online (Sandbox Code Playgroud)

请注意,自定义挂载点的默认行为等效于拒绝 *。