2016-06-13 15 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 

と「setBuild」方法./app/controllers/unattended_controller.rb

:私はちょうどに「組み込まれて」メソッドにコードを追加する必要があるように見えます私が共同している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を自動ロードしながら、間違った循環依存が検出行ってきました::フォアマン::モデル:: VMwareの

私はこの上でいくつかの読書を行って、問題がレールの自動ロードと、おそらくですが、私は負荷でこれを修正しようとした(私はオートロード機能を避けるためにしようとしていた要求していると聞いてきました私が聞く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

私にはエラーが表示されます。申し訳ありませんが、未定義のメソッドが利用できませんでした。 # "の代わりに。これは 'ComputeResource :: thisisbad :: Model :: Vmware.available'のように' ComputeResource :: Foreman :: Model :: Vmware.available'または既知の悪い名前空間を使用した場合と同じエラーです。私が「未定義のメソッド」以外のものを入手したという事実は、私が最初に正しい道を進むと思ったものです。 –

+1

foremanのいくつかのバージョンとあなたが使っているシステムについての質問を更新できますか?レール構成オプションを変更したのか、それともサルで修正しましたか? これらのクラスを使ってレールコンソールでテストできますか?別のクラス(Foreman :: Model :: EC2など)を読み込めますか?同じ問題がありますか? また、:: Foreman :: Model :: Vmwareを試すこともできます。 または、実際に使用可能な実装を使用できますか?メソッド: 'Fog :: Compute.providers.include?(:vsphere)' –

+0

これはForeman 1.11です。 Katelloがデフォルトでインストールされているので、Red HatがKatelloのスタックを動作させるために行った猿のパッチ適用だけで済みます。私はいくつかのことを試して、報告するつもりです。 –