我在线找到了一个脚本,以提取JSON地形状态文件并将其转换为HCL文件。我在脚本的attributes
定义行上收到此错误:
in `<main>': undefined method `[]' for nil:NilClass (NoMethodError)
我试图在线找到解决方案,但我不了解Ruby。
这是脚本:
resource_key = ARGV.shift || usage
resource_type, resource_name = resource_key.split('.')
resource_id = ARGV.shift || usage
require 'justrun'
status = JustRun.command "terraform import #{resource_type}.#{resource_name} #{resource_id}" do |line, type|
out = type == 'stdout' ? $stdout : $stderr
out.puts line
end
require 'json'
state = JSON.load File.read 'terraform.tfstate'
attributes = state['modules'][0]['resources'][resource_key]['primary']['attributes']
resource = {}
attributes.each do |attr, value|
if attr.include? '.#'
attr_array, _ = attr.split '.#'
resource[attr_array] = []
attributes.keys.select { |e| e.start_with? "#{attr_array}." }.each do |key|
next if key == attr
resource[attr_array] << attributes[key]
end
elsif attr.include? '.%'
attr_array, _ = attr.split '.%'
resource[attr_array] = {}
attributes.keys.select { |e| e.start_with? "#{attr_array}." }.each do |key|
next if key == attr
new_key = key[attr_array.size + 1 .. -1]
resource[attr_array][new_key] = attributes[key]
end
elsif attr.include? '.'
next
# elsif attr == 'id'
# next
else
resource[attr] = value
end
end
答案 0 :(得分:0)
问题在这里:
state['modules']
如果这是脚本的第一行,则Ruby不知道state
变量是什么,并在尝试从中获取任何值时引发错误。
您似乎希望它是一个哈希,但是它是空的……在此脚本之前可能缺少某些内容。