Puppet 和 Facter - 如何确定运行的是 CentOS 6 还是 CentOS 5

Puppet 和 Facter - 如何确定运行的是 CentOS 6 还是 CentOS 5

如何使用 facter 和 puppet 来确定操作系统运行的是 CentOS 6.x 还是 CentOS 5.x?

facter operatingsystemrelease 
6.4

我只关心主要版本 (6)

我曾考虑过使用 awk,但肯定有更好的方法,更适合“puppet manifest”。

   #This works, but is ugly trying to use this in a puppet manifest

facter operatingsystemrelease |awk -F. '{print $1}'
6

更新

看起来较新版本的 facter 包含一些有关主要版本的附加信息,而我的版本中没有这些信息。我的初始配置需要假设 facter 已过期。

facter --version
1.6.4
puppet --version
2.7.20

我尝试使用以下命令搜索可能显示主要版本的任何其他事实

facter |grep 6

答案1

操作系统主要版本

% facter operatingsystemmajrelease
6

如果你安装了 redhat-lsb-core 包,facter 也会获得 lsb 提供的事实系列(包括lsbmajdistrelease):

% facter |grep ^lsb
lsbdistcodename => Final
lsbdistdescription => CentOS release 6.4 (Final)
lsbdistid => CentOS
lsbdistrelease => 6.4
lsbmajdistrelease => 6
lsbrelease => :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch

笔记:你至少需要系数 1.7为了有operatingsystemmajreleaseFacter 1.6 中的核心事实非常有限。

答案2

我猜您正在尝试根据安装版本做出某种决定。

您可以在逻辑中使用正则表达式。

因此类似于:

case $operatingsystemrelease {
    /^6.*/: {
        //do 6.x stuff
    }
    /^5.*/: {
        //do 5.x stuff
    }
}

或者如果if更符合你的风格:

if $operatingsystemrelease =~ /^6.*/ {
    //do 6.x stuff
}
elsif $operatingsystemrelease =~ /^5.*/ {
   // do 5.x stuff
}

请记住,所有因素事实均可在清单的全局范围变量中使用。

如果你有一个混合环境,你可能会希望将其包装成类似以下内容:

if $operatingsystem == "CentOS" {
}

答案3

使用 Puppet 5.5+ 时,您应该使用复合事实的一部分,os因为operatingsystemmajrelease事实现在是遗留事实。

此事实的一个例子值:

{
    "name": "CentOS",
    "family": "RedHat",
    "release": {
        "full": "7.2.1511",
        "major": "7",
        "minor": "2"
    },
    "selinux": {
        "enabled": false
    },
    "hardware": "x86_64",
    "architecture": "x86_64"
}

还请注意,它的值是一个字符串,而不是整数,因此在进行比较时请记住这一点:

case $facts['os']['release']['major'] {
    "6": {
        // do 6.x stuff
    }
    "5": {
        // do 5.x stuff
    }
}

相关内容