热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何使用Ruby向YAML哈希添加值

如何解决《如何使用Ruby向YAML哈希添加值》经验,为你挑选了1个好方法。

我在YAML文件中有一堆哈希(它用于某些服务器的基于Puppet/Hiera的配置),如下所示:

---
apache_vhosts:
  'webuser.co.uk':
    ip: '*'
    port: '80'
    serveraliases: ['www.webuser.co.uk',]
    add_listen: false
    docroot: '/home/webuser/public_html'
    docroot_owner: 'webuser'
    docroot_group: 'apache'
    serveradmin: 'webmaster@webuser.co.uk'
    scriptalias: '/home/webuser/public_html/cgi-bin/'
    access_log_format: '\"%{X-Forwarded-For}i\" %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"'
    override: 'all'
users:
  'webuser':
    ensure: 'present'
    gid: '500'
    managehome: true
    home: '/home/webuser'
    password: '$6$zix5AzRheEzQwadthjvLNh.8maO6o4DU4Y0POTaS6xfgjfdvihP2O/UQN6eVDHjG2hTCT6VTLk5HsXeB9FF0xMlYiYY9W1'
    password_max_age: '99999'
    password_min_age: '0'
    shell: '/sbin/nologin'
    uid: '500'

我需要以自动方式在Ruby中附加这些哈希值.这个想法是一个请求进来并命中一个运行ruby脚本的webhook,该脚本添加了一个新的Apache VHost和随附的用户.从操作YAML的角度来看,Ruby文档非常不合适,谷歌搜索没有提出任何相关的东西.也许有人可以指出我正确的方向?



1> limekin..:

在Ruby中使用YAML并不多.我想你只需要知道两种方法:YAML.loadYAML.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_info = {"ensure"=>"present", "gid"=>"900", "managehome"=>true, "home"=>"/home/new_user"}

要将其附加到原始YAML内容(解析为ruby对象),您可以执行以下操作:

data["users"]["new_user"] = new_user_info

转储后,这将添加另一个用户条目,该条目new_user位于用户列表的底部(在users:YAML文件下).主机也可以以相同的方式添加,一旦获得域名和其他信息,您可以像这样添加它们:

data["apache_vhosts"]["new_domain_name"] = info

同样重要的是将信息安排在正确的层次结构中.


而不是读取文件,然后使用`load`来解析它,使用`load_file`一步读取和解析.而且,不是将散列序列化为`output`变量,而是编写它,只需`File.write("file.yml",YAML.dump(data))`.创建只使用一次的中间变量会减慢代码速度并浪费内存.
推荐阅读
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • 1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ... [详细]
  • 初始化初始化本地空版本库,仓库,英文名repositorymkdirtest&&cdtestgitinit克隆项目到本地gitclone远程同 ... [详细]
  • PostgreSQL的upsert实例操作(insert
    建表语句:DROPTABLEIFEXISTSgoods;CREATETABLEgoods(store_cdint4NOTNULL,good_cdvarchar(50 ... [详细]
  • mac os php mysql_Mac OS下配置PHP+MySql环境
    由于最近需要布置mantis用来进行bug追踪,在此记录其过程。由于PHPapache环境在MacOS上是自带的,所以不需要另处下安装包, ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
author-avatar
手机用户2502896021
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有