Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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
Ruby 将属性从YAML转换为哈希_Ruby_Chef Infra_Test Kitchen - Fatal编程技术网

Ruby 将属性从YAML转换为哈希

Ruby 将属性从YAML转换为哈希,ruby,chef-infra,test-kitchen,Ruby,Chef Infra,Test Kitchen,如何将文件\u copy\u to \u guest转换为Ruby哈希 .kitchen.yml 'my_cookbook': 'files_copy_to_guest': - 'home/kevin/bin/script.sh' : '/vagrant/unix_scripts/script.sh' 'home/kevin/script2.sh' : '/vagrant/unix_scripts/s

如何将
文件\u copy\u to \u guest
转换为Ruby哈希

.kitchen.yml

  'my_cookbook': 
      'files_copy_to_guest':
       - 
          'home/kevin/bin/script.sh'      : '/vagrant/unix_scripts/script.sh'
          'home/kevin/script2.sh'       : '/vagrant/unix_scripts/script2.sh'
cookbooks/my_cookbook/attributes/default.rb

default['kevin']['files_copy_to_guest']     = [] 
files = node['kevin']['files_copy_to_guest']   # how to read attribute as Hash?

if files.nil? | files.empty? then
    Chef::Log.warn("node['kevin']['files_copy_to_guest'] is nil or empty!")
end

files.each do |_, value|                
    value.each do |vm_dest, host_src|   
        file vm_dest do 
            owner user
            group user
            mode 0755
            content ::File.open(host_src).read # <<< error on 'value'
        end
    end 
end
食谱/my_食谱/recipes/default.rb

default['kevin']['files_copy_to_guest']     = [] 
files = node['kevin']['files_copy_to_guest']   # how to read attribute as Hash?

if files.nil? | files.empty? then
    Chef::Log.warn("node['kevin']['files_copy_to_guest'] is nil or empty!")
end

files.each do |_, value|                
    value.each do |vm_dest, host_src|   
        file vm_dest do 
            owner user
            group user
            mode 0755
            content ::File.open(host_src).read # <<< error on 'value'
        end
    end 
end
files=node['kevin']['files_copy_to_guest']#如何将属性读取为散列?
如果files.nil?|文件是空的吗?然后
Chef::Log.warn(“节点['kevin']['files\u copy\u to\u guest']为零或为空!”)
结束
文件。每个do | |,值|
value.each do|vm|dest,host|src|
文件vm_dest do
所有者用户
组用户
模式0755
内容::File.open(host#src)。阅读#
“我的烹饪书”:
“文件\u复制\u至\u客人”:
- 
“home/kevin/bin/script.sh”:“/vagrant/unix_scripts/script.sh”
“home/kevin/script2.sh”:“/vagrant/unix_scripts/script2.sh”
在我看来,问题在于你的YAML。您有一个
-
行,表示数组的开头,因此您的对象显示如下:

{
“我的食谱”=>{
“文件复制到客户”=>[
{
'home/kevin/bin/script.sh'=>'/vagrant/unix_scripts/script.sh',
'home/kevin/script2.sh'=>'/vagrant/unix_scripts/script2.sh'
}
]
}
}

我认为如果你抛弃
-
,它应该会起作用。您可以使用如下工具测试YAML的输出:

然后
为零。从那里开始工作。但是,在我的
YAML
中,它是一个
散列
。在Ruby中,它将是
{'files\u copy\u to_guest'=>{'A'=>'B','C'=>'D'}
(据我所知)忽略YAML一秒钟。从错误开始,向后走。这就产生了一个问题,什么是
文件
真的?我不确定。我不知道
节点['kevin']['files\u copy\u to\u guest']
的类型是什么。(根据我的定义,
.kitchen.yml
)我假设它是一个散列,然后检查它(
文件
)。我也不知道这个值是多少,但显然这不是假设的值。因此,找出它的真正含义并从那里着手。抛弃
-
修复了它。对于
-
,我有一个数组散列(如您所述)。没有它,我只有一个
散列
+1用于yaml在线链接