簡體   English   中英

覆蓋事實的“家庭”價值

[英]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”。

我的代碼對於osfamilytestoperatingsystemreleasetest類的新值正確operatingsystemreleasetest但對於osfamilyoperatingsystemrelease類的現有值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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM