热门标签 | 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))`.创建只使用一次的中间变量会减慢代码速度并浪费内存.
推荐阅读
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • procreate是什么软件
    常见问题procreate常见问题html5css3实例源码下载,vscode右键打开的设置,ubuntu登录roo,tomcat8dubbo,facebook视频爬虫,手机网站模 ... [详细]
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社区 版权所有