【问题标题】:Does each file need to be copied within a separate resource是否需要在单独的资源中复制每个文件
【发布时间】:2014-12-19 15:51:26
【问题描述】:

我仍然在处理 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 个文件要部署。这是正确的方法吗?

谢谢。

【问题讨论】:

    标签: file puppet mode owner


    【解决方案1】:

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

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

    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 参数。 file 有很多属性,如果你需要 deployed_file 来支持它们,你应该以这种方式添加它们,以便它们在指定时传递给包装的 file,否则忽略。

    【讨论】:

      【解决方案2】:

      我认为这是否是“正确方法”的问题归结为您正在做什么,但由于“这取决于”有时听起来很烦人,因此可以提出一些一般性观点。 ..

      这是一种行之有效的方法 - 它将部署您声明的大约 15 个文件,这些文件完全按照您指定的方式进行。

      然而,它的代价是需要对您的文件进行精确维护,因为它们是用 basxtststinfl01 编写的

      由于这些是静态文件,如果您要运行 puppet 代码来配置许多不同的服务器,您可能会发现它会受到限制。

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

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

      class { '::ntp':
        servers => [ 'ntp1.corp.com', 'ntp2.corp.com' ],
      }
      

      通常情况下,有人编写了一个模块来配置您想要的系统的一部分,请参阅Puppet Forge

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

      最好的办法是阅读 puppetlabs 网站上的优秀文档:

      一些资源:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-19
        • 2017-10-17
        • 1970-01-01
        • 2022-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多