Windows、Ec2ServerCreate - 当来自 Rails 应用程序的 运行 刀时无法设置 JSON 属性
Windows, Ec2ServerCreate - Cannot set JSON attributes when running knife from Rails application
我能够在 Rails 应用程序 (Chef::Knife::Ec2ServerCreate.new()
) 上从 Ruby 在 AWS 启动新实例。工作正常,直到我尝试设置 JSON 属性。当我从命令行设置它们并调用 knife.bat 时,它起作用了。
查看 ec2_server_create 表明命令行选项 --json-attributes 映射到符号 :json_attributes.我尝试使用以下代码设置它:
Chef::Config[:knife][:json_attributes] = "{'NodeName' : 'Node001'}"
我得到错误:TypeError(没有将 Symbol 隐式转换为 Integer):
一旦我评论了这一行,实例就会被创建,并在 Chef 服务器上注册,并且食谱是 运行ning。
关于如何设置第一个 chef-client 运行 的 json 属性有什么建议吗?
PS
示例代码显示属性的常量值,但实际值将动态创建。
错误信息和发生错误的代码行:
/chef/knife/core/bootstrap_context.rb:188:in `[]=': no implicit conversion of Symbol into Integer (TypeError)
查看源代码您可以找到:
def first_boot
(@config[:first_boot_attributes] || {}).tap do |attributes|
if @config[:policy_name] && @config[:policy_group]
attributes[:policy_name] = @config[:policy_name]
attributes[:policy_group] = @config[:policy_group]
else
attributes[:run_list] = @run_list #THIS LINE CAUSES EXCEPTION
end
attributes.merge!(:tags => @config[:tags]) if @config[:tags] && !@config[:tags].empty?
end
end
我设置了运行列表。
问题是 json_attributes
需要是哈希,而不是字符串。失败的不是 @run_list
,而是 "{'NodeName' : 'Node001'}"[:run_list]
,当您在现场看到它时可能会更清楚一些。
我能够在 Rails 应用程序 (Chef::Knife::Ec2ServerCreate.new()
) 上从 Ruby 在 AWS 启动新实例。工作正常,直到我尝试设置 JSON 属性。当我从命令行设置它们并调用 knife.bat 时,它起作用了。
查看 ec2_server_create 表明命令行选项 --json-attributes 映射到符号 :json_attributes.我尝试使用以下代码设置它:
Chef::Config[:knife][:json_attributes] = "{'NodeName' : 'Node001'}"
我得到错误:TypeError(没有将 Symbol 隐式转换为 Integer): 一旦我评论了这一行,实例就会被创建,并在 Chef 服务器上注册,并且食谱是 运行ning。 关于如何设置第一个 chef-client 运行 的 json 属性有什么建议吗? PS 示例代码显示属性的常量值,但实际值将动态创建。 错误信息和发生错误的代码行:
/chef/knife/core/bootstrap_context.rb:188:in `[]=': no implicit conversion of Symbol into Integer (TypeError)
查看源代码您可以找到:
def first_boot
(@config[:first_boot_attributes] || {}).tap do |attributes|
if @config[:policy_name] && @config[:policy_group]
attributes[:policy_name] = @config[:policy_name]
attributes[:policy_group] = @config[:policy_group]
else
attributes[:run_list] = @run_list #THIS LINE CAUSES EXCEPTION
end
attributes.merge!(:tags => @config[:tags]) if @config[:tags] && !@config[:tags].empty?
end
end
我设置了运行列表。
问题是 json_attributes
需要是哈希,而不是字符串。失败的不是 @run_list
,而是 "{'NodeName' : 'Node001'}"[:run_list]
,当您在现场看到它时可能会更清楚一些。