覆盖事实'osfamily'值



我通过从我的模块调用它扩展了一个模块(pdxcat/collectd)。基本模块倾向于将Amazon Linux OS家族识别为'Redhat',但puppet在Amazon Linux OS上安装的因子将操作系统报告为'Linux'。

我想通过在调用基本模块之前将osfamily的因子值从Linux覆盖到Redhat来纠正这个错误。

我osfamily

。mymodule/lib/factor中的Rb

Facter.add('osfamily') do
setcode do
   case Facter.value(:operatingsystem)
   when "Amazon"
      "RedHat"
   else
   Facter.value("kernel")
   end
 end
end

但问题是,我无法覆盖osfamily值。即使从osfamily下载事实。br, osfamily仍然被报道为"Linux"而不是"Redhat"。

我的代码是正常工作的新值,如osfamilytestoperatingsystemreleasetest,但不为现有的值,如osfamilyoperatingsystemrelease

Puppet Version: 2.7.25 
Facter Version: 1.6.18 
Operating System:
Amazon Linux 2015.03 
Puppet installation steps:
yum install puppet

我认为试图覆盖社区模块的内置因子值是一种反模式。也就是说,在某些情况下(如上所述),你应该能够覆盖一个事实,因为这不是一个社区模块(例如内部)。

如果这是一个内部模块,你应该查看事实优先级- https://docs.puppetlabs.com/facter/3.0/custom_facts.html#fact-precedence

factor决定解析优先级的方法是重量的财产。一旦因素排除了任何决议排除因为限制语句,决议用首先评估最高的权重。如果那个解析返回nil,因子移动到下一个决议(通过降序权重),直到它获取事实的值。

默认情况下,事实的权重是该事实的限制数决议,这样更具体的决议优先于更少的具体决议。

给它一个100的权重,看看事实分辨率给你什么。

Facter.add('osfamily') do
  has_weight 100
  setcode do
    case Facter.value(:operatingsystem)
    when "Amazon"
      "RedHat"
    else
      Facter.value("kernel")
    end
  end
end

应该可以。没有专门测试过,但我使用类似的代码来修复LXD下的LXC虚拟检测。

Facter[:osfamily].flush
Facter.add(:osfamily) do
  setcode do
    case Facter.value(:operatingsystem)
    when "Amazon"
      "RedHat"
    else
      Facter.value(:kernel)
    end
  end
end

相关内容

  • 没有找到相关文章

最新更新