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在线链接