2016-11-26 75 views
1

我試圖完成第一個練習之一,其中包括/etc/motd中的hostnameosname事實。我根本無法讓這個工作正常。我無法從散列中獲取元素。傀儡清單中的哈希元素引用

我在puppet上使用虛擬機,並且複製和粘貼對我不起作用,因此我將使用屏幕截圖。

enter image description here

所以我創造我motd.pp

enter image description here

但運行puppet apply motd.pp後,我看到:

enter image description here

我已經試過:

$os[name] 
$os['name'] 
${os}[name] 
${os}['name'] 
$facts['os']['name'] 
$::os['name'] 
$::os[name] 

幾乎每一個我能想到的排列方式,它總是忽略變量的[name][os][name]的一部分。

回答

2

有兩種方法可以做到這一點。還有就是木偶4/Facter 3方式是:

file { '/etc/motd': 
    ensure => file, 
    owner => 'root', 
    group => 'root', 
    content => "${facts['networking']['fqdn']} OS name is ${facts['os']['name']}\n", 
} 

對日僞的3/Facter 2方式是:

file { '/etc/motd': 
    ensure => file, 
    owner => 'root', 
    group => 'root', 
    content => "$::fqdn OS name is ${::os['name']}\n", 
} 

您也可以用木偶4和Facter 2.做到這一點將使用第一個示例中的語法,但是第二個示例中的事實位置。

file { '/etc/motd': 
    ensure => file, 
    owner => 'root', 
    group => 'root', 
    content => "${facts['fqdn']} OS name is ${facts['os']['name']}\n", 
} 
+1

打我給它,值得鏈接到這解釋了兩種不同的方法文檔:https://docs.puppet.com/puppet/latest/reference/lang_facts_and_builtin_vars.html#the-factsfactname-hash – jaxxstorm

+0

@MattSchuchard中, OP聲稱已經嘗試了你向他建議的Puppet 3/Facter 2方法,結果相同 - 就像我所期望的那樣。 –

+0

是的,這篇文章是我已經嘗試過的,我已經閱讀過文檔,也許我錯過了關於擴展大括號的一部分。謝謝約翰博林格您的回覆,我贊成。 –

2

插從哈希值轉換成字符串,你需要花括號內的$後圍住整個表達式。或者,你可以使用普通的變量引用相同的形式(在某些情況下,你必須這樣做,以避免變量的名稱被誤解):

file { '/etc/motd': 
    ensure => file, 
    owner => 'root', 
    group => 'root', 
    content => "${::fqdn} OS name is ${::os['name']}\n", 
} 

的存在或不存在單引號周圍的哈希關鍵是無關緊要,但我建議引用的表格是更好的風格。

如果沒有花括號,Puppet不會識別字符串中的下標操作符與變量一起使用,因此它會插入整個散列的字符串值,並將下標附加爲純文本。

+0

這在Perl中的工作非常類似,但由於某種原因,我沒有想到,因爲我是這個DSL的新手。 –

+0

我只是花了一些時間搜索有關特殊處理哈希查找需要插值時的文檔,我什麼也沒找到。這個答案似乎是關於它的文檔最接近的事情。我只是從幾乎一年前的一位初級開發者的支持票回答中才得知它,這完全與第一句中的斷言一致,從而證明它是事實。 –

+1

@MattSchuchard,FWIW,[字符串插值的v4文檔](https://docs.puppet.com/puppet/4.8/reference/lang_data_string.html#interpolation)似乎涵蓋了這一點。他們指定捲曲支撐形式是*標準形式。只有在你想插入一個變量的整個值的特殊情況下,大括號纔可以省略,有些詞彙專門用於表達所有精確的內容。 [v3.8文檔](https://docs.puppet.com/puppet/3.8/reference/lang_datatypes.html#double-quoted-strings)表示幾乎相同的內容,但不太清楚。 –