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

时间:2014-10-23 20:50:57

标签: file puppet mode owner

我还在处理傀儡(感觉我有时会从软管中喝水)所以我最初试图保持我的配置和环境简单。我已经开始将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个我想要部署的文件。这是正确的方法吗?

感谢。

2 个答案:

答案 0 :(得分:1)

我认为这是否是“正确的方法”的问题归结为你正在做的事情,但是因为“它取决于”有时候听起来很烦人,可以提出一些一般要点。 ..

这是一种可行的方法 - 它会部署您指定的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网站上的优秀文档:

一些资源:

答案 1 :(得分: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,但是否则就忽略了。