2016-06-13 8 views
1

foreman bug 패치 후 네트워크 부팅을 사용 중지하지 않고 호스트를 다시 빌드하려는 경우 다시 켜는 중입니다. 에Ruby : 순환 의존성 자동 로딩

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 

./app/controllers/unattended_controller.rb하고 "setBuild"방법 :

난 그냥에서 "내장"방법에 몇 가지 코드를 추가해야 할 것 같습니다 내가 공동 한 foreman_bootdisk.rb과 영감을 modify_vm_cdrom.rb의 라인 79에서 ./app/models/host/managed.rb

def setBuild 
    self.build = true 
    self.save 
    errors.empty? 
end 

차입, 의 라인을 따라 뭔가 나를 위로 :

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를 자동 로딩하는 동안 잘못된 순환 종속성이 발견했다 :: 포어 맨 :: 모델 :: VM웨어

나는 이것을 약간 읽었는데 아마 레일의 자동로드에 문제가 있다고 들었지만로드와 함께 이것을 고치려고했다. (필자는 자동로드 기능을 피하려고했다. 내가들은 deprecated입니다.)하지만 두 가지를 모두 시도했지만이 오류가 계속 발생하며 이유가 확실하지 않습니다. foreman_bootdisk.rb의 코더와 다르게 내가이 오류를 얻지 못하는 이유는 무엇입니까? 유청 vmware.rb을로드 하시겠습니까?

답변

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 
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 

이 (끝에 s의) 정수를 ComputeResources 없지만, 당신이 레일에서 사용하려고 할 때 작동됩니다 콘솔. 왜냐하면 이름이 compute_resources 인 디렉토리가 있기 때문에 레일 자동로드는 일종의 모듈을 생성하기 때문입니다.

+0

오류가 발생했습니다. "죄송합니다.하지만 사용 가능한 정의되지 않은 메소드가 잘못되었습니다. ' # "대신에. 이것은'ComputeResources :: thisisbad :: Model :: Vmware.available'과 같이'ComputeResource :: Foreman :: Model :: Vmware.available' 또는 알려진 나쁜 네임 스페이스를 사용하면 얻는 것과 같은 오류입니다. "정의되지 않은 메소드"를 사용할 수있는 것 이외의 다른 것이 있다는 사실은 내가 처음부터 올바른 방향으로 향하고 있다고 생각하게 만들었습니다. –

+1

일부 foreman 및 사용중인 시스템에 관한 질문을 업데이트 할 수 있습니까? 레일 구성 옵션을 변경했거나 원숭이가 패치 했습니까? 레일즈 콘솔에서 이러한 클래스를 사용하여 테스트 할 수 있습니까? 다른 클래스 (예 : Foreman :: Model :: EC2)를로드 할 수 있습니까? 같은 문제가 있습니까? 다음과 같이 시도 할 수도 있습니다 :: Foreman :: Model :: Vmware. 아니면 실제 구현을 사용할 수 있습니까? 메소드 :'Fog :: Compute.providers.include? (: vsphere)' –

+0

포어 맨 1.11입니다. Katello의 기본 설치이므로 Katello 스택을 사용하기 위해 Red Hat이 수행 한 모든 원숭이 패치 만 가능합니다. 나는 몇 가지 다른 것들을 시도하고 다시보고 할 것이다. –