[英]overwrite facter 'osfamily' value
我通過從我的模塊調用擴展了模塊(pdxcat / collected)。 基本模塊傾向於將Amazon Linux OS系列標識為“ Redhat”,但是由puppet在Amazon Linux OS上安裝的事實將操作系統報告為“ Linux”。
我想通過在調用基本模塊之前覆蓋從Linux到Redhat的osfamily的事實值來糾正此錯誤。
我的mymodule / lib / facter中的osfamily.rb是
Facter.add('osfamily') do
setcode do
case Facter.value(:operatingsystem)
when "Amazon"
"RedHat"
else
Facter.value("kernel")
end
end
end
但是問題是,我無法覆蓋osfamily值。 即使從osfamily.rb加載了事實,osfamily仍被報告為“ Linux”而不是“ Redhat”。
我的代碼對於osfamilytest
或operatingsystemreleasetest
類的新值正確operatingsystemreleasetest
但對於osfamily
或operatingsystemrelease
類的現有值osfamily
。
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
Facter決定分辨率優先級問題的方式是權重屬性。 一旦Facter排除了由於限制語句而排除的任何分辨率,則將首先評估權重最高的分辨率。 如果該分辨率返回nil,則Facter繼續下一個分辨率(權重遞減),直到獲得該事實的值為止。
默認情況下,事實的權重是該分辨率的限制數,因此,較具體的決議優先於較不具體的決議。
給它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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.