lsbdistid
使用当前版本的 Puppet 和 Facter,我在和事实中获得了相同的信息operatingsystem
- 我没有查看,osfamily
因为在 Gentoo Linux 上它会报告一个通用的“Linux”字符串。
在 Puppet 模块中使用该信息时(例如,选择要安装的包名称),是否存在任何技术原因或既定共识lsbdistid
?operatingsystem
答案1
我喜欢osfamily
。LSB 通常不是默认安装的,在某些发行版(如 RHEL/CentOS)上,依赖链lsb_release
非常庞大。另外,如果您不知道发行版,您怎么知道 LSB 包的名称?operatingsystem
这很烦人,因为我通常不关心它是 RedHat 还是 CentOS,还是 Debian 还是 Ubuntu。我想知道发行版系列,因为发行版之间的特性通常在系列内是相同的。
Gentoo 支持合并事实奥斯家族昨天(2013 年 2 月 13 日),它应该会发布下一个版本。您可以随时使用组合来osfamily
检查 Debian 或 RedHat 和operatingsystem
检查 Gentoo。
osfamily
和operatingsystem
基本上只是一堆if
或case
条件。根据您的需要,您可以很容易地将自己的自定义为自定义事实或类参数。例如:
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
这有点棘手,因为最终每个操作系统的行为都有点不同。首先决定您的模块要支持哪些发行版,然后测试它。
此外,我看不出有什么理由不使用这两个事实来区分分布。这样做没有错。