Puppet 4 新特性及使用指南
1. Puppet 资源默认值与反模式避免
在 Puppet 中,由于默认的所有者属性,Puppet 会强制要求文件属于www-data。为避免这种情况,可以通过undef覆盖默认值,示例如下:
File { owner => undef }也可以在单个资源中设置:
file { '/etc/motd': content => '...', owner => undef }但频繁这样做并不可行,后一种方式会使清单代码更复杂,不定义默认所有者属性是更简洁的做法。
在许多清单区域使默认值生效的语义称为动态作用域,它曾也适用于变量值,通常被认为是有害的。Puppet 3.0 中一个重要的改变就是移除了动态变量作用域,不过资源默认值仍在使用,预计未来版本会改变。
资源默认值应谨慎使用,对于文件模式、所有者和组等属性,通常应避免使用默认值。
此外,Puppet 有一个defined函数,可用于查询清单中已声明的资源,示例:
if defined(File['/etc/motd']) { notify { 'This machine has a MotD': } }