2016-04-25 55 views
0

我在hiera YAML文件中的以下值:計算錯誤而使用Hiera散列木偶

test::config_php::php_modules : 
    -'soap' 
    -'mcrypt' 
    -'pdo' 
    -'mbstring' 
    -'php-process' 
    -'pecl-memcache' 
    -'devel' 
    -'php-gd' 
    -'pear' 
    -'mysql' 
    -'xml' 

和下面是我的測試類:

class test::config_php (
$php_version, 
$php_modules = hiera_hash('php_modules', {}), 
$module_name, 
){ 

class { 'php': 
version => $php_version, 
} 

$php_modules.each |String $php_module| { 
php::module { $php_module: } 
} 
} 

在運行我的傀儡體現我得到以下錯誤:

Error: Evaluation Error: Error while evaluating a Function Call, create_resources(): second argument must be a hash at /tmp/vagrant-puppet/modules-f38a037289f9864906c44863800dbacf/ssh/manifests/init.pp:46:3 on node testdays-1a.vagrant.loc.vag 
I am quite confused on what exactly am I doing wrong. My puppet version is 3.6.2 and I also have parser = future 

我真的很感謝這裏的任何幫助。

回答

0

看起來你的YAML略有偏差。

  1. 你不需要在YAML中引用。
  2. 您的縮進是兩個而不是一個。
  3. 你的第一次冒號第一次被隔開。這會引發語法錯誤。

它應該看起來更像是這樣的:

test::config_php::php_modules: 
- soap 
- mcrypt 
- pdo 
- mbstring 
- php-process 
- pecl-memcache 
- devel 
- php-gd 
- pear 
- mysql 
- xml 

在未來的嘗試,並期待這樣的YAML解析器:link

+0

非常感謝您的建議和鏈接,但即使在添加更改Yaml後,我似乎也遇到同樣的問題。 – Spaniard89

+0

看來我沒有正確閱讀評估。您正在使用您未在代碼中顯示的create_resources函數。你能向我們展示這件作品嗎? 檢查函數的第二個參數是散列。 你可以從這裏找到如何做到這一點https://docs.puppet.com/hiera/3.1/data_sources.html – Jamie

0

的問題是我的木偶版,不知何故3.6版行爲怪異同時創造資源,比如它是失敗在下一行,:

create_resources('::ssh::client::config::user', $fin_users_client_options) 

上面的代碼段是puppet實驗室的ssh模塊的一部分,我假設它經過了全面測試,不應該成爲例外的原因。

進一步分析導致這一事實,即當參數解析器=未來會在配置文件中設置

使用各不設定未來隨着解析器我不能重複,所以我決定改變引發了異常的我來源如下:

我創建了一個新的類:

define test::install_modules { 
php::module { $name: } 
} 

,然後我改變了配置config_php到:

class test::config_php (
$php_version, 
$php_modules = [], 
){ 

class { 'php': 
version => $php_version, 
} 

install_modules { $php_modules: } 
} 

現在一切似乎都好多了。