File 是否需要在单独的资源中复制每个文件

File 是否需要在单独的资源中复制每个文件,file,puppet,mode,owner,File,Puppet,Mode,Owner,我仍然在和puppet打交道(有时感觉像是在用软管喝水),所以我一开始就试图保持配置和环境的简单。我首先让puppet将文件部署到我的客户机。但是,我觉得我部署文件的方式并不是最有效的方式。对于每个文件,我都这样指定: file { "/etc/ntp.conf": owner => 'root', group => 'root', mode => '0444',

我仍然在和puppet打交道(有时感觉像是在用软管喝水),所以我一开始就试图保持配置和环境的简单。我首先让puppet将文件部署到我的客户机。但是,我觉得我部署文件的方式并不是最有效的方式。对于每个文件,我都这样指定:

file { "/etc/ntp.conf":
                owner => 'root',
                group => 'root',
                mode  => '0444',
                source => 'puppet://basxtststinfl01/files/etc/ntp.conf',
        }
        file { "/etc/snmp/snmpd.conf":
                owner => 'root',
                group => 'root',
                mode  => '0644',
                source => 'puppet://basxtststinfl01/files/etc/snmpd.conf',
        }
我有15个文件要部署。这是正确的方法吗


谢谢。

我想这是否是“正确的方法”的问题可以归结为你到底在做什么,但由于“视情况而定”有时是一件令人讨厌的事情,因此有几个要点可以提出

这是一种可行的方法——它将完全按照您指定的方式部署您声明的15个左右的文件

但是,它的代价是需要精确地维护basxtststinfl01中编写的文件

因为这些文件是静态文件,所以如果要运行puppet代码来配置许多不同的服务器,您可能会发现它的局限性

所以选择吧!您在这里给出的示例可以从puppet模块的上下文中考虑—可重用代码,用于配置系统的特定服务或逻辑单元

在您的ntp案例中,有一个包含创建ntp.conf文件的逻辑,并将变量作为参数来配置它。这缩短了puppet声明,并允许您重新使用它来配置更多服务器。模块的文档中给出了如何配置的示例

更常见的情况是,有人编写了一个模块,该模块将提供您想要的系统的一部分,请参见

将系统需求分解为单元并使用模块意味着您可以根据不同系统的变量动态指定配置文件

最好的办法是浏览puppetlabs网站上的优秀文档:

一些资源:


    • 模块中的文件是一个很好的关键字

      一般来说,为了解决重复资源的问题,可以将它们封装在定义的类型中

      define deployed_file($ensure = 'present',
                           $owner = 'root',
                           $group = 'root',
                           $mode  = '644',
                           $recurse = '') {
          if $recurse != '' { File { recurse => $recurse } }
          file {
              $name:
                  ensure => $ensure,
                  owner  => $owner,
                  group  => $group,
                  source => "puppet://basxtststinfl01/files${name}",
          }
      }
      
      您的上述资源可以写成:

      deployed_file {
          '/etc/ntp.conf':
              mode => '444';
          '/etc/snmp/snmpd.conf':
      }
      
      您可以添加更多参数以使URL可自定义

      请注意,我为后代添加了
      recurse
      参数<代码>文件有很多属性,如果您需要部署的
      文件
      来支持它们,您应该以这种方式添加它们,以便将它们传递到包装的
      文件
      (如果指定),否则将被忽略

      deployed_file {
          '/etc/ntp.conf':
              mode => '444';
          '/etc/snmp/snmpd.conf':
      }