Puppet & Facter - 如何确定是运行 Cent 6 还是 Cent 5

spu*_*der 5 awk puppet facter

您将如何使用 factor 和 puppet 来确定操作系统是运行 Cent 6.x 还是 Cent 5.x ?

facter operatingsystemrelease 
6.4
Run Code Online (Sandbox Code Playgroud)

我只关心主要版本(6)

我已经考虑过使用 awk,但必须有更好的方法对“傀儡清单”更友好。

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

facter operatingsystemrelease |awk -F. '{print $1}'
6
Run Code Online (Sandbox Code Playgroud)

更新

看起来新版本的 facter 有一些关于主要版本的附加信息,这些信息不在我的版本中。我的初始配置需要假设因子已过时。

facter --version
1.6.4
puppet --version
2.7.20
Run Code Online (Sandbox Code Playgroud)

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

facter |grep 6
Run Code Online (Sandbox Code Playgroud)

Tef*_*tin 12

操作系统majrelease

% facter operatingsystemmajrelease
6
Run Code Online (Sandbox Code Playgroud)

如果您安装了 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
Run Code Online (Sandbox Code Playgroud)

注意:您至少需要Facter 1.7才能拥有operatingsystemmajrelease. Facter 1.6中的核心事实非常有限。


Zyp*_*her 5

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

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

所以像:

case $operatingsystemrelease {
    /^6.*/: {
        //do 6.x stuff
    }
    /^5.*/: {
        //do 5.x stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

或者是否if更符合您的风格:

if $operatingsystemrelease =~ /^6.*/ {
    //do 6.x stuff
}
elsif $operatingsystemrelease =~ /^5.*/ {
   // do 5.x stuff
}
Run Code Online (Sandbox Code Playgroud)

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

如果您有一个混合环境,您可能希望将其包装在以下内容中:

if $operatingsystem == "CentOS" {
}
Run Code Online (Sandbox Code Playgroud)

  • @gunwin `.*` 也将匹配 60.01 等......因为句点是一个特殊的正则表达式字符,意思是“匹配任何单个字符”而不是文字句点。应该添加一个额外的转义句点以获得您描述的结果,例如`^6\..*` (4认同)