Puppet中能否用资源属性替代Facts编写条件判断语句?
Puppet 组创建条件判断实现方案
完整可复用配置
# 固定创建gid为100的nossh用户组 group { 'nossh': ensure => present, gid => 100, } # 仅当系统不存在nosshwpass组时,创建gid为101的nosshwpa组 if 'nosshwpass' not in keys($facts['groups']) { group { 'nosshwpa': ensure => present, gid => 101, } }
逻辑说明
- 内置结构化事实
$facts['groups']会在Puppet Agent执行时自动采集当前服务器所有用户组信息,键为组名,值包含gid、组成员等属性 keys($facts['groups'])提取当前服务器所有已存在的组名列表,not in操作符判断nosshwpass是否不在该列表中- 仅当
nosshwpass不存在时,才会执行大括号内的nosshwpa组创建逻辑,完全匹配你需要的跳过规则
低版本兼容方案
上述配置适配Puppet 4+、Facter 3+的常规环境,如果你使用的版本更低,可以通过自定义Fact实现相同逻辑:
- 在对应模块的
lib/facter/has_nosshwpass.rb路径下添加如下代码:
Facter.add(:has_nosshwpass) do setcode do Facter::Core::Execution.exec('getent group nosshwpass') ? true : false end end
- 将配置中的判断条件替换为:
if !$facts['has_nosshwpass'] { group { 'nosshwpa': ensure => present, gid => 101, } }
内容的提问来源于stack exchange,提问作者shkabaan
相关产品推荐
相关产品推荐

