我在YAML文件中有一堆哈希(它用于某些服务器的基于Puppet / Hiera的配置),如下所示:
—apache_vhosts: ‘webuser.co.uk’: ip:’*‘ 港口:‘80’ serveraliases:[’…
在Ruby中使用YAML并不多。我想你只需要知道两种方法: YAML.load 和 YAML.dump 。
YAML.load
YAML.dump
假设文件是file.yml,其中包含您提供的内容:
# YAML is part of the standard library. require 'yaml' # YAML.load parses a YAML string to appropriate Ruby objects. # So you can first load the contents of the file with File#read, # then parse it. yaml_string = File.read "file.yml" data = YAML.load yaml_string # Now you have all of it in data. data["apache_vhosts"] # => {"webuser.co.uk"=>{"ip"=>"*", ... # Once you are done manipulating them, dump it back with YAML.dump # to convert it back to YAML. output = YAML.dump data File.write("file.yml", output)
我认为这就是它。
的 UPDATE 强>
好的,现在它实际上是附加已解析的数据。通过解析我的意思是解析的数据格式应该与现有格式一致。
假设您对名为的新用户拥有有效的已解析信息 new_user :
new_user
new_user_info = {"ensure"=>"present", "gid"=>"900", "managehome"=>true, "home"=>"/home/new_user"}
要将其附加到原始YAML内容(解析为ruby对象),您可以执行以下操作:
data["users"]["new_user"] = new_user_info
转储后,这将添加另一个名为的用户条目 new_user 在用户列表的底部(在 users: 在YAML文件上)。主机也可以以相同的方式添加,一旦获得域名和其他信息,您可以像这样添加它们:
users:
data["apache_vhosts"]["new_domain_name"] = info
同样重要的是将信息安排在正确的层次结构中。