使用当前版本的Puppet和Facter,我在lsbdistid和operatingsystem事实中得到了相同的信息 – 我没有看osfamily因为在Gentoo Linux上它报告了一个通用的“Linux”string。
在Puppet模块中使用这些信息时(例如select要安装的软件包名称),在使用lsbdistid或operatingsystem是否有任何技术原因或达成共识?
我喜欢osfamily 。 LSB通常不是默认安装的,在一些发行版(如RHEL / CentOS)上, lsb_release的依赖链是巨大的。 另外,如果你不知道发行版如何知道LSB包的名字? operatingsystem是令人讨厌的,因为我通常不关心是RedHat与CentOS,还是Debian与Ubuntu。 我想了解发行家族,因为发行者之间的特质通常在家庭内是相同的。
Gentoo的支持昨天(2013年2月13日)被并入了facter的osfamily ,它应该发布下一个版本。 你总是可以使用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 } }
这有点棘手,因为在一天结束时,每个操作系统的行为有点不同。 首先决定你的模块支持哪些发行版,然后testing它。
我也看不出有什么理由不以这两个事实来区分分配。 没有什么不妥。