如何将 ruby dsl chef 环境文件转换为 JSON 格式?

How to convert ruby dsl chef environment file to JSON format?

如何将 Ruby DSL 格式的 Chef 环境文件转换为 json? 那可能吗?

我想在 ruby 脚本中使用环境文件属性,但我无法解析它。 有什么方法可以解析这些 .rb 文件吗?

谢谢,

汤姆斯

你可以像大厨那样做:)

https://github.com/chef/chef/blob/master/lib/chef/environment.rb

require 'chef'
Chef::Config[:environment_path] = '/path/to/directory/with/rb_file'
env = Chef::Environmment.load_from_file('environment_name') # ! => not filename!
env.to_json

我已经使用此 ruby 脚本将 ruby DSL 文件转换为 JSON。

#!/usr/bin/env ruby
    
envfilename = '/path/to/environment.rb'
rolefilename = '/path/to/role.rb'

role = Chef::Role.new
role.name(File.basename(rolefilename, ".rb"))
role.from_file(rolefilename)
File.open(rolefilename.gsub(".rb", ".json"),"w") {|f| f.puts(role.to_json)}

env = Chef::Environment.new
env.name(File.basename(envfilename, ".rb"))
env.from_file(envfilename)
File.open(envfilename.gsub(".rb", ".json"),"w") {|f| f.puts(env.to_json)}

我通过修改我在这里找到的代码得到了这个脚本:https://knife-zero.github.io/tips/use_ruby_dsl_for_envs_or_roles/