2017-05-11 47 views
3

我對以下自定義事實感到困難;詳情如下。在自定義事實中使用其他事實

自定義事實需要在以下文件夾中查找某個json文件。這在清單中使用時顯示信息。但是,當我將其添加到自定義事實中時,它不起作用。

"/opt/${::hostname}/${::custom_variable}_${::fqdn}.json" 

但是,如果我硬編碼值如下所示,它工作正常。

"/opt/host1.domain.com/mycompany_host1.json" 

請注意,自定義變量是在Puppet控制檯上針對「分類」定義的。

回答

4

如果您需要在自定義事實中使用事實,則必須使用Facter的.value方法訪問它們。當事實被引用爲該方法的符號參數時(例如Facter.value(:hostname)),可以訪問它們的值。爲了能夠使用Facter類,你必須要求它在你的Ruby文件中使用自定義的事實:

require 'facter' 

然後,您可以用繩子插值以正常的方式使用這些變量在上面的例子:

"/opt/#{Facter.value(:hostname)}/#{Facter.value(:custom_variable)}_#{Facter.value(:fqdn)}.json" 

注意,custom_variable事實需要在pluginsync在這一習俗實際上在使用之前的系統上進行分配。另外,你在上面的例子中切換了hostname和fqdn,所以當你實現這個時,確保它們正確對齊你。

https://docs.puppet.com/facter/3.6/custom_facts.html#using-other-facts

+0

主機名和fqn按預期工作。 +1。但是,這個習慣並沒有奏效。你能詳細說明我可以如何確保它在pluginsync期間分配嗎?我已經在「分類」選項卡中的Puppet控制檯中進行了配置。 – bubbly

+0

@user因此,這些變量成爲頂級Puppet變量,在pluginsync期間不可訪問,因爲變量不可用作分類器中REST API端點的一部分:https://docs.puppet.com/pe/latest/ nc_index.html。您能否詳細說明您用於設置這些變量的邏輯,以便將其納入Ruby代碼中? –

+0

這是真的。我需要做的就是將該文件的內容放入一個變量中。因爲我不能直接通過木偶清單來做到這一點,所以我正在寫這個習慣性的事實。只是碰巧文件恰好在其中的路徑包含了一些變量。 – bubbly

相關問題