ruby - 加载 YAML 而不扩展标签?

标签 ruby yaml aws-cloudformation

我正在加载 YAML 文件(特别是 CloudFormation 模板),其中可能包含自定义标签(例如 !Ref),我希望将其视为普通字符串,即 YAML.safe_load('Foo: !Bar baz') 将导致 {"Foo"=>"!Bar baz"} 或类似的内容。这是因为我想在将模板转储回去之前遍历并操作该模板。我不想 add_tag https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html 下的所有内容。我目前使用的是 Psych 和 Ruby 2.0,但这两者都不是严格要求。

更新 1:我的意思是基于 2.0 以上的 Ruby 版本的答案是可以的。

更新 2:我在本例中添加了 CloudFormation 标记,因为注册一堆 !X -> Fn::X 转换可能是最不糟糕的解决方案,目前我不需要一般的 Ruby 问题。

最佳答案

好吧,假设您在解析 YAML 后得到了 {"Foo"=>"!Bar baz"}

您用它做了一些事情,然后想将其转换回 YAML?

{"Foo"=> "!Bar baz"}.to_yaml 会导致 Foo: "!Bar baz" ——这不是你开始的内容(现在它是一个字符串,不评估标签)。

采用解析 YAML 的方式并不简单,也许应该做其他事情。

关于ruby - 加载 YAML 而不扩展标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56085647/

相关文章:

ruby-on-rails - Rails 左外连接与包含 NULL 的行

ruby - 如何在 Ruby 1.8.7 中更快地加载 YAML?

amazon-web-services - 如何在 cloudformation 中创建托管策略,允许 lambda 访问 aws 环境中的所有 s3 容器

git - 如何在 EC2 cfn-init 上克隆 CodeCommit 存储库?

amazon-web-services - S3 存储桶策略 IAM 角色显示为 API key

ruby - rack 复制每条日志消息

ruby - Ruby 中的意外 ','

go - 在 Go 中解析包含结构的 yaml 对象

aws-cloudformation - 使用 CodePipeline - 将 CloudFormation 堆栈部署到另一个帐户

ruby-on-rails - 为表单制作和使用临时属性