您将如何使用 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中的核心事实非常有限。
我猜您正试图根据安装版本做出某种决定。
您可以在逻辑中使用正则表达式。
所以像:
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)