我正在尝试修补一个foreman bug,它们在构建后不会禁用网络启动,并在您想要重建主机时将其重新打开。看起来我只需要在"内置"中添加一些代码。方法:
./应用程序/控制器/ unattended_controller.rb
def built
logger.info "#{controller_name}: #{@host.name} is Built!"
update_ip if Setting[:update_ip_from_built_request]
head(@host.built ? :created : :conflict)
end
和" setBuild"方法:
./应用/模型/主机/ managed.rb
def setBuild
self.build = true
self.save
errors.empty?
end
借用foreman_bootdisk.rb第79行和modify_vm_cdrom.rb获取灵感, 我想出了一些基本的内容:
def setBuild
load '/usr/share/foreman/app/models/compute_resources/foreman/model/vmware.rb'
if ComputeResources::Foreman::Model::Vmware.available?
vm_reconfig_hardware('instance_uuid' => params[:token], 'hardware_spec' => {'bootOptions'=>['network', 'disk']})
end
self.build = true
self.save
errors.empty?
end
问题是我收到了错误,
哎呀,我们很抱歉但出了点问题自动加载常量ComputeResources :: Foreman :: Model :: Vmware
时检测到循环依赖
我已经对此做了一些阅读,并听说问题可能是有轨道自动加载,但我已经尝试用加载和要求修复此问题(我试图避免我听到的自动加载功能{{ 3}}),但尽管尝试了两者,我仍然会遇到这个错误,我不确定为什么。我做什么的不同于foreman_bootdisk.rb的编码器来获得这个错误他们不是?乳清似乎没有deprecated想加载吗?
答案 0 :(得分:1)
def setBuild
vm_reconfig_hardware(
'instance_uuid' => params[:token],
'hardware_spec' => {'bootOptions'=>['network', 'disk']}
) if Fog::Compute.providers.include?(:vsphere)
self.build = true
self.save
errors.empty?
end
答案 1 :(得分:0)
我认为您的问题是由不正确的常量名称引起的。你尝试过这样的事吗?
def setBuild
if Foreman::Model::Vmware.available?
vm_reconfig_hardware('instance_uuid' => params[:token], 'hardware_spec' => {'bootOptions'=>['network', 'disk']})
end
self.build = true
self.save
errors.empty?
end
在Foreman源代码中没有常量的ComputeResources(最后有s),但是当你尝试在rails控制台中使用它时它会起作用。这是因为rails自动加载是一种动态创建模块,因为存在名为compute_resources
的目录。