我的hiera yaml文件中有以下值:
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
我真的很感激这里的任何帮助。
看起来您的 YAML 略有偏差。
- 在 YAML 中,您实际上并不需要引号。
- 您的缩进是两个而不是一个。
- 您第一次的第一个冒号是间隔的。这将引发语法错误。
它应该看起来更像这样:
test::config_php::php_modules:
- soap
- mcrypt
- pdo
- mbstring
- php-process
- pecl-memcache
- devel
- php-gd
- pear
- mysql
- xml
将来尝试查找像这样的 YAML 解析器:链接
问题出在我的木偶版本上,不知何故,3.6 版在创建资源时表现得很奇怪,例如它在以下行失败:
create_resources('::ssh::client::config::user', $fin_users_client_options)
上面的代码片段是来自 puppet 实验室的 ssh 模块的一部分,我认为它已经过彻底的测试,不应该成为异常的原因。
进一步的分析导致这样一个事实,即在配置文件中设置参数解析器 = future 时会引发异常
如果不将 future 设置为解析器,我就无法使用每个进行迭代,因此我决定更改我的源代码如下:
我创建了一个新类:
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: }
}
现在一切似乎都好多了。