Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在puppet中使用Hiera哈希时出现计算错误_Arrays_Puppet_Hiera - Fatal编程技术网

Arrays 在puppet中使用Hiera哈希时出现计算错误

Arrays 在puppet中使用Hiera哈希时出现计算错误,arrays,puppet,hiera,Arrays,Puppet,Hiera,我的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 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: }
}
}
运行puppet清单时,出现以下错误:

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解析器:

    看起来您的YAML有点不正常

  • 你不需要在YAML中引用
  • 你的缩进是两个而不是一个
  • 你第一次的第一个冒号被隔开了。这将引发语法错误
  • 它应该更像这样:

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

    将来,请尝试像这样查找YAML解析器:

    问题出在我的puppet版本上,3.6版在创建资源时行为怪异,例如,它在以下行失败:

    create_resources('::ssh::client::config::user', $fin_users_client_options)
    
    上面的代码片段是puppet实验室ssh模块的一部分,我认为它已经过全面测试,不应该成为异常的原因

    进一步的分析表明,在配置文件中设置参数parser=future时引发了异常

    如果不将future设置为解析器,我就无法使用each进行迭代,因此我决定如下更改我的源代码:

    我创建了一个新类:

    define test::install_modules {
    php::module { $name: }
    }
    
    然后我将配置更改为:

    class test::config_php (
    $php_version,
    $php_modules = [],
    ){
    
    class { 'php':
    version => $php_version,
    }
    
    install_modules { $php_modules: }
    }
    

    现在一切似乎都好多了。

    问题出在我的puppet版本上,3.6版在创建资源时表现得有些怪异,例如,它在下面一行失败了:

    create_resources('::ssh::client::config::user', $fin_users_client_options)
    
    上面的代码片段是puppet实验室ssh模块的一部分,我认为它已经过全面测试,不应该成为异常的原因

    进一步的分析表明,在配置文件中设置参数parser=future时引发了异常

    如果不将future设置为解析器,我就无法使用each进行迭代,因此我决定如下更改我的源代码:

    我创建了一个新类:

    define test::install_modules {
    php::module { $name: }
    }
    
    然后我将配置更改为:

    class test::config_php (
    $php_version,
    $php_modules = [],
    ){
    
    class { 'php':
    version => $php_version,
    }
    
    install_modules { $php_modules: }
    }
    

    现在一切似乎都好多了。

    非常感谢您的建议和链接,但即使在添加了更改Yaml之后,我似乎也遇到了同样的问题。似乎我没有正确阅读评估。您正在使用代码中未显示的create_resources函数。你能给我们看看这个吗?检查函数的第二个参数是否为散列。你可以从这里找到如何做到这一点,非常感谢你的建议和链接,但即使在添加了更改Yaml之后,我似乎也遇到了同样的问题。似乎我没有正确阅读评估。您正在使用代码中未显示的create_resources函数。你能给我们看看这个吗?检查函数的第二个参数是否为散列。你可以从这里找到如何做到这一点