Puppet 事实:我们应该使用 lsbdistid 还是操作系统?

Puppet 事实:我们应该使用 lsbdistid 还是操作系统?

lsbdistid使用当前版本的 Puppet 和 Facter,我在和事实中获得了相同的信息operatingsystem- 我没有查看,osfamily因为在 Gentoo Linux 上它会报告一个通用的“Linux”字符串。

在 Puppet 模块中使用该信息时(例如,选择要安装的包名称),是否存在任何技术原因或既定共识lsbdistidoperatingsystem

答案1

我喜欢osfamily。LSB 通常不是默认安装的,在某些发行版(如 RHEL/CentOS)上,依赖链lsb_release非常庞大。另外,如果您不知道发行版,您怎么知道 LSB 包的名称?operatingsystem这很烦人,因为我通常不关心它是 RedHat 还是 CentOS,还是 Debian 还是 Ubuntu。我想知道发行版系列,因为发行版之间的特性通常在系列内是相同的。

Gentoo 支持合并事实奥斯家族昨天(2013 年 2 月 13 日),它应该会发布下一个版本。您可以随时使用组合来osfamily检查 Debian 或 RedHat 和operatingsystem检查 Gentoo。

osfamilyoperatingsystem基本上只是一堆ifcase条件。根据您的需要,您可以很容易地将自己的自定义为自定义事实或类参数。例如:

class osfacts {
  if $::kernel == 'Linux' {
    $os = $::operatingsystem ? {
      Gentoo => 'Gentoo',
      default => $::osfamily,
    }
  }
  elsif $::kernel == 'SunOS' {
    $os = $::operatingsystem
  }
  elsif ($::operatingsystem == 'Darwin') and
        ($::macosx_productname == 'Mac OS X') {
    $os = 'MacOSX'
  }
  else {
    $os = $::operatingsystem
  }
}

答案2

这有点棘手,因为最终每个操作系统的行为都有点不同。首先决定您的模块要支持哪些发行版,然后测试它。

此外,我看不出有什么理由不使用这两个事实来区分分布。这样做没有错。

相关内容